diff --git a/.github/workflows/compass-ci.yml b/.github/workflows/compass-ci.yml index 9c85dc18f..c0180f072 100644 --- a/.github/workflows/compass-ci.yml +++ b/.github/workflows/compass-ci.yml @@ -105,6 +105,20 @@ jobs: # agent-view contracts rot silently. cargo test -p compass-cli --tests --locked + - name: Hub and bounded path regressions + run: | + cargo test -p compass-graph --test analyze_coverage --locked + cargo test -p compass-query --test bounded_path_oracle --test code_traversal --test coverage_paths --locked + + - name: Rust state-access evidence contracts + run: cargo test -p compass-languages -p compass-resolve --test rust_field_access --locked + + - name: Java state-access evidence contracts + run: cargo test -p compass-languages -p compass-resolve --test java_field_access --locked + + - name: Comparison scorer regressions (no competitor installation) + run: python3 -m unittest discover -s benchmarks/agent_query/tests + - name: Qualify natural-language query relevance env: CARGO_TARGET_DIR: ${{ github.workspace }}/target diff --git a/CHANGELOG.md b/CHANGELOG.md index b2f6bbdf1..d49706f49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,189 @@ ## Unreleased +- Resolve source-proven Go field selectors to exact named struct fields and + publish occurrence-anchored references. Rebuild graphs to see the new edges; + disposable AST cache semantics advance to 13. + +- Publish explicit named Go struct fields as source-anchored field declarations + owned by their struct. Rebuild existing graphs to see the new nodes and hub + member counts; disposable AST cache semantics advance to 12. + +- Show stored direct-member and own-field reference counts for typed class and + struct hubs in MCP `god_nodes`, with ambiguous owners excluded and undirected + graphs left unavailable. Keep hub ranks unchanged; the counts are graph + evidence, not a god-object diagnosis. + +- Resolve a unique owner-qualified method such as `APIRoute.get_route_handler` + in typed callers, callees, impact and trail questions and the legacy + `explain`/`path` commands when the stored name includes a module prefix or + `::` separator. Preserve ambiguity, typed candidate bounds and exact-ID + precedence. Typed queries reject a nonexistent owner when the method name + exists under other owners. + +- Recover exact Rust calls through source-proven `Result>` collection, + `Ok` match bindings, vector loops, and `iter().map` closure receivers. Keep + custom or ambiguous collection types unresolved and rebuild disposable AST + caches so older facts do not hide the new edges. + +- Bind disposable graph caches to bounded content digests and keep MCP graph + views coherent within a request. Detect equal-size replacements even when + modification times are preserved. Rebuild older graph caches automatically. + +- Resolve dotted Java nominal receiver names against canonical nested type + declarations for field and enum references. Preserve duplicate-owner and + package/type ambiguity, exact occurrence evidence and bounded lookup work. + +- Emit Java enum-constant references with exact occurrence evidence, selector-based + switch labels and registered constant-body ownership. Preserve field/value/type + shadowing and unresolved receivers; invalidate older disposable AST caches. + +- Cache fixed SQL read/write access patterns so statements reuse compiled + regular expressions. + +- Avoid repeated SQL statement-prefix scans for bytes that cannot begin a + dollar-quoted delimiter, preserving statement-sensitive identifier handling. + +- Add `node --calls-only`, MCP `get_node` `calls_only`, and explicit `ask` + call-path/call-chain syntax. Restrict traversal and direction/depth diagnostics + to call edges while retaining structural defaults and bounded-work semantics. + +- Add opt-in `explain --source-members --member-focus TEXT` to prioritize + normalized member-name matches within the existing shared source budget. + Preserve source order for ties, retain unmatched candidates and report the + lexical matches without claiming behavioral relevance. + +- Emit Java field-access references from bounded lexical scope and receiver + evidence, preserving shadowing, field identity and parallel source occurrences. + Invalidate prior AST caches; retain unsupported targets without name fallback. + +- Emit Rust field-access evidence for source-proven nominal receivers, preserving + exact occurrences and unknown or shadowed receiver outcomes. Publish qualified + field contacts as references without inventing read/write effects. Rebuild + graphs to refresh older AST caches. + +- Add `search --exact` and MCP `search_symbols` exact mode with optional + source file, declaration line and node-kind filters. Return all bounded exact + matches without lexical fallback; preserve ambiguity and incomplete lookup. + +- Add opt-in `explain --source-members` to retrieve callable implementations + through recorded containment, including nested types. Share one source-byte + budget, retain individual verification status, and report unavailable or + omitted members explicitly. + +- Label explanation excerpts without a stored source digest as unverified. + Preserve bounded source access and reject malformed or mismatching digests + instead of claiming that an anchor alone verifies current source. + +- Report incomplete directed trail searches when the depth frontier remains + unexplored, instead of inferring a direction mismatch from a shorter + undirected route. Preserve successful bounded paths and closed negatives; + retain incomplete status in exploration even when no path is returned. + +- Add exact destination identities and full relationship records to MCP neighbor + results, preserving source anchors, provenance, direction and parallel calls. + Bound adjacency work and response size; report exhaustion explicitly. + +- Resolve Rust method receivers reached through source-proven scalar indexes + into standard vectors, arrays, and slices, retaining field declaration scope + and each call occurrence. Preserve intermediate modules in qualified Rust + type paths instead of selecting a same-named outer type. Custom containers, ranges, unknown index types, + and shadowed collection names remain unresolved. Rebuild graphs to refresh + older AST caches. + +- Prefer exact IDs and symbol names for MCP neighbor navigation before broader + prefix/substring matches, while preserving genuine declaration ambiguity and + fuzzy fallback when no exact candidate exists. + +- Preserve literal compound identifiers in natural discovery questions ahead + of generic behavior matches, while retaining declaration collisions and + uncertainty from bounded name lookups. + +- Preserve Java varargs signatures, parameter array types, and explicit array + argument dimensions. Resolve supported overloads in strict, loose, then + variable-arity order, retaining ambiguity when evidence cannot select a + unique target. Rebuild graphs to refresh older AST caches. + +- Correct natural discovery help to report the 10,000 examined-relationship + default independently of the 128 returned-edge default. Runtime limits are + unchanged. + +- Resolve coincident export-binding and declaration name matches through exact + export evidence, improving symbol-based paths and relationship queries while + preserving genuine ambiguity and exact-ID selection. Traversal caches retain + the weakest relationship confidence and deferred state. + +- Resolve Java method receivers constructed directly at the call site, + including qualified types and bounded parentheses, while retaining overload + and occurrence evidence. Stop turning arbitrary receiver expressions into + invented external type names. Enclosing-instance construction no longer + selects an unrelated imported class. Rebuild older AST caches. + +- Resolve file-route parents from framework nesting conventions instead of + choosing a nearby module. Preserve layout, flat-route, index, pathless, and + non-nesting distinctions; retain ambiguous parents without inventing edges. + Pages Router, Astro, and HTTP endpoints no longer acquire automatic layout + parents from directory order. Rebuild graphs under framework semantics 8. + +- Restrict filesystem route hierarchy to recognized file-route conventions. + Independent programmatic routers no longer acquire containment edges merely + from shared receiver names and source directories, which could inflate hubs + and create unsupported navigation paths. + +- Resolve Go receivers introduced by `if` and switch initializers using their + source-proven factory results. Respect nearer locals, range bindings, and + closure parameters instead of borrowing an outer receiver type; do not + substitute a same-named package factory for a callback or attribute a returned + callback invocation to its factory's receiver type. Rebuild older AST caches. + +- Make ambiguous typed query headlines request exact node IDs without naming + a fallback subject or claiming no path. Include IDs for all retained + ambiguity candidates in text output. + +- Explain MCP hub candidates with node kind and bounded relation/direction + counts, preserving parallel records and distinguishing incident records from + ranking degree. Report omitted relation categories explicitly. + +- Require unique exact endpoints for MCP paths and return ambiguity candidates + instead of choosing by score. Explore within the requested hop bound using + shared work limits, prefer structural relations among equal-hop paths, and + include exact node/edge identities in structured responses. + +- Include exact node IDs and source locations in MCP hub results, with a + versioned structured projection for follow-up navigation. Describe hubs as + topology candidates rather than established design defects. + +- Preserve community IDs alongside labels in traversal caches, restoring MCP + community membership and statistics on typed graphs. Older disposable + traversal caches rebuild automatically. +- Return candidate paths and IDs for ambiguous MCP neighbor lookups instead + of silently selecting one declaration. +- Apply MCP neighbor relationship filters before grouping repeated neighbors, + preserving matching calls when another relation shares the same endpoints. + +- Preserve parsed `ask` operands in agent and text answers so headlines, + answer evidence, path endpoints, and follow-up actions describe the requested + symbols. +- Match agent-answer subjects using the query engine's existing case and + function-label normalization, including names such as `convertSchema()`. + +- Prevent Rust local receiver bindings from inheriting shadowed outer parameter + types in lets, loops, closures, match arms/guards, and conditional lets. + Preserve initializer and else-branch scope, and rebuild older AST caches. + +- Fix weighted `path --max-depth` searches losing a feasible shorter prefix. + Search work exhaustion now fails explicitly instead of appearing disconnected. + +- Fix bounded weighted node trails: retain shorter prefixes when a cheaper + route exhausts the hop limit, and never admit a previously rejected node + without charging the traversal budget. + +- Respect explicit graph node kinds in topology analysis: method-shaped labels + and extensionless source files retain their structural candidates, and + explicitly typed files stay out of hub lists. + +- Make god-node ranking stable for equal-degree nodes, retain project + declarations whose names overlap library names, and omit isolated nodes. - Move theme selection into Graph settings, grouped with appearance controls. Separate layout and selection settings, collapse keyboard shortcuts, and keep theme settings available in every community overview design. diff --git a/COMPATIBILITY.md b/COMPATIBILITY.md index 7d16f5572..1783e58e1 100644 --- a/COMPATIBILITY.md +++ b/COMPATIBILITY.md @@ -31,6 +31,141 @@ not maintain command-specific fallbacks for older releases. Compass 0.3.0 itself remains supported. The extension adapts typed call-query results for the known nested-anchor limitation in that stable release. +## Graph cache identity and MCP request snapshots + +Graph query, impact and traversal caches now bind to the SHA-256 of the bounded +JSON bytes read, including when file size and modification time are unchanged. +Their disposable header versions advance to `TRAILG02`, `TRAILA03` and +`TRAILT07`. Typed content caches use `.content-v2.cache` and `CGRPHV02`; their +cache key, schema admission and decoded document come from one byte snapshot. +Older cache formats are ignored and rebuilt from the graph. + +For standalone JSON graph paths, each MCP request checks current graph content +and holds an immutable context. Communities, hubs, neighbors, paths and typed +query identities within that context derive from the same captured bytes. A +later request observes a replacement or reports a missing, corrupt, unsupported +or oversized graph. A request already holding a valid context may finish using +that context after the path changes. Published SQLite queries retain their +existing store-reference validation path. Sidecars retain their own existing +loading policies; this graph snapshot does not make arbitrary external writes +transactional. Publishers should use atomic replacement. + +Graph schemas, source identities, query-result schemas, historical realizations +and AST cache semantics are unchanged. Content reads use the configured graph +byte cap; this correctness correction makes no latency or memory improvement +claim. + +## Go struct field declarations + +The universal Go producer now publishes one `field` declaration per explicitly +named direct struct field, with its identifier source range and a directed +`contains` relation from the owning `struct`. A declaration with multiple +names creates distinct fields. Embedded fields, blank identifiers, and fields +inside anonymous nested structs do not become direct named members of the +outer struct. Existing type-reference and receiver-binding evidence remains. +This adds graph nodes and containment edges, so graph digests, communities, +hub degrees and hub member counts can change after a rebuild. It does not +assert field-access target resolution or god-object classification. Disposable +AST cache semantics advance from 11 to 12; old cache entries are ignored and +recomputed. Graph schema and package version remain unchanged. + +## Go field-access evidence + +The Go producer emits source-anchored `MemberAccess` occurrences for selector +expressions outside direct call targets. When bounded receiver typing establishes +an exact owner, it also emits an `AccessesMember` candidate restricted to a +source field declaration with the same qualified owner and name. Resolution +looks up that field before following its type alias; missing or ambiguous fields +remain unresolved. The graph projects resolved contacts as directed `references` +with exact occurrence provenance. These records do not claim read/write effects, +runtime aliases, promoted members or complete field-use coverage. + +Rebuild graphs to see the additive references. Disposable AST cache semantics +advance from 12 to 13; old entries are ignored and recomputed. Existing graph +and evidence schemas and package version remain unchanged. Added references can +change degrees, navigation, clusters and communities. Historical realizations +remain immutable. + +## Java field-access evidence + +Java emits `MemberAccess` occurrences for ordinary fields and enum constants, +including supported unqualified references. A bounded AST lexical index distinguishes +parameters, locals, block/loop lifetimes, lambda/catch/resource bindings and +source type names. Receiver typing supports declared nominal values, source-local +field chains, arrays, casts, direct constructors and single generic bounds. +Simple `instanceof` branches and abrupt guards retain their flow scope. Visible +source types take precedence over imports and package prefixes. A qualified +field lookup requires one receiver type declaration; field availability cannot +select between duplicate nominal types. Exact declaration evidence remains +authoritative. + +For an already established Java nominal receiver, resolution joins dotted +source type names to canonical nested declarations using the complete qualified +name. Imported nested types can therefore supply field and enum-member targets. +Package/type spelling collisions and duplicate enclosing types retain ambiguity; +member availability cannot select an owner. Nominal lookup work shares the +existing candidate budget. This does not infer a type from an arbitrary expression +chain. Rebuild stored graphs for the resolver correction; existing version-10 +extraction facts remain usable because the emitted evidence is unchanged. + +Unknown receivers, ambiguous names, unsupported pattern flow, inherited fields, +unregistered local/anonymous class owners and exhausted inference remain +unresolved or unrepresented. Unsupported flow masks a possibly shadowed field; +it never establishes a convenient outer-field target. Cross-file field chains +and general hierarchy/accessibility/type-checking are not inferred. Existing +qualified universal resolution selects field or enum-member declarations. Bare +enum switch labels use the selector type and permit only enum-member targets; +unknown selectors remain unresolved. Registered constant-specific bodies retain +their method/field owners and field shadowing. Their body-specific fields are +visible only through lexical ownership, not through an enum-typed value. +Type parameters and local values/types shadow same-named enum receivers. Graph v1 emits +`references` with exact member-access provenance, preserving occurrences without +read/write or runtime-alias claims. Method names are not field accesses. + +Rebuild graphs to obtain these facts. AST cache semantics advance from 9 to 10; +evidence/graph schemas, producer capabilities and package version are unchanged. +Historical realizations remain immutable. Additional references can change +navigation and community assignments; neither implies improved community +quality or god-object classification. + +## Rust field-access evidence + +Rust extraction emits member-access occurrences for explicit field expressions, +including fields in method receivers and scalar-indexed receiver chains when +bounded source-type evidence establishes the nominal owner. Existing universal +resolution selects only field declarations, preserving parallel occurrences. +Graph v1 publishes these as `references` with member-access provenance, not as +read/write-effect or runtime-alias proofs. Method-selector syntax is excluded. + +Unknown or shadowed receivers, ambiguous type paths, unsupported expressions, +raw pointers and exhausted receiver-depth inference remain unresolved. These +facts do not establish complete field-use coverage, class cohesion or god-object +defects. Rebuild graphs to obtain the additive access records. AST cache semantics +advance from 7 to 8; evidence/graph schemas, existing producer capabilities and +package version are unchanged. Historical realizations remain immutable. + +## Rust indexed method receivers + +Rust call extraction follows bounded field and scalar-index receiver syntax +when source types establish a standard `Vec`, array, or slice and a decimal integer +literal or `usize` index. Supported reference and standard `Box`/`Rc`/`Arc` +wrappers preserve the element type. Field types retain their declaration scope, +and repeated calls retain distinct source anchors. Type-path qualification +retains every intermediate module when expanding a local or imported alias. +Explicit standard-vector +and element imports may be resolved by existing import evidence. + +Custom `Index` implementations, range indexes, unknown index types, raw +pointers, ambiguous or shadowed type names, and unsupported expressions do not +establish an element-method target. Prelude-vector inference is disabled by +visible wildcard imports or source attributes that may disable the standard +prelude. Generic field substitution and cross-file field layout discovery are +not compiler inference capabilities of this rule. + +Disposable AST cache semantics advance from 6 to 7 for these extraction facts. +Rebuild a graph to obtain them; published history, evidence schema, producer +capabilities, graph schema, and package version remain unchanged. + ## Compatibility evidence Compass changes are verified with native evidence: @@ -94,6 +229,186 @@ history profiles, and cache identities. ## Evolving contracts +### Owner-qualified symbol lookup + +Typed callers, callees, impact and node-trail queries now accept a unique +owner/member suffix such as `APIRoute.get_route_handler` or +`APIRoute::get_route_handler` when the stored +qualified name is `fastapi.routing.APIRoute::get_route_handler`. An exact ID or +full normalized name still takes precedence. The lookup reads the bounded +exact leaf-name posting and verifies every candidate's full owner suffix; +multiple matches or an exhausted candidate bound remain ambiguous. If the +leaf name exists but the owner does not, no fuzzy winner is chosen. Existing +fuzzy fallback remains available for a misspelled leaf with no exact leaf-name +candidate. JSON response schema and graph artifacts are unchanged; previously +fuzzy or unresolved typed queries may now return a source-identifiable direct +answer. This behavior applies to `ask` when it routes to those typed queries. +Legacy `explain` and `path` also accept the unique owner suffix after checking +exact IDs and full names. Their existing candidate-list behavior preserves +multiple matches. No graph rebuild or package-version change is required. + +### MCP paths + +`shortest_path` resolves exact node IDs or normalized symbol/qualified names. +It no longer substitutes a scored fuzzy endpoint. Ambiguous matches return at +most 20 candidates, ordered by ID, with an omission count; callers choose an +exact ID before requesting a path. Both endpoints resolving to the same node +continues to produce a diagnostic rather than a positive path. + +Search remains undirected and minimum-hop. Among equal-hop routes it now uses +the query engine's structural relation costs and deterministic path keys. +`max_hops` is enforced during traversal, accepts 0–64, and defaults to 8. +The same 1,000,000-adjacency-entry and 16 MiB cumulative path-key budgets as +the CLI path engine apply. Exhaustion fails explicitly. A depth-limited miss +does not assert global disconnection or the length of an unsearched route. + +Uniquely resolved, distinct endpoints add `compass.mcp.path/1` in the existing +structured transport envelope. It distinguishes `found`, `depth_limit`, and +`disconnected` and retains exact ordered node/edge identities. Resolution +diagnostics retain their text form. Legacy text is still available, including +through the non-transport `invoke` helper. Graph schemas are unchanged. + +### MCP hub identities + +Each hub now also carries an additive `connectivity` object with schema +`compass.hub-connectivity/1`, and text includes its node kind and relation +breakdown. Hub eligibility, degree, and ranking are unchanged. Incident record +counts retain parallel records; they are not distinct-neighbor degree or +independently verified source occurrences. At most 16 relation categories are +shown, ordered by record count then name, with explicit omission totals. +Undirected artifacts do not acquire inferred directions in this summary. +Their `ranking` metadata now correctly says +`distinct-undirected-endpoint-degree`; directed artifacts retain +`distinct-directed-endpoint-degree`. + +MCP `god_nodes` adds `structuredContent` using the existing +`compass.mcp.tool-result/1` envelope and the result schema +`compass.mcp.hubs/1`. The ranked records preserve exact IDs, kinds, degrees, +and available source anchors. Text and the `compass://god-nodes` resource add +an ID/source/location line beneath each entry; string values are JSON-escaped +so IDs remain recoverable without injecting extra lines. Missing anchors are +null. Inputs, eligibility, degree calculation, and ranking are unchanged. +An additive `memberEvidence` object with schema `compass.hub-members/1` now +appears for directed typed class and struct hubs. It counts uniquely owned +direct methods/fields, ambiguous direct members, and stored method-to-own-field +`references` records, pairs and participating methods. It is null for other +kinds and undirected graphs. Parallel records remain in the record count; +ambiguous owners cannot contribute to own-field counts. These observations +include stored reference records regardless of their confidence and carry +`sourceCoverage: "unverified"`; they are neither validated reference targets, +complete source-access coverage nor a god-object classification. +Exact node lookup checks the original ID before the existing whitespace-trimmed +fallback, preserving distinct legacy IDs that differ by surrounding whitespace. +The non-transport `CompassMcp::invoke` compatibility helper still returns text +for this tool. Machine consumers should use the structured projection rather +than parse display labels. See [output contracts](docs/reference/outputs.md#mcp-hub-results). + +### MCP community and neighbor lookup + +The disposable traversal cache now retains a labeled community's numeric ID +as well as its name. Cache magic advances from `TRAILT04` to `TRAILT05` so old +projections rebuild from their unchanged graph. MCP membership, statistics, +and other traversal consumers can now observe those stored communities. +Graph schemas and published historical graphs are unchanged. + +MCP `get_neighbors` first resolves an exact ID or normalized symbol/qualified +name using the shared exact lookup, including its evidence-gated export-binding +handling. Prefix/substring fallback applies only when no exact candidate exists. +A unique exact `term_len()` therefore remains navigable when `test_term_len()` +exists. Multiple exact candidates remain ambiguous; ranking never chooses one. +The ambiguity list is ordered by exact ID with at most 20 displayed candidates +and an omission count. Retry with an exact ID to choose a declaration. Exact IDs +retain their case. The tool's input schema and the MCP result envelope are +unchanged. This corrects unnecessarily ambiguous lookups; no migration is needed. +Relationship filters apply before repeated neighbors are grouped, so a stored +call remains visible when a containment/reference edge precedes it. The tool +continues to display distinct neighbors. Successful results now add the versioned +`compass.query.neighbors/1` structured result inside the existing MCP transport +envelope. Each direction/neighbor group carries its exact node record and all +matching relationship records, including IDs, source sites, provenance and +parallel occurrences. Missing legacy edge IDs remain absent. Directions describe +stored endpoints; `graphDirected` preserves the artifact metadata, so an +undirected artifact does not become proof of a directed call. Text adds escaped +ID/source/location lines; the displayed relation represents the first canonical +record in the group. Use structured records for all relations and occurrences. + +Neighbor lookup reads one full snapshot to avoid losing fields in the compact +traversal cache. It is bounded by 1,000,000 examined adjacency entries, 10,000 +matching incident records, a 4,096-byte filter and a 1 MiB structured result. +Exhaustion is an explicit error, never an empty or silently partial success. +Groups sort by outgoing/incoming direction then exact ID; records sort by +canonical JSON. Self loops appear in both directions and count once against +the incident-record budget. Published graphs and historical artifacts are unchanged. + +### Calls-only directed trails + +`node --calls-only`, MCP `get_node` with `calls_only: true`, and explicit +`ask "call path from SOURCE to TARGET"` / `"call chain from SOURCE to TARGET"` +restrict trails to stored directed `calls` edges. Structural shortcuts cannot +satisfy this request. The typed `NodeTrailRequest` adds optional boolean +`callsOnly`; omission defaults to false and false is omitted when serialized. +Rust struct-literal callers must initialize the new `calls_only` field. + +The policy applies to endpoint relationship-role probes, traversal, depth +frontiers and undirected direction diagnostics. Exact-name ambiguity remains +unresolved. Existing heuristic opt-in, occurrence provenance, deterministic +ties, node/edge/byte bounds and partial-graph diagnostics remain effective. +The undirected diagnostic charges examined structural records to its work +budget even though they cannot form a call path. Empty bounded results remain +incomplete, never proof of no call path. + +Existing structural trail and natural `path from` requests retain their +behavior. The response stays `compass.query/1`; Agent View request metadata +records the explicit call-path question. No graph, extraction/cache, history, +or package version changes are needed. These are static call relationships, +not a guarantee that the chain executes for every input. + +### Directed trail depth diagnostics + +Typed `node`/`get_node` trails now report `truncated: true` with +`bounded_truncation` when an unsuccessful search reaches its depth bound and +cannot prove the reachable frontier is closed. They do not use a shorter +undirected route to assert a global direction mismatch while an unexplored +forward continuation remains. Frontier checks share the declared work budget +and run only after the bounded path search fails, preserving positive paths +within the requested depth. Closed dead ends and cycles can still yield complete +negative results. The `compass.query/1` schema is unchanged; consumers should +continue to distinguish incomplete searches from negative answers. + +`explore` / `explore_code` also retain incomplete-search status when no connecting +path was found; previously that status could be lost with the absent path. + +### Bounded node trails + +The undirected `path` command also retains nondominated cost/depth states. +Each weighted or alternative search is bounded to 1,000,000 adjacency entries +and 16 MiB of cumulative path-key bytes. Exceeding either returns a nonzero +work-limit error, never `NO PATH FOUND`. Previously expensive requests may now +need a smaller depth or graph. Relation weights and output schemas are unchanged. + +Typed `node`/node-trail queries keep nondominated arrivals by node and depth, +so a cheaper but longer prefix cannot hide a valid trail within `max_depth`. +Rejected nodes are not considered admitted on a later visit. Existing cost +weights, direction, deterministic tie rules, work limits and response schema +remain unchanged. Previously missing trails can now be returned; incomplete +responses no longer include nodes admitted after their budget was exhausted. + +### Hub ranking + +New god-node analyses order equal-degree candidates by stable node ID instead +of input record order. Source-located declarations named `Path`, `Counter`, +`Enum`, or other names also used by libraries are no longer suppressed by name +alone. Explicit canonical node kinds take precedence over display-label +heuristics throughout topology analysis: a `.method()` label does not turn a +method into a file, and file nodes remain excluded even with descriptive labels. +Typed structural nodes with nonempty source paths are not classified as concepts +merely because their source filename has no extension. +Legacy records without a recognized kind retain the existing label fallback. +Isolated declarations are omitted. The serialized `id`, `label`, and +`degree` fields and degree calculation are unchanged; the candidate list can +change. Published historical artifacts are not rewritten. Hub rank describes +connectivity, not a verified god-object design defect. + Rust structural evidence now uses producer version 2. The evidence and graph schema majors are unchanged, but Rust extraction caches from producer version @@ -102,6 +417,80 @@ evaluating local macro inputs can publish newly recovered exact calls. Unsupported macro shapes, non-evaluating inputs, and ambiguous receiver owners remain unresolved rather than being guessed. +Rust receiver lookup now respects local shadowing in lets, loops, closures, +match arms/guards, and conditional lets. An unknown inner type cannot inherit +an outer parameter's alias. A let initializer still sees the previous binding; +an `else` branch does not see bindings from a failed condition. Previously +incorrect call edges can disappear and remain unresolved until the receiver +type is proven. The advertised producer capabilities and evidence/graph schemas +are unchanged. AST cache semantics advance from 2 to 3, rebuilding prior AST +facts automatically across languages. Published historical graphs are unchanged. + +Rust extraction now follows a bounded source-proven `Result>` collected +from a standard vector iterator and a constructor declared to return standard +`Result`. Its `Ok` match binding, vector loop variables, and `iter().map` +closure parameters can gain exact method-call targets. Local aliases and +unsupported iterator or constructor forms remain unresolved. AST cache +semantics advance from 10 to 11, rebuilding disposable facts; graph and +evidence schema majors and published historical graphs are unchanged. + +Go receiver lookup now includes `if` and switch initializers alongside loop +initializers. Block locals, range variables, and closure parameters are resolved +in lexical order; an unsupported nearer binding cannot inherit an outer +parameter's receiver type. Local callbacks and shadowed package names cannot +provide a same-named global factory's return type. Type-switch aliases block +outer types but do not yet infer case-specific narrowing. Invoking a returned +callback retains the inner factory call without treating the outer invocation +as a reference to the factory receiver's type. Newly recovered and +corrected call edges require rebuilding the graph. AST cache semantics advance +from 3 to 4, invalidating older disposable AST facts across languages. Producer +capabilities and evidence/graph schemas are unchanged; published history remains +immutable. + +Java method receivers now use constructor syntax evidence for direct named +object creation, including qualified type names and bounded parentheses. +Overload selection still requires the existing argument evidence. Anonymous +subclasses, explicit enclosing-instance creation, arrays, casts, and chained +results retain unresolved method candidates when their receiver ownership is +not proven. Arbitrary expression text no longer becomes an external type name. +An enclosing-instance construction also retains its receiver qualifier instead +of selecting a same-named imported class. AST cache semantics advance from 4 +to 5, rebuilding older disposable facts across languages and invalidating old +build seals. Producer capabilities, graph/evidence schemas, and published +historical realizations are unchanged. + +Java varargs signatures now retain their spread parameter, and canonical +parameter types represent it as an array. Explicit array arguments and trailing +parameter dimensions preserve their rank. Supported overloads are considered +in strict fixed-arity, loose fixed-arity, then variable-arity phases. Missing +argument/hierarchy evidence and incomparable overloads remain unresolved; +unequal variadic prefixes do not establish a most-specific target. Rebuilding +can change signature metadata and call targets. AST +cache semantics advance from 5 to 6; published history, producer capabilities, +and graph/evidence schemas remain unchanged. + +### Framework route hierarchy + +Framework route hierarchy now requires a recognized filesystem-convention fact +from its owning framework producer. A receiver name such as `r` or `app` does +not establish parentage between programmatic routes in separate source files. +Framework composition rules still own programmatic mounts and groups. The +framework-pack semantics identity initially advanced from 6 to 7, and build-state seals +now include that identity. Rebuild existing graphs to remove unsupported +containment edges and recompute affected paths, degrees, and communities. +Graph/evidence schema majors and immutable historical realizations are unchanged. + +Framework semantics 8 additionally replaces first-file directory selection with +framework-specific nesting. Next App Router parents must be layout modules; +flat route parents use filename segments, including pathless and non-nesting +markers; Nuxt parents require a matching page module above a child directory. +Index pages and sibling modules cannot become parents merely through ordering. +Ambiguous nearest parents remain unresolved instead of falling back outward. +Rebuild graphs to correct containment, degrees, paths, and communities. These +rules do not infer custom router configuration, runtime mounts, or an omitted +layout declaration. See the supported boundaries in the +[framework graph reference](docs/reference/react-framework-graph.md). + ### Agent Query View Compass adds the additive strict projection `compass.query.agent-view/1` for @@ -155,6 +544,30 @@ that parsed caveat text from continuation pages must read it from page one. ### TypeScript path aliases and file-shaped path input +Exact name lookup can identify both an export binding and its declaration. +When complete, bounded graph evidence proves that the binding's exact source +range belongs to one owner and exports one matching declaration, lookup removes +the redundant binding candidate. Both records retain their graph identities; +an exact export ID still selects the binding. The declaration must already be +in the exact-name candidate set and share the binding's qualified name, +normalized name, and source file. This applies to typed relationship/trail +queries and the exact lookup used by paths, explanations, and MCP navigation. + +Different declarations, multiple export targets, incomplete source ranges, +inferred/ambiguous/deferred evidence, and incomplete candidate sets keep their +ambiguity. Additional proof examines at most 256 candidates and 1,024 adjacency +entries plus a truncation probe. Exhaustion retains the original candidates; +typed responses report truncation and an ambiguity diagnostic. Graph schemas, +stored identities, and extraction are unchanged. Existing graphs can receive +this lookup correction without re-extraction. + +Traversal cache format `TRAILT07` retains deferred relationship flags and the +weakest confidence across all evidence (introduced in `TRAILT06`), including +explicit compatibility confidence. Missing or unknown confidence values in an +evidence item cannot establish an exact fact. Older disposable traversal +caches rebuild from the authoritative graph; published historical graphs are +not rewritten. + A TypeScript or JavaScript project that is the `extends` base of another project keeps its own `compilerOptions.paths` when it declares `files` or `include`. Only a base config without its own file set stays excluded, and a @@ -177,11 +590,79 @@ selected when unique, while multiple modules or declarations remain an explicit ambiguity. This lets path traversal follow the same stored workspace import edges used by `callers`. -`compass explain` now includes a bounded source excerpt by default when the -selected node has a unique source-backed declaration whose file matches the -recorded symbol digest. `--no-source` restores a metadata-only answer; the -existing `--source` flag remains accepted. Ambiguous, unsourced, or changed -files do not produce source text. +`compass explain` includes a bounded source excerpt by default for a uniquely +resolved source-backed declaration. When a stored symbol digest matches the +complete recorded byte span, the excerpt is labeled `digest-verified`. A graph +without that digest can still supply a current excerpt, explicitly labeled +`unverified: no recorded source digest`; an anchor alone cannot establish +freshness. A mismatching or malformed digest prevents source output. This +corrects the earlier unconditional verification label, including text inside +shared JSON output envelopes. The query library exposes `digest_verified` on +`ExplainedSource`; machine schemas and graph artifacts are unchanged. +`--no-source` restores a metadata-only answer; `--source` remains accepted. +Ambiguous or unsourced targets do not produce source text. + +### Exact symbol search + +`search --exact` and MCP `search_symbols` with `exact: true` use the existing +bounded exact ID/name index without lexical or fuzzy recall. Optional CLI +`--file`, `--line`, `--kind` filters correspond to MCP `source_file`, +`start_line`, `kind`. Filters require exact mode; a line also requires a file. +File strings match stored paths exactly and are not opened or canonicalized. +Selectors and file filters accept 1..4096 non-control bytes; lines are positive +32-bit integers and kinds use the stored node-kind spellings. + +Exact IDs take precedence over name lookup, then must satisfy every supplied +filter. Names use the existing normalization (trim whitespace, trailing `()`, +leading `.`, and lowercase); file paths and IDs remain case-sensitive. All +matching records remain visible, including overloads and export bindings. +Scores are uniformly 1 and order is stable by ID. This mode does not select a +winner or collapse a binding into its declaration. + +The candidate cap applies before filtering. A truncated prefix cannot prove +uniqueness or absence, even when filtering returns one or zero nodes. Node and +response bounds and coverage diagnostics still apply. Exact CLI text requests +do not automatically widen candidate bounds. Default ranked search and the +`compass.query/1` response schema remain unchanged. The query API adds +`search_exact(SearchRequest, ExactSearchFilter)` without changing `SearchRequest`. +Agent View uses typed name normalization when identifying exact search matches. +An empty bounded search without a no-match diagnostic retains `match=unknown` +and partial execution instead of asserting absence or failing view validation. + +### Explanation member source + +`explain --source-members` replaces the declaration excerpt with callable member +excerpts reached through outgoing recorded `contains` / `method` relationships. +It follows nested type containers, preserving recorded direction and parallel +membership evidence in the query library. It does not infer ownership from +names or file proximity, follow calls/references, or promote inferred/deferred +membership. Ambiguous roots remain unresolved and undirected graphs are refused. +Default `explain` behavior is unchanged; `--source-members` conflicts with +`--no-source`. + +Members are ordered by source file, byte range, and exact ID. They share +`--max-source-bytes` (default 4096; maximum 1 MiB in member mode). Discovery has +separate limits of 128 callables, 128 containers, depth 4, 10,000 adjacency +entries and 1 MiB of metadata. Verification attempts share a 16 MiB recorded-span +budget. Discovery-bound failures report unavailable member source; source/work +exhaustion reports truncation and omitted member counts. Individual source +failures remain visible without suppressing other valid excerpts. Stored +source digests and containment checks use the existing source reader. + +Optional `--member-focus TEXT` requires member mode. It ranks callables by the +number of distinct normalized focus terms in their recorded names, then by the +original source order. Existing query-term and identifier normalization apply; +input is limited to 4,096 bytes and 32 distinct searchable terms. Empty or +unsearchable focus is rejected. Duplicate terms do not add weight. No matches +preserve source order; unmatched members remain candidates. Source is not read +to rank, and focus does not resolve ambiguous roots or relax any existing limit. +The report names focus terms and each retained member's lexical matches. These +matches do not establish responsibility, behavior or semantic relevance. + +This is an additive CLI option and query API, with no graph or shared-output +schema change. The text reports exact member IDs, source anchors, verification +status, retained source bytes, and unavailable/omitted counts. It is structural +source evidence, not a synthesized explanation or a god-object diagnosis. ### Typed query deadlines @@ -618,7 +1099,22 @@ realizations of the backend-neutral `compass-store` contract, not a stable SQL schema or pointer format that consumers may query directly. The additive `compass ask` command continues to route bounded questions to the -typed `compass.query/1` operations. Plain `compass query` against a typed graph +typed `compass.query/1` operations. Its agent projections now retain the parsed +symbol/source/target operands used by that operation, with the original question +in `request.question`. This corrects headlines, evidence basis, and follow-up +actions that previously treated the whole question as a symbol. Agent-answer +subject lookup shares the query engine's existing name normalization (case, +leading dots, and trailing empty parentheses), retaining exact node-ID lookup +and requiring a unique normalized name. Existing schema +majors and raw query responses are unchanged. Text cursors whose primary ordering +changed are rejected by the existing prefix check; reissue the question. +Ambiguous typed answers now use the operation as their answer basis and ask +for exact node IDs, with IDs printed for every retained ambiguity candidate. +They no longer describe the first candidate as a fallback answer or imply +that an ambiguous path request proved disconnection. Schema majors and raw +query responses are unchanged. Existing text cursor prefix checks reject +pages whose candidate rendering changed; restart that query from page one. +Plain `compass query` against a typed graph now defaults to `compass.query.discovery/1`; `--dfs` and `--context` compose with discovery. Explicit `--traverse` or legacy-only `--budget`/`--page` preserve the established text traversal and reject discovery controls. @@ -723,11 +1219,22 @@ persistence, dispatch, invocation, processing, recognition, refresh, resolution, and scheduling) affect ranking only: they cannot add a posting, candidate, relationship concept, or relation eligibility. Equal evidence vectors remain explicitly ambiguous. -Natural-query alternatives now require the same channel, operation, +Lexical natural-query alternatives require the same channel, operation, relationship, and calibrated score rank before they are labeled ambiguous. This removes false ambiguity between a specifically ranked operation or representation and a weaker same-name/helper candidate. Equal-rank candidates -and duplicate exact-name lookups remain explicit ambiguity. +and duplicate exact-name lookups remain explicit ambiguity. Exact matches to +the same source-backed declaration name remain ambiguous across differences +in kind, signature, owner, and ranking evidence; ranking does not prove which +declaration the user meant. + +Within prose, underscore spellings and mixed-case internal capitals receive +bounded literal-name lookup before behavior recall. Only declared-name matches +receive exact-name priority. This changes candidate ordering without changing +the discovery schema or graph format. Truncated name postings or candidate +admission cannot prove uniqueness, and generic operation ranking cannot +override that uncertainty. Single-word capitalized names continue through the +existing ranking unless the whole question is an exact name. For explicit action predicates, discovery first reads one compact exact-term index restricted to source-backed operation-role declarations. It may finish diff --git a/MIGRATION.md b/MIGRATION.md index 7f5253674..11fb15ea5 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -5,7 +5,93 @@ sidecars. Its output root now preserves the familiar flat artifact shape so file-based workflows can transition while Compass's snapshot and store layout remains visible and clearly owned. -## Query text and path resolution +## Graph rebuilds and query resolution + +Disposable graph query/impact/traversal and typed content caches are rebuilt +automatically when read by this version. No source graph rebuild or historical +rewrite is needed for cache freshness. An in-flight MCP request retains its +loaded graph snapshot; subsequent requests read the current content and reject +missing or corrupt replacements. + +Rebuild Java graphs to resolve imported nested nominal receiver names for field +and enum references. The resolver now joins dotted source type names to canonical +nested declarations, retaining duplicate-owner ambiguity. This correction reuses +version-10 AST facts; it does not change schemas or rewrite historical graphs. + +Rebuild Java graphs to receive source-proven field and enum-constant references, +including supported enum switch labels and constant-specific body ownership. +AST cache semantics version 10 automatically +invalidates earlier extraction facts. Existing stored/historical graphs are not +rewritten; unsupported receivers and inherited/anonymous/local-class cases +remain gaps. These references do not classify read/write effects or establish +class cohesion or god-object defects. + +Rebuild Rust graphs to receive newly emitted field-access references. AST cache +semantics version 8 invalidates earlier facts automatically; stored graphs and +historical realizations are not rewritten. The added `member-access` references +preserve source occurrences but do not classify reads/writes or prove cohesion. + +MCP neighbor responses now include exact destination records in +`structuredContent.result` with schema `compass.query.neighbors/1`. Consumers +that need machine identities should read those records instead of parsing text +labels. The text adds identity/source lines and orders groups deterministically. +If a large neighbor request exceeds the new adjacency, record or 1 MiB semantic +response limit, it fails explicitly; narrow `relation_filter` or use the bounded +typed caller/callee queries. An empty successful result means no matching +records. No graph rebuild is required for this output change. + +Rebuild Java graphs to receive corrected varargs signatures, array argument +types, and overload targets. Spread parameters now retain their declared array +type; calls may gain targets or select a different, source-supported overload. +Normal builds discard AST cache versions older than 6. Existing historical +graphs and the graph schema remain unchanged. + +Name-based queries can now resolve a coincident export binding to its proven +declaration. Use the exact export node ID when you want the binding record. +This query correction works on existing graphs. Older traversal caches rebuild +automatically to retain mixed-confidence and deferred relationship evidence; +graph re-extraction is not required for that cache correction. + +Rebuild Java graphs to receive the constructor-receiver correction. Direct +constructor method calls can gain source-proven targets; invented external +targets and unrelated imported-class construction edges can disappear. Normal +builds discard AST cache versions older than 5. This does not rewrite historical +graphs or change the graph schema. + +Rebuild graphs with programmatic framework routes to remove filesystem-derived +containment between independent routers and unsupported file-route parents. +Framework-pack semantics version 8 +invalidates prior build profiles and build-state seals; disposable framework +facts can be rebuilt from source. Hub rankings, navigation paths, and communities +can change. Existing historical realizations remain unchanged. + +Version 8 corrects the directory-order parent rule introduced before version 7. +File-route siblings, standalone endpoints, and page files without a layout +parent may lose containment edges. Source-proven nested layouts and flat-route +parents can gain the correct edges. The graph schema is unchanged. + +Rebuild existing Go graphs to receive the control-initializer and receiver +shadowing corrections. Normal builds automatically discard AST cache versions +older than 4. Source-proven calls can appear and incorrectly attributed calls +can disappear; existing historical realizations are not rewritten. + +For MCP `shortest_path`, replace partial keywords with exact IDs or complete +symbol/qualified names. Handle ambiguity candidates before retrying. Use +`structuredContent.result` (`compass.mcp.path/1`) for ordered identities and +statuses. `depth_limit` and work-limit errors are incomplete searches, not +proof of disconnection. `max_hops` is limited to 0–64. Equal-hop routes may +change because structural relation cost now breaks ties; the operation remains +undirected navigation. + +MCP callers of `get_neighbors` must handle an `Ambiguous` candidate list and +retry with a returned exact node ID. Earlier versions silently chose one match. +Labeled community IDs are restored by automatic traversal-cache rebuilding; +existing graph files can be queried directly. + +`ask` agent output now records parsed operands in `request.operands` and the +original question in `request.question`. Consumers needing the question should +read that dedicated field. If an existing text cursor fails its prefix check +after the corrected subject ordering, reissue the question to start a new page. Plain `compass query` output is now concise by default and its page budget is 8,000 approximate tokens. Scripts or review workflows that need the previous @@ -20,8 +106,14 @@ with a suggested exact ID when exact identity is required. `compass path` no longer promotes a fuzzy symbol candidate into an endpoint; it is weighted toward structural relations, defaults to an eight-hop bound, and reports `NO PATH FOUND` separately when both endpoints exist but are -unreachable. Consumers that parsed the prior human path prose should migrate to -these explicit signals; machine-query schema versions are unchanged. +unreachable within the requested hop bound. Consumers that parsed the prior +human path prose should migrate to these explicit signals; machine-query schema +versions are unchanged. + +`path` now fails with a nonzero work-limit error if either its weighted or +alternative search exceeds 1,000,000 adjacency entries or 16 MiB of cumulative +path-key bytes. Treat this as an incomplete search, not proof of disconnection; +reduce `--max-depth` or query a smaller graph before retrying. Typed relationship commands now share source-backed import/reference resolution. `callers`, `impact`, and typed `affected` may therefore return @@ -36,6 +128,14 @@ accept the shared `--format text|json|agent-json` contract where applicable. Use `compass architecture --format agent-json` for a bounded repository overview with omission counts and witness IDs. +## Rebuild cached AST facts after receiver corrections + +AST cache semantics version 3 invalidates older cached extractions, including +Rust calls incorrectly attributed to an outer variable shadowed by a local +binding. The next extraction rebuilds these facts automatically and can take +longer. Re-extract existing graphs to receive the correction; historical +realizations remain immutable. No source or configuration migration is needed. + ## Rebuild SQLite adjacency sidecars Store snapshots now declare edge-ID-ordered directional adjacency so bounded diff --git a/PERFORMANCE.md b/PERFORMANCE.md index d2b9761cb..cc8984c17 100644 --- a/PERFORMANCE.md +++ b/PERFORMANCE.md @@ -1359,3 +1359,107 @@ aarch64 macOS host initialized the statically linked runtime and processed its blank plus clean synthetic-English rasters in 1.77 seconds under a debug test build. The clean sample had 0 CER. This single smoke result is not a production latency, memory, degraded-input, cross-architecture, or multilingual claim. + +## SQL prefix guard: matched development-build diagnosis + +A registered CloudStack SQL diagnosis compared frozen unoptimized binaries with +matching build settings on four complete source files, three alternating runs +per binary. Fresh outputs did not imply cold OS caches. Background host work +was not isolated. + +| SQL bytes | Baseline completed | Candidate completed | Baseline median | Candidate median | Full old/new graph equality | +| ---: | ---: | ---: | ---: | ---: | --- | +| 938 | 3/3 | 3/3 | 1.010 s | 1.152 s | Yes, all six graphs | +| 1,949 | 3/3 | 3/3 | 1.004 s | 1.077 s | Yes, all six graphs | +| 10,288 | 3/3 | 3/3 | 2.462 s | 2.284 s | Yes, all six graphs | +| 411,080 | 0/3 | 3/3 | unavailable | 174.175 s | Unproven: unavailable baseline output | + +This is not release-performance qualification. Keep timeouts and small-file +regressions visible; do not infer an overall speedup or a Graphify performance +ranking. Complete graph equality holds only where both versions produced all +registered outputs. The smallest-file median regression exceeds 10%, requiring +review; this diagnostic is not an approved performance baseline. + +See [`sql_prefix_scan_review.json`](benchmarks/agent_query/sql_prefix_scan_review.json) +for every outcome, hashes, peak RSS, load observations and verification, and the +[code-graph audit](docs/implementation/code-graph-intelligence-audit-2026-09-26.md) +for scope and native checks. The normal release qualification policy above still +applies. + +## SQL access-regex cache: matching release comparison + +The SQL extractor now compiles its fixed access regexes—one read pattern and five +write patterns—once per process. The patterns, iteration order, captures and alias/CTE handling +are unchanged. A new native regression checks that every pattern is retained in +order and repeated calls reuse the same compiled storage. Public commands, +graph schemas and version 0.3.30 are unchanged. + +The registered diagnosis uses the same four complete CloudStack SQL inputs, +three repetitions per binary, alternating order and fresh outputs. Both binaries +use matching release settings: one codegen unit, thin LTO, abort-on-panic and +stripped symbols. An unchanged release rebuild confirmed the frozen baseline +hash before the cache edit. Build manifests, lockfile, toolchain and repository +configuration are unchanged. Ordinary OS caches and unrelated host work remain +limitations; timestamps, load averages and peak RSS are retained. + +| SQL bytes | Baseline median | Cached-regex median | Candidate / baseline | Full graph equality | +| ---: | ---: | ---: | ---: | --- | +| 938 | 0.596 s | 0.570 s | 0.956 | All six graphs | +| 1,949 | 0.580 s | 0.594 s | 1.024 | All six graphs | +| 10,288 | 0.657 s | 0.666 s | 1.014 | All six graphs | +| 411,080 | 13.121 s | 1.650 s | 0.126 | All six graphs | + +All 24 observations succeeded, and the complete graph JSON is equal across all +six runs of each input, with no excluded fields and preserved array order. +These are four development files selected during an earlier diagnosis. The +observed medians do not establish a confidence interval, whole-product release +qualification, a Graphify speed ranking or independent confirmation. Earlier +unoptimized observations, small-file regressions and whole-repository timeouts +remain unchanged. + +See [`sql_regex_cache_review.json`](benchmarks/agent_query/sql_regex_cache_review.json) +for every observation and matching-build provenance. Normal release performance +qualification remains required; this four-file diagnosis cannot replace it. + +## Complete-source SQL-cache follow-up + +The same frozen release binaries completed the entire pinned CloudStack tree +with identical 671,502,979-byte partial-graph artifacts. The pre-cache binary +took 193.966 seconds; the cache candidate took 280.053 seconds. The candidate +was slower in this single observation, and the cause is unproven. Do not +promote the four-file result to a whole-repository speedup or explain the longer +observation as host noise without further evidence. + +Both graphs exceed the original 256 MiB admission bound and fit the separately +declared 1 GiB bound. Both report one omitted node and 45 omitted edges. The +release baseline's success also prevents attributing recovery solely to the +cache. Earlier debug-build timeouts and all artifact-admission failures remain +unchanged. + +[`sql_regex_cache_whole_review.json`](benchmarks/agent_query/sql_regex_cache_whole_review.json) +contains both observations and repeated provenance/artifact verification. +[`sql_regex_cache_whole_repeat_registration.json`](benchmarks/agent_query/sql_regex_cache_whole_repeat_registration.json) +registers a separate three-repetition alternating comparison with CPU time and +peak RSS. All six runs completed and reproduced the original graph bytes: + +| Repetition | Execution order | Baseline wall | Candidate wall | +| ---: | --- | ---: | ---: | +| 0 | Baseline, candidate | 235.574 s | 204.082 s | +| 1 | Candidate, baseline | 215.288 s | 210.928 s | +| 2 | Baseline, candidate | 213.526 s | 203.430 s | +| Median | — | 215.288 s | 204.082 s | + +The candidate/baseline median ratio is 0.948, below the registered 1.10 +regression-review threshold. Median user CPU is 260.56 seconds for baseline and +227.06 seconds for candidate; median system CPU is 23.68 and 23.12 seconds, +respectively. Peak RSS, UTC timestamps and host load for every run are retained +in [`sql_regex_cache_whole_repeat_review.json`](benchmarks/agent_query/sql_regex_cache_whole_repeat_review.json). +Two complete verifier passes produced identical reports. + +The initial contrary observation remains unchanged above. This panel does not +identify the cause of timing variation. Our compilation, query captures, other +extractions and large-graph verification were paused during the timed runs; +unrelated host work and ordinary OS caches remained uncontrolled. Three runs +per binary on one known repository do not establish general performance or an +approved release baseline. All six graphs still omit one node and 45 edges; +normal release qualification remains required. diff --git a/SECURITY.md b/SECURITY.md index e710b3fe2..7e71196da 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -85,6 +85,11 @@ to a public issue: it can disclose repository names, paths, source anchors, and graph structure. Share a sanitized `compass store status --format json` response instead. +Standalone graph reads bind derived caches and MCP graph views to the digest +of one size-bounded byte snapshot. Digest equality establishes content identity, +not authenticity or semantic correctness. Disposable cache decoding is also +byte-bounded; caches do not authorize access to their source graph. + ## Document and OCR boundary PDF and OOXML files, XML relationships, compressed members, embedded images, @@ -105,3 +110,20 @@ Inspection, extraction, listing, verification, cache replay, and historical materialization never silently fetch or invoke an arbitrary executable. Model and document cache paths can contain sensitive derived content and should not be attached to public issues. + +## Explanation source verification + +`compass explain` verifies a declaration excerpt against its stored symbol digest +when that digest is present. Verification covers the complete recorded byte span, +including bytes omitted from a truncated excerpt. A missing digest yields an +explicitly unverified current excerpt; a malformed or mismatching digest prevents +source output. File containment, symlink checks and bounded reads apply in both +cases. Digest agreement establishes agreement with the graph's recorded bytes; +it does not authenticate the graph or establish that its semantic claims are true. + +Member-source explanations use the same contained source reader for every +excerpt. Discovery, metadata, retained source bytes and verification attempts +have independent bounds. Membership comes from recorded directed structural +relationships; inferred/deferred records, calls and references are excluded. +Source failures and budget exhaustion remain explicit. Missing digests never +become verified merely because an owner-to-member relationship is present. diff --git a/benchmarks/agent_query/COVERAGE_PLAN.md b/benchmarks/agent_query/COVERAGE_PLAN.md new file mode 100644 index 000000000..a5bd581f1 --- /dev/null +++ b/benchmarks/agent_query/COVERAGE_PLAN.md @@ -0,0 +1,288 @@ +# Real-repository comparison coverage + +This plan extends the existing paired runs to the user's requested query, +ask, node, path, caller/callee, cluster/community, and god-node surfaces. +It is a work plan, not a completed evaluation or a superiority claim. + +## Repository panel + +Keep the same clean, pinned source on both sides. The current panel includes +Cobra (Go), Flask (Python), Gson (Java), Zod (TypeScript), and Axum (Rust), +plus the separate fd (Rust) source-first sample. Their commits and source roots +are recorded in `suite_v2.toml`, `suite_fd.toml`, and each captured run. +Use additional independently selected repositories for confirmation after +improving on these development cases. Do not relabel used questions as held out. + +### Confirmation panel A + +`suite_heldout_a.toml` selects Chi, Click, jsoup, Redux, and WalkDir as additional +small-library repositories across the same five languages. Selection is +purposive, not random or representative. Commits and reviewed-file hashes are +recorded in `heldout_panel_a.json`; the Compass binary is frozen at the prior +hub-evidence checkpoint. No output on these repositories is used to select +questions. Commit all 55 questions, 21 edge-pair witnesses (18 positive call +occurrences plus five direct-edge negatives), and ten forward/reverse path +witnesses before extracting or querying either product. + +Each repository covers two declaration lookups, callers, callees, forward and +reverse navigation, file connectivity, ambiguity, missing symbols, bounded +natural query, and an incoming-call `ask` task. The CLI runner reports text +recall proxies. Independent source/graph audits must check identity, relation, +direction, and occurrence multiplicity separately. A negative edge needs both +endpoints resolved; missing extraction cannot pass as absence. Source roles, +MCP/community workflows, directed paths, and broader design judgments remain +separate work. Preserve first-run results; after tuning on this panel, treat it +as development and select another holdout for confirmation. + +## Question and evidence matrix + +Each new question must record its exact source witness, expected outcome, +per-tool operation, bounds, and judgment before executing that question. +No output-derived oracle correction may silently replace an earlier result. + +| Surface | Questions on every language | Primary correctness evidence | +| --- | --- | --- | +| Node lookup | Locate an exact declaration; distinguish same-named declarations; reject an absent symbol | Exact file, declaration start, terminal name, and owner; ambiguity is not a successful guess | +| Explain | Explain the declaration's role, source, incoming and outgoing relationships | Source-reviewed statements and exact endpoint identities; score unsupported extra claims as well as omissions | +| Callers | Identify direct callers, repeated call sites, and a same-named wrong-owner negative | Source call occurrences, caller-to-callee direction, multiplicity, and provenance | +| Callees | Identify direct targets, including constructors, loop receivers, and callbacks | Complete reviewed local target set for the selected function; unresolved dynamic targets stay explicit | +| Native path/walk | Find a directed call path and an undirected navigation path; handle ambiguity, disconnection, and bounds | Ordered adjacent edges, directions, source-supported occurrences, and explicit incomplete/limit outcomes | +| Natural query | Answer a source-level task with a fixed answer budget and permitted continuations | Reviewed relevant facts, unsupported returned facts, and full workflow cost | +| Ask/routing | Ask who calls a declaration, what it calls, and how two declarations connect | Same semantic witnesses as direct operations; additionally check requested direction and operation selection | +| Community lookup | Identify a selected node's community and enumerate its bounded membership | Exact identities and membership in that tool's captured graph; this is graph consistency, not source correctness | +| Cluster summary | Describe major functional groups and the connections between them | Separately reviewed source responsibilities and boundary relations; arbitrary cluster IDs/names are never gold | +| God nodes/hubs | Return top-N connected source symbols and explain their links | Independently recomputed degree/eligibility on the captured graph, plus source review of returned declarations/edges | +| Design diagnosis | Assess whether a candidate mixes responsibilities or merely has many users | Explicit source-based judgments and counterexamples; degree alone cannot establish a god-object defect | + +## Equivalent operations + +The installed versions are inspected through their own help before selecting +commands. The existing suite pairs `explain`, `path`, natural `query`, +`callers`/`affected`, and `callees`/`explain`. Both sides use the same relation +direction and comparable depth/budget wherever both expose those controls. + +Compass exposes natural `ask`, typed `search`, `architecture`, and the MCP +tools `get_neighbors`, `get_community`, `god_nodes`, and `graph_stats`. +Graphify 0.9.67 exposes CLI `god-nodes --top N --json`; its inspected CLI help +does not advertise dedicated `ask` or community-membership commands. +Further installed-source inspection and `python -m graphify.serve --help` +confirm a public MCP server in `graphify.serve`, including `get_neighbors`, +`get_community`, `god_nodes`, and `graph_stats`. These can be compared directly +with the matching Compass MCP tools. The currently pinned Graphify environment +lacks the optional `mcp` SDK. An isolated `graphifyy[mcp]==0.9.67` environment +now provides it; all 227 compared Graphify package files match the original +installation. The environment manifest pins its separate dependencies. Actual +MCP initialize/tools-list handshakes succeeded for both tools on the retained +Cobra graphs, confirming all four named tools. The subsequent `suite_mcp.json` runs exercise these interfaces across all five +languages. Their graph-consistency results are recorded in the audit report; +source-level cluster quality and god-object design judgments remain pending. +Graphify community lookup accepts an +explicit token budget; account for that bound and any truncation separately. +Lack of one CLI command name does not establish lack of the capability. + +Where the available workflows use different interfaces, retain all requests, +startup/setup work, output bytes, follow-ups, and errors. Report protocol +overhead separately from answer content. A developer adapter may invoke a +documented public operation; it must not synthesize an answer by reading the +graph on behalf of only one tool. Independent graph inspection belongs to the +oracle, not the measured answer path. + +Native-only structural runs use no model-generated edges or community labels +on either side. A future model-assisted comparison requires a separate arm +with the same model, credentials policy, budget, and complete cost accounting. +Do not compare one tool's model-assisted output with the other's native output. + +## Scoring and acceptance + +### Hub explanation and source-role review + +The post-output `hub_role_reviews.json` census covers all original fifty hub +entries per tool. Manually assign declaration/container roles only for exact +returned identities or globally unique displayed labels. Preserve unidentified +entries as unknown; do not choose the candidate that fits its degree. Verify +the pinned source commit, whole-file hash, exact anchor, and excerpt. These are +source-role descriptions, not god-object labels or a representative precision +sample, and each tool returns a different set. + +For the connectivity improvement, independently recompute each returned hub's +incident record total, self-loops, and bounded per-relation direction counts. +Distinguish these from distinct-pair ranking degree. Keep undirected artifacts +undirected. Check both structured values and the matching text block. An absent +summary is unavailable in that response, not an incorrect answer; neither a +neighbor follow-up workflow nor Graphify's separate CLI is excluded by this +finding. Do not turn summary availability into a cross-tool accuracy score. + +### Source-defined community task pairs + +`community_task_pairs_panel_a.json` freezes 30 declarations and their source +mechanisms in commit `234753eb`, before this task-pair membership audit. Each +repository has three task pairs. `community_tasks.py` audits all 15 within-task +and 60 cross-task pairs per tool on the existing native graph artifacts. +It requires exact declaration starts and names; missing, ambiguous and +unassigned endpoints stay unresolved. Invalid identities and exceeded bounds +are errors. + +`community_task_pairs_review_panel_a.json` records 13/15 collaborator pairs +co-located for Compass and 12/15 for Graphify. Cross-task co-location is 18/60 +and 12/60. These are separate granularity observations, not a combined quality +score. All five split collaborator pairs have the source-supported call edge. +Click's help formatting deliberately uses its terminal-width helper, and +WalkDir's different tasks share one iterator: cross-task grouping alone is not +a design defect. Native boundary navigation, broader source responsibilities, +independent review and god-object labels remain open. + +### Responsibility explanation evidence + +`responsibility_questions_panel_a.json` freezes five questions and 20 source +facts in commit `232608ee`. The first arm uses identical natural queries, a +requested 2,000-token budget and no follow-ups on the paired final Java graphs. +`responsibility_review_panel_a.json` records full-fact coverage separately from +explicit answers. Partial graph facts and useful source locations do not imply +the complete implementation mechanism. Extra graph assertions require their +own source review before any precision claim. Equal requested budgets do not +imply equal actual output sizes. This reused-repository development arm is not +a god-object oracle. + +`responsibility_source_followup_panel_a.json`, frozen in `62f60b29`, adds one +source window per response, selected only from returned exact-subject anchors. +The matching review records 11/20 sufficient facts for Compass and 13/20 for +Graphify, with 35,692 source bytes each. Graphify's Redux implementation anchor +provides two additional facts under the frozen earliest-anchor policy; Compass +also returns preceding overload declarations. Keep that policy effect and all +declaration ambiguities visible. This measures available source evidence, not +native explanation quality; further reading and disambiguation remain open. + +`literal_identifier_development_review.json` records the resulting retrieval +fix and its fixed-graph reruns. Literal compound identifiers gain exact-name +priority; duplicate declarations remain ambiguous across ranking evidence. +The unchanged suite remains 49/55 versus 46/55 on its recall proxy. Keep the +anchor diagnostics separate from explanation completeness and retain the +single-word subject failures. + +### MCP path diagnostics + +`suite_mcp_paths.json` covers prepared exact-ID navigation, reverse traversal, +hop cutoffs, missing/ambiguous endpoints, and disconnected pairs. The initial +capture occurred before its planned registration commit; its archived +preregistration claim is superseded by the development designation in the +audit report. `suite_mcp_path_labels.json` is a separate post-diagnostic arm +using the same positive endpoints and bounds with each tool's display labels. +Graphify's public path input description advertises labels/keywords, so the +label arm is necessary context for the ID failures and must be reported. + +Both arms use undirected navigation with identical external bounds. Audit +actual ordered identities, relations, direction, minimum distance, and source +anchors; distinguish topology consistency from reviewed source-route evidence. +Do not substitute expected IDs for ambiguous returned labels. A depth-limited +miss remains incomplete for a global-disconnection question. These development +arms do not complete directed call-flow, representative edge precision, path +occurrence recall, or held-out confirmation requirements. + +### Hub navigation diagnostic + +The label-identity gap found in the first MCP run motivates a separate +development diagnostic. Preserve that run and its label-only results. For +each of the ten hubs returned on each of the five repositories, issue one +`get_neighbors` follow-up using only the returned exact ID when available, +otherwise its returned label. Do not read a graph to substitute an ID for +either product. Both products get the same one-follow-up allowance and the +existing full-enumeration bounds. Explicit ambiguity is safe but does not +complete direct navigation. This diagnostic does not measure workflows with +additional disambiguation steps or Graphify's separate CLI JSON hub workflow. + +The independent oracle may use the captured graph to verify exact identity, +degree, source anchors, and the multiset of displayed direction/neighbor-label +pairs after grouping by distinct neighbor. It must not resolve identity using +the expected degree. Unfiltered neighbors may select one relation per neighbor; +this diagnostic does not score complete parallel-relation or occurrence recall. +Capture every response, failure, and output byte. Source-based design quality, +complete top-N eligibility, and ranking correctness remain separate questions. + +- Publish category-level results and every failure, including competitor wins. +- Keep source correctness, graph consistency, task availability, and output + efficiency separate. No single combined score may hide a precision failure. +- A text anchor pass does not certify all statements in an answer. Add source + review of returned edges/owners before making precision claims. +- Score community partition metrics separately from functional usefulness. + Different valid partitions are possible; matching a package directory is at + most a structural proxy, not proof of cohesion or architectural quality. +- Compare tokens on the same successful questions and retain total continuation + cost. Bytes/4 estimates must stay labeled as estimates. +- Repeated release-build timings on quiet, matched inputs are required for + speed claims. Concurrent debug runs provide correctness evidence only. +- Existing fixes and development-suite leads do not satisfy the complete + objective. God-object judgments and the additional community/ask surfaces + still require measured evidence across the repository panel. + +### Community-to-neighbor workflow + +`community_navigation_panel_a.json` freezes a development workflow over all 15 +source-defined tasks. Prepare each starting community symmetrically, then choose +one calls-neighbor lookup solely from the returned member label matching the +seed file and terminal symbol. Retain duplicate rows and stop on multiple +distinct selectors. Score ambiguity, displayed adjacency and exact identity +separately; never use the expected neighbors to identify an ambiguous seed. +Fourteen pairs require a direct call; Chi's request-ID pair shares context state. +Both tools receive common external 60-second/1-MiB response bounds, with +Graphify's generous explicit token allowance disclosed. Preserve complete +transcripts and startup overhead. This is a capability diagnostic, not an +output-efficiency, source-precision or whole-architecture score. + +The same frozen workflow is rerun after the exact-first MCP neighbor fix in +`8f5eb5e5`. `neighbor_exact_match_review_panel_a.json` records Compass seed +identity support improving from 5/15 to 8/15 and collaborator support from 4/14 +to 6/14. Graphify remains at 9/15 and 8/14. All graph hashes, selected labels +and community texts stay unchanged. Keep the two member-selection ambiguities, +five genuine neighbor ambiguities and missing WalkDir call visible. A later +workflow should use each tool's documented source-qualified or exact-ID handles; +this label-only arm is not a best-possible agent navigation score. + +### Source-anchored public navigation + +`community_identity_navigation_panel_a.json` freezes a stronger two-follow-up +arm over the same tasks: community membership, one public resolver, then one +neighbor lookup using only the returned source-matched ID. Compass uses typed +`search_symbols`; Graphify uses `get_node` with its documented `path::symbol` +form. Both receive the exact task file, declaration start and terminal symbol. +Missing, ambiguous, mismatched or truncated resolver evidence stops navigation. +Report validated requested IDs separately from name-only neighbor output and +from exact collaborator identity. Different native controls and projected +fields remain explicit; this is neither equal-token nor held-out evidence. + +The final `community-identity-navigation-02` capture resolves the exact seed ID +and completes neighbor lookup on all 15 tasks for both tools. The review records +13/14 versus 14/14 displayed collaborators, with three ambiguous target labels +on each side. The remaining direct-call gap is Compass's WalkDir indexed +receiver call. Keep explicit destination identity, source precision and resolver +output cost as separate next questions; existing APIs already overcome the +member-label ambiguities with this extra lookup and supplied source coordinates. + + +### Rust indexed-receiver development correction + +`rust_index_receiver_development_registration.json` freezes the five-repository +rebuild, complete changed-call review and unchanged 15-task public workflow. +`rust_index_receiver_development_review.json` records one source-backed added +WalkDir call, with no other node/edge changes or changed community assignments. +The other four Compass graphs and all Graphify graphs are byte-identical. +Source-assisted collaborator labels improve from 13/14 to 14/14, tying +Graphify; unambiguous target labels improve from 10/14 to 11/14, also a tie. +Keep the three target-label ambiguities, supplied seed coordinates, reused +Graphify graphs, actual payload costs and development-only scope explicit. +Final unchanged-source validation passed, including the native baseline and +production fixture qualification. This does not establish overall superiority +or population precision. + + +### Explicit neighbor identities + +`neighbor_identity_development_registration.json` freezes the unchanged-graph +five-repository comparison; `neighbor_identity_development_review.json` records +the verified capture. Compass now returns the exact reviewed destination ID +in all 14 direct neighbor responses. Graphify does not emit neighbor IDs, but +with one additional source-anchored public resolver call **both resolve 14/14**. +Label presence remains 14/14 and global target-label uniqueness remains 11/14 +for each. All 15 Compass full-record projections match their graphs, preserving +181 record appearances. This is graph consistency, not source precision for all +records. The extra source coordinates, richer Compass payload cost and reused +development scope remain explicit; no overall superiority claim follows. diff --git a/benchmarks/agent_query/README.md b/benchmarks/agent_query/README.md index 60663ae1d..a1af7248f 100644 --- a/benchmarks/agent_query/README.md +++ b/benchmarks/agent_query/README.md @@ -1,15 +1,22 @@ # Agent query evaluation -`benchmarks/agent-query` measures how well Compass answers the agent questions +`benchmarks/agent_query` measures how well Compass answers the agent questions in its suites compared with Graphify on the same pinned checkouts. It is developer-side tooling: Compass never runs it, and it never installs Graphify. -Two suites share the harness: +[`COVERAGE_PLAN.md`](COVERAGE_PLAN.md) tracks the broader real-repository +question/evidence matrix, including ask, communities, clusters, and god nodes. +The audit report distinguishes completed checks from surfaces still awaiting +source or design-quality judgments. + +Four suites share the harness: | Suite | Questions | Shape | | --- | ---: | --- | | `suite.toml` | 47 | The first five-repository suite, including Compass's compact and paged projections | | `suite_v2.toml` | 50 | A blackbox-fair extension: same questions for both tools, default output forms, no tool-specific projections | +| `suite_fd.toml` | 12 | Separate pinned `sharkdp/fd` sample, recorded from source before either tool's first extraction/query run | +| `suite_ask.toml` | 10 | Same natural-language caller/callee questions and 2,000-token budget for Compass `ask` and Graphify `query` across five languages | `suite_v2.toml` states its fairness contract inline and keeps it in the rows: both tools are blackboxes over the same pinned checkout, every oracle is read @@ -19,6 +26,14 @@ closest documented operation on each side, and continuations are each tool's own Graphify because Compass `path` searches relationships in both directions. A row that a tool cannot answer fails and is reported as a recall gap. +Compass continuation requires one `Pagination:` footer with a nonterminal, +previously unseen cursor. `next=none` ends pagination; `next=` text in source +excerpts or prose does not authorize a follow-up. Multiple footers or a repeated +cursor stop continuation while preserving the unmet answer requirements. +Both LF and CRLF output are supported. Query-only replays must use each pinned +source checkout as their working directory, matching the full runner, so +digest-verified source excerpts remain available. + Name-resolution rows (`ambiguity`, `negative`) use Graphify's `explain`, the command that reports its candidate list for an ambiguous name and its explicit no-match, rather than `query`, which traverses the neighbourhood of a single @@ -27,6 +42,12 @@ that, one tool's fixed metadata can consume the whole page. No v2 row repeats a question from the first suite; the audit compares repository, kind and addressed symbol across both files. +`suite_ask.toml` reuses reviewed caller/callee facts from v2 to compare the +natural-language interface. These are ten interface checks, not ten additional +independent source judgments. Both sides receive identical question text and +one 2,000-token response budget, with no continuations. The initial scorer checks +selected-fact recall; extra statements still need source review for precision. + The suite covers five real repositories in five languages: | Repository | Language | Focus | @@ -37,28 +58,28 @@ The suite covers five real repositories in five languages: | `colinhacks/zod` | TypeScript | schema parse and safe-parse helpers | | `tokio-rs/axum` | Rust | routing and service dispatch | -Both suites contribute source-reviewed questions across `explain`, +The first two suites contribute source-reviewed questions across `explain`, `explain_source`, `callers`, `callees`, `impact`, `path`, `file_path`, `ambiguity`, `negative`, and `broad` (the first suite adds the `brief`, `brief_callers`, and `paged_callers` projections). Every question declares the exact per-tool argument vector, the expected outcome, and the file, line, or symbol anchors the reviewer read in the pinned checkout. Every repository also -declares graph anchors that both graphs must contain as source-backed nodes. +declares reviewed declarations to look for in each graph. ## Run ```bash -python3 benchmarks/agent-query/runner.py doctor \ +python3 benchmarks/agent_query/runner.py doctor \ --compass-binary /path/to/compass \ --graphify-binary /path/to/graphify \ --source cobra=/Volumes/Workspace/Github/spf13/cobra \ --source flask=/Volumes/Workspace/Github/pallets/flask \ --source gson=/Volumes/Workspace/Github/google/gson \ --source zod=/Volumes/Workspace/Github/colinhacks/zod \ - --source axum=/Volumes/Workspace/Github/tokio-rs/axum + --source axum=/Volumes/Workspace/Github/tokio-rs/axum/axum -python3 benchmarks/agent-query/runner.py run \ - --suite benchmarks/agent-query/suite_v2.toml \ +python3 benchmarks/agent_query/runner.py run \ + --suite benchmarks/agent_query/suite_v2.toml \ --workspace /Volumes/Workspace/CrabData/compass-evaluations/agent-query \ --compass-binary /Volumes/Workspace/crabbuild-target/compass/release/compass \ --graphify-binary "$(command -v graphify)" \ @@ -66,22 +87,65 @@ python3 benchmarks/agent-query/runner.py run \ --source flask=/Volumes/Workspace/Github/pallets/flask \ --source gson=/Volumes/Workspace/Github/google/gson \ --source zod=/Volumes/Workspace/Github/colinhacks/zod \ - --source axum=/Volumes/Workspace/Github/tokio-rs/axum + --source axum=/Volumes/Workspace/Github/tokio-rs/axum/axum ``` `--suite` defaults to `suite.toml` beside the runner. Passing `suite_v2.toml` runs the 50 blackbox questions instead. -`doctor` fails when a checkout is not at the suite's pinned commit. `run` +`doctor` fails unless the source is a clean working checkout at the suite's +pinned commit and contains the reviewed files. Axum's suite uses its `axum/` +package as the source root, not the monorepo root. `run` builds `compass extract --code-only --no-viz --store sqlite` and `graphify extract --code-only` once per repository under -`WORKSPACE/artifacts`, then writes `run.json` and `REPORT.md` under +`WORKSPACE/runs//artifacts`, then writes `run.json` and `REPORT.md` under `WORKSPACE/runs//`. +Every run builds fresh graphs and refuses an existing run ID. The retained +`--force` flag is a compatibility no-op. Prior artifact directories are never +silently reused or removed. The runner checks the pinned commit and clean Git +status before extraction and after queries, records graph digests and build +logs, and checks executable identity before and after the run. The executable +hash covers only that file: a Python launcher hash does not pin its imported +packages. Use an immutable environment when comparing installations. + ## Metrics -- **Correctness**: bounded stdout is judged against the suite's anchors. A - `negative` question passes only with an explicit no-match signal, and a +### Source-defined community task diagnostic + +`community_task_pairs_panel_a.json` records 30 source declarations grouped into +15 collaborator pairs across Chi, Click, jsoup, Redux and WalkDir. Run the +artifact audit against the registered `java-varargs-panel-a-02` capture: + +```bash +python3 -m benchmarks.agent_query.community_tasks \ + --registration benchmarks/agent_query/community_task_pairs_panel_a.json \ + --run /path/to/java-varargs-panel-a-02/run.json \ + --output /path/to/new-community-audit.json +``` + +The output path must be new. The auditor verifies source commits, file hashes, +exact witness text and graph hashes, then records exact declaration identity +and community membership. Missing or ambiguous anchors cannot pass as separate +communities. It reports within-task co-location separately from cross-task +co-location, including same-file and cross-file strata. Community IDs are never +compared across tools. This measures grouping granularity on a small development +panel, not native answer quality, ideal architecture or god-object defects. + +The [review](community_task_pairs_review_panel_a.json) retains every selected +declaration and the five source-supported calls crossing community boundaries. +Ten focused auditor tests cover ambiguity, missing assignments, identity, +bounds, zero-valued community IDs and ordering invariance. + +### Query metrics + +- **Correctness**: stdout with an accepted exit status and without timeout or + output-limit failure is judged against the suite's anchors. + Graphify `explain` deliberately returns exit 1 for ambiguity: that status is + accepted only for a pick-list question with its explicit ambiguity header and + at least two candidate IDs; the source-anchor oracle must still pass. Other + nonzero exits fail. A `negative` question passes only with an explicit + no-match signal, and a `pick_list` question passes only when the answer shows at least two distinct candidates and at least one reviewed candidate for the name; it deliberately does not require a specific pair, because a bounded page can only show part @@ -110,13 +174,934 @@ builds `compass extract --code-only --no-viz --store sqlite` and Graphify-only, and neither. - **Latency**: wall-clock milliseconds per tool invocation, including follow-ups. -- **Graph quality**: node and edge counts, source-backed node ratio, dangling - edges, duplicate IDs, and how many reviewed anchors the graph contains. +- **Graph coverage metadata**: node and edge counts, source-located node ratio, + dangling edges, duplicate IDs, and reviewed declaration anchors. Metadata + presence does not verify that the source or relationship is correct. + `compass.agent-query-run/2` uses `exact-file-start-terminal-symbol/1` on + both tools: exact repository-relative file, exact declaration start line, + and case-sensitive terminal symbol name. Qualification separators and + parameter lists are removed symmetrically; the pinned line distinguishes + overloads. This metric does not verify owner or parameter-type accuracy. + Enclosing module spans and unrelated names at the right line do not count. + Each graph metric records `anchorPolicy` and `missingAnchors` for review. + Historical v1 scores used file/line coverage without symbol identity and + must be recalculated before comparison with v2 scores. ## Limits +### Source-grounded path diagnostics + +The five positive `path` rows have a separate, stricter audit: + +```bash +python3 -m benchmarks.agent_query.path_audit \ + --run /path/to/workspace/runs/run-id \ + --output /path/to/new-path-audit.json +``` + +`path_witnesses.json` records reviewed declaration and occurrence lines in the +pinned source. The auditor checks the printed hop chain, unique node identity, +relation, direction, captured graph edge, and source occurrence. It refuses +ambiguous display labels instead of using the expected answer to select a node. +It verifies source state, suite and graph digests, and records response, witness, +and auditor hashes. The output must be new; earlier reports are retained. + +These witnesses were reviewed after observing output, so they are development +diagnostics, not held-out accuracy estimates. Gson accepts either an +instantiation at its construction line or a reference at its return-type line; +the report preserves the relation and reviewed site. Zod's file-containment +route proves navigation only. Neither is automatically credited as a call path. +The auditor currently requires successful, single-response executions of these +positive rows; it does not score negative or truncated path outcomes. + +### Source-first direct-call sample + +`suite_fd.toml` and `edge_witnesses_fd.json` were committed together before the +first run on `sharkdp/fd` at `b422e5d8c9cffaa1ae43ba68e7b97a60fb3e8ae5`. +The 12 questions and 10 positive direct-call pairs were selected by source +inspection. The positive pairs contain 16 call occurrences; two additional +pairs must be absent. This is a selected sample, not a representative held-out +corpus or an estimate of whole-repository precision/recall. + +```bash +python3 benchmarks/agent_query/runner.py run \ + --suite benchmarks/agent_query/suite_fd.toml \ + --workspace /path/to/evaluations --run-id fd-fresh \ + --compass-binary /path/to/compass --graphify-binary /path/to/graphify \ + --source fd=/path/to/pinned-clean-fd + +python3 -m benchmarks.agent_query.edge_audit \ + --run /path/to/evaluations/runs/fd-fresh \ + --witnesses benchmarks/agent_query/edge_witnesses_fd.json \ + --output /path/to/new-edge-audit.json +``` + +The edge auditor requires both exact declaration identities even for negative +pairs, checks semantic direction and relation, and separately scores relationship +presence and occurrence coverage. A duplicate at one line cannot recover a +missing occurrence at another. Source files, captured suite/graph digests, +pinned checkout state, and auditor code identity are checked. Reports record +missing and unexpected occurrences and require a new output path. Occurrence +matching covers start lines, not column accuracy or runtime execution. + +`edge_witnesses_fd_diagnostic.json` adds five **post-output** checks for the +missing loop calls and constructor-owner mistake discovered in that run. Keep +those results separate from the preregistered sample. `path_witnesses_fd.json` +likewise audits the two positive path responses after output review using the +existing path auditor's `--witnesses` option. It verifies a compatible graph +occurrence; the text path does not identify a particular parallel edge. + +### Interpretation + Anchor matching is a deterministic text-recall proxy over bounded output, not -an independent precision oracle. The suite is a focused five-repository -sample; it does not estimate population-wide accuracy. Graphify prints an +an independent precision oracle. The suites are focused source-reviewed +samples; they do not estimate population-wide accuracy. Graphify prints an installation warning on stderr, which `run.json` records separately and the token metric excludes. + +Each subprocess stream is capped at 16 MiB during capture. Exceeding either +cap terminates the process group and fails the observation; truncated text is +never scored as a successful response. An invalid Compass snapshot pointer +fails preparation instead of selecting an arbitrary unpublished snapshot. + +## Held-out confirmation panel A + +`suite_heldout_a.toml` contains 55 source-reviewed CLI questions on five new +pinned repositories. `heldout_panel_a.json` records selection scope, source +hashes, and the frozen Compass build. Run with the normal `runner run --suite` +interface and explicit `--source NAME=PATH` for Chi, Click, jsoup, Redux, and +WalkDir; keep all generated artifacts outside the source checkouts. + +Run `edge_audit` separately with each `edge_witnesses_heldout_NAME.json`, and +`path_audit --witnesses benchmarks/agent_query/path_witnesses_heldout_a.json` on +the captured run. These witnesses are registered before either tool executes +the panel. The question score remains a text-recall proxy; report independent +identity/direction/occurrence checks and all failures separately. Repository +selection is purposive, so this does not estimate population accuracy. + +The Go receiver development follow-up is recorded separately in +`go_receiver_development_review.json`. Its complete relationship-delta review +retains the intermediate Cobra callback regression. The additional Chi +compression-interface witness lives in +`edge_witnesses_go_receiver_chi_diagnostic.json`; it is a post-output diagnostic, +not an addition to the original held-out score. Run it with the same +`edge_audit --run ... --witnesses ... --output ...` interface. + +The first frozen results and post-output review are recorded in +`heldout_panel_a_review.json` and the main code-graph intelligence audit report. + +`suite_mcp_panel_a.json` extends the same frozen panel graphs to 60 MCP requests +after observing the CLI results. It is a development extension, with questions +committed before MCP execution. `mcp_panel_a_review.json` records graph-consistency +and payload results, and `hub_role_reviews_panel_a.json` records the complete +post-output source-role census. Neither establishes functional community quality +or god-object defects. `edge_witnesses_chi_route_hierarchy_diagnostic.json` +separately records an unsupported Compass containment edge discovered through +the hub review; missing Graphify route identities cannot pass that negative. +Keep the original Click edge witness: its missing second `_wrap_io_open` site +is corrected only in `edge_witnesses_heldout_click_corrected.json`. Report both +registered and corrected diagnostic scores. The path auditor retains nonzero, +timed-out, and unsupported multi-response executions as failed rows; it still +rejects source/graph provenance drift. Later product tuning on panel A is +**development**, not another held-out confirmation. + +## Shared MCP comparison + +`suite_mcp.json` preregisters 29 questions per tool across the same five-language +panel: graph statistics, top-ten hubs, largest-community enumeration, absent +communities, call neighbors of a reviewed declaration, and four ambiguous +neighbor lookups. These use public MCP tools on both sides. Exact input IDs and +community IDs are prepared symmetrically from retained graphs; this preparation +is not scored as node retrieval. + +```bash +python3 -m benchmarks.agent_query.mcp_compare \ + --run /path/to/captured/five-repository-run \ + --output /path/to/new-mcp-run \ + --compass /path/to/frozen/compass \ + --graphify-python /path/to/isolated-graphify-mcp-env/bin/python \ + --graphify-environment /path/to/graphify-mcp-environment.json +python3 -m benchmarks.agent_query.mcp_audit \ + --run /path/to/new-mcp-run --output /path/to/new-audit.json +``` + +The stdio collector currently requires POSIX pipe selectors (macOS/Linux); it +fails explicitly before starting a server on unsupported platforms. + +The environment manifest records `files` with package-relative `file` and +`mcpEnvironmentSha256` entries plus the installed package/version list. The +collector validates package hashes before and after collection. It records +executable, graph, input, and collector hashes, JSON-RPC transcripts, errors, +text bytes, and timing. The auditor verifies captured answers against those +transcripts and reports actual response-wire bytes separately from text bytes. +The original collector's `protocolBytes` field estimates JSON serialization +size; use the auditor's `wireResponseBytes` for captured transport size. + +Full-enumeration questions use Graphify's large explicit token allowance and +Compass's whole-result interface with common external byte/time limits. This +arm does not claim equal 2,000-token answers. Community membership is compared +with each tool's own partition, not an arbitrary shared cluster number. +Neighbor checks cover displayed direction/label/relation triples and report +ambiguous labels separately. Hub checks recompute displayed degrees for +uniquely identified labels; they do not prove complete ranking eligibility, +source correctness, functional cohesion, or god-object design quality. + +### Hub explanation and source-role diagnostics + +`hub_evidence_audit.py --run /path/to/mcp-capture --output /path/to/new-audit.json` +checks each returned hub's optional connectivity summary against its own graph. +It distinguishes incident records, ranking degree, direction, self-loops, and +bounded relation rows. Absent summaries are unavailable, not incorrect answers; +this diagnostic does not measure a neighbor/CLI follow-up workflow. It must not +be used as a cross-tool precision score on the different returned hub sets. + +The post-output `hub_role_reviews.json` records manual declaration-role reviews +of the original MCP panel, preserving the 13 ambiguous Graphify identities as +unknown. Pass `--reviews benchmarks/agent_query/hub_role_reviews.json` only with +the original digest-matched capture. The auditor checks pinned source commits, +whole-file hashes, exact anchors, and excerpts. This validates the review's +source provenance; it does not automate semantic role or design-quality judgment. + +### MCP path diagnostics + +Pass `--inputs benchmarks/agent_query/suite_mcp_paths.json` to the same collector +for 28 questions per tool: forward/reverse minimum-hop routes, hop bounds, +missing and ambiguous endpoints, and disconnected pairs. Use +`python3 -m benchmarks.agent_query.mcp_path_audit --run /path/to/new-mcp-run +--output /path/to/new-path-audit.json` to check actual ordered identities, +relations, directions, and minimum hops against the stored graphs. Structured +Compass results must also preserve node source anchors and edge identities. +Reviewed source-route witnesses are reported separately from graph consistency. + +Run `suite_mcp_path_labels.json` as a separate input for the same positive +endpoints and bounds using display labels (15 questions per tool). This arm +was added after the ID diagnostic exposed Graphify endpoint substitution; +Graphify's public tool describes label/keyword inputs. Report both arms, +including competitor wins. Neither is held-out evaluation. All comparisons +request undirected navigation explicitly for Graphify; these are not evidence +of directed call-flow quality. + +The first ID diagnostic was captured before its planned registration commit +because a preliminary test command failed. Its archived input incorrectly says +preregistered; the development designation in the current manifest and audit +report supersedes that claim. Preserve original artifacts. Disconnected pairs +include source files/modules as well as declarations. A search that reaches +its depth or work bound has not proved global disconnection and must remain an +incomplete answer to that question. + +### Community-to-neighbor development workflow + +`community_navigation_panel_a.json` freezes the one-follow-up label baseline +before capture in commit `7a6d6c97`. Run it on the same paired graph manifest: + +```bash +python3 -m benchmarks.agent_query.community_navigation \ + --policy benchmarks/agent_query/community_navigation_panel_a.json \ + --registration benchmarks/agent_query/community_task_pairs_panel_a.json \ + --run /path/to/paired-graph-run/run.json \ + --output /path/to/new-community-navigation-run \ + --compass /path/to/frozen/compass \ + --graphify-python /path/to/isolated-graphify-mcp-env/bin/python \ + --graphify-environment /path/to/graphify-mcp-environment.json +``` + +Starting community IDs are prepared symmetrically. Follow-up labels use only +the community text and public seed file/symbol. All matching rows are retained; +multiple distinct labels stop the workflow. Graphs are used for scoring only +after requests, never to substitute an expected follow-up ID. One request has +60 seconds and 1 MiB of external response allowance; sessions are bounded at +64 MiB. Graphify receives an explicit generous token budget; Compass exposes a +whole-result interface. Those native controls are not equal token budgets. + +The matching review records seed identity support on 5/15 Compass versus 9/15 +Graphify tasks, and direct collaborator support on 4/14 versus 8/14. These are +reused-repository development results for one particular workflow. Broader +matching, duplicate member labels and a missing WalkDir call explain distinct +Compass failures. Additional disambiguation calls and richer member handles +remain unmeasured. Report bytes alongside these unequal successful sets, not as +a matched-success efficiency claim. + +`neighbor_exact_match_review_panel_a.json` records the unchanged workflow after +MCP neighbor lookup began preferring exact matches. Compass improves to 8/15 +seed identities and 6/14 direct collaborator identities; Graphify stays at 9/15 +and 8/14. The ten graph hashes, follow-up labels, community texts and all Graphify +neighbor texts remain identical. Missing/extra neighbor diagnostic arrays now +sort deterministically; older captures need order normalization for those two +arrays only. Genuine collisions, two ambiguous community selectors and the +missing WalkDir call remain open. + +### Source-coordinate-assisted resolver workflow + +Use `community_identity_navigation_panel_a.json` as `--policy` with the same +`community_navigation` collector. It is frozen in `f660408b`. After community +membership, Compass uses structured `search_symbols` results and Graphify uses +`get_node` with its documented `path::symbol` selector. Both policies receive +the exact seed file, declaration start and terminal symbol, then pass only a +uniquely source-matched returned ID to `get_neighbors`. A search result that is +truncated or whose matching IDs remain ambiguous cannot supply the next input. +The expected collaborator is scoring-only and cannot gate requests. + +The matching review records correct seed IDs and completed neighbor lookups on +15/15 tasks for each tool. Compass displays the reviewed collaborator label on +13/14 direct-call tasks; Graphify on 14/14. Three target labels remain ambiguous +in each tool's neighbor text, leaving 10/14 and 11/14 unambiguous target labels. +The missing WalkDir call remains a graph gap. Earlier label-only failures do +not imply that these existing resolver APIs cannot complete seed navigation. + +All 90 tool calls succeed, and all 129 harness tests pass. Complete session bytes +are 785,989 for Compass and 102,213 for Graphify under this fixed policy. Compass +search returns more candidates and structured evidence; native bounds and +semantic payloads differ. Report these actual workflow costs with that context. +This is source-assisted development evidence, not natural-language discovery, +comprehensive assertion precision, or held-out performance. + + +### Rust indexed-receiver correction + +See `rust_index_receiver_development_registration.json` and +`rust_index_receiver_development_review.json` for the fixed-protocol rerun on +Chi, Click, jsoup, Redux and WalkDir. One reviewed Rust call is recovered; +the 15-task source-assisted workflow now ties Graphify at 14/14 collaborator +labels and 11/14 unambiguous target labels. Other existing graph records and +all community assignments remain unchanged. Final-source validation passed, +including the native baseline and production fixture qualification. These reused +development tasks do not establish broad precision, +god-object diagnosis or overall superiority. + + +### Explicit neighbor identities + +`neighbor_identity_development_registration.json` freezes the unchanged-graph +five-repository comparison; `neighbor_identity_development_review.json` records +the verified capture. Compass now returns the exact reviewed destination ID +in all 14 direct neighbor responses. Graphify does not emit neighbor IDs, but +with one additional source-anchored public resolver call **both resolve 14/14**. +Label presence remains 14/14 and global target-label uniqueness remains 11/14 +for each. All 15 Compass full-record projections match their graphs, preserving +181 record appearances. This is graph consistency, not source precision for all +records. The extra source coordinates, richer Compass payload cost and reused +development scope remain explicit; no overall superiority claim follows. + + +### State-access evidence prerequisite + +`state_access_development_registration.json` fixes 20 source access sites across +Go, Python, Java, TypeScript and Rust. This known-subject diagnostic inspects full +frozen graphs, not public query output or a god-object classifier. Both tools +lack all 20 selected state-contact links; Compass represents six of ten state +slots and Graphify none at the pinned coordinates. Missing edges must not be +interpreted as method independence or low cohesion. + +Replay the committed per-site results against the original external artifacts: + +```sh +python3 -m benchmarks.agent_query.state_access_audit \ + --registration benchmarks/agent_query/state_access_development_registration.json \ + --artifact-root /path/to/code-graph-audit-20260926 \ + --output benchmarks/agent_query/state_access_development_review.json --verify +python3 -m unittest benchmarks.agent_query.tests.test_state_access +``` + +Omit `--verify` with a new output path to produce a fresh report. Existing reports +are never overwritten. The verifier checks source commits and witnesses, graph +hashes, all candidate/connecting records and the auditor's own code hash. It +preserves Graphify's undirected container flag; stored endpoint order is not a +native directed-path claim. Same-agent review and purposive development scope +remain explicit. + + +### Rust field-access correction + +`rust_state_access_development_registration.json` freezes the correction and a +known-ID public neighbor control. `rust_state_access_development_review.json` +records the five-repository rebuild: Compass now supports 4/20 registered access +sites (all four Rust sites), versus Graphify's unchanged 0/20. The four other +Compass graphs are byte-identical. WalkDir adds 174 field-reference records and +changes 122 community assignments while preserving all earlier nodes/edges. +The four public neighbor requests retrieve the selected identities and anchors +for Compass; Graphify lacks those fields. This known-subject gain does not +establish overall superiority, source precision for every added edge, improved +clustering, read/write effects or god-object defects. Raw captures and replay +scripts remain under the registered external artifact directory. + + +### Java field-scope compiler challenge + +`java_state_scope_registration.json` registers 44 synthetic development cases +before either graph capture. The source fixture exercises positive field +selection, repeated occurrences, local/parameter shadowing, block and loop +lifetimes, lambda/catch/resource bindings, flow-scoped patterns, inheritance, +field hiding, static access, nested/anonymous/local classes, casts and array receivers. +The installed Corretto 17.0.8 compiler confirms all 44 source expectations: +36 positive cases, eight negative controls and 45 field occurrences. + +`java_state_scope_oracle.json` retains each compiler instruction and source line. +`java_state_scope_baseline.json` records fresh native graph captures of that same +fixture: Compass publishes 12/14 registered fields, Graphify 0/14, and neither +publishes a contact to any registered field. Both therefore miss all 45 selected +occurrences. Empty negatives do not establish positive precision. Caller +ownership is explicitly unscored by this target/line inventory. These synthetic +results do not replace the five-repository state-access comparison or establish +cohesion, god-object defects or overall superiority. + +Capture with an already installed JDK; classes and logs belong on the external +workspace volume. This compiles with processors disabled and never runs fixture +code. There is no JDK requirement for normal Compass execution or Python unit +tests. The parser is a bounded fixture-specific oracle, not a general Java +compiler front end. In particular, nonconstant fixture fields avoid constant +folding; source/class-field inventory mismatches fail, and only compiler-marked +synthetic fields are excluded from source targets. + +```sh +python3 -m benchmarks.agent_query.java_state_scope_audit \ + --registration benchmarks/agent_query/java_state_scope_registration.json \ + --java-home /path/to/installed/jdk \ + --artifacts /Volumes/Workspace/CrabData/java-scope-new/capture \ + --output /Volumes/Workspace/CrabData/java-scope-new/oracle.json +python3 -m unittest benchmarks.agent_query.tests.test_java_state_scope +``` + +To replay the committed oracle, omit `--java-home`, point `--artifacts` at the +saved `java-state-scope-01/capture` directory, and use +`--output benchmarks/agent_query/java_state_scope_oracle.json --verify`. +Add `--graph-manifest /path/to/java-state-scope-01/graphs.json` and +`--oracle benchmarks/agent_query/java_state_scope_oracle.json` to replay the +baseline into +`--output benchmarks/agent_query/java_state_scope_baseline.json --verify`. Compilation/disassembly outputs, compiler identities, source, +registration, class files and graph hashes are retained. Historical exploratory +reports remain in the external artifact directory. + +### Java field-access correction + +`java_state_access_development_registration.json` retains all 20 real-source +sites and all 44 compiler cases; `java_state_access_public_registration.json` +registers four known-ID public neighbor requests. The corrected review is +`java_state_access_development_review.json`, with source, binary, graph, +registration and verification hashes. Complete captures and replay scripts are +under external `java-state-access-02`; `java-state-access-01` is explicitly +superseded after compiler and native counterexamples exposed wrong type +precedence and duplicate-receiver selection. + +Compass recovers 8/20 real-source sites (four Java and four Rust), versus +Graphify's unchanged 0/20. The Java fixture recovers 39/45 occurrences versus +0/45, retaining six misses and all eight negative controls. A separate +post-capture check verifies the supported compiler field/enclosing-method pairs +and source ranges; the original target/line inventory still does not score +caller ownership. This is a fixture-specific consistency check, not a general +compiler oracle or blinded precision result. + +All five repositories are rebuilt; four graphs are byte-identical to the Rust +baseline. jsoup retains previous records and adds 3,896 field references. All +added records pass endpoint/occurrence checks, including independent AST +ownership ranges for 26 field initializers. Four public requests retrieve the +selected field identities and anchors for Compass, versus none for Graphify; +Compass's complete response payload is substantially larger. The unchanged +75 task-pair community outcomes show no measured improvement. These results do +not establish authored explanations, cohesion, god-object defects, exhaustive +edge precision or overall superiority. See the audit document for remaining +misses, payload costs, partition changes, warnings and exact verification. + +### Compiler source-binding census for real Java fields + +`java_real_field_registration.json` freezes all 88 Java 8 base-source files in +jsoup before compiler binding capture. It retains the existing native graph +hashes, project source pin, build configuration and cached dependency digests. +`java_real_field_review.json` records the comparison and all remaining misses. +This previously observed development repository is not held-out evidence. + +The public JDK `JavacTask`/`Trees` oracle parses and attributes source without +code generation, annotation processing or project execution. Source positions +are converted from UTF-16 to UTF-8 with split-surrogate checks. The auditor +joins source declarations without choosing between ambiguous candidates and +requires exact occurrence, target and source-owner evidence for credit. It +inventories graph contacts even when their identity or anchor cannot be verified; +line-only and unordered contacts are not upgraded to exact/directed evidence. + +Use an installed JDK 17 and the digest-matched cached dependencies named by the +registration. Every capture requires a new external artifact directory: + +```sh +python3 -m benchmarks.agent_query.java_field_capture \ + --registration benchmarks/agent_query/java_real_field_registration.json \ + --root /Volumes/Workspace/Github/jhy/jsoup \ + --java-home /path/to/installed/jdk17 \ + --classpath /path/to/jspecify-1.0.1.jar \ + --classpath /path/to/re2j-1.8.jar \ + --artifacts /Volumes/Workspace/CrabData/java-field-capture-new +python3 -m benchmarks.agent_query.java_source_fields \ + --capture /Volumes/Workspace/CrabData/java-field-capture-new/bindings.stdout \ + --manifest /Volumes/Workspace/CrabData/java-field-capture-new/manifest.json \ + --root /Volumes/Workspace/Github/jhy/jsoup \ + --graph /path/to/frozen-graph.json --tool compass \ + --output /Volumes/Workspace/CrabData/java-field-review-new.json +``` + +Use `--tool graphify` with its native graph. Add `--verify` to replay an existing +review; default output creation rejects overwrites. Offline replay and unit tests +need no JDK. Compiler errors, incomplete output, source drift and limits fail the +capture; they never become empty successful inventories. + +The final census contains 3,785 ordinary source-field references and 529 enum +constant references. Compass verifies 3,047 ordinary references and all 3,047 +returned contacts in scope; Graphify has no field-contact records. Both tools +represent all 131 enum constants but miss all 529 reference occurrences. Compass +represents 614/616 ordinary fields; Graphify represents none. The remaining +44 external fields, 55 array lengths and 31 class literals are reported +separately. Arrays and class literals are javac pseudo-fields, not source fields. + +All 44 previous scope cases and their 45 bytecode-checked occurrences agree with +this source oracle. The additional fixture covers overload ownership, Unicode, +compound uses, constant folding, intrinsics, initializers and anonymous/local +classes. All 176 auditor tests pass. Repeated full captures and offline reviews +are identical. External `jsoup-java-field-oracle-02` retains final evidence; +round 01's mixed non-source category remains explicitly superseded. These results +strengthen source-declaration precision evidence for this configuration; they +do not score read/write effects, explanations, paths, community quality or +actual god-object defects. + +### Explanation source-budget sensitivity + +`explanation_budget_registration.json` freezes the existing five repositories, +20 facts, exact identity constraints, and five source quotas before capture. +`explanation_budget_review.json` publishes every result and actual byte cost. +The latest graphs still score 14/20 versus 15/20 at 8,000 bytes. At 16,000 the +scores are 19/20 versus 18/20; at 32,000 they are 20/20 versus 18/20. Both tie +8/20 at 2,000 and 4,000. These measure source evidence, not authored answers or +overall superiority; larger quotas also have unequal actual source usage. + +`source_windows.py` plans bounded windows solely from public membership anchors +and scores the unchanged witnesses. It rejects missing anchors and unsafe paths, +retains clipped raw bytes, and applies the historical Click header allowance only +with verified identity. All 187 benchmark tests pass, including 11 new tests: + +```sh +python3 -m unittest benchmarks.agent_query.tests.test_source_windows +``` + +External `explanation-budget-01` contains the collector, independent verifier, +20 public-call transcripts, 50 source-window arms and payload deltas. All ten +8,000-byte source controls reproduce the old bytes and outcomes. The audit +explains source-order starvation, Graphify's two Redux interval gaps, and the +much larger Compass graph payloads. No production code changes in this arm. + +### Native member-name focus + +`explanation_focus_registration.json` fixes a Compass before/after experiment +using each full original question and the same 8,000-byte source quota. Product +commit `293582c3` adds optional `--source-members --member-focus TEXT`: rank +recorded callable names by distinct normalized term matches, then source order. +No source is read to rank; unmatched members and all existing limits remain. + +`explanation_focus_review.json` records a gain from 14/20 to 15/20 supported +facts, with no losses on this known development panel. Chi gains routing +implementation evidence. Literal coverage is 5/20 versus 6/20 before indentation +normalization. Actual retained source stays 28,129 bytes; stdout and charged +verification work increase. Six Redux excerpts remain explicitly unverified +because their graph nodes lack stored source digests. + +All 15 native invocations, ordering decisions, source intervals and provenance +statuses replay under external `member-focus-02`; round 01 retains the initial +compile failure. The corrected verifier retains its failed assumption about +Redux digests. Native and benchmark checks are listed in the main audit. + +This is not a paired Graphify result or authored-answer score. The separate +symmetric 8,000-byte neighbor-window control remains 14/20 versus 15/20. Remaining +WalkDir loop evidence shows why lexical name matching alone is insufficient. + +### Paired public-member focus: retain the negative result + +`paired_member_focus_registration.json` fixes a common helper and five source +quotas for both tools before capture. `member_focus.py` ranks public labels with +a frozen lexical policy; equal file/line groups use the maximum single-label +score, and ties keep source order. `source_windows.py` accepts an exact group +permutation while preserving interval ends computed from original source order. +No tool-specific kind filter, source-body ranking or private graph lookup selects +source. The helper is an evaluation policy, not a new native Graphify feature. + +At the primary 8,000-byte quota, common focus regresses **Compass 14/20 → 12/20** +and **Graphify 15/20 → 14/20**. Both trade Chi shared-state evidence for routing +evidence; Compass loses two Redux facts and Graphify loses one WalkDir fact. +The committed `paired_member_focus_review.json` publishes all five quotas and +all fact-level gains/losses. This policy is rejected as the default. Keep its +negative result separate from the native callable-span improvement. + +All 202 benchmark tests pass, including 15 new tests. All 20 fresh public calls, +153 anchors and 100 window/scoring arms replay independently; all historical +source-order controls remain identical. External `paired-member-focus-01` +retains raw responses, windows, ranked labels, source-boundary diagnosis and +verification scripts. Product code/version is unchanged in this checkpoint. + +### Longer call paths: preserve the native-label tie + +`longer_path_registration.json` and `longer_path_witnesses.json` freeze five new +source-grounded endpoint pairs in the known five-language panel. Four-to-seven +call witnesses include explicit conditional/overload semantics. The public +source-assisted workflow scores Compass **2/5** and Graphify **0/5**; a separately +registered native short-name control ties at **1/5**. Both tools return valid +six-call Click chains, through different source branches. The post-output +Graphify alternative receives source support, not frozen-occurrence credit. + +`longer_path_review.json` retains every result, source identity, occurrence, +confidence, depth probe, failed request and artifact hash. Compass's jsoup and +WalkDir structural shortcuts fail the call-chain task even though private-graph +diagnostics find the necessary call edges. Neither graph exposes Redux's named +`combination` function at the frozen coordinate. Public answer quality, graph +availability and cross-interface ID handling remain separate measurements. + +All 204 benchmark tests and the product boundary pass; repeated verification is +byte-identical. External `longer-paths-01` holds raw MCP/CLI captures and verifier +scripts, including failed attempts. No production change, held-out claim or +overall superiority claim follows from this checkpoint. + +### Calls-only trails: native correction on the frozen questions + +`calls_only_trails_registration.json` and `calls_only_trails_review.json` retain +the explicit calls-only implementation and replay of the same five questions. +Source-assisted public-ID static call paths improve from **2/5 to 4/5**; native +short-name results remain **1/5**. CLI, explicit call-path `ask` and actual MCP +agree on all four resolved pairs. Redux remains unresolved in the denominator. +All 20 fresh resolver results are unchanged, and nine default stdout/stderr +controls remain byte-identical. + +The jsoup route uses `Document.body`'s missing-body fallback despite the caller +initializing a shell containing a body. Its edges have source support, but +execution feasibility in that context is unproven. This post-capture alternative +receives no frozen-route or runtime credit. The stopped initial verification, +source adjudication and existing incomplete-coverage warning are retained. + +The report records 56 query, 43 CLI, 11 MCP, 1,106 workspace, nine product and +204 benchmark passing tests, two existing ignored workspace tests, formatting, +Clippy, product-boundary and build results. Repeated verification is identical. +External `calls-only-trails-01` retains raw evidence and logs. This is a native +before/after result, with no equivalent Graphify path filter, held-out claim, +authored-answer score or overall superiority claim. Version remains 0.3.30. + +### Shared public-neighbor call-path workflow + +`public_neighbor_path_registration.json` freezes a common bounded FIFO search; +`public_neighbor_paths.py` consumes only public MCP results. Both tools receive +the same source endpoint questions and workflow limits. Compass supplies +destination IDs directly; Graphify requires cached public label lookups, whose +ambiguities remain incomplete branches. This compares public navigation +workflows, with identity capabilities and internal work still differing. + +`public_neighbor_path_review.json` records **4/5 versus 0/5** source-supported +static call paths. Graphify encounters intermediate ambiguity in Chi/Click, +no outgoing calls at the jsoup start, and unresolved Redux/WalkDir endpoints. +Its separate native Click path success remains visible. Compass still misses +Redux. Its jsoup `createShell` route uses different call occurrences from the +frozen witness, and Click uses the previously reviewed stdin alternative. +Only Chi/WalkDir have a frozen occurrence at every step. No runtime feasibility +or global absence score is assigned. + +All 110 public requests replay exactly; 20 endpoint results are unchanged and +76 neighbor projections match the frozen graphs. Response costs are 1,558,220 +bytes over 72 Compass calls and 11,001 bytes over 38 Graphify calls, including +failures; they do not establish equal-work efficiency. All 218 benchmark tests +and the product boundary pass on repeat. The first suite's subprocess cleanup +permission error is retained. Fourteen new tests include all 4,096 four-node +directed graphs at three depth bounds. External `public-neighbor-path-01` +retains raw evidence and repeated verification. No product/version change, +held-out evidence or overall superiority claim follows. + +### Externally rated Blob classes + +`mlcq_god_audit_registration.json` freezes a Java addition to the multilingual +panel using Lech Madeyski and Tomasz Lewowski's [MLCQ v1.1 dataset](https://zenodo.org/records/3666840) +(CC-BY-4.0; paper DOI: 10.1145/3383219.3383264). The full downloaded CSV stays +outside the repository; the registration retains attribution, digests and +selected review metadata. + +`mlcq_corpus.py` reduces 4,019 Blob review rows to 2,334 source classes. Duplicate +reviews by one reviewer never add independent votes. It selects every pinned +repository/revision with at least two multi-reviewer unanimous `none` classes +and two classes whose reviewers all assigned `major` or `critical`: CloudStack +and Eclipse Platform UI. All 55 classes and 104 review rows in those revisions +remain visible; only eight classes enter the primary denominator (four in each +rating group). The remaining 47 classes retain single-reviewer, minor or +conflicting judgments. This consensus-enriched sample is not prevalence data. + +`mlcq_god_source_witnesses.json` pins exact class declaration coordinates and +source hashes. `mlcq_god_source_review.json` records a complete annotated-span +review for all eight classes. One positive case is a test class. These authored +responsibility observations supplement imperfect external labels; they are not +tool-generated explanations, proven refactoring requirements or new labels. + +`mlcq_hubs.py` scores the registered native top-100 hub response at cutoffs +10/50/100, separately for each rating group. Missing graph declarations, +ambiguous graph anchors, ambiguous displayed labels, nonreturned classes and +unavailable captures remain distinct. Source coordinates never disambiguate a +returned label. Unlabeled hubs cannot establish precision-at-k or a false-positive +rate. Source-assisted class neighbors are a separate diagnostic and cannot +replace native ranking retrieval. Neither tool's ordinary degree ranking is an +established god-object classifier. The original extraction and artifact limits +remain part of the outcome, including failures. + +`mlcq_god_audit_review.json` preserves the first bounded run: the frozen +unoptimized Compass development binary timed out on CloudStack and exceeded +the registered graph-artifact limit on Eclipse. +Graphify admitted both graphs but retrieved none of the four positive or four +`none` classes in its top 100. All eight existed at their exact source anchors +and resolved through public queries. Eighteen raw tool request/response pairs were verified; +all eight neighbor projections matched stored displayed triples. The repeated +verifier is byte-identical. These outcomes establish no Compass superiority or +validated god-object classifier; they identify extraction/admission work and +the gap between degree ranking and externally rated Blob classes. + +## SQL prefix guard: matched development-build diagnosis + +`sql_prefix_scan_registration.json` freezes complete CloudStack SQL files and +limits; `sql_prefix_build_context.json` freezes explicit settings matching the +unoptimized baseline. `sql_prefix_scan_review.json` records all 24 fresh-output +observations and repeated verification. Preserve unavailable baseline output, +small-file timing regressions and the distinction between complete old/new graph +equality and candidate-only repeatability. No release or Graphify speed claim +follows. Full scope and validation are in the +[code-graph audit](../../docs/implementation/code-graph-intelligence-audit-2026-09-26.md). + + +## Declared larger-artifact Blob diagnostic + +`mlcq_admission_followup_review.json` reports the same eight reviewed classes +under the separately registered 1 GiB graph cap. Compass CloudStack still times +out; Eclipse is admitted with its 62-edge omission warning. Neither tool returns +either Eclipse positive class in the top 100. Keep unavailable classes distinct +from nonreturned classes and classifier decisions. + +The report preserves the correction of an unfiltered-neighbor auditor defect, +all 27 raw tool calls, repeated verification and 238 passing benchmark tests. +It also discloses Graphify's logged omission of all 119 CloudStack SQL files +because its optional parser dependency was absent. Original graphs and outcomes are unchanged. +`sql_regex_cache_registration.json` freezes the separate release-build diagnosis. +`sql_regex_cache_review.json` records all 24 successful observations and full +graph equality across the six runs of each of the four inputs. Both builds use +the same release settings; every timing, peak RSS and host-load observation is +retained. This development panel does not establish whole-product or Graphify +performance superiority. `sql_regex_cache_whole_registration.json` separately +registers the complete-source follow-up. `sql_regex_cache_whole_review.json` +records identical published partial-graph artifacts but a longer candidate observation; +`sql_regex_cache_whole_repeat_registration.json` declares a separate repeated +investigation. `sql_regex_cache_whole_repeat_review.json` retains all six +successful observations, identical full graph hashes, resource logs and repeated +verification. Its medians are 215.288 seconds baseline and 204.082 seconds +candidate (ratio 0.948). These development results do not explain the initial +longer candidate observation or establish general performance superiority. +None of these replaces the original outcomes. + +## Release-server Blob follow-up + +`mlcq_release_followup_registration.json` retains the same eight classes, +queries, cutoffs and limits, using a fresh admitted CloudStack candidate graph, +the frozen Eclipse graph and one frozen release server. The producer/server +provenance distinction and all partial-graph warnings remain explicit. +`mlcq_release_followup_review.json` records 36 verified raw tool calls and +byte-identical repeated verification. Both tools resolve all eight classes, but +neither returns any of the four consensus-positive classes in its top 100. +These ranking misses do not establish classifier decisions or population +precision. Source-assisted neighbors remain a separate stored-graph diagnostic. + + +## Java enum-reference correction and preservation controls + +`java_enum_access_registration.json` fixes the unchanged compiler-backed jsoup +census before candidate extraction; `java_enum_control_registration.json` fixes +all four other known language repositories before their paired control runs. +`java_enum_access_review.json` records the qualified source/binary, every native +check, complete graph deltas and repeated verification. + +The candidate verifies 355/529 enum references (previously zero) and 3,106/3,785 +ordinary field references (previously 3,047). All 3,461 returned in-cohort contacts +agree with the compiler; all previously verified occurrences remain. Graphify +retains zero such contacts and no positive-contact precision denominator. The +679 ordinary and 174 enum misses remain in the fixed denominator. + +Of 670 added graph references, 256 are in test files outside the compiler cohort; +source-token/provenance checks do not establish their semantic binding precision. +Both jsoup graphs retain two omitted edges. All eight Go/Python/TypeScript/Rust +control extractions succeed with complete graph equality to their paired baseline +and preserved original. These known development results are not held-out evidence. + +jsoup changes from 42 to 40 communities; all 75 unchanged source task-pair +outcomes remain identical in a post-change replay. No functional community, +god-object, authored explanation or overall superiority claim follows. The audit +retains the initial native failures, corrected initializer/import cases and the +scope-test correction followed by all 533 resolver tests and focused Clippy. + + +## Java dotted nominal-owner follow-up + +`java_dotted_owner_registration.json` freezes the unchanged jsoup compiler +census and four paired language controls before candidate extraction. +`java_dotted_owner_review.json` records 3,115/3,785 ordinary and 368/529 enum +references, all 3,483 returned contacts compiler-supported and all earlier +verified references retained. Graphify retains zero such contacts. The 670 +ordinary and 161 enum misses remain in the denominator. + +All eight control extractions reproduce their complete original graphs. +Of 49 new jsoup references, 27 are outside the compiler cohort (21 test and six +Java 11 overlay); anchor checks do not prove their bindings. Community count +changes from 40 to 43 with all 75 existing task-pair outcomes unchanged. +Version-10 AST cache reuse reproduces the fresh candidate graph byte-for-byte. +The separate nested-expression fixture retains three enum misses. The report +binds production `be2fb542`, qualification and repeated verification. These +known development results do not establish broad or held-out superiority. + +## Source-first three-language direct-call review + +`source_first_three_language_suite.toml` registers 12 selected Go, Python and +Rust declaration/call/path questions before either tool ran. The retained +external run `source-first-3lang-01` contains both freshly built graphs, +commands and raw responses. `review_source_first_three_language.py` requires +that run, the registered suite and the three pinned source roots; it checks +their hashes, exact source call sites and graph edges, then writes +`source_first_three_language_review.json`. + +The registered text score is Compass 9/12 versus Graphify 8/12. Two Graphify +path responses contain the required names but follow indirect structural +routes, so the separate source-supported score is 9/12 versus 6/12. The audit +explains each correction and the unresolved FastAPI short-name ambiguity. +These selected development questions do not measure whole-graph accuracy, +authored explanations or god-object diagnosis. + +`fastapi_owner_suffix_replay.json` separately records a post-registration +development replay on the same frozen FastAPI graph after the owner-qualified +selector correction. It pins the source, graph, candidate binary, command +output hashes and exact call endpoints. The preregistered 12-question scores +remain unchanged. + +## Source-first three-language hub retrieval + +`source_first_hub_three_language_registration.json` freezes six source-located +Go/Python/Rust declarations, both existing graph hashes, server environments, +and `god_nodes(top_n=100)` before either hub request. Run +`source_first_hub_capture.py` on the pinned checkouts to retain the bounded +public stdio MCP transcripts, then run `source_first_hub_review.py` to check +exact source identities, top-10/50/100 retrieval and displayed degrees against +each tool's own graph. `source_first_hub_three_language_review.json` is the +result; the raw run is retained externally as `source-first-hubs-01`. + +Compass returns 3/6 selected declarations in its top 100; Graphify returns +4/6. Graphify returns `PeerAuth` at rank 55 while Compass does not return it. +Compass's 300 returned rows include explicit identities and matching source +anchors, and all 300 degrees match its graph. Graphify's label-only output +allows 247/300 rows to be uniquely joined; their degrees also match. These +source roles are not god-object defect labels, and the two graphs differ. +The panel measures neither classifier accuracy nor broad superiority. + +## Paired rated-Java class-degree diagnostic + +`mlcq_class_degree_registration.json` fixes an offline class-only degree rule +on the four frozen CloudStack/Eclipse Compass and Graphify graphs before the +scan. `mlcq_class_degree_probe.py` validates the prior graph and rated-class +identities, runs each graph under a separate time bound, and writes +`mlcq_class_degree_review.json`. Two runs are byte-identical. All eight primary +classes are eligible in each tool's graph, but **neither tool retrieves any of +the four consensus-positive classes in the top 100**. The positive ranks are +340–1,529 for Compass and 463–1,740 for Graphify. Class-only degree therefore +does not repair the known misses. This development diagnostic is not a +god-object classifier or held-out evaluation; graph coverage and direction +differ, and public `god_nodes` behavior is unchanged. + +## Paired rated-Java member declarations + +`mlcq_member_paired_registration.json` fixes the prior independent JDK syntax +census of eight rated Java classes, all source and graph hashes, and an exact +source declaration join before inspecting both tools' frozen graphs. +`mlcq_member_paired_probe.py` scans one bounded graph per process and writes +`mlcq_member_paired_review.json`; two runs are byte-identical. Compass has a +distinct, directly owned graph node for all 95 direct source methods and all +65 direct fields. Graphify has 90/95 matching method nodes and 0/65 +field-compatible declaration nodes in these files. Its five missing method +identities are later overloads collapsed onto same-named nodes anchored at +the first overload, although some class-to-method edges cite later lines. + +This is paired declaration coverage in a selected development cohort. It +does not validate field-access targets, cohesion, responsibilities, god-object +labels, whole-repository precision or cross-language superiority. + +## Hub member-evidence production replay + +`hub_members_replay.py` calls the public MCP `god_nodes(top_n=100)` tool twice +on each frozen Litestream, FastAPI and Celld graph. It checks clean source and +graph hashes, then requires every previous structured hub row to remain +identical after removing the new `memberEvidence` field. The compact +`hub_members_three_language_replay.json` records 300 unchanged rows and +identical repeated member results; raw transcripts stay in external run +`hub-members-three-language-02`. The new counts retain +`sourceCoverage: "unverified"`. They do not rescue the selected Celld +`PeerAuth` top-100 miss or establish field completeness in Go/Python. + +`hub_members_eclipse_replay.json` records a separate public top-5,000 +development read on the frozen Eclipse graph. Three rated classes returned; +their stored direct methods/fields and own-field records equal the selected +independent JDK source and compiler-bound counts. The fourth rated Eclipse +class was outside that request. These checks validate the projection for +known examples, not god-object diagnosis or overall superiority. + +## Go struct field declaration census + +`go_struct_field_registration.json` fixed two Litestream files, their clean +source revision and both frozen graphs before the first source parser run. +`go_struct_field_oracle.go` uses Go's standard parser to enumerate every +top-level named struct and each explicit named direct field. The first +`go_struct_field_probe.py` attempt stopped before scoring because Graphify's +graph is marked undirected. The amended registration uses stored +source-owner-to-target-field containment records without implying traversal +direction. The selected two-file census has 33 fields in five structs; both +frozen graphs have 0/33 matching declaration identities. Graphify retains 13 +field-type context records on these lines, which are not declaration nodes. +The first full context tally counted a record once per grouped field name; +the corrected tally counts each owner/source-line record once. Declaration +outcomes are unchanged. + +`go_full_field_registration.json` separately fixes **all 146 tracked Go +files** in the same known repository and the preliminary candidate graph +before the wider source census. The [full review](go_full_field_review.json) +and `go_full_field_probe.py` compare exact source file, struct name/start line, +field name/identifier line and ownership, rejecting duplicate or shared +owners. The Go parser finds 993 named fields in 167 structs and keeps 27 +embedded fields outside that denominator. The frozen Compass and Graphify +graphs each have **0/993** matching field declaration nodes; Graphify has 323 +field-type context records. The Compass candidate has **993/993** exact +matches. Its 993 added nodes are all fields and all source matched; its 993 +added containment edges preserve every old node and edge. The 59 publication +omissions are the same in both Compass graphs. Two full verifier runs are byte +identical, and a warm candidate rebuild matches the cold graph byte for byte. +Raw per-field outcomes remain in external run `go-struct-fields-01` under the +review's SHA-256. This is one known Go development repository, not broad +source precision, field-access binding, cohesion, god-object diagnosis or +overall superiority. + +## Go direct receiver-field contacts + +`go_field_access_registration.json` fixed the same 146 tracked Litestream Go +paths, frozen graphs, exact source-site join and exclusions before the new +source parser ran. `go_field_access_oracle.go` independently finds 2,742 +selector occurrences bound to a method receiver and one direct named struct +field. `go_field_access_probe.py` joins each occurrence to a unique method, +field, direct containment owner and exact graph relationship site. The +[development review](go_field_access_review.json) records **2,742/2,742** +exact contacts in the rebuilt Compass graph, versus 0 in the frozen Compass +and Graphify graphs under this exact field-target join. It also records 4,650 +new member-access references, all targeting field nodes. The 1,908 edges +outside this narrow oracle remain uncredited and available in the raw probe +for further source review. No old node ID or relationship was removed or +changed. Cold and warm graphs and two probe runs match byte for byte. + +The first candidate graph exceeded the registered 16 MiB audit read cap by +125,271 bytes. The registration records a **post-capture** increase to 24 MiB; +no file, source contact or graph record was filtered. This is development +evidence from one known repository, not broad field precision, a god-object +classifier, community quality or overall superiority. + +`go_parameter_field_registration.json` then fixed a separate source oracle for +explicitly typed ordinary method parameters on the same pinned files and +graphs. The independent [review](go_parameter_field_review.json) finds +**276/276** exact method-to-field contacts in the candidate graph and none +in the frozen pre-access Compass graph. Graphify has no exact declaration +target for these 98 fields, though it retains 19 field-type context records. +The 276 contacts were all outside the receiver-only denominator and share no +credited edge with it. Together the two narrow oracles credit **3,018 of +4,650** new member-access links; **1,632 remain uncredited**. Two complete +source and graph probe runs are byte identical. The result remains one known +Go development repository, not whole-graph precision or broad superiority. diff --git a/benchmarks/agent_query/calls_only_trails_registration.json b/benchmarks/agent_query/calls_only_trails_registration.json new file mode 100644 index 000000000..b26653b85 --- /dev/null +++ b/benchmarks/agent_query/calls_only_trails_registration.json @@ -0,0 +1,24 @@ +{ + "schema": "compass.calls-only-trails-registration/1", + "baselineCommit": "c39e54976275ac62d2287018e1f7e703c387bf05", + "graphRun": "java-state-access-02/run.json", + "graphRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "baselineBinary": "member-focus-02/compass", + "baselineBinarySha256": "e33934b94d1e254ba59906fddece098d8433bf7e31af746e46aac3dfc6744f97", + "sourceWitnesses": { + "longer_path_witnesses.json": "33d1cdccc5cfb6f4225674c36ee7616b6dc21e0a51c2c5bbedc8fa1e44ae8718" + }, + "priorCapture": "longer-paths-01/capture/capture.json", + "priorCaptureSha256": "075483a7a072c7b7daa693b85c2601fdd8e35f9d5807dd43640e3670d21df5e0", + "scope": "Production correction informed by the known longer-path misses; development replay, not held-out evaluation.", + "contract": "Optional typed NodeTrailRequest.callsOnly defaults false. CLI node --calls-only and MCP get_node calls_only=true restrict directed traversal and direction/depth diagnostics to calls. Explicit natural call path from/call chain from syntax requests the same policy. Existing structural requests preserve behavior. No schema/cache/history/extraction version or dependency change.", + "qualification": "Native regressions for structural shortcuts, depth frontier, reverse structural-only vs reverse calls, dead ends/cycles, parallel occurrence selection, deterministic order, heuristic exclusion, node/edge/response limits, JSON/store parity, strict arguments and request serialization. Native baseline plus relevant CLI/MCP/product checks.", + "replay": "Use all five frozen source coordinates and graphs. Fresh public endpoint resolution under the unchanged exact workflow. For every source-resolved pair capture old default, new default, new --calls-only and new MCP get_node calls_only=true; use all unresolved endpoint outcomes unchanged in their denominators. Capture new native short labels in both modes across all five cases. Compare default bytes against baseline. Retain every failure, alternate route and partial-graph diagnostic.", + "fairness": "This new Compass option is a native before/after arm. The frozen Graphify native-label and ID arms remain separately reported; Graphify path CLI and shortest_path MCP expose no equivalent relation filter in the inspected installed source. Do not claim equal feature flags or collapse best outputs across arms. A common public-neighbor traversal may later evaluate both tools under a separately registered algorithm.", + "limits": "Same depth 8, max_paths 1, existing default node/edge limits, 60 second deadline and 16 MiB CLI streams. MCP response bound 1 MiB. No speed or equal internal-work claim.", + "judgment": "Same exact source identities, directed call occurrences, confidence and independent alternate-source review as longer_path_review.json. Source-supported static chains are conditional. Missing declaration/lookup, ambiguity, incomplete graph/search and errors remain explicit.", + "limitations": [ + "Known development panel, same-agent review.", + "No broad path population, authored answer, community/god-object or held-out superiority claim." + ] +} diff --git a/benchmarks/agent_query/calls_only_trails_review.json b/benchmarks/agent_query/calls_only_trails_review.json new file mode 100644 index 000000000..40ce96973 --- /dev/null +++ b/benchmarks/agent_query/calls_only_trails_review.json @@ -0,0 +1,5434 @@ +{ + "schema": "compass.calls-only-trails-review/1", + "scope": "Native Compass before/after on the known five-repository longer-call-path panel. No held-out or equal-feature Graphify comparison.", + "registrationCommit": "4e22e1da", + "effectiveRegistrationCommit": "89916af9a3752358ad94edc14a4e7acca74d62f3", + "implementationCommit": "89916af9a3752358ad94edc14a4e7acca74d62f3", + "version": "0.3.30", + "binarySha256": "80a970c1c403892fcafd82eac7e6461afec119f2008db9f9117419432e387ca6", + "graphRun": "java-state-access-02/run.json", + "graphRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "graphs": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "compassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "compassGraphSha256": "2a9216926b1c5dfc82e4f88df0cce24a7a14ac67aa2a350158eff39018145314", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "compassGraphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ], + "summary": { + "old-default": { + "sourceSupportedCallPaths": 2, + "tasks": 5 + }, + "new-default": { + "sourceSupportedCallPaths": 2, + "tasks": 5 + }, + "calls-only": { + "sourceSupportedCallPaths": 4, + "tasks": 5 + }, + "ask-calls-only": { + "sourceSupportedCallPaths": 4, + "tasks": 5 + }, + "labels-default": { + "sourceSupportedCallPaths": 1, + "tasks": 5 + }, + "labels-calls-only": { + "sourceSupportedCallPaths": 1, + "tasks": 5 + } + }, + "results": [ + { + "question": "chi-longer-chain", + "mode": "old-default", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "coordinate": [ + "mux.go", + 137 + ] + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "coordinate": [ + "mux.go", + 127 + ] + }, + { + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "name": ".handle()", + "coordinate": [ + "mux.go", + 430 + ] + }, + { + "id": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "name": ".InsertRoute()", + "coordinate": [ + "tree.go", + 148 + ] + }, + { + "id": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "name": ".addChild()", + "coordinate": [ + "tree.go", + 244 + ] + }, + { + "id": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "name": ".Sort()", + "coordinate": [ + "tree.go", + 834 + ] + }, + { + "id": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "name": ".tailSort()", + "coordinate": [ + "tree.go", + 841 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:275a2a085c7409a899e065c2d836a8a75506ddd76542ac01de4764e50e899b32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4471, + "endByte": 4480, + "startLine": 138, + "startColumn": 1, + "endLine": 138, + "endColumn": 10 + }, + "sourceBytes": "mx.Method", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 138, + "sourceLine": "mx.Method(method, pattern, handlerFn)" + }, + { + "edgeId": "sha256:3155b7566154b5aa0c12e18cd3b3049c0b96cc58b9d8a2f0fa38df38f24cb968", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4235, + "endByte": 4244, + "startLine": 132, + "startColumn": 1, + "endLine": 132, + "endColumn": 10 + }, + "sourceBytes": "mx.handle", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 132, + "sourceLine": "mx.handle(m, pattern, handler)" + }, + { + "edgeId": "sha256:a8a9ae5d8e8d38059bf3959a56f6ab77056b2a23faac85a18f88ce28c5fdebb5", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 14628, + "endByte": 14647, + "startLine": 450, + "startColumn": 8, + "endLine": 450, + "endColumn": 27 + }, + "sourceBytes": "mx.tree.InsertRoute", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 450, + "sourceLine": "return mx.tree.InsertRoute(method, pattern, h)" + }, + { + "edgeId": "sha256:17503263f573f194d45c6ae391671d2d5a4bd4e12bc747506a22ada192cbfc7a", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 5436, + "endByte": 5450, + "startLine": 234, + "startColumn": 8, + "endLine": 234, + "endColumn": 22 + }, + "sourceBytes": "child.addChild", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 234, + "sourceLine": "hn := child.addChild(subchild, search)" + }, + { + "edgeId": "sha256:601de0e2ca7205974e0faaff74d434e41ad0dd888152555f0c59fbd7628deac2", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 7758, + "endByte": 7784, + "startLine": 324, + "startColumn": 1, + "endLine": 324, + "endColumn": 27 + }, + "sourceBytes": "n.children[child.typ].Sort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 324, + "sourceLine": "n.children[child.typ].Sort()" + }, + { + "edgeId": "sha256:19b5d096b571e01247e9a40f78c6ac42547439d6983705ea941b42468340359f", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 19591, + "endByte": 19602, + "startLine": 834, + "startColumn": 53, + "endLine": 834, + "endColumn": 64 + }, + "sourceBytes": "ns.tailSort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 834, + "sourceLine": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": false, + "registeredRoute": "primary", + "sourceWitness": { + "id": "chi-longer-chain", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "question": "Find a directed source-supported call chain from MethodFunc to tailSort. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "mux.go", + "line": 137, + "text": "func (mx *Mux) MethodFunc(", + "symbol": "MethodFunc", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 127, + "text": "func (mx *Mux) Method(method,", + "symbol": "Method", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 430, + "text": "func (mx *Mux) handle(method", + "symbol": "handle", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "tree.go", + "line": 148, + "text": "func (n *node) InsertRoute(", + "symbol": "InsertRoute", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + }, + { + "file": "tree.go", + "line": 244, + "text": "func (n *node) addChild(child *node, prefix string) *node {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "addChild" + }, + { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "Sort" + }, + { + "file": "tree.go", + "line": 841, + "text": "func (ns nodes) tailSort() {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "tailSort" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 138, + "text": "mx.Method(method, pattern, handlerFn)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 132, + "text": "mx.handle(m, pattern, handler)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 450, + "text": "return mx.tree.InsertRoute(method, pattern, h)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 183, + "text": "hn := parent.addChild(child, search)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 324, + "text": "n.children[child.typ].Sort()", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + } + ], + "sourceInterpretation": "Six static call steps. InsertRoute new-child branch; node.children is an array of nodes (tree.go:112,831). Sort invokes tailSort directly, independently of sort.Sort callback dispatch. Not a guarantee for every route registration." + }, + "hops": 6 + }, + { + "question": "chi-longer-chain", + "mode": "new-default", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "coordinate": [ + "mux.go", + 137 + ] + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "coordinate": [ + "mux.go", + 127 + ] + }, + { + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "name": ".handle()", + "coordinate": [ + "mux.go", + 430 + ] + }, + { + "id": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "name": ".InsertRoute()", + "coordinate": [ + "tree.go", + 148 + ] + }, + { + "id": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "name": ".addChild()", + "coordinate": [ + "tree.go", + 244 + ] + }, + { + "id": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "name": ".Sort()", + "coordinate": [ + "tree.go", + 834 + ] + }, + { + "id": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "name": ".tailSort()", + "coordinate": [ + "tree.go", + 841 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:275a2a085c7409a899e065c2d836a8a75506ddd76542ac01de4764e50e899b32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4471, + "endByte": 4480, + "startLine": 138, + "startColumn": 1, + "endLine": 138, + "endColumn": 10 + }, + "sourceBytes": "mx.Method", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 138, + "sourceLine": "mx.Method(method, pattern, handlerFn)" + }, + { + "edgeId": "sha256:3155b7566154b5aa0c12e18cd3b3049c0b96cc58b9d8a2f0fa38df38f24cb968", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4235, + "endByte": 4244, + "startLine": 132, + "startColumn": 1, + "endLine": 132, + "endColumn": 10 + }, + "sourceBytes": "mx.handle", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 132, + "sourceLine": "mx.handle(m, pattern, handler)" + }, + { + "edgeId": "sha256:a8a9ae5d8e8d38059bf3959a56f6ab77056b2a23faac85a18f88ce28c5fdebb5", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 14628, + "endByte": 14647, + "startLine": 450, + "startColumn": 8, + "endLine": 450, + "endColumn": 27 + }, + "sourceBytes": "mx.tree.InsertRoute", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 450, + "sourceLine": "return mx.tree.InsertRoute(method, pattern, h)" + }, + { + "edgeId": "sha256:17503263f573f194d45c6ae391671d2d5a4bd4e12bc747506a22ada192cbfc7a", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 5436, + "endByte": 5450, + "startLine": 234, + "startColumn": 8, + "endLine": 234, + "endColumn": 22 + }, + "sourceBytes": "child.addChild", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 234, + "sourceLine": "hn := child.addChild(subchild, search)" + }, + { + "edgeId": "sha256:601de0e2ca7205974e0faaff74d434e41ad0dd888152555f0c59fbd7628deac2", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 7758, + "endByte": 7784, + "startLine": 324, + "startColumn": 1, + "endLine": 324, + "endColumn": 27 + }, + "sourceBytes": "n.children[child.typ].Sort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 324, + "sourceLine": "n.children[child.typ].Sort()" + }, + { + "edgeId": "sha256:19b5d096b571e01247e9a40f78c6ac42547439d6983705ea941b42468340359f", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 19591, + "endByte": 19602, + "startLine": 834, + "startColumn": 53, + "endLine": 834, + "endColumn": 64 + }, + "sourceBytes": "ns.tailSort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 834, + "sourceLine": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": false, + "registeredRoute": "primary", + "sourceWitness": { + "id": "chi-longer-chain", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "question": "Find a directed source-supported call chain from MethodFunc to tailSort. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "mux.go", + "line": 137, + "text": "func (mx *Mux) MethodFunc(", + "symbol": "MethodFunc", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 127, + "text": "func (mx *Mux) Method(method,", + "symbol": "Method", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 430, + "text": "func (mx *Mux) handle(method", + "symbol": "handle", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "tree.go", + "line": 148, + "text": "func (n *node) InsertRoute(", + "symbol": "InsertRoute", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + }, + { + "file": "tree.go", + "line": 244, + "text": "func (n *node) addChild(child *node, prefix string) *node {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "addChild" + }, + { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "Sort" + }, + { + "file": "tree.go", + "line": 841, + "text": "func (ns nodes) tailSort() {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "tailSort" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 138, + "text": "mx.Method(method, pattern, handlerFn)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 132, + "text": "mx.handle(m, pattern, handler)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 450, + "text": "return mx.tree.InsertRoute(method, pattern, h)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 183, + "text": "hn := parent.addChild(child, search)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 324, + "text": "n.children[child.typ].Sort()", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + } + ], + "sourceInterpretation": "Six static call steps. InsertRoute new-child branch; node.children is an array of nodes (tree.go:112,831). Sort invokes tailSort directly, independently of sort.Sort callback dispatch. Not a guarantee for every route registration." + }, + "hops": 6 + }, + { + "question": "chi-longer-chain", + "mode": "calls-only", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "coordinate": [ + "mux.go", + 137 + ] + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "coordinate": [ + "mux.go", + 127 + ] + }, + { + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "name": ".handle()", + "coordinate": [ + "mux.go", + 430 + ] + }, + { + "id": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "name": ".InsertRoute()", + "coordinate": [ + "tree.go", + 148 + ] + }, + { + "id": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "name": ".addChild()", + "coordinate": [ + "tree.go", + 244 + ] + }, + { + "id": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "name": ".Sort()", + "coordinate": [ + "tree.go", + 834 + ] + }, + { + "id": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "name": ".tailSort()", + "coordinate": [ + "tree.go", + 841 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:275a2a085c7409a899e065c2d836a8a75506ddd76542ac01de4764e50e899b32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4471, + "endByte": 4480, + "startLine": 138, + "startColumn": 1, + "endLine": 138, + "endColumn": 10 + }, + "sourceBytes": "mx.Method", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 138, + "sourceLine": "mx.Method(method, pattern, handlerFn)" + }, + { + "edgeId": "sha256:3155b7566154b5aa0c12e18cd3b3049c0b96cc58b9d8a2f0fa38df38f24cb968", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4235, + "endByte": 4244, + "startLine": 132, + "startColumn": 1, + "endLine": 132, + "endColumn": 10 + }, + "sourceBytes": "mx.handle", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 132, + "sourceLine": "mx.handle(m, pattern, handler)" + }, + { + "edgeId": "sha256:a8a9ae5d8e8d38059bf3959a56f6ab77056b2a23faac85a18f88ce28c5fdebb5", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 14628, + "endByte": 14647, + "startLine": 450, + "startColumn": 8, + "endLine": 450, + "endColumn": 27 + }, + "sourceBytes": "mx.tree.InsertRoute", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 450, + "sourceLine": "return mx.tree.InsertRoute(method, pattern, h)" + }, + { + "edgeId": "sha256:17503263f573f194d45c6ae391671d2d5a4bd4e12bc747506a22ada192cbfc7a", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 5436, + "endByte": 5450, + "startLine": 234, + "startColumn": 8, + "endLine": 234, + "endColumn": 22 + }, + "sourceBytes": "child.addChild", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 234, + "sourceLine": "hn := child.addChild(subchild, search)" + }, + { + "edgeId": "sha256:601de0e2ca7205974e0faaff74d434e41ad0dd888152555f0c59fbd7628deac2", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 7758, + "endByte": 7784, + "startLine": 324, + "startColumn": 1, + "endLine": 324, + "endColumn": 27 + }, + "sourceBytes": "n.children[child.typ].Sort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 324, + "sourceLine": "n.children[child.typ].Sort()" + }, + { + "edgeId": "sha256:19b5d096b571e01247e9a40f78c6ac42547439d6983705ea941b42468340359f", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 19591, + "endByte": 19602, + "startLine": 834, + "startColumn": 53, + "endLine": 834, + "endColumn": 64 + }, + "sourceBytes": "ns.tailSort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 834, + "sourceLine": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": false, + "registeredRoute": "primary", + "sourceWitness": { + "id": "chi-longer-chain", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "question": "Find a directed source-supported call chain from MethodFunc to tailSort. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "mux.go", + "line": 137, + "text": "func (mx *Mux) MethodFunc(", + "symbol": "MethodFunc", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 127, + "text": "func (mx *Mux) Method(method,", + "symbol": "Method", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 430, + "text": "func (mx *Mux) handle(method", + "symbol": "handle", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "tree.go", + "line": 148, + "text": "func (n *node) InsertRoute(", + "symbol": "InsertRoute", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + }, + { + "file": "tree.go", + "line": 244, + "text": "func (n *node) addChild(child *node, prefix string) *node {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "addChild" + }, + { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "Sort" + }, + { + "file": "tree.go", + "line": 841, + "text": "func (ns nodes) tailSort() {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "tailSort" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 138, + "text": "mx.Method(method, pattern, handlerFn)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 132, + "text": "mx.handle(m, pattern, handler)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 450, + "text": "return mx.tree.InsertRoute(method, pattern, h)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 183, + "text": "hn := parent.addChild(child, search)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 324, + "text": "n.children[child.typ].Sort()", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + } + ], + "sourceInterpretation": "Six static call steps. InsertRoute new-child branch; node.children is an array of nodes (tree.go:112,831). Sort invokes tailSort directly, independently of sort.Sort callback dispatch. Not a guarantee for every route registration." + }, + "hops": 6 + }, + { + "question": "chi-longer-chain", + "mode": "ask-calls-only", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "coordinate": [ + "mux.go", + 137 + ] + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "coordinate": [ + "mux.go", + 127 + ] + }, + { + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "name": ".handle()", + "coordinate": [ + "mux.go", + 430 + ] + }, + { + "id": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "name": ".InsertRoute()", + "coordinate": [ + "tree.go", + 148 + ] + }, + { + "id": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "name": ".addChild()", + "coordinate": [ + "tree.go", + 244 + ] + }, + { + "id": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "name": ".Sort()", + "coordinate": [ + "tree.go", + 834 + ] + }, + { + "id": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "name": ".tailSort()", + "coordinate": [ + "tree.go", + 841 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:275a2a085c7409a899e065c2d836a8a75506ddd76542ac01de4764e50e899b32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4471, + "endByte": 4480, + "startLine": 138, + "startColumn": 1, + "endLine": 138, + "endColumn": 10 + }, + "sourceBytes": "mx.Method", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 138, + "sourceLine": "mx.Method(method, pattern, handlerFn)" + }, + { + "edgeId": "sha256:3155b7566154b5aa0c12e18cd3b3049c0b96cc58b9d8a2f0fa38df38f24cb968", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4235, + "endByte": 4244, + "startLine": 132, + "startColumn": 1, + "endLine": 132, + "endColumn": 10 + }, + "sourceBytes": "mx.handle", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 132, + "sourceLine": "mx.handle(m, pattern, handler)" + }, + { + "edgeId": "sha256:a8a9ae5d8e8d38059bf3959a56f6ab77056b2a23faac85a18f88ce28c5fdebb5", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 14628, + "endByte": 14647, + "startLine": 450, + "startColumn": 8, + "endLine": 450, + "endColumn": 27 + }, + "sourceBytes": "mx.tree.InsertRoute", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 450, + "sourceLine": "return mx.tree.InsertRoute(method, pattern, h)" + }, + { + "edgeId": "sha256:17503263f573f194d45c6ae391671d2d5a4bd4e12bc747506a22ada192cbfc7a", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 5436, + "endByte": 5450, + "startLine": 234, + "startColumn": 8, + "endLine": 234, + "endColumn": 22 + }, + "sourceBytes": "child.addChild", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 234, + "sourceLine": "hn := child.addChild(subchild, search)" + }, + { + "edgeId": "sha256:601de0e2ca7205974e0faaff74d434e41ad0dd888152555f0c59fbd7628deac2", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 7758, + "endByte": 7784, + "startLine": 324, + "startColumn": 1, + "endLine": 324, + "endColumn": 27 + }, + "sourceBytes": "n.children[child.typ].Sort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 324, + "sourceLine": "n.children[child.typ].Sort()" + }, + { + "edgeId": "sha256:19b5d096b571e01247e9a40f78c6ac42547439d6983705ea941b42468340359f", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 19591, + "endByte": 19602, + "startLine": 834, + "startColumn": 53, + "endLine": 834, + "endColumn": 64 + }, + "sourceBytes": "ns.tailSort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 834, + "sourceLine": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": false, + "registeredRoute": "primary", + "sourceWitness": { + "id": "chi-longer-chain", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "question": "Find a directed source-supported call chain from MethodFunc to tailSort. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "mux.go", + "line": 137, + "text": "func (mx *Mux) MethodFunc(", + "symbol": "MethodFunc", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 127, + "text": "func (mx *Mux) Method(method,", + "symbol": "Method", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 430, + "text": "func (mx *Mux) handle(method", + "symbol": "handle", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "tree.go", + "line": 148, + "text": "func (n *node) InsertRoute(", + "symbol": "InsertRoute", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + }, + { + "file": "tree.go", + "line": 244, + "text": "func (n *node) addChild(child *node, prefix string) *node {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "addChild" + }, + { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "Sort" + }, + { + "file": "tree.go", + "line": 841, + "text": "func (ns nodes) tailSort() {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "tailSort" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 138, + "text": "mx.Method(method, pattern, handlerFn)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 132, + "text": "mx.handle(m, pattern, handler)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 450, + "text": "return mx.tree.InsertRoute(method, pattern, h)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 183, + "text": "hn := parent.addChild(child, search)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 324, + "text": "n.children[child.typ].Sort()", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + } + ], + "sourceInterpretation": "Six static call steps. InsertRoute new-child branch; node.children is an array of nodes (tree.go:112,831). Sort invokes tailSort directly, independently of sort.Sort callback dispatch. Not a guarantee for every route registration." + }, + "hops": 6 + }, + { + "question": "chi-longer-chain", + "mode": "labels-default", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"MethodFunc\" matched 2 nodes", + "nodeId": null, + "path": null + } + ], + "classification": "ambiguous" + }, + { + "question": "chi-longer-chain", + "mode": "labels-calls-only", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"MethodFunc\" matched 2 nodes", + "nodeId": null, + "path": null + } + ], + "classification": "ambiguous" + }, + { + "question": "click-longer-chain", + "mode": "old-default", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 422, + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + }, + { + "edgeId": "sha256:545665ec87f7ce482e62b5d92cc4e15ff1b43d7200ca996b886db73a6284ee5d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 11990, + "endByte": 12005, + "startLine": 390, + "startColumn": 19, + "endLine": 390, + "endColumn": 34 + }, + "sourceBytes": "get_text_stdout", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 390, + "sourceLine": "return get_text_stdout(encoding=encoding, errors=errors), False" + }, + { + "edgeId": "sha256:ca9f65d65cb42c4eca5c973d4653b50a88a86ffce59b508ef56ee64e4964ab64", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 10722, + "endByte": 10748, + "startLine": 351, + "startColumn": 11, + "endLine": 351, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_writer", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 351, + "sourceLine": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)" + }, + { + "edgeId": "sha256:76fba4b8cd7a8308c4cf92ab52dc9bbf57aaf6cc5aa0bbacc6edea6ff7589bab", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 9407, + "endByte": 9433, + "startLine": 309, + "startColumn": 11, + "endLine": 309, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 309, + "sourceLine": "return _force_correct_text_stream(" + }, + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 8034, + "endByte": 8058, + "startLine": 257, + "startColumn": 33, + "endLine": 257, + "endColumn": 57 + }, + "sourceBytes": "_stream_is_misconfigured", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 257, + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)" + }, + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 6550, + "endByte": 6567, + "startLine": 218, + "startColumn": 11, + "endLine": 218, + "endColumn": 28 + }, + "sourceBytes": "is_ascii_encoding", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 218, + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "preregistered-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "click-longer-chain", + "mode": "new-default", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 422, + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + }, + { + "edgeId": "sha256:545665ec87f7ce482e62b5d92cc4e15ff1b43d7200ca996b886db73a6284ee5d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 11990, + "endByte": 12005, + "startLine": 390, + "startColumn": 19, + "endLine": 390, + "endColumn": 34 + }, + "sourceBytes": "get_text_stdout", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 390, + "sourceLine": "return get_text_stdout(encoding=encoding, errors=errors), False" + }, + { + "edgeId": "sha256:ca9f65d65cb42c4eca5c973d4653b50a88a86ffce59b508ef56ee64e4964ab64", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 10722, + "endByte": 10748, + "startLine": 351, + "startColumn": 11, + "endLine": 351, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_writer", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 351, + "sourceLine": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)" + }, + { + "edgeId": "sha256:76fba4b8cd7a8308c4cf92ab52dc9bbf57aaf6cc5aa0bbacc6edea6ff7589bab", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 9407, + "endByte": 9433, + "startLine": 309, + "startColumn": 11, + "endLine": 309, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 309, + "sourceLine": "return _force_correct_text_stream(" + }, + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 8034, + "endByte": 8058, + "startLine": 257, + "startColumn": 33, + "endLine": 257, + "endColumn": 57 + }, + "sourceBytes": "_stream_is_misconfigured", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 257, + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)" + }, + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 6550, + "endByte": 6567, + "startLine": 218, + "startColumn": 11, + "endLine": 218, + "endColumn": 28 + }, + "sourceBytes": "is_ascii_encoding", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 218, + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "preregistered-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "click-longer-chain", + "mode": "calls-only", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 422, + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + }, + { + "edgeId": "sha256:545665ec87f7ce482e62b5d92cc4e15ff1b43d7200ca996b886db73a6284ee5d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 11990, + "endByte": 12005, + "startLine": 390, + "startColumn": 19, + "endLine": 390, + "endColumn": 34 + }, + "sourceBytes": "get_text_stdout", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 390, + "sourceLine": "return get_text_stdout(encoding=encoding, errors=errors), False" + }, + { + "edgeId": "sha256:ca9f65d65cb42c4eca5c973d4653b50a88a86ffce59b508ef56ee64e4964ab64", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 10722, + "endByte": 10748, + "startLine": 351, + "startColumn": 11, + "endLine": 351, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_writer", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 351, + "sourceLine": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)" + }, + { + "edgeId": "sha256:76fba4b8cd7a8308c4cf92ab52dc9bbf57aaf6cc5aa0bbacc6edea6ff7589bab", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 9407, + "endByte": 9433, + "startLine": 309, + "startColumn": 11, + "endLine": 309, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 309, + "sourceLine": "return _force_correct_text_stream(" + }, + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 8034, + "endByte": 8058, + "startLine": 257, + "startColumn": 33, + "endLine": 257, + "endColumn": 57 + }, + "sourceBytes": "_stream_is_misconfigured", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 257, + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)" + }, + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 6550, + "endByte": 6567, + "startLine": 218, + "startColumn": 11, + "endLine": 218, + "endColumn": 28 + }, + "sourceBytes": "is_ascii_encoding", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 218, + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "preregistered-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "click-longer-chain", + "mode": "ask-calls-only", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 422, + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + }, + { + "edgeId": "sha256:545665ec87f7ce482e62b5d92cc4e15ff1b43d7200ca996b886db73a6284ee5d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 11990, + "endByte": 12005, + "startLine": 390, + "startColumn": 19, + "endLine": 390, + "endColumn": 34 + }, + "sourceBytes": "get_text_stdout", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 390, + "sourceLine": "return get_text_stdout(encoding=encoding, errors=errors), False" + }, + { + "edgeId": "sha256:ca9f65d65cb42c4eca5c973d4653b50a88a86ffce59b508ef56ee64e4964ab64", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 10722, + "endByte": 10748, + "startLine": 351, + "startColumn": 11, + "endLine": 351, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_writer", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 351, + "sourceLine": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)" + }, + { + "edgeId": "sha256:76fba4b8cd7a8308c4cf92ab52dc9bbf57aaf6cc5aa0bbacc6edea6ff7589bab", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 9407, + "endByte": 9433, + "startLine": 309, + "startColumn": 11, + "endLine": 309, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 309, + "sourceLine": "return _force_correct_text_stream(" + }, + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 8034, + "endByte": 8058, + "startLine": 257, + "startColumn": 33, + "endLine": 257, + "endColumn": 57 + }, + "sourceBytes": "_stream_is_misconfigured", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 257, + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)" + }, + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 6550, + "endByte": 6567, + "startLine": 218, + "startColumn": 11, + "endLine": 218, + "endColumn": 28 + }, + "sourceBytes": "is_ascii_encoding", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 218, + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "preregistered-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "click-longer-chain", + "mode": "labels-default", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 422, + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + }, + { + "edgeId": "sha256:545665ec87f7ce482e62b5d92cc4e15ff1b43d7200ca996b886db73a6284ee5d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 11990, + "endByte": 12005, + "startLine": 390, + "startColumn": 19, + "endLine": 390, + "endColumn": 34 + }, + "sourceBytes": "get_text_stdout", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 390, + "sourceLine": "return get_text_stdout(encoding=encoding, errors=errors), False" + }, + { + "edgeId": "sha256:ca9f65d65cb42c4eca5c973d4653b50a88a86ffce59b508ef56ee64e4964ab64", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 10722, + "endByte": 10748, + "startLine": 351, + "startColumn": 11, + "endLine": 351, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_writer", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 351, + "sourceLine": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)" + }, + { + "edgeId": "sha256:76fba4b8cd7a8308c4cf92ab52dc9bbf57aaf6cc5aa0bbacc6edea6ff7589bab", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 9407, + "endByte": 9433, + "startLine": 309, + "startColumn": 11, + "endLine": 309, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 309, + "sourceLine": "return _force_correct_text_stream(" + }, + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 8034, + "endByte": 8058, + "startLine": 257, + "startColumn": 33, + "endLine": 257, + "endColumn": 57 + }, + "sourceBytes": "_stream_is_misconfigured", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 257, + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)" + }, + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 6550, + "endByte": 6567, + "startLine": 218, + "startColumn": 11, + "endLine": 218, + "endColumn": 28 + }, + "sourceBytes": "is_ascii_encoding", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 218, + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "preregistered-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "click-longer-chain", + "mode": "labels-calls-only", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 422, + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + }, + { + "edgeId": "sha256:545665ec87f7ce482e62b5d92cc4e15ff1b43d7200ca996b886db73a6284ee5d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 11990, + "endByte": 12005, + "startLine": 390, + "startColumn": 19, + "endLine": 390, + "endColumn": 34 + }, + "sourceBytes": "get_text_stdout", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 390, + "sourceLine": "return get_text_stdout(encoding=encoding, errors=errors), False" + }, + { + "edgeId": "sha256:ca9f65d65cb42c4eca5c973d4653b50a88a86ffce59b508ef56ee64e4964ab64", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 10722, + "endByte": 10748, + "startLine": 351, + "startColumn": 11, + "endLine": 351, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_writer", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 351, + "sourceLine": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)" + }, + { + "edgeId": "sha256:76fba4b8cd7a8308c4cf92ab52dc9bbf57aaf6cc5aa0bbacc6edea6ff7589bab", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 9407, + "endByte": 9433, + "startLine": 309, + "startColumn": 11, + "endLine": 309, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 309, + "sourceLine": "return _force_correct_text_stream(" + }, + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 8034, + "endByte": 8058, + "startLine": 257, + "startColumn": 33, + "endLine": 257, + "endColumn": 57 + }, + "sourceBytes": "_stream_is_misconfigured", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 257, + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)" + }, + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 6550, + "endByte": 6567, + "startLine": 218, + "startColumn": 11, + "endLine": 218, + "endColumn": 28 + }, + "sourceBytes": "is_ascii_encoding", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 218, + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "preregistered-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "jsoup-longer-chain", + "mode": "old-default", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "name": ".isValid()", + "coordinate": [ + "src/main/java/org/jsoup/Jsoup.java", + 434 + ] + }, + { + "id": "sha256:e800188397e3d537f837813168a0129fa6e5c7b853657e72bd20769d4d34bab9", + "name": "Cleaner", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 43 + ] + }, + { + "id": "sha256:8257236caa700621772547e7e6e703855b8f9e467af826e6a0b978aaee61cd86", + "name": "CleaningVisitor", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 138 + ] + }, + { + "id": "sha256:65912eb3660f15092355589775d874a7a702efcf0336e9865cf93b4fb56aaa29", + "name": ".head()", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 148 + ] + }, + { + "id": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "name": ".appendChild()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 813 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:c8ea55e34246710ed3a0a1c63d521e1207bf550bd4dcb5040d9a65fc6e09bf02", + "relation": "instantiates", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "startByte": 19693, + "endByte": 19700, + "startLine": 435, + "startColumn": 19, + "endLine": 435, + "endColumn": 26 + }, + "sourceBytes": "Cleaner", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:7970bf4749a996044fcdf02e1947fc37bac8bf2d10092db7edb472afb97b4475", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6345, + "endByte": 6360, + "startLine": 138, + "startColumn": 24, + "endLine": 138, + "endColumn": 39 + }, + "sourceBytes": "CleaningVisitor", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:95231134987023788fcf9e55846c662a21af12234dfe7f02eb7d5be938f5b097", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6720, + "endByte": 6724, + "startLine": 148, + "startColumn": 30, + "endLine": 148, + "endColumn": 34 + }, + "sourceBytes": "head", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:467a8313fd3a25e31275fa33804801be78f03e7d2a61616be6024810613bccd8", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 7904, + "endByte": 7915, + "startLine": 169, + "startColumn": 28, + "endLine": 169, + "endColumn": 39 + }, + "sourceBytes": "appendChild", + "confidence": [ + "exact" + ] + } + ], + "truncated": true, + "diagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + }, + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + }, + { + "question": "jsoup-longer-chain", + "mode": "new-default", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "name": ".isValid()", + "coordinate": [ + "src/main/java/org/jsoup/Jsoup.java", + 434 + ] + }, + { + "id": "sha256:e800188397e3d537f837813168a0129fa6e5c7b853657e72bd20769d4d34bab9", + "name": "Cleaner", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 43 + ] + }, + { + "id": "sha256:8257236caa700621772547e7e6e703855b8f9e467af826e6a0b978aaee61cd86", + "name": "CleaningVisitor", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 138 + ] + }, + { + "id": "sha256:65912eb3660f15092355589775d874a7a702efcf0336e9865cf93b4fb56aaa29", + "name": ".head()", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 148 + ] + }, + { + "id": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "name": ".appendChild()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 813 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:c8ea55e34246710ed3a0a1c63d521e1207bf550bd4dcb5040d9a65fc6e09bf02", + "relation": "instantiates", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "startByte": 19693, + "endByte": 19700, + "startLine": 435, + "startColumn": 19, + "endLine": 435, + "endColumn": 26 + }, + "sourceBytes": "Cleaner", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:7970bf4749a996044fcdf02e1947fc37bac8bf2d10092db7edb472afb97b4475", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6345, + "endByte": 6360, + "startLine": 138, + "startColumn": 24, + "endLine": 138, + "endColumn": 39 + }, + "sourceBytes": "CleaningVisitor", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:95231134987023788fcf9e55846c662a21af12234dfe7f02eb7d5be938f5b097", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6720, + "endByte": 6724, + "startLine": 148, + "startColumn": 30, + "endLine": 148, + "endColumn": 34 + }, + "sourceBytes": "head", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:467a8313fd3a25e31275fa33804801be78f03e7d2a61616be6024810613bccd8", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 7904, + "endByte": 7915, + "startLine": 169, + "startColumn": 28, + "endLine": 169, + "endColumn": 39 + }, + "sourceBytes": "appendChild", + "confidence": [ + "exact" + ] + } + ], + "truncated": true, + "diagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + }, + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + }, + { + "question": "jsoup-longer-chain", + "mode": "calls-only", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "name": ".isValid()", + "coordinate": [ + "src/main/java/org/jsoup/Jsoup.java", + 434 + ] + }, + { + "id": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "name": ".isValidBodyHtml()", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 124 + ] + }, + { + "id": "sha256:f4f51f52089ad7a2a597230a89bbae7dd488d3e3a2f4d872df44b6325e6aa1d8", + "name": ".body()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Document.java", + 155 + ] + }, + { + "id": "sha256:e3344ff45a629bdf8ddf478b5eb389cc5007c1f33f5d5ba5ce4ba60d25abaa88", + "name": ".appendElement()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 918 + ] + }, + { + "id": "sha256:d4d9b048767facdf7fd9d8be44e6cc0c60c11e749d933908032323756c7512fe", + "name": ".appendElement()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 929 + ] + }, + { + "id": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "name": ".appendChild()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 813 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:38d6c354f2e4a136528e0f8d4261fc07f6a2c9e18886865384966819efd9e046", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "startByte": 19711, + "endByte": 19726, + "startLine": 435, + "startColumn": 37, + "endLine": 435, + "endColumn": 52 + }, + "sourceBytes": "isValidBodyHtml", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 435, + "sourceLine": "return new Cleaner(safelist).isValidBodyHtml(bodyHtml);" + }, + { + "edgeId": "sha256:10d360f4c84040317cd1200eb83e774865ed8a02f5fc9049d547a5152579d1c0", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6122, + "endByte": 6126, + "startLine": 131, + "startColumn": 47, + "endLine": 131, + "endColumn": 51 + }, + "sourceBytes": "body", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 131, + "sourceLine": "int numDiscarded = copySafeNodes(dirty.body(), clean.body());" + }, + { + "edgeId": "sha256:2acb768e77fc5872ec79e300d88c860200608f0a05ee269f4c41d158ecd3abb8", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "startByte": 5538, + "endByte": 5551, + "startLine": 163, + "startColumn": 20, + "endLine": 163, + "endColumn": 33 + }, + "sourceBytes": "appendElement", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 163, + "sourceLine": "return html.appendElement(\"body\");" + }, + { + "edgeId": "sha256:c30409bd55a751d5c26439e53338f9f229f6379b2750ff2b1b6d13a6254d206f", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 36006, + "endByte": 36019, + "startLine": 919, + "startColumn": 15, + "endLine": 919, + "endColumn": 28 + }, + "sourceBytes": "appendElement", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 919, + "sourceLine": "return appendElement(tagName, tag.namespace());" + }, + { + "edgeId": "sha256:abc679f773f7eb97b258f9061be3674e51adb0c992fc88c3588d794fb5982203", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 36612, + "endByte": 36623, + "startLine": 932, + "startColumn": 8, + "endLine": 932, + "endColumn": 19 + }, + "sourceBytes": "appendChild", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 932, + "sourceLine": "appendChild(child);" + } + ], + "truncated": false, + "diagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "endpointsMatch": [ + true, + true + ], + "executionFeasibility": "Unproven: missing-body guard versus caller shell initialization. Static edge correctness only.", + "contextWitnesses": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 127, + "text": "Document dirty = Document.createShell(baseUri);", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 71, + "text": "html.appendElement(\"body\");", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 159, + "text": "if (el.nameIs(\"body\") || el.nameIs(\"frameset\"))", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 160, + "text": "return el;", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 163, + "text": "return html.appendElement(\"body\");", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + } + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "post-capture-source-reviewed-alternative", + "sourceWitness": { + "id": "jsoup-longer-chain", + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "question": "Find a directed source-supported call chain from isValid to appendChild. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 434, + "text": "public static boolean isValid(String", + "symbol": "isValid", + "fileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "text": "public boolean isValidBodyHtml(String", + "symbol": "isValidBodyHtml", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 155, + "text": "public Element body() {", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "symbol": "body" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 918, + "text": "public Element appendElement(String tagName) {", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "symbol": "appendElement" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 929, + "text": "public Element appendElement(String tagName, String namespace) {", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "symbol": "appendElement" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 813, + "text": "public Element appendChild(Node child) {", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "symbol": "appendChild" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 435, + "text": "return new Cleaner(safelist).isValidBodyHtml(bodyHtml);", + "fileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 131, + "text": "int numDiscarded = copySafeNodes(dirty.body(), clean.body());", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 163, + "text": "return html.appendElement(\"body\");", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 919, + "text": "return appendElement(tagName, tag.namespace());", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 932, + "text": "appendChild(child);", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + } + } + ], + "sourceInterpretation": "Five static calls via Document.body. The body-to-appendElement call requires no body/frameset child; Cleaner first creates dirty via createShell, which adds a body. This path is not established as executable in this caller context. No runtime-feasibility credit." + }, + "hops": 5 + }, + { + "question": "jsoup-longer-chain", + "mode": "ask-calls-only", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "name": ".isValid()", + "coordinate": [ + "src/main/java/org/jsoup/Jsoup.java", + 434 + ] + }, + { + "id": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "name": ".isValidBodyHtml()", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 124 + ] + }, + { + "id": "sha256:f4f51f52089ad7a2a597230a89bbae7dd488d3e3a2f4d872df44b6325e6aa1d8", + "name": ".body()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Document.java", + 155 + ] + }, + { + "id": "sha256:e3344ff45a629bdf8ddf478b5eb389cc5007c1f33f5d5ba5ce4ba60d25abaa88", + "name": ".appendElement()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 918 + ] + }, + { + "id": "sha256:d4d9b048767facdf7fd9d8be44e6cc0c60c11e749d933908032323756c7512fe", + "name": ".appendElement()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 929 + ] + }, + { + "id": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "name": ".appendChild()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 813 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:38d6c354f2e4a136528e0f8d4261fc07f6a2c9e18886865384966819efd9e046", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "startByte": 19711, + "endByte": 19726, + "startLine": 435, + "startColumn": 37, + "endLine": 435, + "endColumn": 52 + }, + "sourceBytes": "isValidBodyHtml", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 435, + "sourceLine": "return new Cleaner(safelist).isValidBodyHtml(bodyHtml);" + }, + { + "edgeId": "sha256:10d360f4c84040317cd1200eb83e774865ed8a02f5fc9049d547a5152579d1c0", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6122, + "endByte": 6126, + "startLine": 131, + "startColumn": 47, + "endLine": 131, + "endColumn": 51 + }, + "sourceBytes": "body", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 131, + "sourceLine": "int numDiscarded = copySafeNodes(dirty.body(), clean.body());" + }, + { + "edgeId": "sha256:2acb768e77fc5872ec79e300d88c860200608f0a05ee269f4c41d158ecd3abb8", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "startByte": 5538, + "endByte": 5551, + "startLine": 163, + "startColumn": 20, + "endLine": 163, + "endColumn": 33 + }, + "sourceBytes": "appendElement", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 163, + "sourceLine": "return html.appendElement(\"body\");" + }, + { + "edgeId": "sha256:c30409bd55a751d5c26439e53338f9f229f6379b2750ff2b1b6d13a6254d206f", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 36006, + "endByte": 36019, + "startLine": 919, + "startColumn": 15, + "endLine": 919, + "endColumn": 28 + }, + "sourceBytes": "appendElement", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 919, + "sourceLine": "return appendElement(tagName, tag.namespace());" + }, + { + "edgeId": "sha256:abc679f773f7eb97b258f9061be3674e51adb0c992fc88c3588d794fb5982203", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 36612, + "endByte": 36623, + "startLine": 932, + "startColumn": 8, + "endLine": 932, + "endColumn": 19 + }, + "sourceBytes": "appendChild", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 932, + "sourceLine": "appendChild(child);" + } + ], + "truncated": false, + "diagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "endpointsMatch": [ + true, + true + ], + "executionFeasibility": "Unproven: missing-body guard versus caller shell initialization. Static edge correctness only.", + "contextWitnesses": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 127, + "text": "Document dirty = Document.createShell(baseUri);", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 71, + "text": "html.appendElement(\"body\");", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 159, + "text": "if (el.nameIs(\"body\") || el.nameIs(\"frameset\"))", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 160, + "text": "return el;", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 163, + "text": "return html.appendElement(\"body\");", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + } + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "post-capture-source-reviewed-alternative", + "sourceWitness": { + "id": "jsoup-longer-chain", + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "question": "Find a directed source-supported call chain from isValid to appendChild. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 434, + "text": "public static boolean isValid(String", + "symbol": "isValid", + "fileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "text": "public boolean isValidBodyHtml(String", + "symbol": "isValidBodyHtml", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 155, + "text": "public Element body() {", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "symbol": "body" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 918, + "text": "public Element appendElement(String tagName) {", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "symbol": "appendElement" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 929, + "text": "public Element appendElement(String tagName, String namespace) {", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "symbol": "appendElement" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 813, + "text": "public Element appendChild(Node child) {", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "symbol": "appendChild" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 435, + "text": "return new Cleaner(safelist).isValidBodyHtml(bodyHtml);", + "fileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 131, + "text": "int numDiscarded = copySafeNodes(dirty.body(), clean.body());", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 163, + "text": "return html.appendElement(\"body\");", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 919, + "text": "return appendElement(tagName, tag.namespace());", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 932, + "text": "appendChild(child);", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + } + } + ], + "sourceInterpretation": "Five static calls via Document.body. The body-to-appendElement call requires no body/frameset child; Cleaner first creates dirty via createShell, which adds a body. This path is not established as executable in this caller context. No runtime-feasibility credit." + }, + "hops": 5 + }, + { + "question": "jsoup-longer-chain", + "mode": "labels-default", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"isValid\" matched 2 nodes", + "nodeId": null, + "path": null + }, + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "classification": "ambiguous" + }, + { + "question": "jsoup-longer-chain", + "mode": "labels-calls-only", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"isValid\" matched 2 nodes", + "nodeId": null, + "path": null + }, + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "classification": "ambiguous" + }, + { + "question": "redux-longer-chain", + "mode": "labels-default", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "no_match", + "message": "NO EXACT MATCH for \"combination\"", + "nodeId": null, + "path": null + }, + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "redux-longer-chain", + "mode": "labels-calls-only", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "no_match", + "message": "NO EXACT MATCH for \"combination\"", + "nodeId": null, + "path": null + }, + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "walkdir-longer-chain", + "mode": "old-default", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "coordinate": [ + "src/lib.rs", + 687 + ] + }, + { + "id": "sha256:fee92110685574fab9cc9ed406f9087b0a31367f58d21a22a3fc0146ab585f35", + "name": ".from_path()", + "coordinate": [ + "src/error.rs", + 162 + ] + }, + { + "id": "sha256:a66dc1de7a258eafe92e616e5c94a0107fda891db6f9ca33ca1e10fbac5845c9", + "name": "Error", + "coordinate": [ + "src/error.rs", + 28 + ] + }, + { + "id": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "name": ".from_loop()", + "coordinate": [ + "src/error.rs", + 184 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:ebafa756aa191dbe1c4a2036f69e77f65f78e9e8fc7aef535f942b023b6e2e7d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/lib.rs", + "startByte": 23832, + "endByte": 23848, + "startLine": 691, + "startColumn": 33, + "endLine": 691, + "endColumn": 49 + }, + "sourceBytes": "Error::from_path", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:41187f8bce764264633ff57f9d90649df36157f5953666a2e6ff12a793ff6a36", + "relation": "returns", + "direction": "forward", + "site": { + "file": "src/error.rs", + "startByte": 6275, + "endByte": 6279, + "startLine": 166, + "startColumn": 9, + "endLine": 166, + "endColumn": 13 + }, + "sourceBytes": "Self", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:808b946031e19484e268e5d018381338c0a64e04622a0579774d0501d9c3a28f", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/error.rs", + "startByte": 6783, + "endByte": 6792, + "startLine": 184, + "startColumn": 18, + "endLine": 184, + "endColumn": 27 + }, + "sourceBytes": "from_loop", + "confidence": [ + "exact" + ] + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + }, + { + "question": "walkdir-longer-chain", + "mode": "new-default", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "coordinate": [ + "src/lib.rs", + 687 + ] + }, + { + "id": "sha256:fee92110685574fab9cc9ed406f9087b0a31367f58d21a22a3fc0146ab585f35", + "name": ".from_path()", + "coordinate": [ + "src/error.rs", + 162 + ] + }, + { + "id": "sha256:a66dc1de7a258eafe92e616e5c94a0107fda891db6f9ca33ca1e10fbac5845c9", + "name": "Error", + "coordinate": [ + "src/error.rs", + 28 + ] + }, + { + "id": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "name": ".from_loop()", + "coordinate": [ + "src/error.rs", + 184 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:ebafa756aa191dbe1c4a2036f69e77f65f78e9e8fc7aef535f942b023b6e2e7d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/lib.rs", + "startByte": 23832, + "endByte": 23848, + "startLine": 691, + "startColumn": 33, + "endLine": 691, + "endColumn": 49 + }, + "sourceBytes": "Error::from_path", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:41187f8bce764264633ff57f9d90649df36157f5953666a2e6ff12a793ff6a36", + "relation": "returns", + "direction": "forward", + "site": { + "file": "src/error.rs", + "startByte": 6275, + "endByte": 6279, + "startLine": 166, + "startColumn": 9, + "endLine": 166, + "endColumn": 13 + }, + "sourceBytes": "Self", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:808b946031e19484e268e5d018381338c0a64e04622a0579774d0501d9c3a28f", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/error.rs", + "startByte": 6783, + "endByte": 6792, + "startLine": 184, + "startColumn": 18, + "endLine": 184, + "endColumn": 27 + }, + "sourceBytes": "from_loop", + "confidence": [ + "exact" + ] + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + }, + { + "question": "walkdir-longer-chain", + "mode": "calls-only", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "coordinate": [ + "src/lib.rs", + 687 + ] + }, + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "name": ".handle_entry()", + "coordinate": [ + "src/lib.rs", + 840 + ] + }, + { + "id": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "name": ".follow()", + "coordinate": [ + "src/lib.rs", + 961 + ] + }, + { + "id": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "name": ".check_loop()", + "coordinate": [ + "src/lib.rs", + 973 + ] + }, + { + "id": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "name": ".from_loop()", + "coordinate": [ + "src/error.rs", + 184 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:6e39005ce1372c6648d0a47d954054e127f35c486ced5313afd6388a86f36e58", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/lib.rs", + "startByte": 25051, + "endByte": 25068, + "startLine": 721, + "startColumn": 42, + "endLine": 721, + "endColumn": 59 + }, + "sourceBytes": "self.handle_entry", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 721, + "sourceLine": "if let Some(result) = self.handle_entry(dent) {" + }, + { + "edgeId": "sha256:db51772e6e2a0f689b69f1447740b96e340679a37df7c50bfc727ffe85a06cf4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/lib.rs", + "startByte": 29337, + "endByte": 29348, + "startLine": 845, + "startColumn": 25, + "endLine": 845, + "endColumn": 36 + }, + "sourceBytes": "self.follow", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 845, + "sourceLine": "dent = itry!(self.follow(dent));" + }, + { + "edgeId": "sha256:9d2cbc7e60565250bba8045728a1451893838b7f1b8d26084a542957c88557c3", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/lib.rs", + "startByte": 34811, + "endByte": 34826, + "startLine": 968, + "startColumn": 12, + "endLine": 968, + "endColumn": 27 + }, + "sourceBytes": "self.check_loop", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 968, + "sourceLine": "self.check_loop(dent.path())?;" + }, + { + "edgeId": "sha256:32f0ce77ab676891029891f1d836f95f3e4c8458dcee2b5d51f7128b8ad32bcf", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/lib.rs", + "startByte": 35294, + "endByte": 35310, + "startLine": 981, + "startColumn": 27, + "endLine": 981, + "endColumn": 43 + }, + "sourceBytes": "Error::from_loop", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 981, + "sourceLine": "return Err(Error::from_loop(" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": false, + "registeredRoute": "primary", + "sourceWitness": { + "id": "walkdir-longer-chain", + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "question": "Find a directed source-supported call chain from next to from_loop. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "src/lib.rs", + "line": 687, + "text": "fn next(&mut self) -> Option> {", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "symbol": "next" + }, + { + "file": "src/lib.rs", + "line": 840, + "text": " fn handle_entry(", + "symbol": "handle_entry", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a" + }, + { + "file": "src/lib.rs", + "line": 961, + "text": " fn follow(&self", + "symbol": "follow", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a" + }, + { + "file": "src/lib.rs", + "line": 973, + "text": " fn check_loop Option> {", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "symbol": "next" + }, + { + "file": "src/lib.rs", + "line": 840, + "text": " fn handle_entry(", + "symbol": "handle_entry", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a" + }, + { + "file": "src/lib.rs", + "line": 961, + "text": " fn follow(&self", + "symbol": "follow", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a" + }, + { + "file": "src/lib.rs", + "line": 973, + "text": " fn check_loop 1024 or any(not isinstance(d, dict) for d in diagnostics): + return result + if any(d.get('code') == 'bounded_truncation' for d in diagnostics): + result['status'] = 'truncated-or-unknown' + return result + nodes, hits = body.get('nodes'), body.get('results') + if not isinstance(nodes, list) or not isinstance(hits, list) or len(nodes) > 500 or len(hits) > 256: + return result + if any(not isinstance(n, dict) or not isinstance(n.get('id'), str) or not n['id'] for n in nodes): + return result + ids = [n['id'] for n in nodes] + if len(ids) != len(set(ids)) or any(not isinstance(h, dict) or h.get('nodeId') not in ids for h in hits): + return result + hit_ids = {h['nodeId'] for h in hits} + anchors = [] + for node in nodes: + if node['id'] in hit_ids: + file, line, names = _node_anchor(node, 'compass') + anchors.append(dict(id=node['id'], file=file, line=line, symbols=sorted(names))) + elif tool == 'graphify': + text = call.get('text', '') + labels = re.findall(r'^Node: (.*)$', text, re.M) + ids = re.findall(r'^ ID: (.+)$', text, re.M) + sources = re.findall(r'^ Source: (.+) L([1-9][0-9]*)(?:-L[1-9][0-9]*)?$', text, re.M) + if len(labels) != 1 or len(ids) != 1 or len(sources) != 1: + result['status'] = 'unresolved-response' + return result + anchors = [dict(id=ids[0], file=sources[0][0], line=int(sources[0][1]), + symbols=[_terminal_symbol(labels[0])])] + else: + raise ValueError('unsupported tool') + result['returnedAnchors'] = anchors + result['matchedIds'] = sorted({a['id'] for a in anchors if a['file'] == seed['file'] + and a['line'] == seed['startLine'] and seed['symbol'] in a['symbols']}) + matches = result['matchedIds'] + result['status'] = 'resolved' if len(matches) == 1 else 'anchor-mismatch' if not matches else 'ambiguous' + result['selector'] = matches[0] if len(matches) == 1 else None + return result diff --git a/benchmarks/agent_query/community_identity_navigation_panel_a.json b/benchmarks/agent_query/community_identity_navigation_panel_a.json new file mode 100644 index 000000000..0402ae137 --- /dev/null +++ b/benchmarks/agent_query/community_identity_navigation_panel_a.json @@ -0,0 +1,68 @@ +{ + "schema": "compass.community-identity-navigation-policy/1", + "scope": "Development workflow on the same 15 source-defined task pairs, frozen before this source-anchored resolver-to-neighbor capture. Reused repositories, not held-out. Different public tool names represent equivalent resolution and navigation roles.", + "registrationSha256": "71faed0f477ee97da98c8bbb86686fae09de450664e4e000d9b2404496b94b6d", + "startingInput": "For every task, prepare the community containing the first exact source declaration symmetrically from each stored graph. Preparation is not scored as retrieval. Missing, ambiguous or unassigned inputs remain unresolved.", + "publicTaskInput": "The first declaration file, startLine and terminal symbol are supplied task coordinates to both tools. The target collaborator is scoring data, never used to select or issue requests.", + "memberGate": "Call get_community on the prepared community. Retain every row whose exact source file and terminal symbol match the public task seed. If none match, stop unresolved. If several display-label variants match, retain all and use their common exact terminal symbol; do not choose a particular declaration or label.", + "resolveCalls": { + "compass": { + "method": "search_symbols", + "query": "The common returned terminal symbol.", + "limits": { + "max_candidates": 256, + "max_nodes": 500, + "max_response_bytes": 524288 + } + }, + "graphify": { + "method": "get_node", + "label": "Exact returned source file plus :: plus the common terminal symbol. This path-scoped form is documented in its public ambiguity responses." + } + }, + "idSelection": "Compass: use only structured compass.mcp.tool-result/1 -> compass.query/1 search result node IDs present in both results and nodes; reject transport or semantic truncation. Match exact returned source file, declaration start line and terminal symbol. Retain all matched IDs. Graphify: parse exactly one Node heading, ID and Source file plus L-start line from get_node; require the same exact coordinates. For either tool, issue the next call only when exactly one matching ID is returned. Never resolve a collision by score, output order, degree, graph inspection or desired adjacency.", + "followup": { + "tool": "get_neighbors", + "label": "The returned, uniquely source-matched ID.", + "relation_filter": "calls", + "maximumCallsAfterCommunity": 2, + "additionalRetries": 0 + }, + "bounds": { + "requestTimeoutSeconds": 60, + "maxResponseBytes": 1048576, + "maxSessionBytes": 67108864, + "graphifyTokenBudget": 262144 + }, + "budgetInterpretation": "Common external 60-second/1-MiB response and 64-MiB session bounds. Compass search uses explicit native candidate/node/semantic-byte bounds; Graphify get_node has its fixed single-node/attribute projection. Graphify community and neighbor calls receive the same generous explicit token allowance as earlier runs. Native controls and output richness differ. Report full calls, errors and bytes; do not claim equal token budget or latency efficiency.", + "scoring": [ + "Retain all 15 tasks and the same 14 direct-call tasks. Missing, mismatched, ambiguous or truncated resolver output stays unresolved.", + "After all requests, verify the returned selected ID against the frozen exact source-declaration oracle. Report resolver success separately from a completed neighbor lookup with that validated ID and the expected heading.", + "Keep the older name-only seed/target uniqueness audit separately. A correct requested ID does not make a successful legacy neighbor response self-identifying; both tools still render seed/neighbor display names. Never use matching adjacency to choose an identity.", + "For a validated seed-ID lookup, report the reviewed outgoing collaborator label and calls relation separately from globally unambiguous target-label identity. Do not infer a target definition from an edge call-site anchor. Report stored direct-call evidence separately.", + "Check displayed direction/neighbor-label multiplicity against distinct graph neighbors after calls filtering. It is graph projection consistency, not all-assertion source precision or call occurrence recall.", + "Starting communities are prepared; initial retrieval is unscored. Unequal split-community subsets are descriptive only." + ], + "directCallTasks": [ + "chi-router-construction", + "chi-route-pattern-parameters", + "click-atomic-close", + "click-terminal-string-width", + "click-help-definition-layout", + "jsoup-safe-document-copy", + "jsoup-html-fragment-parse", + "jsoup-html-whitespace", + "redux-listener-registration", + "redux-action-shape-validation", + "redux-action-creator-binding", + "walkdir-directory-handle-budget", + "walkdir-deferred-directory-depth", + "walkdir-symlink-loop-detection" + ], + "limitations": [ + "No retries beyond one resolver and one neighbor call; other public workflows remain possible.", + "Exact source start lines are provided task inputs. This is not natural-language seed discovery.", + "A resolver can return a plausible but wrong same-file declaration; returned anchors are checked before navigation and graph/source identity is checked only afterward.", + "Full member/neighbor identity projections, source assertion precision, god-object diagnosis, longer walks, and held-out confirmation remain unmeasured." + ] +} diff --git a/benchmarks/agent_query/community_identity_navigation_review_panel_a.json b/benchmarks/agent_query/community_identity_navigation_review_panel_a.json new file mode 100644 index 000000000..1e3514de5 --- /dev/null +++ b/benchmarks/agent_query/community_identity_navigation_review_panel_a.json @@ -0,0 +1,634 @@ +{ + "schema": "compass.community-identity-navigation-review/1", + "scope": "Source-coordinate-assisted public MCP workflow on the same 15 development tasks. Exact seed file, start line and symbol are supplied to both policies; this is not natural-language seed discovery.", + "protocolCommit": "f660408b", + "capture": "community-identity-navigation-02/capture.json", + "captureSha256": "50910af023897886c683fcffc9228ef894303f56659c42030c573e9b92b7a3f9", + "initialCapture": "community-identity-navigation-01/capture.json", + "serverExecutableSha256": { + "compass": "1174ab1535e4614e08b04a283a90fe33ee53e82517907ff85c323cacb6d9b75a", + "graphify": "bc9a27bd52c265e86fcd73ef1d4165ec8a47695cffb7624cb0ee618dca83e6c0" + }, + "policySha256": "4c23238e91f506c1bdf2ad4519789ca7a6fa42a7103828d49bc5ffd6de65450a", + "registrationSha256": "71faed0f477ee97da98c8bbb86686fae09de450664e4e000d9b2404496b94b6d", + "sourceRunSha256": "c2bc04366343fbd32bbdf84ccfb1db7aaad2e2ed38b38f979065c6755432d792", + "summary": { + "compass": { + "tasks": 15, + "resolverIdsCorrect": 15, + "completedNeighborLookups": 15, + "directCallTasks": 14, + "collaboratorLabelPresent": 13, + "unambiguousTargetLabel": 10, + "callTextBytes": 156976, + "callResponseWireBytes": 694354, + "fullSessionBytesIncludingRequestsAndStderr": 785989 + }, + "graphify": { + "tasks": 15, + "resolverIdsCorrect": 15, + "completedNeighborLookups": 15, + "directCallTasks": 14, + "collaboratorLabelPresent": 14, + "unambiguousTargetLabel": 11, + "callTextBytes": 55402, + "callResponseWireBytes": 60410, + "fullSessionBytesIncludingRequestsAndStderr": 102213 + } + }, + "results": [ + { + "repository": "chi", + "tool": "compass", + "task": "chi-router-construction", + "returnedSeedId": "sha256:1928266631ebdc4651cac18aa5abc7ab261abc74a669ec9071a53d68b1f30699", + "expectedTargetId": "sha256:fd36852628b4b3873d779bdb534cf23a17b6908247f6c46db80dbac5b2d7c453", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 6505, + "callResponseWireBytes": 108798 + }, + { + "repository": "chi", + "tool": "compass", + "task": "chi-request-identity", + "returnedSeedId": "sha256:394032841e0823b74d28b8a866c2eb3cd7618a345c06b08fc66e63e5657d5ae4", + "expectedTargetId": "sha256:34078dccfae1ef1443550189102e7927d10009b45d211741895af2b59e44907e", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": false, + "reviewedCollaboratorLabelPresent": false, + "unambiguousTargetLabel": false, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 0, + "displayedAdjacencyConsistent": true, + "callTextBytes": 2496, + "callResponseWireBytes": 6311 + }, + { + "repository": "chi", + "tool": "compass", + "task": "chi-route-pattern-parameters", + "returnedSeedId": "sha256:6df5a320c50c2a4cc16144d1db213eeefc7cf84eced0fd9b1fbedcd21553b212", + "expectedTargetId": "sha256:111dda918f957e920843303a5c69f2cda3e9b2006d711b0aef4efca1545bdc62", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 1808, + "callResponseWireBytes": 5581 + }, + { + "repository": "chi", + "tool": "graphify", + "task": "chi-router-construction", + "returnedSeedId": "chi_newrouter", + "expectedTargetId": "mux_newmux", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 8162, + "callResponseWireBytes": 8594 + }, + { + "repository": "chi", + "tool": "graphify", + "task": "chi-request-identity", + "returnedSeedId": "middleware_request_id_requestid", + "expectedTargetId": "middleware_request_id_getreqid", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": false, + "reviewedCollaboratorLabelPresent": false, + "unambiguousTargetLabel": false, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 0, + "displayedAdjacencyConsistent": true, + "callTextBytes": 2388, + "callResponseWireBytes": 2721 + }, + { + "repository": "chi", + "tool": "graphify", + "task": "chi-route-pattern-parameters", + "returnedSeedId": "tree_patparamkeys", + "expectedTargetId": "tree_patnextsegment", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 1230, + "callResponseWireBytes": 1552 + }, + { + "repository": "click", + "tool": "compass", + "task": "click-atomic-close", + "returnedSeedId": "sha256:7bf788bd87c967bb2c80b682108ca265ce1ea9c213b3c8d55931a267d73c15b4", + "expectedTargetId": "sha256:1e4e32dfcdfe036023e5c263eaba38bfe92eb391597b74fc5d70ab50a877cfa3", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": false, + "globalTargetLabelIdentities": 5, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 10538, + "callResponseWireBytes": 48472 + }, + { + "repository": "click", + "tool": "compass", + "task": "click-terminal-string-width", + "returnedSeedId": "sha256:b11122339a79629b59028324039bb74faf1857f56629c753c1e51abc3c93d330", + "expectedTargetId": "sha256:84776cf5b684f5564ad6dc1143881454a6dd6f12faf2f62a8b1451fc9c89dbd2", + "splitCommunity": true, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 5469, + "callResponseWireBytes": 10657 + }, + { + "repository": "click", + "tool": "compass", + "task": "click-help-definition-layout", + "returnedSeedId": "sha256:3883ba20e7d4cfe17c813110a793c1d9db32455194d42971a01787a2b45c357e", + "expectedTargetId": "sha256:8e5a66041c4ec1628dcf55670a1c379436eec6a47f92a8a45608693bc2934e5e", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 5655, + "callResponseWireBytes": 13787 + }, + { + "repository": "click", + "tool": "graphify", + "task": "click-atomic-close", + "returnedSeedId": "src_click_compat_atomicfile_exit", + "expectedTargetId": "src_click_compat_atomicfile_close", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": false, + "globalTargetLabelIdentities": 5, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 539, + "callResponseWireBytes": 824 + }, + { + "repository": "click", + "tool": "graphify", + "task": "click-terminal-string-width", + "returnedSeedId": "src_click_compat_term_len", + "expectedTargetId": "src_click_compat_strip_ansi", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 2525, + "callResponseWireBytes": 2835 + }, + { + "repository": "click", + "tool": "graphify", + "task": "click-help-definition-layout", + "returnedSeedId": "src_click_formatting_helpformatter_write_dl", + "expectedTargetId": "src_click_formatting_measure_table", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 1120, + "callResponseWireBytes": 1412 + }, + { + "repository": "jsoup", + "tool": "compass", + "task": "jsoup-safe-document-copy", + "returnedSeedId": "sha256:d490451c6bf56501db666f0a6c3c143f1a6d8a90120632415cc739cbf1a8f034", + "expectedTargetId": "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 15131, + "callResponseWireBytes": 231288 + }, + { + "repository": "jsoup", + "tool": "compass", + "task": "jsoup-html-fragment-parse", + "returnedSeedId": "sha256:116e34df3ea1beb0e4e87a6fbc8c2a4667bcac6135618616b616a6990d10e729", + "expectedTargetId": "sha256:d51486603fd23ace9d94cf199d726965909177f01ed78bd3ed9a3ca39436412b", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": false, + "globalTargetLabelIdentities": 5, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 64622, + "callResponseWireBytes": 72908 + }, + { + "repository": "jsoup", + "tool": "compass", + "task": "jsoup-html-whitespace", + "returnedSeedId": "sha256:7b70b1683af87dcfb443f8d622d324166f6a6a9d6d40e66b0f8baf1eea8ebbd7", + "expectedTargetId": "sha256:8b362a6fd1d3e3687e87d8010b0acf4af64a9bdf2c0cbd1ba51760278afb3227", + "splitCommunity": true, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": false, + "globalTargetLabelIdentities": 3, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 13286, + "callResponseWireBytes": 22301 + }, + { + "repository": "jsoup", + "tool": "graphify", + "task": "jsoup-safe-document-copy", + "returnedSeedId": "src_main_java_org_jsoup_safety_cleaner_cleaner_clean", + "expectedTargetId": "src_main_java_org_jsoup_safety_cleaner_cleaner_copysafenodes", + "splitCommunity": true, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 6380, + "callResponseWireBytes": 6726 + }, + { + "repository": "jsoup", + "tool": "graphify", + "task": "jsoup-html-fragment-parse", + "returnedSeedId": "src_main_java_org_jsoup_parser_parser_parser_parsebodyfragment", + "expectedTargetId": "src_main_java_org_jsoup_parser_parser_parser_parsefragment", + "splitCommunity": true, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": false, + "globalTargetLabelIdentities": 3, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 20399, + "callResponseWireBytes": 20913 + }, + { + "repository": "jsoup", + "tool": "graphify", + "task": "jsoup-html-whitespace", + "returnedSeedId": "src_main_java_org_jsoup_internal_stringutil_stringutil_isblank", + "expectedTargetId": "src_main_java_org_jsoup_internal_stringutil_stringutil_iswhitespace", + "splitCommunity": true, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": false, + "globalTargetLabelIdentities": 3, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 6903, + "callResponseWireBytes": 7271 + }, + { + "repository": "redux", + "tool": "compass", + "task": "redux-listener-registration", + "returnedSeedId": "sha256:f27566baebab97a78ea7b6d143149ecdff76b39167fb12b42612a3e69fba5a5d", + "expectedTargetId": "sha256:692fe8cbc7b8e5a03bcb79c20531aefdbfa31098ea43bbe9b0301d61cd869f27", + "splitCommunity": false, + "memberMatchingRows": 3, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 2, + "displayedAdjacencyConsistent": true, + "callTextBytes": 4341, + "callResponseWireBytes": 30594 + }, + { + "repository": "redux", + "tool": "compass", + "task": "redux-action-shape-validation", + "returnedSeedId": "sha256:237b20392b78b4972302af1924657a5709e90d5534fbdaee1ac633567db87377", + "expectedTargetId": "sha256:08c1f8776bb6ac1c79c535fe70f0341ba85fb12fcf8ab56171ee2281e3f6fcb9", + "splitCommunity": false, + "memberMatchingRows": 2, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 10857, + "callResponseWireBytes": 34820 + }, + { + "repository": "redux", + "tool": "compass", + "task": "redux-action-creator-binding", + "returnedSeedId": "sha256:872a5ee2bce2daedae73fa970870b29f3d0e02033199aa263da175827b5899fe", + "expectedTargetId": "sha256:118ac793f4d6b77676a6543f79b8cdef6cd785fef2e27dcaee49c6568ff3488d", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 2, + "displayedAdjacencyConsistent": true, + "callTextBytes": 3798, + "callResponseWireBytes": 64497 + }, + { + "repository": "redux", + "tool": "graphify", + "task": "redux-listener-registration", + "returnedSeedId": "src_createstore_createstore_subscribe", + "expectedTargetId": "src_createstore_createstore_ensurecanmutatenextlisteners", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 889, + "callResponseWireBytes": 1181 + }, + { + "repository": "redux", + "tool": "graphify", + "task": "redux-action-shape-validation", + "returnedSeedId": "src_utils_isaction_isaction", + "expectedTargetId": "src_utils_isplainobject_isplainobject", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 572, + "callResponseWireBytes": 856 + }, + { + "repository": "redux", + "tool": "graphify", + "task": "redux-action-creator-binding", + "returnedSeedId": "src_bindactioncreators_bindactioncreators", + "expectedTargetId": "src_bindactioncreators_bindactioncreator", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 1068, + "callResponseWireBytes": 1362 + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-directory-handle-budget", + "returnedSeedId": "sha256:c4870d899db4c0d3e82cf28916d9cadef5b8d7b249ea6fe7aa97bc7d465dfe45", + "expectedTargetId": "sha256:ff9fee2d67be76e5af714ef0bceb4d68be41efd8086deccc6a46eb19cd9ee0f9", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": false, + "unambiguousTargetLabel": false, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 0, + "displayedAdjacencyConsistent": true, + "callTextBytes": 3825, + "callResponseWireBytes": 7681 + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-deferred-directory-depth", + "returnedSeedId": "sha256:219c38f772358d6f0cd42cd06b879fe706b6672b0deee9461f8f7ec785618867", + "expectedTargetId": "sha256:648e4f3a42dcd72aa98ad5725459ca59362c53374b257faa9cd00a5cfee708f0", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 3782, + "callResponseWireBytes": 7697 + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-symlink-loop-detection", + "returnedSeedId": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "expectedTargetId": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 4863, + "callResponseWireBytes": 28962 + }, + { + "repository": "walkdir", + "tool": "graphify", + "task": "walkdir-directory-handle-budget", + "returnedSeedId": "src_lib_intoiter_push", + "expectedTargetId": "src_lib_dirlist_close", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 1175, + "callResponseWireBytes": 1488 + }, + { + "repository": "walkdir", + "tool": "graphify", + "task": "walkdir-deferred-directory-depth", + "returnedSeedId": "src_lib_intoiter_get_deferred_dir", + "expectedTargetId": "src_lib_intoiter_skippable", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 1093, + "callResponseWireBytes": 1404 + }, + { + "repository": "walkdir", + "tool": "graphify", + "task": "walkdir-symlink-loop-detection", + "returnedSeedId": "src_lib_intoiter_follow", + "expectedTargetId": "src_lib_intoiter_check_loop", + "splitCommunity": false, + "memberMatchingRows": 1, + "resolverStatus": "resolved", + "sourceMatchedSeedLookupCompleted": true, + "directCallRequired": true, + "reviewedCollaboratorLabelPresent": true, + "unambiguousTargetLabel": true, + "globalTargetLabelIdentities": 1, + "storedDirectCallRecords": 1, + "displayedAdjacencyConsistent": true, + "callTextBytes": 959, + "callResponseWireBytes": 1271 + } + ], + "interpretation": [ + "Each side returns the expected exact seed ID on all 15 tasks and completes a neighbor lookup using that ID. The earlier label-only failures do not establish that public navigation is impossible.", + "Compass uses search_symbols structured search hits/anchors; Graphify uses its documented get_node path::symbol form. The equal allowance is one resolver plus one neighbor call after the prepared community, not identical API names or native payload controls.", + "The completed lookup metric verifies the requested ID and successful expected heading. It does not claim that legacy neighbor output explicitly returns the seed ID. The older global-name-only identity check remains separately present in raw audits.", + "Compass shows the reviewed outgoing collaborator label on 13/14 direct-call tasks; Graphify on 14/14. Compass still lacks the source-supported WalkDir push -> DirList.close call at src/lib.rs:906 in the frozen graph.", + "Three target labels are ambiguous graph-wide in both products: Click close, jsoup parseFragment, and jsoup isWhitespace. Matching text is not exact target-definition evidence. Excluding those three gives 10/14 Compass versus 11/14 Graphify unambiguous target labels after source-matched seed lookup.", + "All five earlier split-community pairs are now navigable at the displayed-label level (two Compass, three Graphify). Those unequal subsets are descriptive and are not an additional comparative denominator.", + "This fixed workflow exchanges substantially more bytes for Compass. Its structured search returns multiple candidates, source anchors and richer evidence; native controls and returned semantic volume differ. The recorded cost is real for this policy, not a universal efficiency ranking.", + "No product code changed in this arm. These gains come from using existing public resolution capabilities with supplied source coordinates; they are not attributed to a new extraction fix." + ], + "verification": { + "calls": "All 90 executed public tool calls succeed: 30 community, 30 resolver and 30 neighbor calls. No timeout, response-cap failure or additional retry. All community memberships and displayed adjacency projections match their stored graphs.", + "tests": "129 developer-harness tests pass, including eight new resolver tests and one missing-target-oracle scorer test.", + "independentRecomputation": "A separate same-agent verifier checks saved requests/responses, support-file hashes, exact source coordinates, returned ID provenance, graph IDs and displayed neighbor multiplicity. It is not an independent semantic reviewer.", + "recapture": "After removing target-oracle availability from the new workflow control flow, final recapture retains all 90 tool response packets and all 30 task audits identically. The initial capture is preserved.", + "rust": "Not rerun: this iteration changes only developer evaluation and documentation, using the previously frozen and validated 0.3.30 binary." + }, + "nextEvidence": [ + "Resolve the reviewed indexed-receiver WalkDir call at the owning language/resolver boundary, with negative/ambiguity regressions and full extraction qualification.", + "Evaluate explicit target identities and source anchors in neighbor/call results; do not equate duplicate displayed labels with exact destinations.", + "Evaluate resolver cost with bounded source-aware lookup while preserving overload ambiguity.", + "Continue source-defined god-object evidence, community responsibility quality, directed/longer walks and fresh held-out confirmation." + ] +} diff --git a/benchmarks/agent_query/community_navigation.py b/benchmarks/agent_query/community_navigation.py new file mode 100644 index 000000000..09cd70314 --- /dev/null +++ b/benchmarks/agent_query/community_navigation.py @@ -0,0 +1,275 @@ +"""Bounded community-to-neighbor development capture with output-only selectors. + +Scoring consults frozen graphs after requests. Displayed name matches are kept +separate from conservative exact-identity support and source-call requirements. +""" +from __future__ import annotations + +import argparse +from collections import Counter, defaultdict +import json +from pathlib import Path +import re +import shutil +import time + +from benchmarks.agent_query.community_tasks import ( + MAX_JSON_BYTES, MAX_SOURCE_BYTES, audit_graph, digest, read_bounded, verify_source, +) +from benchmarks.agent_query.mcp_audit import audit as audit_membership, label +from benchmarks.agent_query.mcp_compare import captured_repository, verify_environment +from benchmarks.agent_query.mcp_transport import StdioMcp +from benchmarks.agent_query.runner import _sha256_file, _terminal_symbol + + +MEMBER = re.compile(r"^ (.*) \[(.*)\]$", re.M) +NEIGHBOR = re.compile(r"^ (-->|<--) (.*?) \[([^\]]*)\] \[[^\]]*\](?: at=.*)?$", re.M) +ERRORS = (OSError, RuntimeError, ValueError, TimeoutError) + + +def select_label(text: str, seed: dict) -> dict: + """Only public task coordinates and returned text may select the follow-up.""" + rows = [dict(label=name, file=file) for name, file in MEMBER.findall(text) + if file == seed['file'] and _terminal_symbol(name) == seed['symbol']] + choices = sorted({row['label'] for row in rows}) + return dict(matchingRows=rows, distinctLabels=choices, + selector=choices[0] if len(choices) == 1 else None, + status='selected' if len(choices) == 1 else 'missing' if not choices else 'ambiguous') + + +def score_navigation(text: str, graph: dict, tool: str, seed: str, target: str | None, + succeeded: bool) -> dict: + """Never identify a duplicate label by its conveniently matching neighbors.""" + nodes = {node['id']: node for node in graph['nodes']} + names = defaultdict(list) + for node in nodes.values(): + names[label(node, tool)].append(node['id']) + seed_name = label(nodes[seed], tool) + target_name = label(nodes[target], tool) if target in nodes else None + heading = text.splitlines()[0] if text else '' + header_matches = succeeded and heading == f'Neighbors of {seed_name}:' + actual = Counter((direction, name) for direction, name, relation in NEIGHBOR.findall(text) + if 'calls' in relation.lower()) + pairs = set() + direct_edges = [] + for edge in graph['links']: + relation = edge.get('kind' if tool == 'compass' else 'relation', '') + if 'calls' not in relation.lower(): + continue + a, b = edge['source'], edge['target'] + if a == seed: + pairs.add(('-->', b)) + if b == target: + direct_edges.append(edge) + if b == seed: + pairs.add(('<--', a)) + expected = Counter((direction, label(nodes[identifier], tool)) for direction, identifier in pairs) + identity = header_matches and names[seed_name] == [seed] + displayed = header_matches and target_name is not None and actual['-->', target_name] > 0 + return dict(seedHeadingMatches=header_matches, + ambiguityReported=bool(re.search(r'\bambiguous\b', text, re.I)), + seedLabelCandidates=sorted(names[seed_name]), seedIdentitySupported=identity, + expectedDisplayedNeighbors=sum(expected.values()), returnedDisplayedNeighbors=sum(actual.values()), + displayedAdjacencyMatches=header_matches and expected == actual, + missingDisplayedNeighbors=sorted((expected-actual).elements()), + extraDisplayedNeighbors=sorted((actual-expected).elements()), + collaboratorDisplayed=displayed, + collaboratorLabelCandidates=sorted(names[target_name]), + collaboratorIdentitySupported=displayed and identity and names[target_name] == [target], + graphDirectCallRecords=len(direct_edges)) + + +def call(session, method, arguments): + started = time.monotonic() + row = dict(method=method, arguments=arguments, executionSucceeded=False) + try: + packet = session.send('tools/call', dict(name=method, arguments=arguments)) + result = packet.get('result', {}) + text = '\n'.join(item['text'] for item in result.get('content', []) if item.get('type') == 'text') + raw = read_bounded(session.directory / f'{packet["id"]:02}.response.jsonl', 1048576) + if packet not in [json.loads(line) for line in raw.splitlines() if line]: + raise ValueError('response differs from saved transcript') + row.update(response=packet, text=text, textBytes=len(text.encode()), wireResponseBytes=len(raw), + executionSucceeded='error' not in packet and not result.get('isError', False)) + except ERRORS as error: + row['captureError'] = str(error) + row['elapsedSeconds'] = time.monotonic() - started + return row + + +def execute(args): + policy_bytes = read_bounded(args.policy, MAX_SOURCE_BYTES) + registration_bytes = read_bounded(args.registration, MAX_SOURCE_BYTES) + run_bytes = read_bounded(args.run, MAX_JSON_BYTES) + policy, registration, run = map(json.loads, [policy_bytes, registration_bytes, run_bytes]) + destination_mode = policy.get('schema') == 'compass.neighbor-identity-navigation-policy/1' + identity_mode = destination_mode or policy.get('schema') == 'compass.community-identity-navigation-policy/1' + if policy.get('schema') != 'compass.community-navigation-policy/1' and not identity_mode: + raise ValueError('unsupported workflow policy') + if registration.get('schema') != 'compass.community-task-pairs/1': + raise ValueError('unsupported task registration') + if digest(registration_bytes) != policy['registrationSha256'] or digest(run_bytes) != registration['sourceRunSha256']: + raise ValueError('registered input hash differs') + if policy['bounds'] != dict(requestTimeoutSeconds=60, maxResponseBytes=1048576, + maxSessionBytes=67108864, graphifyTokenBudget=262144): + raise ValueError('unsupported workflow bounds') + if identity_mode: + from benchmarks.agent_query.community_identity import SEARCH_LIMITS, resolver_request, selected_id + if policy['resolveCalls']['compass']['limits'] != SEARCH_LIMITS: + raise ValueError('unsupported resolver limits') + repositories = registration['repositories'] + if not 1 <= len(repositories) <= 32 or len({r['repository'] for r in repositories}) != len(repositories): + raise ValueError('invalid repository list') + direct = policy['directCallTasks'] + all_tasks = [t['id'] for r in repositories for t in r['tasks']] + if len(set(all_tasks)) != len(all_tasks) or len(set(direct)) != len(direct) or not set(direct) <= set(all_tasks): + raise ValueError('invalid direct-call task list') + verify_environment(args) + args.output.mkdir(parents=True, exist_ok=False) + report = dict(schema='compass.neighbor-identity-navigation-capture/1' if destination_mode else 'compass.community-identity-navigation-capture/1' if identity_mode else 'compass.community-navigation-capture/1', complete=False, + policySha256=digest(policy_bytes), registrationSha256=digest(registration_bytes), + sourceRunSha256=digest(run_bytes), sourceRun=str(args.run.resolve()), + graphifyEnvironmentSha256=_sha256_file(args.graphify_environment), + servers={}, supportFiles={}, sessions=[], results=[]) + for tool, path in [('compass', args.compass), ('graphify', args.graphify_python)]: + report['servers'][tool] = dict(path=str(path), sha256=_sha256_file(path)) + for path in [args.policy, args.registration, args.graphify_environment, *[ + Path(__file__).with_name(name) for name in ['community_navigation.py', 'community_tasks.py', + 'mcp_transport.py', 'mcp_compare.py', 'mcp_audit.py', 'runner.py', 'community_identity.py', 'neighbor_identity.py']]]: + shutil.copy2(path, args.output/path.name) + report['supportFiles'][path.name] = _sha256_file(path) + def save(): + (args.output/'capture.json').write_text(json.dumps(report, indent=2)+'\n') + save() + for repository in repositories: + name = repository['repository'] + previous = captured_repository(run, name) + root = Path(previous['source']) + verify_source(repository, root) + for tool in ['compass', 'graphify']: + path = Path(previous[tool+'Graph']) + data = read_bounded(path, registration['policy']['bounds']['maxGraphBytes']) + graph_hash = digest(data) + if graph_hash != repository['graphSha256'][tool]: + raise ValueError('registered graph hash differs') + graph = json.loads(data) + prepared = audit_graph(graph, tool, repository['tasks'], registration['policy']['bounds']) + declarations = {d['id']: d for d in prepared['declarations']} + argv = [str(args.compass), 'serve'] if tool == 'compass' else [str(args.graphify_python), '-m', 'graphify.serve'] + argv += ['--graph', str(path), '--transport', 'stdio'] + budget = {'token_budget':262144} if tool == 'graphify' else {} + directory = args.output/'raw'/name/tool + session_row = dict(repository=name, tool=tool, argv=argv) + failure = None + started = time.monotonic() + try: + with StdioMcp(argv, root, directory, timeout=60, max_bytes=1048576) as session: + try: + session.initialize() + listing = session.send('tools/list', {}) + advertised = {t['name'] for t in listing.get('result', {}).get('tools', [])} + required = {'get_community', 'get_neighbors'} + if identity_mode: + required.add('search_symbols' if tool == 'compass' else 'get_node') + if not required <= advertised: + raise ValueError('required public tools unavailable') + except ERRORS as error: + failure = str(error) + session_row['startupSeconds'] = time.monotonic() - started + for task in repository['tasks']: + if len(task['declarations']) != 2: + raise ValueError('workflow requires paired declarations') + seed, target = [declarations[d['id']] for d in task['declarations']] + row = dict(repository=name, tool=tool, task=task['id'], seed=seed, target=target, + graphSha256=graph_hash, directCallRequired=task['id'] in direct) + if failure is not None: + row['captureError'] = 'connection unavailable: '+failure + elif seed['status'] != 'resolved' or (not identity_mode and target['status'] != 'resolved'): + row['inputUnresolved'] = True + else: + row['splitCommunity'] = (seed['community'] != target['community']) if target['status'] == 'resolved' else None + community = call(session, 'get_community', dict(community_id=seed['community'], **budget)) + row['communityCall'] = community + if 'captureError' in community: + failure = community['captureError'] + elif community['executionSucceeded']: + # The selector function has no graph access. + selection = select_label(community['text'], task['declarations'][0]) + row['selection'] = selection + selector = selection['selector'] + if identity_mode: + prepared_request = resolver_request(tool, community['text'], task['declarations'][0]) + row['resolverSelection'] = prepared_request + selector = None + request = prepared_request['request'] + if request is not None: + resolved = call(session, request['method'], request['arguments']) + row['resolverCall'] = resolved + if 'captureError' in resolved: + failure = resolved['captureError'] + choice = selected_id(tool, resolved, task['declarations'][0]) + row['idSelection'] = choice + selector = choice['selector'] + if selector is not None: + neighbors = call(session, 'get_neighbors', dict(label=selector, relation_filter='calls', **budget)) + row['neighborCall'] = neighbors + if 'captureError' in neighbors: + failure = neighbors['captureError'] + row['audit'] = score_navigation(neighbors.get('text', ''), graph, tool, + seed['matchedNodeIds'][0], target['matchedNodeIds'][0] if len(target['matchedNodeIds']) == 1 else None, neighbors['executionSucceeded']) + if identity_mode: + checked = row['audit'] + checked['returnedIdMatchesSourceOracle'] = selector == seed['matchedNodeIds'][0] + completed = checked['returnedIdMatchesSourceOracle'] and checked['seedHeadingMatches'] + checked['sourceMatchedSeedLookupCompleted'] = completed + checked['addressedCollaboratorLabelPresent'] = completed and checked['collaboratorDisplayed'] + checked['addressedCollaboratorIdentitySupported'] = (checked['addressedCollaboratorLabelPresent'] + and len(checked['collaboratorLabelCandidates']) == 1) + if destination_mode: + from benchmarks.agent_query.neighbor_identity import destination_request, followup_score, audit_direct + target_id = target['matchedNodeIds'][0] if len(target['matchedNodeIds']) == 1 else None + if row['directCallRequired']: + request = destination_request(tool, neighbors, task['declarations'][1]) + row['destinationRequest'] = request + if request is not None and failure is None: + destination = call(session, request['method'], request['arguments']) + row['destinationCall'] = destination + if 'captureError' in destination: + failure = destination['captureError'] + row['destinationAudit'] = followup_score(tool, destination, task['declarations'][1], target_id) + row['identityAudit'] = audit_direct(neighbors, graph, tool, seed['matchedNodeIds'][0], target_id) + # Scoring is after requests, never selector preparation. + row['communityAudit'] = audit_membership(dict(repository=name, tool=tool, + question='community', **community), graph) + report['results'].append(row) + save() + print(name, tool, task['id'], row.get('selection', {}).get('status'), + row.get('audit', {}).get('seedIdentitySupported', False), + row.get('audit', {}).get('collaboratorIdentitySupported', False), flush=True) + except OSError as error: + session_row['launchError'] = str(error) + completed = {r['task'] for r in report['results'] if r['repository'] == name and r['tool'] == tool} + for task in repository['tasks']: + if task['id'] not in completed: + report['results'].append(dict(repository=name, tool=tool, task=task['id'], + directCallRequired=task['id'] in direct, captureError=str(error))) + session_row.update(elapsedSeconds=time.monotonic()-started, + wireFiles={p.name:p.stat().st_size for p in sorted(directory.glob('*')) if p.is_file()}) + report['sessions'].append(session_row) + save() + if _sha256_file(path) != graph_hash: + raise ValueError('graph changed during workflow') + verify_source(repository, root) + verify_environment(args) + for server in report['servers'].values(): + if _sha256_file(Path(server['path'])) != server['sha256']: + raise ValueError('server executable changed') + report['complete'] = True + save() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + for name in ['policy', 'registration', 'run', 'output', 'compass', 'graphify-python', 'graphify-environment']: + parser.add_argument('--'+name, type=Path, required=True) + execute(parser.parse_args()) diff --git a/benchmarks/agent_query/community_navigation_panel_a.json b/benchmarks/agent_query/community_navigation_panel_a.json new file mode 100644 index 000000000..da72a21fb --- /dev/null +++ b/benchmarks/agent_query/community_navigation_panel_a.json @@ -0,0 +1,50 @@ +{ + "schema": "compass.community-navigation-policy/1", + "scope": "Development diagnostic on reused graphs and source-reviewed tasks; no held-out or overall-superiority claim. Frozen before this public community-to-neighbor capture.", + "registrationSha256": "71faed0f477ee97da98c8bbb86686fae09de450664e4e000d9b2404496b94b6d", + "startingInput": "For every task, prepare the community containing the first exact source declaration symmetrically from each stored graph. Preparation is not scored as retrieval. Missing, ambiguous or unassigned inputs remain unresolved.", + "selectorPolicy": "Call get_community. Parse complete text member rows as two spaces, displayed label, space, [source file]. Match the public seed file and exact terminal symbol using runner._terminal_symbol. Retain every matching row. If exactly one distinct displayed label exists, send that label to get_neighbors even if repeated identically; record repeated rows. Otherwise stop unresolved. Never consult a graph to choose or substitute a follow-up selector. This baseline does not consume future structured community schemas.", + "followup": { + "tool": "get_neighbors", + "relation_filter": "calls", + "maximumCallsPerTask": 1, + "disambiguationRetries": 0 + }, + "bounds": { + "requestTimeoutSeconds": 60, + "maxResponseBytes": 1048576, + "maxSessionBytes": 67108864, + "graphifyTokenBudget": 262144 + }, + "budgetInterpretation": "Generous full-enumeration capability arm. Common external time/byte bounds; Graphify explicit token_budget and Compass whole-result interface are unequal native controls. Preserve wire bytes including initialization/listing and all errors. No latency or token-efficiency superiority claim.", + "scoring": [ + "Separate successful transport/tool execution, selected label, explicit ambiguity, matching seed heading, and identity support. Graphs may be consulted only for preparation/scoring, never follow-up selection.", + "Seed identity support requires a successful expected heading whose displayed label maps to exactly the expected source declaration across the entire stored graph. Do not disambiguate using expected adjacency or degree.", + "Compare displayed direction/name counts against distinct neighbors on stored calls edges. This is projection consistency, not source precision, complete relation coverage, or occurrence recall.", + "For the 14 reviewed direct-call tasks, report a displayed outgoing collaborator calls row separately from exact collaborator identity support. Exact support also requires seed identity support and the displayed target label to be unique graph-wide and equal the reviewed target ID. Do not substitute a convenient overloaded declaration.", + "Chi RequestID/GetReqID share a context key and have no direct call requirement. Keep that task in the 15-task navigation denominator, exclude it from the 14-task direct-collaborator denominator.", + "Report community splits separately; different tool-specific split subsets are not equal denominators. Record original community size, matching-row count, output sizes, failures and all unresolved outcomes." + ], + "directCallTasks": [ + "chi-router-construction", + "chi-route-pattern-parameters", + "click-atomic-close", + "click-terminal-string-width", + "click-help-definition-layout", + "jsoup-safe-document-copy", + "jsoup-html-fragment-parse", + "jsoup-html-whitespace", + "redux-listener-registration", + "redux-action-shape-validation", + "redux-action-creator-binding", + "walkdir-directory-handle-budget", + "walkdir-deferred-directory-depth", + "walkdir-symlink-loop-detection" + ], + "limitations": [ + "Only 15 purposively selected development tasks across five pinned repositories.", + "Public get_community to one get_neighbors follow-up is one workflow; additional searches, IDs from other tools and disambiguation retries are unmeasured.", + "Graph-wide display-label uniqueness is a conservative identity audit, not information directly supplied in the successful text response.", + "No extra assertion precision, architecture defect, god-object diagnosis or agent-generated explanation is scored." + ] +} diff --git a/benchmarks/agent_query/community_navigation_review_panel_a.json b/benchmarks/agent_query/community_navigation_review_panel_a.json new file mode 100644 index 000000000..38d45e5ad --- /dev/null +++ b/benchmarks/agent_query/community_navigation_review_panel_a.json @@ -0,0 +1,539 @@ +{ + "schema": "compass.community-navigation-review/1", + "scope": "Frozen one-follow-up public MCP development workflow on 15 source-defined tasks, five reused repositories. Not a general navigation, source-precision or superiority score.", + "policyCommit": "7a6d6c97", + "capture": "community-navigation-01/capture.json", + "captureSha256": "6c0da7060b53cb17ded2ca607563ae3a8723d76525897e709ffb4451f2e4bf2b", + "verificationSha256": "312c1a749409bd6983e0f0302f04ba450c2c4fb73e9c0f87c8f75726f73af7e5", + "summary": { + "compass": { + "tasks": 15, + "selected": 13, + "seedIdentitySupported": 5, + "directCallTasks": 14, + "collaboratorIdentitySupported": 4, + "directCallGraphPairsPresent": 13, + "explicitNeighborAmbiguity": 8, + "membershipConsistent": 15, + "callTextBytes": 145715, + "callResponseWireBytes": 150769, + "sessionWireBytesIncludingRequestsAndStderr": 238216 + }, + "graphify": { + "tasks": 15, + "selected": 15, + "seedIdentitySupported": 9, + "directCallTasks": 14, + "collaboratorIdentitySupported": 8, + "directCallGraphPairsPresent": 14, + "explicitNeighborAmbiguity": 6, + "membershipConsistent": 15, + "callTextBytes": 51605, + "callResponseWireBytes": 55173, + "sessionWireBytesIncludingRequestsAndStderr": 94443 + } + }, + "results": [ + { + "repository": "chi", + "tool": "compass", + "task": "chi-router-construction", + "selectedLabel": "NewRouter()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of NewRouter():", + "communityMembers": 90 + }, + { + "repository": "chi", + "tool": "compass", + "task": "chi-request-identity", + "selectedLabel": "RequestID()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": false, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 0, + "heading": "Ambiguous: 'RequestID()' matches 5 nodes. Retry with an exact node ID.", + "communityMembers": 44 + }, + { + "repository": "chi", + "tool": "compass", + "task": "chi-route-pattern-parameters", + "selectedLabel": "patParamKeys()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of patParamKeys():", + "communityMembers": 41 + }, + { + "repository": "chi", + "tool": "graphify", + "task": "chi-router-construction", + "selectedLabel": "NewRouter()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of NewRouter():", + "communityMembers": 108 + }, + { + "repository": "chi", + "tool": "graphify", + "task": "chi-request-identity", + "selectedLabel": "RequestID()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": false, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 0, + "heading": "Neighbors of RequestID():", + "communityMembers": 58 + }, + { + "repository": "chi", + "tool": "graphify", + "task": "chi-route-pattern-parameters", + "selectedLabel": "patParamKeys()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of patParamKeys():", + "communityMembers": 42 + }, + { + "repository": "click", + "tool": "compass", + "task": "click-atomic-close", + "selectedLabel": ".__exit__()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.__exit__()' matches 8 nodes. Retry with an exact node ID.", + "communityMembers": 203 + }, + { + "repository": "click", + "tool": "compass", + "task": "click-terminal-string-width", + "selectedLabel": "term_len()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: 'term_len()' matches 2 nodes. Retry with an exact node ID.", + "communityMembers": 95 + }, + { + "repository": "click", + "tool": "compass", + "task": "click-help-definition-layout", + "selectedLabel": ".write_dl()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .write_dl():", + "communityMembers": 95 + }, + { + "repository": "click", + "tool": "graphify", + "task": "click-atomic-close", + "selectedLabel": ".__exit__()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.__exit__()' matches 6 nodes in different files.", + "communityMembers": 9 + }, + { + "repository": "click", + "tool": "graphify", + "task": "click-terminal-string-width", + "selectedLabel": "term_len()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of term_len():", + "communityMembers": 24 + }, + { + "repository": "click", + "tool": "graphify", + "task": "click-help-definition-layout", + "selectedLabel": ".write_dl()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .write_dl():", + "communityMembers": 9 + }, + { + "repository": "jsoup", + "tool": "compass", + "task": "jsoup-safe-document-copy", + "selectedLabel": ".clean()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.clean()' matches 18 nodes. Retry with an exact node ID.", + "communityMembers": 159 + }, + { + "repository": "jsoup", + "tool": "compass", + "task": "jsoup-html-fragment-parse", + "selectedLabel": ".parseBodyFragment()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.parseBodyFragment()' matches 3 nodes. Retry with an exact node ID.", + "communityMembers": 815 + }, + { + "repository": "jsoup", + "tool": "compass", + "task": "jsoup-html-whitespace", + "selectedLabel": ".isBlank()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.isBlank()' matches 4 nodes. Retry with an exact node ID.", + "communityMembers": 143 + }, + { + "repository": "jsoup", + "tool": "graphify", + "task": "jsoup-safe-document-copy", + "selectedLabel": ".clean()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.clean()' matches 2 nodes in different files.", + "communityMembers": 56 + }, + { + "repository": "jsoup", + "tool": "graphify", + "task": "jsoup-html-fragment-parse", + "selectedLabel": ".parseBodyFragment()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.parsebodyfragment()' matches 2 nodes in different files.", + "communityMembers": 232 + }, + { + "repository": "jsoup", + "tool": "graphify", + "task": "jsoup-html-whitespace", + "selectedLabel": ".isBlank()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.isblank()' matches 3 nodes in different files.", + "communityMembers": 76 + }, + { + "repository": "redux", + "tool": "compass", + "task": "redux-listener-registration", + "selectedLabel": null, + "selectionStatus": "ambiguous", + "matchingRows": 3, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 2, + "heading": "", + "communityMembers": 55 + }, + { + "repository": "redux", + "tool": "compass", + "task": "redux-action-shape-validation", + "selectedLabel": null, + "selectionStatus": "ambiguous", + "matchingRows": 2, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "", + "communityMembers": 252 + }, + { + "repository": "redux", + "tool": "compass", + "task": "redux-action-creator-binding", + "selectedLabel": "bindActionCreators()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 2, + "heading": "Ambiguous: 'bindActionCreators()' matches 13 nodes. Retry with an exact node ID.", + "communityMembers": 55 + }, + { + "repository": "redux", + "tool": "graphify", + "task": "redux-listener-registration", + "selectedLabel": "subscribe()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: 'subscribe()' matches 2 nodes in different files.", + "communityMembers": 15 + }, + { + "repository": "redux", + "tool": "graphify", + "task": "redux-action-shape-validation", + "selectedLabel": "isAction()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: 'isaction()' matches 2 nodes in different files.", + "communityMembers": 8 + }, + { + "repository": "redux", + "tool": "graphify", + "task": "redux-action-creator-binding", + "selectedLabel": "bindActionCreators()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of bindActionCreators():", + "communityMembers": 14 + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-directory-handle-budget", + "selectedLabel": ".push()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 0, + "heading": "Neighbors of .push():", + "communityMembers": 116 + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-deferred-directory-depth", + "selectedLabel": ".get_deferred_dir()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .get_deferred_dir():", + "communityMembers": 116 + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-symlink-loop-detection", + "selectedLabel": ".follow()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.follow()' matches 21 nodes. Retry with an exact node ID.", + "communityMembers": 116 + }, + { + "repository": "walkdir", + "tool": "graphify", + "task": "walkdir-directory-handle-budget", + "selectedLabel": ".push()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .push():", + "communityMembers": 33 + }, + { + "repository": "walkdir", + "tool": "graphify", + "task": "walkdir-deferred-directory-depth", + "selectedLabel": ".get_deferred_dir()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .get_deferred_dir():", + "communityMembers": 33 + }, + { + "repository": "walkdir", + "tool": "graphify", + "task": "walkdir-symlink-loop-detection", + "selectedLabel": ".follow()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .follow():", + "communityMembers": 33 + } + ], + "diagnostics": [ + { + "finding": "Unique displayed seed names can still produce broader matcher ambiguity in Compass.", + "tasks": [ + "chi-request-identity", + "click-terminal-string-width", + "walkdir-symlink-loop-detection" + ], + "evidence": "The successful community row uniquely names RequestID(), term_len(), or .follow() graph-wide. Neighbor lookup returns 5, 2 or 21 candidate matches respectively, including NextRequestID(), test_term_len(), or .follow_links(). find_node in compass-query score.rs appends exact, prefix and substring matches; get_neighbors treats the whole returned list as ambiguous. These are not missing source declarations." + }, + { + "finding": "Community display rows do not uniquely select two Compass Redux declaration inputs.", + "tasks": [ + "redux-listener-registration", + "redux-action-shape-validation" + ], + "evidence": "The same source file has three terminal-symbol subscribe matches and two isAction matches with distinct displayed labels. The frozen policy stops without substituting an expected graph ID or selecting a convenient row. Source declaration start lines are not present in the member text." + }, + { + "finding": "Both tools correctly report several genuine name collisions; one extra disambiguation call was outside this arm.", + "evidence": "Click __exit__ and all three selected jsoup seeds are ambiguous in both products. Graphify also reports subscribe and isAction ambiguity; Compass reports bindActionCreators overload/name ambiguity. Responses often supply candidate IDs; Graphify also suggests path::symbol. No additional calls were allowed, so these results do not show that a longer public workflow is impossible." + }, + { + "finding": "Compass lacks the reviewed WalkDir push-to-close edge in this frozen graph.", + "sourceFile": "src/lib.rs", + "line": 906, + "witness": "self.stack_list[self.oldest_opened].close();", + "evidence": "The exact push and DirList.close declarations resolve uniquely in both graphs. Compass has zero calls edges for that pair and its successful public neighbor response omits close; Graphify stores and displays the source-supported pair. This is a graph resolution/extraction gap distinct from member-handle selection. It is not diagnosed as a clustering defect." + }, + { + "finding": "No split collaborator is reached in this one-follow-up arm.", + "evidence": "Compass has two split pairs and Graphify three; all corresponding neighbor responses are ambiguous. The prior source-backed audit found the required call edges in all five cases. These unequal subsets are descriptive, not a separate head-to-head denominator." + } + ], + "verification": { + "calls": "All 58 executed public tool calls succeeded at the protocol/tool level; 30 community lists matched their stored membership. Two Compass follow-ups were not issued because selector selection was ambiguous. No timeout, cap failure or connection failure occurred.", + "tests": "119 developer-harness tests pass, including ten new selection/identity/direction/multiplicity regressions.", + "recomputation": "Separate same-agent script verifies saved request/response transcripts, support-file and graph hashes, seed identity and target counts. No independent semantic reviewer.", + "rust": "Not run: this iteration changes only developer evaluation and documentation, with no Rust/product changes." + }, + "limitations": [ + "Graph-wide name uniqueness is a conservative identity check; the text itself does not expose all identities.", + "All 15 inputs require prepared starting communities; starting community discovery is not scored.", + "Source-call requirements are 14 pairs; RequestID/GetReqID share context rather than a direct call. Distinct-neighbor results do not measure parallel call occurrence recall.", + "Generous full enumeration uses common external limits and unequal native token controls; text/wire byte totals include different community sizes and differing success counts, so are not equal-success efficiency evidence.", + "No clustering tuning, god-object diagnosis, comprehensive assertion precision, agent-generated explanation, held-out confirmation or overall winner is established." + ], + "serverExecutableSha256": { + "compass": "0bd42c8b4b5e88622747ec80920daa36a522ff326355fb35adea3b55f5e9fe3f", + "graphify": "bc9a27bd52c265e86fcd73ef1d4165ec8a47695cffb7624cb0ee618dca83e6c0" + } +} diff --git a/benchmarks/agent_query/community_task_pairs_panel_a.json b/benchmarks/agent_query/community_task_pairs_panel_a.json new file mode 100644 index 000000000..4fd5c46cb --- /dev/null +++ b/benchmarks/agent_query/community_task_pairs_panel_a.json @@ -0,0 +1,488 @@ +{ + "schema": "compass.community-task-pairs/1", + "scope": "Source-defined task-local community diagnostic on reused development repositories. Frozen before inspecting assignments for these selected declarations. Prior unrelated graph outputs have been observed; this is not held-out or independent review.", + "sourceRun": "java-varargs-panel-a-02", + "sourceRunSha256": "c2bc04366343fbd32bbdf84ccfb1db7aaad2e2ed38b38f979065c6755432d792", + "policy": { + "unit": "Exact file, declaration start and terminal symbol; retain every matching node identity. Missing, ambiguous or unassigned declarations are unresolved, never a successful separation.", + "artifactComparison": "Inspect each tool native-only stored community assignments on its unchanged captured graph. This is an artifact-quality diagnostic, not a timed CLI/MCP workflow or synthesized answer.", + "pairSelection": "All unordered pairs among the six selected declarations per repository: three within-task collaborator pairs and twelve cross-task pairs. No output selects or drops a pair.", + "metrics": "Report same-community, different-community and unresolved counts separately for within-task and cross-task pairs, stratified by same-file versus cross-file. Report whole-community sizes and source-file diversity for context. Never combine these into an accuracy or superiority score.", + "interpretation": "Within-task co-location measures one way to retain a reviewed collaborator. Cross-task co-location describes grouping granularity, not an automatic defect: tasks can share helpers and state or belong to one coherent subsystem. Different community IDs have no cross-tool meaning.", + "bounds": { + "maxGraphBytes": 268435456, + "maxNodes": 200000, + "maxEdges": 1000000 + }, + "counterevidence": [ + "Click help-table measurement calls term_len, linking two named tasks directly; putting them together may be useful.", + "WalkDir tasks are cooperating parts of one iterator and share configuration or traversal state. Separating all of them is not a required architecture.", + "Chi router construction and pattern handling both support routing; a large core community can be coherent.", + "jsoup parsing, safe copying and whitespace classification can cooperate in HTML processing.", + "Redux action validation supports store behavior as well as standalone checks; the small pairs do not partition all responsibilities." + ], + "limitations": [ + "Only 30 purposively selected declarations and 75 pairs; two within-task pairs cross files. Results are not population precision or a whole-system architecture oracle.", + "Task annotations are source-backed reviewer judgments. They do not establish exclusive ownership, refactoring need, god-object positives/negatives, or independently confirmed semantic labels.", + "Graph edge/source correctness outside the exact declaration witnesses remains unaudited in this arm.", + "No cluster algorithm may be tuned merely to maximize these co-location counts; review actual source mechanisms and granularity tradeoffs first." + ] + }, + "repositories": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "graphSha256": { + "compass": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphify": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + "tasks": [ + { + "id": "chi-router-construction", + "task": "Construct the router exposed by the public factory.", + "sourceReason": "NewRouter delegates directly to NewMux, which initializes its routing tree and context pool.", + "declarations": [ + { + "id": "chi-router-construction-NewRouter", + "symbol": "NewRouter", + "ownerContext": "package chi", + "file": "chi.go", + "startLine": 62, + "witnessEndLine": 64, + "sourceFileSha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678", + "witness": "func NewRouter() *Mux {\n\treturn NewMux()\n}" + }, + { + "id": "chi-router-construction-NewMux", + "symbol": "NewMux", + "ownerContext": "package chi", + "file": "mux.go", + "startLine": 52, + "witnessEndLine": 59, + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "witness": "func NewMux() *Mux {\n\tmux := &Mux{tree: &node{}, pool: &sync.Pool{}}\n\tmux.pool.New = func() any {\n\t\treturn NewRouteContext()\n\t}\n\treturn mux\n}\n" + } + ] + }, + { + "id": "chi-request-identity", + "task": "Attach and retrieve an HTTP request identifier.", + "sourceReason": "RequestID stores a value under RequestIDKey; GetReqID retrieves that same context value.", + "declarations": [ + { + "id": "chi-request-identity-RequestID", + "symbol": "RequestID", + "ownerContext": "package middleware", + "file": "middleware/request_id.go", + "startLine": 67, + "witnessEndLine": 80, + "sourceFileSha256": "31b21034dd5cd6393fa9abc9ce1207acc78fea1e162d866edf6bb2a7badd288b", + "witness": "func RequestID(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tctx := r.Context()\n\t\trequestID := r.Header.Get(RequestIDHeader)\n\t\tif requestID == \"\" {\n\t\t\tmyid := reqid.Add(1)\n\t\t\trequestID = fmt.Sprintf(\"%s-%06d\", prefix, myid)\n\t\t}\n\t\tctx = context.WithValue(ctx, RequestIDKey, requestID)\n\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t}\n\treturn http.HandlerFunc(fn)\n}\n" + }, + { + "id": "chi-request-identity-GetReqID", + "symbol": "GetReqID", + "ownerContext": "package middleware", + "file": "middleware/request_id.go", + "startLine": 83, + "witnessEndLine": 91, + "sourceFileSha256": "31b21034dd5cd6393fa9abc9ce1207acc78fea1e162d866edf6bb2a7badd288b", + "witness": "func GetReqID(ctx context.Context) string {\n\tif ctx == nil {\n\t\treturn \"\"\n\t}\n\tif reqID, ok := ctx.Value(RequestIDKey).(string); ok {\n\t\treturn reqID\n\t}\n\treturn \"\"\n}" + } + ] + }, + { + "id": "chi-route-pattern-parameters", + "task": "Read parameter keys from a route pattern.", + "sourceReason": "patParamKeys repeatedly calls patNextSegment, checks duplicate keys and advances through the pattern.", + "declarations": [ + { + "id": "chi-route-pattern-parameters-patParamKeys", + "symbol": "patParamKeys", + "ownerContext": "package chi", + "file": "tree.go", + "startLine": 803, + "witnessEndLine": 819, + "sourceFileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "witness": "func patParamKeys(pattern string) []string {\n\tpat := pattern\n\tparamKeys := []string{}\n\tfor {\n\t\tptyp, paramKey, _, _, _, e := patNextSegment(pat)\n\t\tif ptyp == ntStatic {\n\t\t\treturn paramKeys\n\t\t}\n\t\tfor i := 0; i < len(paramKeys); i++ {\n\t\t\tif paramKeys[i] == paramKey {\n\t\t\t\tpanic(fmt.Sprintf(\"chi: routing pattern '%s' contains duplicate param key, '%s'\", pattern, paramKey))\n\t\t\t}\n\t\t}\n\t\tparamKeys = append(paramKeys, paramKey)\n\t\tpat = pat[e:]\n\t}\n}" + }, + { + "id": "chi-route-pattern-parameters-patNextSegment", + "symbol": "patNextSegment", + "ownerContext": "package chi", + "file": "tree.go", + "startLine": 735, + "witnessEndLine": 801, + "sourceFileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "witness": "func patNextSegment(pattern string) (nodeTyp, string, string, byte, int, int) {\n\tps := strings.Index(pattern, \"{\")\n\tws := strings.Index(pattern, \"*\")\n\n\tif ps < 0 && ws < 0 {\n\t\treturn ntStatic, \"\", \"\", 0, 0, len(pattern) // we return the entire thing\n\t}\n\n\t// Sanity check\n\tif ps >= 0 && ws >= 0 && ws < ps {\n\t\tpanic(\"chi: wildcard '*' must be the last pattern in a route, otherwise use a '{param}'\")\n\t}\n\n\tvar tail byte = '/' // Default endpoint tail to / byte\n\n\tif ps >= 0 {\n\t\t// Param/Regexp pattern is next\n\t\tnt := ntParam\n\n\t\t// Read to closing } taking into account opens and closes in curl count (cc)\n\t\tcc := 0\n\t\tpe := ps\n\t\tfor i, c := range pattern[ps:] {\n\t\t\tif c == '{' {\n\t\t\t\tcc++\n\t\t\t} else if c == '}' {\n\t\t\t\tcc--\n\t\t\t\tif cc == 0 {\n\t\t\t\t\tpe = ps + i\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif pe == ps {\n\t\t\tpanic(\"chi: route param closing delimiter '}' is missing\")\n\t\t}\n\n\t\tkey := pattern[ps+1 : pe]\n\t\tpe++ // set end to next position\n\n\t\tif pe < len(pattern) {\n\t\t\ttail = pattern[pe]\n\t\t}\n\n\t\tkey, rexpat, isRegexp := strings.Cut(key, \":\")\n\t\tif isRegexp {\n\t\t\tnt = ntRegexp\n\t\t}\n\n\t\tif len(rexpat) > 0 {\n\t\t\tif rexpat[0] != '^' {\n\t\t\t\trexpat = \"^\" + rexpat\n\t\t\t}\n\t\t\tif rexpat[len(rexpat)-1] != '$' {\n\t\t\t\trexpat += \"$\"\n\t\t\t}\n\t\t}\n\n\t\treturn nt, key, rexpat, tail, ps, pe\n\t}\n\n\t// Wildcard pattern as finale\n\tif ws < len(pattern)-1 {\n\t\tpanic(\"chi: wildcard '*' must be the last value in a route. trim trailing text or use a '{param}' instead\")\n\t}\n\treturn ntCatchAll, \"*\", \"\", 0, ws, len(pattern)\n}" + } + ] + } + ] + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "graphSha256": { + "compass": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphify": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + "tasks": [ + { + "id": "click-atomic-close", + "task": "Follow atomic-file replacement and context cleanup.", + "sourceReason": "The context exit delegates to close; close checks closed, closes the wrapped stream and replaces the destination. The delete parameter does not implement rollback.", + "declarations": [ + { + "id": "click-atomic-close-__exit__", + "symbol": "__exit__", + "ownerContext": "_AtomicFile", + "file": "src/click/_compat.py", + "startLine": 479, + "witnessEndLine": 485, + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "witness": " def __exit__(\n self,\n exc_type: type[BaseException] | None,\n exc_value: BaseException | None,\n tb: TracebackType | None,\n ) -> None:\n self.close(delete=exc_type is not None)" + }, + { + "id": "click-atomic-close-close", + "symbol": "close", + "ownerContext": "_AtomicFile", + "file": "src/click/_compat.py", + "startLine": 466, + "witnessEndLine": 471, + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "witness": " def close(self, delete: bool = False) -> None:\n if self.closed:\n return\n self._f.close()\n os.replace(self._tmp_filename, self._real_filename)\n self.closed = True" + } + ] + }, + { + "id": "click-terminal-string-width", + "task": "Measure visible terminal text without ANSI escapes.", + "sourceReason": "term_len takes the length after strip_ansi removes escape sequences.", + "declarations": [ + { + "id": "click-terminal-string-width-term_len", + "symbol": "term_len", + "ownerContext": "module", + "file": "src/click/_compat.py", + "startLine": 536, + "witnessEndLine": 537, + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "witness": "def term_len(x: str) -> int:\n return len(strip_ansi(x))" + }, + { + "id": "click-terminal-string-width-strip_ansi", + "symbol": "strip_ansi", + "ownerContext": "module", + "file": "src/click/_compat.py", + "startLine": 491, + "witnessEndLine": 492, + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "witness": "def strip_ansi(value: str) -> str:\n return _ansi_re.sub(\"\", value)" + } + ] + }, + { + "id": "click-help-definition-layout", + "task": "Calculate columns when formatting option and command help.", + "sourceReason": "HelpFormatter.write_dl materializes rows and invokes measure_table to calculate column widths.", + "declarations": [ + { + "id": "click-help-definition-layout-write_dl", + "symbol": "write_dl", + "ownerContext": "HelpFormatter", + "file": "src/click/formatting.py", + "startLine": 229, + "witnessEndLine": 248, + "sourceFileSha256": "f125b628692f8dfcfd43535b7a88cc1ee64137471f9d0243b389aa0cfea85e6b", + "witness": " def write_dl(\n self,\n rows: cabc.Iterable[tuple[str, str]],\n col_max: int = 30,\n col_spacing: int = 2,\n ) -> None:\n \"\"\"Writes a definition list into the buffer. This is how options\n and commands are usually formatted.\n\n :param rows: a list of two item tuples for the terms and values.\n :param col_max: the maximum width of the first column.\n :param col_spacing: the number of spaces between the first and\n second column.\n \"\"\"\n rows = list(rows)\n widths = measure_table(rows)\n if len(widths) != 2:\n raise TypeError(\"Expected two columns for definition list\")\n\n first_col = min(widths[0], col_max) + col_spacing" + }, + { + "id": "click-help-definition-layout-measure_table", + "symbol": "measure_table", + "ownerContext": "module", + "file": "src/click/formatting.py", + "startLine": 14, + "witnessEndLine": 21, + "sourceFileSha256": "f125b628692f8dfcfd43535b7a88cc1ee64137471f9d0243b389aa0cfea85e6b", + "witness": "def measure_table(rows: cabc.Iterable[tuple[str, str]]) -> tuple[int, ...]:\n widths: dict[int, int] = {}\n\n for row in rows:\n for idx, col in enumerate(row):\n widths[idx] = max(widths.get(idx, 0), term_len(col))\n\n return tuple(y for x, y in sorted(widths.items()))" + } + ] + } + ] + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "graphSha256": { + "compass": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "graphify": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + "tasks": [ + { + "id": "jsoup-safe-document-copy", + "task": "Copy allowed body content into a separate clean document.", + "sourceReason": "clean creates a shell and delegates body copying to copySafeNodes; that helper traverses a CleaningVisitor and returns its discarded count.", + "declarations": [ + { + "id": "jsoup-safe-document-copy-clean", + "symbol": "clean", + "ownerContext": "Cleaner", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 62, + "witnessEndLine": 71, + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "witness": " public Document clean(Document dirtyDocument) {\n Validate.notNull(dirtyDocument);\n\n Document clean = Document.createShell(dirtyDocument.baseUri());\n copySafeNodes(dirtyDocument.body(), clean.body());\n clean.outputSettings(dirtyDocument.outputSettings().clone());\n\n return clean;\n }\n" + }, + { + "id": "jsoup-safe-document-copy-copySafeNodes", + "symbol": "copySafeNodes", + "ownerContext": "Cleaner", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 182, + "witnessEndLine": 186, + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "witness": " private int copySafeNodes(Element source, Element dest) {\n CleaningVisitor cleaningVisitor = new CleaningVisitor(source, dest);\n cleaningVisitor.traverse(source);\n return cleaningVisitor.numDiscarded;\n }" + } + ] + }, + { + "id": "jsoup-html-fragment-parse", + "task": "Parse an HTML fragment into a document body.", + "sourceReason": "parseBodyFragment constructs the body context and calls the three-argument parseFragment overload, which invokes HtmlTreeBuilder.", + "declarations": [ + { + "id": "jsoup-html-fragment-parse-parseBodyFragment", + "symbol": "parseBodyFragment", + "ownerContext": "Parser", + "file": "src/main/java/org/jsoup/parser/Parser.java", + "startLine": 338, + "witnessEndLine": 344, + "sourceFileSha256": "2b8baa95140fbf12fad9c874b42d8d31e24b186fd7c665c1708395e6d852ba98", + "witness": " public static Document parseBodyFragment(String bodyHtml, String baseUri) {\n Document doc = Document.createShell(baseUri);\n Element body = doc.body();\n List nodeList = parseFragment(bodyHtml, body, baseUri);\n body.appendChildren(nodeList);\n return doc;\n }" + }, + { + "id": "jsoup-html-fragment-parse-parseFragment", + "symbol": "parseFragment", + "ownerContext": "Parser", + "file": "src/main/java/org/jsoup/parser/Parser.java", + "startLine": 295, + "witnessEndLine": 298, + "sourceFileSha256": "2b8baa95140fbf12fad9c874b42d8d31e24b186fd7c665c1708395e6d852ba98", + "witness": " public static List parseFragment(String fragmentHtml, Element context, String baseUri) {\n HtmlTreeBuilder treeBuilder = new HtmlTreeBuilder();\n return treeBuilder.parseFragment(new StringReader(fragmentHtml), context, baseUri, new Parser(treeBuilder));\n }" + } + ] + }, + { + "id": "jsoup-html-whitespace", + "task": "Determine whether text consists of HTML whitespace.", + "sourceReason": "isBlank checks each code point through isWhitespace; isWhitespace implements the specific HTML whitespace character set.", + "declarations": [ + { + "id": "jsoup-html-whitespace-isBlank", + "symbol": "isBlank", + "ownerContext": "StringUtil", + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "startLine": 151, + "witnessEndLine": 162, + "sourceFileSha256": "7e61ba7e8630f101f0a74d56fb91237c8588fceeb5c472166c60926dd6047881", + "witness": " public static boolean isBlank(@Nullable String string) {\n if (string == null || string.isEmpty())\n return true;\n\n int l = string.length();\n for (int i = 0; i < l; i++) {\n if (!StringUtil.isWhitespace(string.codePointAt(i)))\n return false;\n }\n return true;\n }\n" + }, + { + "id": "jsoup-html-whitespace-isWhitespace", + "symbol": "isWhitespace", + "ownerContext": "StringUtil", + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "startLine": 205, + "witnessEndLine": 207, + "sourceFileSha256": "7e61ba7e8630f101f0a74d56fb91237c8588fceeb5c472166c60926dd6047881", + "witness": " public static boolean isWhitespace(int c){\n return c == ' ' || c == '\\t' || c == '\\n' || c == '\\f' || c == '\\r';\n }" + } + ] + } + ] + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "graphSha256": { + "compass": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphify": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + "tasks": [ + { + "id": "redux-listener-registration", + "task": "Register and unregister listeners without rewriting the active listener map.", + "sourceReason": "subscribe invokes ensureCanMutateNextListeners before adding and removing listeners; the helper copies the map when it aliases currentListeners.", + "declarations": [ + { + "id": "redux-listener-registration-subscribe", + "symbol": "subscribe", + "ownerContext": "createStore implementation", + "file": "src/createStore.ts", + "startLine": 201, + "witnessEndLine": 243, + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "witness": " function subscribe(listener: () => void) {\n if (typeof listener !== 'function') {\n throw new Error(\n `Expected the listener to be a function. Instead, received: '${kindOf(\n listener\n )}'`\n )\n }\n\n if (isDispatching) {\n throw new Error(\n 'You may not call store.subscribe() while the reducer is executing. ' +\n 'If you would like to be notified after the store has been updated, subscribe from a ' +\n 'component and invoke store.getState() in the callback to access the latest state. ' +\n 'See https://redux.js.org/api/store#subscribelistener for more details.'\n )\n }\n\n let isSubscribed = true\n\n ensureCanMutateNextListeners()\n const listenerId = listenerIdCounter++\n nextListeners.set(listenerId, listener)\n\n return function unsubscribe() {\n if (!isSubscribed) {\n return\n }\n\n if (isDispatching) {\n throw new Error(\n 'You may not unsubscribe from a store listener while the reducer is executing. ' +\n 'See https://redux.js.org/api/store#subscribelistener for more details.'\n )\n }\n\n isSubscribed = false\n\n ensureCanMutateNextListeners()\n nextListeners.delete(listenerId)\n currentListeners = null\n }\n }" + }, + { + "id": "redux-listener-registration-ensureCanMutateNextListeners", + "symbol": "ensureCanMutateNextListeners", + "ownerContext": "createStore implementation", + "file": "src/createStore.ts", + "startLine": 152, + "witnessEndLine": 159, + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "witness": " function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = new Map()\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener)\n })\n }\n }" + } + ] + }, + { + "id": "redux-action-shape-validation", + "task": "Check that an action is a plain object with a string type.", + "sourceReason": "isAction first calls isPlainObject, then checks the type property; isPlainObject examines the object prototype chain.", + "declarations": [ + { + "id": "redux-action-shape-validation-isAction", + "symbol": "isAction", + "ownerContext": "module", + "file": "src/utils/isAction.ts", + "startLine": 4, + "witnessEndLine": 10, + "sourceFileSha256": "2cf7a3b535cb14b9bb2ac7648b5f103f2a80427d96c7eb391fd11f617944a8a2", + "witness": "export default function isAction(action: unknown): action is Action {\n return (\n isPlainObject(action) &&\n 'type' in action &&\n typeof (action as Record<'type', unknown>).type === 'string'\n )\n}" + }, + { + "id": "redux-action-shape-validation-isPlainObject", + "symbol": "isPlainObject", + "ownerContext": "module", + "file": "src/utils/isPlainObject.ts", + "startLine": 5, + "witnessEndLine": 16, + "sourceFileSha256": "30153dae9fd245b8574f96cf9c08cf33e7d12881b0ad4e4e458646bef5b32793", + "witness": "export default function isPlainObject(obj: any): obj is object {\n if (typeof obj !== 'object' || obj === null) return false\n\n let proto = obj\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto)\n }\n\n return (\n Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null\n )\n}" + } + ] + }, + { + "id": "redux-action-creator-binding", + "task": "Wrap action creators so their results are dispatched.", + "sourceReason": "The bindActionCreators implementation handles a function or a map and delegates each callable to bindActionCreator, whose wrapper dispatches the returned action.", + "declarations": [ + { + "id": "redux-action-creator-binding-bindActionCreators", + "symbol": "bindActionCreators", + "ownerContext": "module", + "file": "src/bindActionCreators.ts", + "startLine": 58, + "witnessEndLine": 83, + "sourceFileSha256": "53b834cc532443fcf9f392ea86b970b640bccea5dac7c2ef16516cbe99a176f1", + "witness": "export default function bindActionCreators(\n actionCreators: ActionCreator | ActionCreatorsMapObject,\n dispatch: Dispatch\n) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch)\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(\n `bindActionCreators expected an object or a function, but instead received: '${kindOf(\n actionCreators\n )}'. ` +\n `Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`\n )\n }\n\n const boundActionCreators: ActionCreatorsMapObject = {}\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key]\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch)\n }\n }\n return boundActionCreators\n}" + }, + { + "id": "redux-action-creator-binding-bindActionCreator", + "symbol": "bindActionCreator", + "ownerContext": "module", + "file": "src/bindActionCreators.ts", + "startLine": 9, + "witnessEndLine": 16, + "sourceFileSha256": "53b834cc532443fcf9f392ea86b970b640bccea5dac7c2ef16516cbe99a176f1", + "witness": "function bindActionCreator(\n actionCreator: ActionCreator,\n dispatch: Dispatch\n) {\n return function (this: any, ...args: any[]) {\n return dispatch(actionCreator.apply(this, args))\n }\n}" + } + ] + } + ] + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "graphSha256": { + "compass": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "graphify": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + }, + "tasks": [ + { + "id": "walkdir-directory-handle-budget", + "task": "Make room under the open-directory limit before opening another directory.", + "sourceReason": "IntoIter.push closes the oldest open DirList when max_open is reached. DirList.close drains an open stream into a closed in-memory iterator.", + "declarations": [ + { + "id": "walkdir-directory-handle-budget-push", + "symbol": "push", + "ownerContext": "IntoIter", + "file": "src/lib.rs", + "startLine": 901, + "witnessEndLine": 914, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "witness": " fn push(&mut self, dent: &DirEntry) -> Result<()> {\n // Make room for another open file descriptor if we've hit the max.\n let free =\n self.stack_list.len().checked_sub(self.oldest_opened).unwrap();\n if free == self.opts.max_open {\n self.stack_list[self.oldest_opened].close();\n }\n // Open a handle to reading the directory's entries.\n let rd = fs::read_dir(dent.path()).map_err(|err| {\n Some(Error::from_path(self.depth, dent.path().to_path_buf(), err))\n });\n let mut list = DirList::Opened { depth: self.depth, it: rd };\n if let Some(ref mut cmp) = self.opts.sorter {\n let mut entries: Vec<_> = list.collect();" + }, + { + "id": "walkdir-directory-handle-budget-close", + "symbol": "close", + "ownerContext": "DirList", + "file": "src/lib.rs", + "startLine": 1008, + "witnessEndLine": 1012, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "witness": " fn close(&mut self) {\n if let DirList::Opened { .. } = *self {\n *self = DirList::Closed(self.collect::>().into_iter());\n }\n }" + } + ] + }, + { + "id": "walkdir-deferred-directory-depth", + "task": "Return deferred directory entries only at allowed depths.", + "sourceReason": "get_deferred_dir uses contents_first and the deferred stack, and asks skippable whether the current depth lies outside the configured bounds.", + "declarations": [ + { + "id": "walkdir-deferred-directory-depth-get_deferred_dir", + "symbol": "get_deferred_dir", + "ownerContext": "IntoIter", + "file": "src/lib.rs", + "startLine": 884, + "witnessEndLine": 898, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "witness": " fn get_deferred_dir(&mut self) -> Option {\n if self.opts.contents_first {\n if self.depth < self.deferred_dirs.len() {\n // Unwrap is safe here because we've guaranteed that\n // `self.deferred_dirs.len()` can never be less than 1\n let deferred: DirEntry = self\n .deferred_dirs\n .pop()\n .expect(\"BUG: deferred_dirs should be non-empty\");\n if !self.skippable() {\n return Some(deferred);\n }\n }\n }\n None" + }, + { + "id": "walkdir-deferred-directory-depth-skippable", + "symbol": "skippable", + "ownerContext": "IntoIter", + "file": "src/lib.rs", + "startLine": 1000, + "witnessEndLine": 1002, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "witness": " fn skippable(&self) -> bool {\n self.depth < self.opts.min_depth || self.depth > self.opts.max_depth\n }" + } + ] + }, + { + "id": "walkdir-symlink-loop-detection", + "task": "Check followed directory targets against ancestor handles.", + "sourceReason": "follow invokes check_loop only for directories; check_loop compares handles with ancestors and returns a loop error for a match.", + "declarations": [ + { + "id": "walkdir-symlink-loop-detection-follow", + "symbol": "follow", + "ownerContext": "IntoIter", + "file": "src/lib.rs", + "startLine": 961, + "witnessEndLine": 971, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "witness": " fn follow(&self, mut dent: DirEntry) -> Result {\n dent =\n DirEntry::from_path(self.depth, dent.path().to_path_buf(), true)?;\n // The only way a symlink can cause a loop is if it points\n // to a directory. Otherwise, it always points to a leaf\n // and we can omit any loop checks.\n if dent.is_dir() {\n self.check_loop(dent.path())?;\n }\n Ok(dent)\n }" + }, + { + "id": "walkdir-symlink-loop-detection-check_loop", + "symbol": "check_loop", + "ownerContext": "IntoIter", + "file": "src/lib.rs", + "startLine": 973, + "witnessEndLine": 989, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "witness": " fn check_loop>(&self, child: P) -> Result<()> {\n let hchild = Handle::from_path(&child)\n .map_err(|err| Error::from_io(self.depth, err))?;\n for ancestor in self.stack_path.iter().rev() {\n let is_same = ancestor\n .is_same(&hchild)\n .map_err(|err| Error::from_io(self.depth, err))?;\n if is_same {\n return Err(Error::from_loop(\n self.depth,\n &ancestor.path,\n child.as_ref(),\n ));\n }\n }\n Ok(())\n }" + } + ] + } + ] + } + ] +} diff --git a/benchmarks/agent_query/community_task_pairs_review_panel_a.json b/benchmarks/agent_query/community_task_pairs_review_panel_a.json new file mode 100644 index 000000000..fa42231ae --- /dev/null +++ b/benchmarks/agent_query/community_task_pairs_review_panel_a.json @@ -0,0 +1,1478 @@ +{ + "schema": "compass.community-task-pairs-review/1", + "registrationCommit": "234753eb", + "scope": "Source-defined task co-location and granularity on captured native-only graph artifacts. The registration was frozen before this task-pair membership audit; earlier broad comparisons had already exposed portions of these graphs. This is a development diagnostic, not an independent reviewer, native answer workflow, architecture oracle, or god-object evaluation.", + "artifactRoot": "community-task-pairs-01", + "captureFile": "capture-final.json", + "captureSha256": "2924f3f7b8e66e2a1e14562ff6e0ed6c2a87208ec3da3ee7eee172d0d6c43889", + "initialCaptureSha256": "d0e0c564328a74a9282a5a44c420b6c91625fd7def51da3ecee2c801e00cc3a8", + "registrationSha256": "71faed0f477ee97da98c8bbb86686fae09de450664e4e000d9b2404496b94b6d", + "sourceRunSha256": "c2bc04366343fbd32bbdf84ccfb1db7aaad2e2ed38b38f979065c6755432d792", + "auditorSha256": "77f599ff7ee7eebfe4b590fee6c771ecfb3ed475d1944e37bcabc110634d3660", + "anchorMatcherSha256": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "summaryRecheckSha256": "abf4b4d6496ef27b83aeefeaae4b767b1c3f5d6dfedd3bfe8e7755947d1b813b", + "verification": { + "command": "python3 -m unittest discover -s benchmarks/agent_query/tests -v", + "passed": 109, + "failed": 0, + "logSha256": "a72c008df7dd7e2eb811b1097d415417dc52744315ae471f63c6ef788cc26ca3", + "notes": "Includes ten new community audit tests. Final auditor repeats every declaration resolution and pair outcome from the first capture. A separate direct recomputation checked all source anchors and pair outcomes; it is not an independent semantic review. Rust/product tests were not rerun because this iteration changes only developer-side Python evaluation and documentation." + }, + "summaries": { + "compass": { + "cross_task": { + "same_community": 18, + "different_community": 42, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 6, + "different_community": 38, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 12, + "different_community": 4, + "unresolved": 0 + }, + "within_task": { + "same_community": 13, + "different_community": 2, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 11, + "different_community": 2, + "unresolved": 0 + } + }, + "graphify": { + "cross_task": { + "same_community": 12, + "different_community": 48, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 0, + "different_community": 44, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 12, + "different_community": 4, + "unresolved": 0 + }, + "within_task": { + "same_community": 12, + "different_community": 3, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 10, + "different_community": 3, + "unresolved": 0 + } + } + }, + "repositories": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "tools": { + "compass": { + "nodes": 729, + "assignedNodes": 729, + "communities": 154, + "declarations": [ + { + "id": "chi-request-identity-GetReqID", + "task": "chi-request-identity", + "file": "middleware/request_id.go", + "startLine": 83, + "symbol": "GetReqID", + "matchedNodeIds": [ + "sha256:34078dccfae1ef1443550189102e7927d10009b45d211741895af2b59e44907e" + ], + "status": "resolved", + "community": 3, + "communityNodes": 44, + "communitySourceFiles": 9 + }, + { + "id": "chi-request-identity-RequestID", + "task": "chi-request-identity", + "file": "middleware/request_id.go", + "startLine": 67, + "symbol": "RequestID", + "matchedNodeIds": [ + "sha256:394032841e0823b74d28b8a866c2eb3cd7618a345c06b08fc66e63e5657d5ae4" + ], + "status": "resolved", + "community": 3, + "communityNodes": 44, + "communitySourceFiles": 9 + }, + { + "id": "chi-route-pattern-parameters-patNextSegment", + "task": "chi-route-pattern-parameters", + "file": "tree.go", + "startLine": 735, + "symbol": "patNextSegment", + "matchedNodeIds": [ + "sha256:111dda918f957e920843303a5c69f2cda3e9b2006d711b0aef4efca1545bdc62" + ], + "status": "resolved", + "community": 4, + "communityNodes": 41, + "communitySourceFiles": 3 + }, + { + "id": "chi-route-pattern-parameters-patParamKeys", + "task": "chi-route-pattern-parameters", + "file": "tree.go", + "startLine": 803, + "symbol": "patParamKeys", + "matchedNodeIds": [ + "sha256:6df5a320c50c2a4cc16144d1db213eeefc7cf84eced0fd9b1fbedcd21553b212" + ], + "status": "resolved", + "community": 4, + "communityNodes": 41, + "communitySourceFiles": 3 + }, + { + "id": "chi-router-construction-NewMux", + "task": "chi-router-construction", + "file": "mux.go", + "startLine": 52, + "symbol": "NewMux", + "matchedNodeIds": [ + "sha256:fd36852628b4b3873d779bdb534cf23a17b6908247f6c46db80dbac5b2d7c453" + ], + "status": "resolved", + "community": 0, + "communityNodes": 90, + "communitySourceFiles": 8 + }, + { + "id": "chi-router-construction-NewRouter", + "task": "chi-router-construction", + "file": "chi.go", + "startLine": 62, + "symbol": "NewRouter", + "matchedNodeIds": [ + "sha256:1928266631ebdc4651cac18aa5abc7ab261abc74a669ec9071a53d68b1f30699" + ], + "status": "resolved", + "community": 0, + "communityNodes": 90, + "communitySourceFiles": 8 + } + ], + "summaries": { + "cross_task": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "within_task": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 1, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + } + }, + "graphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5" + }, + "graphify": { + "nodes": 674, + "assignedNodes": 674, + "communities": 33, + "declarations": [ + { + "id": "chi-request-identity-GetReqID", + "task": "chi-request-identity", + "file": "middleware/request_id.go", + "startLine": 83, + "symbol": "GetReqID", + "matchedNodeIds": [ + "middleware_request_id_getreqid" + ], + "status": "resolved", + "community": 5, + "communityNodes": 58, + "communitySourceFiles": 11 + }, + { + "id": "chi-request-identity-RequestID", + "task": "chi-request-identity", + "file": "middleware/request_id.go", + "startLine": 67, + "symbol": "RequestID", + "matchedNodeIds": [ + "middleware_request_id_requestid" + ], + "status": "resolved", + "community": 5, + "communityNodes": 58, + "communitySourceFiles": 11 + }, + { + "id": "chi-route-pattern-parameters-patNextSegment", + "task": "chi-route-pattern-parameters", + "file": "tree.go", + "startLine": 735, + "symbol": "patNextSegment", + "matchedNodeIds": [ + "tree_patnextsegment" + ], + "status": "resolved", + "community": 7, + "communityNodes": 42, + "communitySourceFiles": 4 + }, + { + "id": "chi-route-pattern-parameters-patParamKeys", + "task": "chi-route-pattern-parameters", + "file": "tree.go", + "startLine": 803, + "symbol": "patParamKeys", + "matchedNodeIds": [ + "tree_patparamkeys" + ], + "status": "resolved", + "community": 7, + "communityNodes": 42, + "communitySourceFiles": 4 + }, + { + "id": "chi-router-construction-NewMux", + "task": "chi-router-construction", + "file": "mux.go", + "startLine": 52, + "symbol": "NewMux", + "matchedNodeIds": [ + "mux_newmux" + ], + "status": "resolved", + "community": 0, + "communityNodes": 108, + "communitySourceFiles": 21 + }, + { + "id": "chi-router-construction-NewRouter", + "task": "chi-router-construction", + "file": "chi.go", + "startLine": 62, + "symbol": "NewRouter", + "matchedNodeIds": [ + "chi_newrouter" + ], + "status": "resolved", + "community": 0, + "communityNodes": 108, + "communitySourceFiles": 21 + } + ], + "summaries": { + "cross_task": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "within_task": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 1, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + } + }, + "graphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + } + } + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "tools": { + "compass": { + "nodes": 4264, + "assignedNodes": 4264, + "communities": 173, + "declarations": [ + { + "id": "click-atomic-close-__exit__", + "task": "click-atomic-close", + "file": "src/click/_compat.py", + "startLine": 479, + "symbol": "__exit__", + "matchedNodeIds": [ + "sha256:7bf788bd87c967bb2c80b682108ca265ce1ea9c213b3c8d55931a267d73c15b4" + ], + "status": "resolved", + "community": 6, + "communityNodes": 203, + "communitySourceFiles": 6 + }, + { + "id": "click-atomic-close-close", + "task": "click-atomic-close", + "file": "src/click/_compat.py", + "startLine": 466, + "symbol": "close", + "matchedNodeIds": [ + "sha256:1e4e32dfcdfe036023e5c263eaba38bfe92eb391597b74fc5d70ab50a877cfa3" + ], + "status": "resolved", + "community": 6, + "communityNodes": 203, + "communitySourceFiles": 6 + }, + { + "id": "click-help-definition-layout-measure_table", + "task": "click-help-definition-layout", + "file": "src/click/formatting.py", + "startLine": 14, + "symbol": "measure_table", + "matchedNodeIds": [ + "sha256:8e5a66041c4ec1628dcf55670a1c379436eec6a47f92a8a45608693bc2934e5e" + ], + "status": "resolved", + "community": 15, + "communityNodes": 95, + "communitySourceFiles": 4 + }, + { + "id": "click-help-definition-layout-write_dl", + "task": "click-help-definition-layout", + "file": "src/click/formatting.py", + "startLine": 229, + "symbol": "write_dl", + "matchedNodeIds": [ + "sha256:3883ba20e7d4cfe17c813110a793c1d9db32455194d42971a01787a2b45c357e" + ], + "status": "resolved", + "community": 15, + "communityNodes": 95, + "communitySourceFiles": 4 + }, + { + "id": "click-terminal-string-width-strip_ansi", + "task": "click-terminal-string-width", + "file": "src/click/_compat.py", + "startLine": 491, + "symbol": "strip_ansi", + "matchedNodeIds": [ + "sha256:84776cf5b684f5564ad6dc1143881454a6dd6f12faf2f62a8b1451fc9c89dbd2" + ], + "status": "resolved", + "community": 3, + "communityNodes": 246, + "communitySourceFiles": 9 + }, + { + "id": "click-terminal-string-width-term_len", + "task": "click-terminal-string-width", + "file": "src/click/_compat.py", + "startLine": 536, + "symbol": "term_len", + "matchedNodeIds": [ + "sha256:b11122339a79629b59028324039bb74faf1857f56629c753c1e51abc3c93d330" + ], + "status": "resolved", + "community": 15, + "communityNodes": 95, + "communitySourceFiles": 4 + } + ], + "summaries": { + "cross_task": { + "same_community": 2, + "different_community": 10, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 2, + "different_community": 6, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 0, + "different_community": 4, + "unresolved": 0 + }, + "within_task": { + "same_community": 2, + "different_community": 1, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 2, + "different_community": 1, + "unresolved": 0 + } + }, + "graphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93" + }, + "graphify": { + "nodes": 2867, + "assignedNodes": 2867, + "communities": 204, + "declarations": [ + { + "id": "click-atomic-close-__exit__", + "task": "click-atomic-close", + "file": "src/click/_compat.py", + "startLine": 479, + "symbol": "__exit__", + "matchedNodeIds": [ + "src_click_compat_atomicfile_exit" + ], + "status": "resolved", + "community": 86, + "communityNodes": 9, + "communitySourceFiles": 1 + }, + { + "id": "click-atomic-close-close", + "task": "click-atomic-close", + "file": "src/click/_compat.py", + "startLine": 466, + "symbol": "close", + "matchedNodeIds": [ + "src_click_compat_atomicfile_close" + ], + "status": "resolved", + "community": 86, + "communityNodes": 9, + "communitySourceFiles": 1 + }, + { + "id": "click-help-definition-layout-measure_table", + "task": "click-help-definition-layout", + "file": "src/click/formatting.py", + "startLine": 14, + "symbol": "measure_table", + "matchedNodeIds": [ + "src_click_formatting_measure_table" + ], + "status": "resolved", + "community": 87, + "communityNodes": 9, + "communitySourceFiles": 1 + }, + { + "id": "click-help-definition-layout-write_dl", + "task": "click-help-definition-layout", + "file": "src/click/formatting.py", + "startLine": 229, + "symbol": "write_dl", + "matchedNodeIds": [ + "src_click_formatting_helpformatter_write_dl" + ], + "status": "resolved", + "community": 87, + "communityNodes": 9, + "communitySourceFiles": 1 + }, + { + "id": "click-terminal-string-width-strip_ansi", + "task": "click-terminal-string-width", + "file": "src/click/_compat.py", + "startLine": 491, + "symbol": "strip_ansi", + "matchedNodeIds": [ + "src_click_compat_strip_ansi" + ], + "status": "resolved", + "community": 45, + "communityNodes": 24, + "communitySourceFiles": 3 + }, + { + "id": "click-terminal-string-width-term_len", + "task": "click-terminal-string-width", + "file": "src/click/_compat.py", + "startLine": 536, + "symbol": "term_len", + "matchedNodeIds": [ + "src_click_compat_term_len" + ], + "status": "resolved", + "community": 45, + "communityNodes": 24, + "communitySourceFiles": 3 + } + ], + "summaries": { + "cross_task": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 0, + "different_community": 8, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 0, + "different_community": 4, + "unresolved": 0 + }, + "within_task": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + } + }, + "graphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + } + } + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "tools": { + "compass": { + "nodes": 6116, + "assignedNodes": 6116, + "communities": 41, + "declarations": [ + { + "id": "jsoup-html-fragment-parse-parseBodyFragment", + "task": "jsoup-html-fragment-parse", + "file": "src/main/java/org/jsoup/parser/Parser.java", + "startLine": 338, + "symbol": "parseBodyFragment", + "matchedNodeIds": [ + "sha256:116e34df3ea1beb0e4e87a6fbc8c2a4667bcac6135618616b616a6990d10e729" + ], + "status": "resolved", + "community": 0, + "communityNodes": 815, + "communitySourceFiles": 55 + }, + { + "id": "jsoup-html-fragment-parse-parseFragment", + "task": "jsoup-html-fragment-parse", + "file": "src/main/java/org/jsoup/parser/Parser.java", + "startLine": 295, + "symbol": "parseFragment", + "matchedNodeIds": [ + "sha256:d51486603fd23ace9d94cf199d726965909177f01ed78bd3ed9a3ca39436412b" + ], + "status": "resolved", + "community": 0, + "communityNodes": 815, + "communitySourceFiles": 55 + }, + { + "id": "jsoup-html-whitespace-isBlank", + "task": "jsoup-html-whitespace", + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "startLine": 151, + "symbol": "isBlank", + "matchedNodeIds": [ + "sha256:7b70b1683af87dcfb443f8d622d324166f6a6a9d6d40e66b0f8baf1eea8ebbd7" + ], + "status": "resolved", + "community": 17, + "communityNodes": 143, + "communitySourceFiles": 19 + }, + { + "id": "jsoup-html-whitespace-isWhitespace", + "task": "jsoup-html-whitespace", + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "startLine": 205, + "symbol": "isWhitespace", + "matchedNodeIds": [ + "sha256:8b362a6fd1d3e3687e87d8010b0acf4af64a9bdf2c0cbd1ba51760278afb3227" + ], + "status": "resolved", + "community": 12, + "communityNodes": 191, + "communitySourceFiles": 23 + }, + { + "id": "jsoup-safe-document-copy-clean", + "task": "jsoup-safe-document-copy", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 62, + "symbol": "clean", + "matchedNodeIds": [ + "sha256:d490451c6bf56501db666f0a6c3c143f1a6d8a90120632415cc739cbf1a8f034" + ], + "status": "resolved", + "community": 15, + "communityNodes": 159, + "communitySourceFiles": 19 + }, + { + "id": "jsoup-safe-document-copy-copySafeNodes", + "task": "jsoup-safe-document-copy", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 182, + "symbol": "copySafeNodes", + "matchedNodeIds": [ + "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3" + ], + "status": "resolved", + "community": 15, + "communityNodes": 159, + "communitySourceFiles": 19 + } + ], + "summaries": { + "cross_task": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "within_task": { + "same_community": 2, + "different_community": 1, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 2, + "different_community": 1, + "unresolved": 0 + } + }, + "graphSha256": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead" + }, + "graphify": { + "nodes": 5361, + "assignedNodes": 5361, + "communities": 151, + "declarations": [ + { + "id": "jsoup-html-fragment-parse-parseBodyFragment", + "task": "jsoup-html-fragment-parse", + "file": "src/main/java/org/jsoup/parser/Parser.java", + "startLine": 338, + "symbol": "parseBodyFragment", + "matchedNodeIds": [ + "src_main_java_org_jsoup_parser_parser_parser_parsebodyfragment" + ], + "status": "resolved", + "community": 1, + "communityNodes": 232, + "communitySourceFiles": 23 + }, + { + "id": "jsoup-html-fragment-parse-parseFragment", + "task": "jsoup-html-fragment-parse", + "file": "src/main/java/org/jsoup/parser/Parser.java", + "startLine": 295, + "symbol": "parseFragment", + "matchedNodeIds": [ + "src_main_java_org_jsoup_parser_parser_parser_parsefragment" + ], + "status": "resolved", + "community": 39, + "communityNodes": 36, + "communitySourceFiles": 10 + }, + { + "id": "jsoup-html-whitespace-isBlank", + "task": "jsoup-html-whitespace", + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "startLine": 151, + "symbol": "isBlank", + "matchedNodeIds": [ + "src_main_java_org_jsoup_internal_stringutil_stringutil_isblank" + ], + "status": "resolved", + "community": 16, + "communityNodes": 76, + "communitySourceFiles": 5 + }, + { + "id": "jsoup-html-whitespace-isWhitespace", + "task": "jsoup-html-whitespace", + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "startLine": 205, + "symbol": "isWhitespace", + "matchedNodeIds": [ + "src_main_java_org_jsoup_internal_stringutil_stringutil_iswhitespace" + ], + "status": "resolved", + "community": 48, + "communityNodes": 31, + "communitySourceFiles": 4 + }, + { + "id": "jsoup-safe-document-copy-clean", + "task": "jsoup-safe-document-copy", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 62, + "symbol": "clean", + "matchedNodeIds": [ + "src_main_java_org_jsoup_safety_cleaner_cleaner_clean" + ], + "status": "resolved", + "community": 24, + "communityNodes": 56, + "communitySourceFiles": 5 + }, + { + "id": "jsoup-safe-document-copy-copySafeNodes", + "task": "jsoup-safe-document-copy", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 182, + "symbol": "copySafeNodes", + "matchedNodeIds": [ + "src_main_java_org_jsoup_safety_cleaner_cleaner_copysafenodes" + ], + "status": "resolved", + "community": 129, + "communityNodes": 7, + "communitySourceFiles": 3 + } + ], + "summaries": { + "cross_task": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "within_task": { + "same_community": 0, + "different_community": 3, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 0, + "different_community": 3, + "unresolved": 0 + } + }, + "graphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + } + } + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "tools": { + "compass": { + "nodes": 3503, + "assignedNodes": 3503, + "communities": 845, + "declarations": [ + { + "id": "redux-action-creator-binding-bindActionCreator", + "task": "redux-action-creator-binding", + "file": "src/bindActionCreators.ts", + "startLine": 9, + "symbol": "bindActionCreator", + "matchedNodeIds": [ + "sha256:118ac793f4d6b77676a6543f79b8cdef6cd785fef2e27dcaee49c6568ff3488d" + ], + "status": "resolved", + "community": 15, + "communityNodes": 55, + "communitySourceFiles": 3 + }, + { + "id": "redux-action-creator-binding-bindActionCreators", + "task": "redux-action-creator-binding", + "file": "src/bindActionCreators.ts", + "startLine": 58, + "symbol": "bindActionCreators", + "matchedNodeIds": [ + "sha256:872a5ee2bce2daedae73fa970870b29f3d0e02033199aa263da175827b5899fe" + ], + "status": "resolved", + "community": 15, + "communityNodes": 55, + "communitySourceFiles": 3 + }, + { + "id": "redux-action-shape-validation-isAction", + "task": "redux-action-shape-validation", + "file": "src/utils/isAction.ts", + "startLine": 4, + "symbol": "isAction", + "matchedNodeIds": [ + "sha256:237b20392b78b4972302af1924657a5709e90d5534fbdaee1ac633567db87377" + ], + "status": "resolved", + "community": 1, + "communityNodes": 252, + "communitySourceFiles": 14 + }, + { + "id": "redux-action-shape-validation-isPlainObject", + "task": "redux-action-shape-validation", + "file": "src/utils/isPlainObject.ts", + "startLine": 5, + "symbol": "isPlainObject", + "matchedNodeIds": [ + "sha256:08c1f8776bb6ac1c79c535fe70f0341ba85fb12fcf8ab56171ee2281e3f6fcb9" + ], + "status": "resolved", + "community": 1, + "communityNodes": 252, + "communitySourceFiles": 14 + }, + { + "id": "redux-listener-registration-ensureCanMutateNextListeners", + "task": "redux-listener-registration", + "file": "src/createStore.ts", + "startLine": 152, + "symbol": "ensureCanMutateNextListeners", + "matchedNodeIds": [ + "sha256:692fe8cbc7b8e5a03bcb79c20531aefdbfa31098ea43bbe9b0301d61cd869f27" + ], + "status": "resolved", + "community": 15, + "communityNodes": 55, + "communitySourceFiles": 3 + }, + { + "id": "redux-listener-registration-subscribe", + "task": "redux-listener-registration", + "file": "src/createStore.ts", + "startLine": 201, + "symbol": "subscribe", + "matchedNodeIds": [ + "sha256:f27566baebab97a78ea7b6d143149ecdff76b39167fb12b42612a3e69fba5a5d" + ], + "status": "resolved", + "community": 15, + "communityNodes": 55, + "communitySourceFiles": 3 + } + ], + "summaries": { + "cross_task": { + "same_community": 4, + "different_community": 8, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 4, + "different_community": 8, + "unresolved": 0 + }, + "within_task": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 1, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + } + }, + "graphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b" + }, + "graphify": { + "nodes": 996, + "assignedNodes": 996, + "communities": 65, + "declarations": [ + { + "id": "redux-action-creator-binding-bindActionCreator", + "task": "redux-action-creator-binding", + "file": "src/bindActionCreators.ts", + "startLine": 9, + "symbol": "bindActionCreator", + "matchedNodeIds": [ + "src_bindactioncreators_bindactioncreator" + ], + "status": "resolved", + "community": 28, + "communityNodes": 14, + "communitySourceFiles": 5 + }, + { + "id": "redux-action-creator-binding-bindActionCreators", + "task": "redux-action-creator-binding", + "file": "src/bindActionCreators.ts", + "startLine": 58, + "symbol": "bindActionCreators", + "matchedNodeIds": [ + "src_bindactioncreators_bindactioncreators" + ], + "status": "resolved", + "community": 28, + "communityNodes": 14, + "communitySourceFiles": 5 + }, + { + "id": "redux-action-shape-validation-isAction", + "task": "redux-action-shape-validation", + "file": "src/utils/isAction.ts", + "startLine": 4, + "symbol": "isAction", + "matchedNodeIds": [ + "src_utils_isaction_isaction" + ], + "status": "resolved", + "community": 43, + "communityNodes": 8, + "communitySourceFiles": 4 + }, + { + "id": "redux-action-shape-validation-isPlainObject", + "task": "redux-action-shape-validation", + "file": "src/utils/isPlainObject.ts", + "startLine": 5, + "symbol": "isPlainObject", + "matchedNodeIds": [ + "src_utils_isplainobject_isplainobject" + ], + "status": "resolved", + "community": 43, + "communityNodes": 8, + "communitySourceFiles": 4 + }, + { + "id": "redux-listener-registration-ensureCanMutateNextListeners", + "task": "redux-listener-registration", + "file": "src/createStore.ts", + "startLine": 152, + "symbol": "ensureCanMutateNextListeners", + "matchedNodeIds": [ + "src_createstore_createstore_ensurecanmutatenextlisteners" + ], + "status": "resolved", + "community": 25, + "communityNodes": 15, + "communitySourceFiles": 2 + }, + { + "id": "redux-listener-registration-subscribe", + "task": "redux-listener-registration", + "file": "src/createStore.ts", + "startLine": 201, + "symbol": "subscribe", + "matchedNodeIds": [ + "src_createstore_createstore_subscribe" + ], + "status": "resolved", + "community": 25, + "communityNodes": 15, + "communitySourceFiles": 2 + } + ], + "summaries": { + "cross_task": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 0, + "different_community": 12, + "unresolved": 0 + }, + "within_task": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 1, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + } + }, + "graphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + } + } + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "tools": { + "compass": { + "nodes": 288, + "assignedNodes": 288, + "communities": 10, + "declarations": [ + { + "id": "walkdir-deferred-directory-depth-get_deferred_dir", + "task": "walkdir-deferred-directory-depth", + "file": "src/lib.rs", + "startLine": 884, + "symbol": "get_deferred_dir", + "matchedNodeIds": [ + "sha256:219c38f772358d6f0cd42cd06b879fe706b6672b0deee9461f8f7ec785618867" + ], + "status": "resolved", + "community": 0, + "communityNodes": 116, + "communitySourceFiles": 4 + }, + { + "id": "walkdir-deferred-directory-depth-skippable", + "task": "walkdir-deferred-directory-depth", + "file": "src/lib.rs", + "startLine": 1000, + "symbol": "skippable", + "matchedNodeIds": [ + "sha256:648e4f3a42dcd72aa98ad5725459ca59362c53374b257faa9cd00a5cfee708f0" + ], + "status": "resolved", + "community": 0, + "communityNodes": 116, + "communitySourceFiles": 4 + }, + { + "id": "walkdir-directory-handle-budget-close", + "task": "walkdir-directory-handle-budget", + "file": "src/lib.rs", + "startLine": 1008, + "symbol": "close", + "matchedNodeIds": [ + "sha256:ff9fee2d67be76e5af714ef0bceb4d68be41efd8086deccc6a46eb19cd9ee0f9" + ], + "status": "resolved", + "community": 0, + "communityNodes": 116, + "communitySourceFiles": 4 + }, + { + "id": "walkdir-directory-handle-budget-push", + "task": "walkdir-directory-handle-budget", + "file": "src/lib.rs", + "startLine": 901, + "symbol": "push", + "matchedNodeIds": [ + "sha256:c4870d899db4c0d3e82cf28916d9cadef5b8d7b249ea6fe7aa97bc7d465dfe45" + ], + "status": "resolved", + "community": 0, + "communityNodes": 116, + "communitySourceFiles": 4 + }, + { + "id": "walkdir-symlink-loop-detection-check_loop", + "task": "walkdir-symlink-loop-detection", + "file": "src/lib.rs", + "startLine": 973, + "symbol": "check_loop", + "matchedNodeIds": [ + "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3" + ], + "status": "resolved", + "community": 0, + "communityNodes": 116, + "communitySourceFiles": 4 + }, + { + "id": "walkdir-symlink-loop-detection-follow", + "task": "walkdir-symlink-loop-detection", + "file": "src/lib.rs", + "startLine": 961, + "symbol": "follow", + "matchedNodeIds": [ + "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78" + ], + "status": "resolved", + "community": 0, + "communityNodes": 116, + "communitySourceFiles": 4 + } + ], + "summaries": { + "cross_task": { + "same_community": 12, + "different_community": 0, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 12, + "different_community": 0, + "unresolved": 0 + }, + "within_task": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + } + }, + "graphSha256": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177" + }, + "graphify": { + "nodes": 247, + "assignedNodes": 247, + "communities": 15, + "declarations": [ + { + "id": "walkdir-deferred-directory-depth-get_deferred_dir", + "task": "walkdir-deferred-directory-depth", + "file": "src/lib.rs", + "startLine": 884, + "symbol": "get_deferred_dir", + "matchedNodeIds": [ + "src_lib_intoiter_get_deferred_dir" + ], + "status": "resolved", + "community": 2, + "communityNodes": 33, + "communitySourceFiles": 1 + }, + { + "id": "walkdir-deferred-directory-depth-skippable", + "task": "walkdir-deferred-directory-depth", + "file": "src/lib.rs", + "startLine": 1000, + "symbol": "skippable", + "matchedNodeIds": [ + "src_lib_intoiter_skippable" + ], + "status": "resolved", + "community": 2, + "communityNodes": 33, + "communitySourceFiles": 1 + }, + { + "id": "walkdir-directory-handle-budget-close", + "task": "walkdir-directory-handle-budget", + "file": "src/lib.rs", + "startLine": 1008, + "symbol": "close", + "matchedNodeIds": [ + "src_lib_dirlist_close" + ], + "status": "resolved", + "community": 2, + "communityNodes": 33, + "communitySourceFiles": 1 + }, + { + "id": "walkdir-directory-handle-budget-push", + "task": "walkdir-directory-handle-budget", + "file": "src/lib.rs", + "startLine": 901, + "symbol": "push", + "matchedNodeIds": [ + "src_lib_intoiter_push" + ], + "status": "resolved", + "community": 2, + "communityNodes": 33, + "communitySourceFiles": 1 + }, + { + "id": "walkdir-symlink-loop-detection-check_loop", + "task": "walkdir-symlink-loop-detection", + "file": "src/lib.rs", + "startLine": 973, + "symbol": "check_loop", + "matchedNodeIds": [ + "src_lib_intoiter_check_loop" + ], + "status": "resolved", + "community": 2, + "communityNodes": 33, + "communitySourceFiles": 1 + }, + { + "id": "walkdir-symlink-loop-detection-follow", + "task": "walkdir-symlink-loop-detection", + "file": "src/lib.rs", + "startLine": 961, + "symbol": "follow", + "matchedNodeIds": [ + "src_lib_intoiter_follow" + ], + "status": "resolved", + "community": 2, + "communityNodes": 33, + "communitySourceFiles": 1 + } + ], + "summaries": { + "cross_task": { + "same_community": 12, + "different_community": 0, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 12, + "different_community": 0, + "unresolved": 0 + }, + "within_task": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 3, + "different_community": 0, + "unresolved": 0 + } + }, + "graphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + } + } + ], + "splitPairDiagnostics": [ + { + "repository": "click", + "tool": "compass", + "caller": "term_len", + "callee": "strip_ansi", + "callerCommunity": 15, + "calleeCommunity": 3, + "file": "src/click/_compat.py", + "line": 537, + "sourceLine": " return len(strip_ansi(x))", + "storedEdge": { + "id": "sha256:18a10a498e2a6812c90b68b2319895923078a4da235b181795f53c89be7aee56", + "key": "sha256:18a10a498e2a6812c90b68b2319895923078a4da235b181795f53c89be7aee56", + "source": "sha256:b11122339a79629b59028324039bb74faf1857f56629c753c1e51abc3c93d330", + "target": "sha256:84776cf5b684f5564ad6dc1143881454a6dd6f12faf2f62a8b1451fc9c89dbd2", + "kind": "calls", + "occurrenceRule": "universal-call-exact-lexical-declaration", + "relationshipSite": { + "file": "src/click/_compat.py", + "startByte": 16553, + "endByte": 16563, + "startLine": 537, + "startColumn": 15, + "endLine": 537, + "endColumn": 25 + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.resolve.python.universal", + "confidence": "exact", + "rule": "universal-call-exact-lexical-declaration", + "anchors": [ + { + "file": "src/click/_compat.py", + "startByte": 16553, + "endByte": 16563, + "startLine": 537, + "startColumn": 15, + "endLine": 537, + "endColumn": 25 + } + ] + } + ], + "weight": 1.0, + "context": "call" + }, + "interpretation": "Source-supported call is present across the community boundary; this split is not a missing-call finding." + }, + { + "repository": "jsoup", + "tool": "compass", + "caller": "isBlank", + "callee": "isWhitespace", + "callerCommunity": 17, + "calleeCommunity": 12, + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "line": 157, + "sourceLine": " if (!StringUtil.isWhitespace(string.codePointAt(i)))", + "storedEdge": { + "id": "sha256:b7685a82e4c39b4e15c0baf69a9b7c6b04494c82621884807f9a6932a4166869", + "key": "sha256:b7685a82e4c39b4e15c0baf69a9b7c6b04494c82621884807f9a6932a4166869", + "source": "sha256:7b70b1683af87dcfb443f8d622d324166f6a6a9d6d40e66b0f8baf1eea8ebbd7", + "target": "sha256:8b362a6fd1d3e3687e87d8010b0acf4af64a9bdf2c0cbd1ba51760278afb3227", + "kind": "calls", + "occurrenceRule": "universal-call-explicit-binding", + "relationshipSite": { + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "startByte": 5238, + "endByte": 5250, + "startLine": 157, + "startColumn": 28, + "endLine": 157, + "endColumn": 40 + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.resolve.java.universal", + "confidence": "exact", + "rule": "universal-call-explicit-binding", + "anchors": [ + { + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "startByte": 5238, + "endByte": 5250, + "startLine": 157, + "startColumn": 28, + "endLine": 157, + "endColumn": 40 + } + ] + } + ], + "weight": 1.0, + "context": "call" + }, + "interpretation": "Source-supported call is present across the community boundary; this split is not a missing-call finding." + }, + { + "repository": "jsoup", + "tool": "graphify", + "caller": "parseBodyFragment", + "callee": "parseFragment", + "callerCommunity": 1, + "calleeCommunity": 39, + "file": "src/main/java/org/jsoup/parser/Parser.java", + "line": 341, + "sourceLine": " List nodeList = parseFragment(bodyHtml, body, baseUri);", + "storedEdge": { + "source": "src_main_java_org_jsoup_parser_parser_parser_parsebodyfragment", + "target": "src_main_java_org_jsoup_parser_parser_parser_parsefragment", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/main/java/org/jsoup/parser/Parser.java", + "source_location": "L341", + "weight": 1.0 + }, + "interpretation": "Source-supported call is present across the community boundary; this split is not a missing-call finding." + }, + { + "repository": "jsoup", + "tool": "graphify", + "caller": "isBlank", + "callee": "isWhitespace", + "callerCommunity": 16, + "calleeCommunity": 48, + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "line": 157, + "sourceLine": " if (!StringUtil.isWhitespace(string.codePointAt(i)))", + "storedEdge": { + "source": "src_main_java_org_jsoup_internal_stringutil_stringutil_isblank", + "target": "src_main_java_org_jsoup_internal_stringutil_stringutil_iswhitespace", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/main/java/org/jsoup/internal/StringUtil.java", + "source_location": "L157", + "weight": 1.0 + }, + "interpretation": "Source-supported call is present across the community boundary; this split is not a missing-call finding." + }, + { + "repository": "jsoup", + "tool": "graphify", + "caller": "clean", + "callee": "copySafeNodes", + "callerCommunity": 24, + "calleeCommunity": 129, + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 66, + "sourceLine": " copySafeNodes(dirtyDocument.body(), clean.body());", + "storedEdge": { + "source": "src_main_java_org_jsoup_safety_cleaner_cleaner_clean", + "target": "src_main_java_org_jsoup_safety_cleaner_cleaner_copysafenodes", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/main/java/org/jsoup/safety/Cleaner.java", + "source_location": "L66", + "weight": 1.0 + }, + "interpretation": "Source-supported call is present across the community boundary; this split is not a missing-call finding." + } + ], + "interpretation": [ + "All 30 source declarations resolve uniquely with community assignments in both graphs. Within-task co-location is 13/15 for Compass and 12/15 for Graphify. The two cross-file collaborator pairs are co-located on both sides; the other 13 within-task pairs share a source file.", + "Cross-task co-location is 18/60 for Compass and 12/60 for Graphify. These are granularity observations, not false-positive counts. Combining this with the collaborator count into a single accuracy score would impose an unreviewed architecture preference.", + "Click: Compass places term_len with help-table formatting and separates strip_ansi. The source explicitly shows measure_table using term_len. Graphify retains the term_len/strip_ansi pair together. Neither choice alone proves a bad cluster.", + "jsoup: Compass co-locates clean/copySafeNodes and parseBodyFragment/parseFragment; Graphify splits both pairs. Both tools split isBlank/isWhitespace. All five cross-community collaborator pairs across this panel retain the expected source-supported call edge.", + "Redux: Compass co-locates listener registration with action-creator binding; Graphify separates those selected tasks. The task labels do not prove separate ownership or a refactoring defect.", + "WalkDir: both tools put all six selected methods in one community. Their resource, deferred-output and symlink-loop mechanisms cooperate through the same iterator. The twelve cross-task pair co-locations are not twelve god-object defects.", + "Whole-community node and source-file counts provide context only. Tool node granularity and extraction coverage differ, and unselected community members have not all received semantic source review.", + "This study does not establish source precision for all graph edges, complete functional partition quality, source-based god-object labels, held-out generalization, or overall superiority. It motivates checking public navigation across community boundaries rather than forcing every collaborator into the same cluster." + ], + "nextActions": [ + "Compare a symmetric public community/neighbor workflow on the frozen collaborator pairs, preserving member-list truncation, ambiguity, exact identity availability, and complete response costs.", + "Review actual responsibilities of additional hub candidates with source-supported positive concerns and counterevidence; do not turn this task pair corpus into god-object labels.", + "Add independent semantic review and fresh repositories before any broad community quality or superiority claim." + ] +} diff --git a/benchmarks/agent_query/community_tasks.py b/benchmarks/agent_query/community_tasks.py new file mode 100644 index 000000000..44a8aad0e --- /dev/null +++ b/benchmarks/agent_query/community_tasks.py @@ -0,0 +1,213 @@ +"""Source-defined task co-location in captured native community assignments. + +This developer audit never invents an agent answer or a god-object label. +Cross-task co-location describes granularity; it is not a correctness failure. +""" + +from __future__ import annotations + +import argparse +from collections import Counter, defaultdict +import hashlib +from itertools import combinations +import json +from pathlib import Path +import subprocess + +from benchmarks.agent_query.runner import _node_anchor + + +MAX_JSON_BYTES = 256 * 1024 * 1024 +MAX_SOURCE_BYTES = 4 * 1024 * 1024 +MAX_DECLARATIONS = 256 + + +def read_bounded(path: Path, limit: int) -> bytes: + if type(limit) is not int or not 0 <= limit <= MAX_JSON_BYTES: + raise ValueError("invalid input byte limit") + with path.open("rb") as stream: + data = stream.read(limit + 1) + if len(data) > limit: + raise ValueError(f"input exceeds {limit} bytes: {path}") + return data + + +def digest(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def community_id(node: dict, tool: str) -> int | None: + value = node.get("community") + if value is None: + return None + if tool == "compass": + if not isinstance(value, dict): + raise ValueError("Compass community must be an object") + value = value.get("id") + elif tool != "graphify": + raise ValueError(f"unsupported tool: {tool}") + if type(value) is not int or value < 0: + raise ValueError("community id must be a nonnegative integer") + return value + + +def audit_graph(graph: dict, tool: str, tasks: list[dict], limits: dict) -> dict: + if tool not in {"compass", "graphify"}: + raise ValueError(f"unsupported tool: {tool}") + if not isinstance(tasks, list) or not 1 <= len(tasks) <= 64: + raise ValueError("invalid task count") + task_ids = [task["id"] for task in tasks] + if any(not isinstance(identifier, str) or not identifier for identifier in task_ids) or len(set(task_ids)) != len(task_ids): + raise ValueError("task ids must be nonempty and unique") + if sum(len(task["declarations"]) for task in tasks) > MAX_DECLARATIONS: + raise ValueError("declaration limit exceeded") + for key, cap in [("maxNodes", 200000), ("maxEdges", 1000000)]: + if type(limits[key]) is not int or not 1 <= limits[key] <= cap: + raise ValueError("invalid graph record limit") + nodes = graph.get("nodes") + edges = graph.get("links") + if not isinstance(nodes, list) or not isinstance(edges, list): + raise ValueError("graph must contain node and link arrays") + if len(nodes) > limits["maxNodes"] or len(edges) > limits["maxEdges"]: + raise ValueError("graph record limit exceeded") + index: dict[tuple, set[str]] = defaultdict(set) + by_id = {} + sizes = Counter() + files: dict[int, set[str]] = defaultdict(set) + for node in nodes: + if not isinstance(node, dict): + raise ValueError("node must be an object") + identifier = node.get("id") + if not isinstance(identifier, str) or not identifier or identifier in by_id: + raise ValueError("node ids must be nonempty and unique") + by_id[identifier] = node + file, line, names = _node_anchor(node, tool) + if file is not None and line is not None: + for name in names: + index[file, line, name].add(identifier) + group = community_id(node, tool) + if group is not None: + sizes[group] += 1 + if file is not None: + files[group].add(file) + + declarations = [] + seen_ids = set() + seen_anchors = set() + for task in tasks: + for declaration in task["declarations"]: + identifier = declaration["id"] + key = (declaration["file"], declaration["startLine"], declaration["symbol"]) + if (not isinstance(identifier, str) or not identifier + or not isinstance(key[0], str) or not key[0] + or type(key[1]) is not int or key[1] <= 0 + or not isinstance(key[2], str) or not key[2]): + raise ValueError("invalid source declaration identity") + if identifier in seen_ids or key in seen_anchors: + raise ValueError("repeated source declaration in registration") + seen_ids.add(identifier) + seen_anchors.add(key) + matches = sorted(index.get(key, set())) + row = dict(id=identifier, task=task["id"], file=declaration["file"], + startLine=declaration["startLine"], symbol=declaration["symbol"], + matchedNodeIds=matches, status="missing", community=None) + if len(matches) > 1: + row["status"] = "ambiguous" + elif matches: + group = community_id(by_id[matches[0]], tool) + row["community"] = group + row["status"] = "unassigned" if group is None else "resolved" + if group is not None: + row["communityNodes"] = sizes[group] + row["communitySourceFiles"] = len(files[group]) + declarations.append(row) + declarations.sort(key=lambda row: row["id"]) + pairs = [] + summaries = defaultdict(Counter) + for left, right in combinations(declarations, 2): + kind = "within_task" if left["task"] == right["task"] else "cross_task" + file_kind = "same_file" if left["file"] == right["file"] else "cross_file" + outcome = "unresolved" + if left["status"] == right["status"] == "resolved": + outcome = "same_community" if left["community"] == right["community"] else "different_community" + pairs.append(dict(left=left["id"], right=right["id"], kind=kind, + fileKind=file_kind, outcome=outcome)) + for scope in [kind, kind + "/" + file_kind]: + summaries[scope][outcome] += 1 + return dict(nodes=len(nodes), assignedNodes=sum(sizes.values()), communities=len(sizes), + declarations=declarations, pairs=pairs, + summaries={key: {outcome: counts[outcome] for outcome in + ["same_community", "different_community", "unresolved"]} + for key, counts in sorted(summaries.items())}) + + +def verify_source(repository: dict, source: Path) -> None: + commit = subprocess.run(["git", "-C", str(source), "rev-parse", "HEAD"], + check=True, capture_output=True, text=True, timeout=10).stdout.strip() + if commit != repository["commit"]: + raise ValueError("source commit differs from registration") + root = source.resolve() + for task in repository["tasks"]: + for declaration in task["declarations"]: + relative = Path(declaration["file"]) + if relative.is_absolute() or ".." in relative.parts: + raise ValueError("source path must be repository-relative") + path = (root / relative).resolve() + path.relative_to(root) + data = read_bounded(path, MAX_SOURCE_BYTES) + if digest(data) != declaration["sourceFileSha256"]: + raise ValueError("source file digest differs from registration") + start, end = declaration["startLine"], declaration["witnessEndLine"] + lines = data.decode("utf-8").splitlines() + if type(start) is not int or type(end) is not int or not 1 <= start <= end <= len(lines): + raise ValueError("invalid source witness range") + if "\n".join(lines[start - 1:end]) != declaration["witness"]: + raise ValueError("source witness differs from registration") + + +def execute(registration_path: Path, run_path: Path, output: Path) -> None: + registration_bytes = read_bounded(registration_path, MAX_SOURCE_BYTES) + registration = json.loads(registration_bytes) + if registration.get("schema") != "compass.community-task-pairs/1": + raise ValueError("unsupported registration schema") + if not 1 <= len(registration["repositories"]) <= 32: + raise ValueError("invalid repository count") + run_bytes = read_bounded(run_path, MAX_JSON_BYTES) + if digest(run_bytes) != registration["sourceRunSha256"]: + raise ValueError("source run digest differs from registration") + run = json.loads(run_bytes) + sources = {row["repository"]: row for row in run["repositories"]} + report = dict(schema="compass.community-task-audit/1", + scope=registration["scope"], registrationSha256=digest(registration_bytes), + sourceRunSha256=digest(run_bytes), + auditorSha256=digest(read_bounded(Path(__file__), MAX_SOURCE_BYTES)), + anchorMatcherSha256=digest(read_bounded(Path(__file__).with_name("runner.py"), MAX_SOURCE_BYTES)), + repositories=[]) + bounds = registration["policy"]["bounds"] + for repository in registration["repositories"]: + previous = sources[repository["repository"]] + source = Path(previous["source"]) + verify_source(repository, source) + row = dict(repository=repository["repository"], commit=repository["commit"], tools={}) + for tool in ["compass", "graphify"]: + data = read_bounded(Path(previous[tool + "Graph"]), min(bounds["maxGraphBytes"], MAX_JSON_BYTES)) + graph_digest = digest(data) + if graph_digest != repository["graphSha256"][tool]: + raise ValueError("graph digest differs from registration") + result = audit_graph(json.loads(data), tool, repository["tasks"], bounds) + result["graphSha256"] = graph_digest + row["tools"][tool] = result + report["repositories"].append(row) + # Never replace an earlier diagnostic capture. + with output.open("x", encoding="utf-8") as stream: + json.dump(report, stream, indent=2) + stream.write("\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--run", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + arguments = parser.parse_args() + execute(arguments.registration, arguments.run, arguments.output) diff --git a/benchmarks/agent_query/core_inference_fixture_review.json b/benchmarks/agent_query/core_inference_fixture_review.json new file mode 100644 index 000000000..20564bc13 --- /dev/null +++ b/benchmarks/agent_query/core_inference_fixture_review.json @@ -0,0 +1,80 @@ +{ + "afterFixtureSha256": "c34fa0bbaa7fc5a64d53fd142c34462c5843c0fe5e9f6fb1825248fdc3668ed9", + "afterSourceManifestSha256": "0c1cc9821267491f263ea22a84a92730e5b8658d96bcb05116cc978fa815c417", + "beforeAfterBaselineComparisonSha256": "20b9f219444095ceac3075716cf849ca8250632158cf68fd7935f213a27c3b6f", + "beforeFixtureSha256": "7fae4ec71c4fa1fbf06b77ee8a780f46efaf2c8d9e63c9be9ec5b34d4cd4cdcf", + "changedRustAndManifestInputs": [ + "crates/compass-core/tests/loading_coverage.rs" + ], + "checks": [ + { + "exitCode": 0, + "name": "fmt", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "wallMs": 4406 + }, + { + "exitCode": 0, + "name": "focused-clippy", + "stderrSha256": "223b1728b76c2132cd2612388bdf9a7487f5f2945b9b5aaa0cc3531560bbc991", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "wallMs": 93393 + }, + { + "exitCode": 0, + "name": "workspace-clippy", + "stderrSha256": "9564857d44c7db3de9b21adfd6f085f6306eead154431e5aab786e7e459eeb22", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "wallMs": 1849 + }, + { + "exitCode": 0, + "name": "workspace-tests", + "stderrSha256": "ec94f0c63096545b2c68db32e63b494b7de4134f1fa41e75cd0c7e927f4f460d", + "stdoutSha256": "b3063489c879d36b558f1acefb9b9654590ccb5128edfa81ff759aa9734f1ea0", + "wallMs": 61130 + }, + { + "exitCode": 0, + "name": "core-integration", + "stderrSha256": "a1ba9c61977fda16c3fa5e0a52d349d9d2dbab0b4cc0cefc78c0e83d146f1ad2", + "stdoutSha256": "30b5fe8459b07bbfe6b410549164633eef275604ec4034547f4af4ab2ab0d3aa", + "wallMs": 14202 + } + ], + "fixturePatchSha256": "917897cde35b4fbae5b7a3e8400395401a4fdb02ba22c58012472a4feaa3337b", + "limitations": [ + "This fixture correction does not demonstrate a product behavior improvement or change the original baseline failures.", + "The preserved cache query and Graphify comparison results are unaffected; actual god-object diagnosis remains unproven." + ], + "newPassedTests": [ + "loaded_graph_learning_overlay_marks_current_missing_and_unfingerprinted_sources", + "export_inputs_fall_back_to_node_communities_and_tolerate_partial_sidecars", + "build_pipeline_reports_missing_and_empty_roots_and_accepts_file_only_sources", + "semantic_build_normalizes_typed_origins_paths_and_incremental_updates", + "incremental_mixed_origin_edges_use_fresh_ast_relationship_sites", + "incremental_mixed_occurrence_cardinality_matches_exact_sites_and_preserves_residue", + "incremental_update_preserves_then_replaces_owned_semantic_facts", + "incremental_deleted_mixed_occurrence_keeps_only_revalidated_semantic_evidence", + "incremental_mixed_origin_alias_edges_use_canonical_fresh_relationship_sites", + "incremental_deleted_remapped_mixed_occurrence_rebinds_trusted_semantic_residue", + "incremental_mixed_origin_nodes_use_fresh_ast_typed_data", + "refreshed_mixed_edge_drops_stale_incremental_endpoint_remap_evidence", + "incremental_ast_endpoint_remap_retains_exact_typed_rewrite_evidence" + ], + "previousBaselineFailedTests": [ + "incremental_ast_endpoint_remap_retains_exact_typed_rewrite_evidence", + "incremental_deleted_mixed_occurrence_keeps_only_revalidated_semantic_evidence", + "incremental_deleted_remapped_mixed_occurrence_rebinds_trusted_semantic_residue", + "incremental_mixed_occurrence_cardinality_matches_exact_sites_and_preserves_residue", + "incremental_mixed_origin_alias_edges_use_canonical_fresh_relationship_sites", + "incremental_mixed_origin_edges_use_fresh_ast_relationship_sites", + "refreshed_mixed_edge_drops_stale_incremental_endpoint_remap_evidence" + ], + "priorProductionQualificationSha256": "14250b55c069e69bd107bf0a1f6aac61fe95498c0ea7ecfa761cfd0592b20d43", + "qualificationReportSha256": "d7fcd7ac606a27c06f3406334fe9a69a2887b45e6dad05b7fe69f1a3a0c40e2c", + "schema": "compass.core-inference-fixture-review/1", + "scope": "A test-only correction: seven semantic-preservation fixtures explicitly use Max inference and keep their assertions. The public default remains Low; production behavior and frozen cache-evaluation binary are unchanged.", + "unchangedProductionBinarySha256": "03403b96658900adad039db08b5814a5b5d090075fe2a31dc8bebbe7c012aa1b" +} diff --git a/benchmarks/agent_query/cursor_harness_correction_review.json b/benchmarks/agent_query/cursor_harness_correction_review.json new file mode 100644 index 000000000..9f5adfb80 --- /dev/null +++ b/benchmarks/agent_query/cursor_harness_correction_review.json @@ -0,0 +1,151 @@ +{ + "schema": "compass.cursor-harness-correction-review/1", + "scope": "Benchmark workflow correction only; no product recall or extraction improvement. Query-only replay of all 110 unchanged requests on verified retained graphs and pinned source working directories.", + "baselineRunId": "export-binding-panel-a-01", + "baselineRunnerDigest": "173242988699eb6fabd175c293634d3cf37c1394f76429540fd7af2a48ef7026", + "replayedRunnerDigest": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "finalRunnerDigest": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "suiteDigest": "820a5c29f59e68b4ee8493e153c806b23e458a396431f3cf381660e469391237", + "tools": [ + { + "name": "compass", + "version": "compass 0.3.30", + "binarySha256": "04eab05bd5bbc94f3f0f86580bdd3de9950599bc9e548b8f8ba95791b8baa0c9" + }, + { + "name": "graphify", + "version": "graphify 0.9.67", + "binarySha256": "a7fdb4ac8985755be15f10f89a2d17ee517130b3ac90c28c91644ae351881da3" + } + ], + "scores": { + "compass": { + "passed": 49, + "total": 55 + }, + "graphify": { + "passed": 46, + "total": 55 + } + }, + "changes": [ + { + "question": "redux-holdout-broad", + "tool": "compass", + "before": { + "exit": 1, + "followUps": 1, + "passed": false + }, + "after": { + "exit": 0, + "followUps": 0, + "passed": false + }, + "remainingFailure": "missing 'miniKindOf'" + } + ], + "rawCaptureAgreement": { + "files": 228, + "byteIdenticalToBaseline": 225, + "note": "All retained Compass captures match byte-for-byte. Three Graphify query outputs change edge ordering/content within their output budget, without changing observed scores or token counts. Do not attribute these changes to the Compass-only cursor fix or claim whole-answer equivalence. The invalid terminal-cursor request is not issued.", + "changedCaptures": [ + { + "path": "click/click-holdout-ask-callers.graphify.0.stdout", + "sha256": "35049e3d323057590a898a5e09d5576a0cd98f43cf5908eb515a0d01624d5135", + "baselineSha256": "1ca4304e3da5eed6d82203fd6d5e6f4e98f411e34e4110c28aa2bb2a61a1a4f3", + "identicalToBaseline": false + }, + { + "path": "jsoup/jsoup-holdout-ask-callers.graphify.0.stdout", + "sha256": "afd7f9557d93dec2219aa29e8eb5e0e67a1c71e36c1d1b5dc41a3e0f68748626", + "baselineSha256": "de5fcd3ed8c6df698b140e12b68959411d1878921410102d7c7e88eb646ba371", + "identicalToBaseline": false + }, + { + "path": "walkdir/walkdir-holdout-ask-callers.graphify.0.stdout", + "sha256": "8f75b32eed711ba8f2e1760be419d702831e21e9d178283bb03f05e869688971", + "baselineSha256": "8901bc64e4aaafdeda75f57dbee8a64ab823eb2bfe882d8ada259e1772c8dc95", + "identicalToBaseline": false + } + ] + }, + "historicalRunsWithTerminalCursorCount": 5, + "verification": { + "benchmarkTests": 99, + "passed": true, + "negativeCases": [ + "terminal none", + "source/prose next= text", + "multiple footers", + "repeated cursor" + ], + "positiveCases": [ + "valid opaque cursor", + "legacy page footer", + "discovery range footer", + "typed page/range footer", + "LF and CRLF" + ] + }, + "retainedFailedAttempts": [ + "First test invocation targeted the wrong unittest class; the second had an incorrect argument-position assertion. The corrected tests-before-03 invocation still failed on the real parser defects.", + "First replay collected 110 requests but used the Compass checkout cwd, losing eight source excerpts; it is invalidated, not a comparative result. Its summary step also required recovery of omitted graphMetrics. No production cache defect is inferred.", + "A byte-equality assertion stopped on three Graphify output variations; all are retained and reported separately from score agreement.", + "The successful replay-02 uses the final CRLF-capable runner, source cwd, all binary/graph/source pre/post checks and complete aggregation." + ], + "reduxDiagnosis": { + "scope": "Separate post-output Compass-only diagnostic, not comparative scoring.", + "originalQuestion": { + "seeds": 0, + "candidateNodesRead": 431, + "candidateProbes": 73, + "diagnostic": "bounded_truncation" + }, + "shortNameAndPhraseQueries": "kind of, kindOf, miniKindOf, and kindOf.kindOf produce source-located candidates. The natural-language retrieval/specificity gap remains open." + }, + "artifactRoot": "cursor-harness-correction", + "artifactsSha256": { + "delta.json": "3373fd204948ed362058fdeee550b681e6736e2c2fc8950e3001334f7869865b", + "historical-terminal-cursor-census.json": "ac6b764e5f2d96da0ee1d727ae470d805893a1f5be0ecf2fa9dddb645e2d63de", + "raw-capture-manifest.json": "40a01acc3d0ce4be0bb191bccff01753e58eda98b351bb690fd1ffa3f0b98a9f", + "redux-recall-diagnostic/review.json": "d9b7cfb1c39d06bd847fa88fbd96a77513c6cd6a8ef073795fd4bf0b10aea1dd", + "replay-02/run.json": "ea64bb218186a65a775ddaefca65772b63835f98a267a8dfe7f5de29019d3c23", + "replay-02/runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "replay-02.log": "c3865fd8355295d7be0078d9712075ea111dd4e3939b2b7ae09fb7d5d2044907", + "replay-02.py": "84080133c52c93e6e06b00b7dc2a208e529223bb953f78b9477524f530285f75", + "replay.log": "35238deb04a60cf3a91ed075ac657faa382bd9fea528d5fd3c81eb4ed2833e6b", + "replay.py": "a09dc5cd4a579bd7951cec7966f8030f3637d79e68e31d8e30a567045e80859e", + "run-before-summary.json": "894143f2b5fd53101685f9fb7dbbb86c058db6cd4a266a89e7185c395c516984", + "run.json": "afd0dbe34e18a8a1318ab42b5eec1f1f7789326ae7059ed11eaf3185b4317a7b", + "runner-replayed.py": "f77a8a67d8599696b9e8bec64f3244cc0bd8e63908ac1ac6ca6f2a5d0435c016", + "tests-after-02.log": "fa50898beef95c419d8fdf42dc636cacd8c65c993112f4e8cefe648cbe948530", + "tests-after.log": "b71895754d3cfc052c763f5ae4259d3472f0106d543cb347db4139df98a8a213", + "tests-before-02.log": "1f8b3d1a4bcfed1631fcfff1fead6291115d0eafff7a7d310dd5d25ac8b15c98", + "tests-before-03.log": "d24b646a92dc635cde717d4550ecb32e816b0bf1b67d868ce8d6ae741a295340", + "tests-before.log": "92f6d0896422342b4d02403844c3d2ba18e0c0f1fbc78a5de12ea7882d855091", + "tests-after-03.log": "b06670816c08ab1d2fdf397d80071ef2c7dd29e06feecd93aaa7864062330ac9", + "help-before.log": "ad9efaa4a0107c256eb59648686b65d6f1f70326a18d8a00d2ae65fa6c123064", + "help-after-baseline.log": "4c4807e45d9aa355b504f9291d3f8cd3f16570e7bd7125be910336d506fa2139", + "help-after.txt": "7b796d44eea2b37d0407e340bfcd70e41a757a4a8e688e24a0cffdbd03a69fc2", + "help-clippy.log": "66ee6744b47d9baf2ceda592ab6af4511ed61baee1b4143796d681fb7dc5e332" + }, + "testSourceSha256": "988baee76e896d97af6c306711e21beee67a97a6b56305db4591c228a3a80aaa", + "helpCorrection": { + "scope": "CLI help presentation only; runtime limits, graph/query schemas and release version are unchanged.", + "reproduction": "Replacing the numeric prefix default/hard maximum: 1000 also rewrote the 10000 expansion default to 128. Exact closing delimiters keep these fields separate.", + "sourceSha256": { + "crates/compass-cli/src/help.rs": "47322c5b7b5dceb0f94b2604f87dfbdca8746e4824b10418bdd5d7b39f527e68", + "crates/compass-cli/tests/help_cli.rs": "ebeb152bbc69daae78a256c1018ddf43bdf5d9041515c4da6e2de330379caa7e" + }, + "native": { + "passed": 1107, + "failed": 0, + "ignored": 2, + "scope": "Workspace lib/bin, help_cli and compass_product; --locked." + }, + "clippy": "Passed: workspace lib/bin plus help_cli, --locked, -D warnings.", + "binarySha256": "5e80b2f5e0624df1897fe7005677125d40fa991f4dfdf78089094dace2876ab8", + "graphFixtureQualification": "The complete fixture pass qualifies export-binding production 9b63873a. Not rerun for this help-only correction; no extraction/traversal code changed." + } +} diff --git a/benchmarks/agent_query/directed_identity.py b/benchmarks/agent_query/directed_identity.py new file mode 100644 index 000000000..5e8404729 --- /dev/null +++ b/benchmarks/agent_query/directed_identity.py @@ -0,0 +1,127 @@ +"""Capture source-assisted directed paths and separate Compass depth diagnostics. + +Request construction uses public resolver outputs and frozen source coordinates; +no graph ID or route is consulted to choose endpoints. All failures are retained. +""" +import argparse +import dataclasses +import hashlib +import json +from pathlib import Path +import shutil +import subprocess + +from benchmarks.agent_query.community_identity import SEARCH_LIMITS, selected_id +from benchmarks.agent_query.community_navigation import call +from benchmarks.agent_query.community_tasks import read_bounded +from benchmarks.agent_query.mcp_compare import verify_environment +from benchmarks.agent_query.mcp_transport import StdioMcp +from benchmarks.agent_query.runner import run_bounded, _sha256_file + + +def resolver(tool, witness, *, exact=False): + coordinate = dict(file=witness['file'], startLine=witness['line'], symbol=witness['symbol']) + if tool == 'compass': + arguments = dict(query=coordinate['symbol'], **SEARCH_LIMITS) + if exact: + arguments.update(exact=True, source_file=coordinate['file'], start_line=coordinate['startLine']) + return coordinate, dict(method='search_symbols', arguments=arguments) + if tool == 'graphify' and '::' not in coordinate['file']: + return coordinate, dict(method='get_node', arguments=dict(label=coordinate['file']+'::'+coordinate['symbol'])) + raise ValueError('unsupported resolver input') + + +def execute(args): + registration = json.loads(read_bounded(args.registration, 1048576)) + witnesses = json.loads(read_bounded(args.witnesses, 1048576)) + run = json.loads(read_bounded(args.run, 16777216)) + if registration['schema'] not in {'compass.directed-identity-development-registration/1', 'compass.longer-path-registration/1'}: + raise ValueError('unsupported registration') + exact = registration['schema'] == 'compass.longer-path-registration/1' + if exact and _sha256_file(args.compass) != registration['baselineBinarySha256']: + raise ValueError('registered binary digest mismatch') + if _sha256_file(args.run) != registration['graphRunSha256']: + raise ValueError('graph input digest mismatch') + if _sha256_file(args.witnesses) != registration['sourceWitnesses'][args.witnesses.name]: + raise ValueError('source witness digest mismatch') + verify_environment(args) + repositories = {r['repository']: r for r in run['repositories']} + if len(witnesses['witnesses']) != 5: + raise ValueError('expected the frozen five source chains') + def inputs(): + for w in witnesses['witnesses']: + repo = repositories[w['repository']]; root = Path(repo['source']) + if subprocess.check_output(['git', '-C', str(root), 'rev-parse', 'HEAD'], text=True, timeout=10).strip() != w['commit']: + raise ValueError('source revision mismatch') + if subprocess.check_output(['git', '-C', str(root), 'status', '--porcelain'], text=True, timeout=10).strip(): + raise ValueError('source checkout is dirty') + for tool in ['compass', 'graphify']: + if _sha256_file(Path(repo[tool+'Graph'])) != repo[tool+'GraphSha256']: + raise ValueError('graph digest mismatch') + routes = [w] + w.get('alternativeWitnesses', []) + anchors = [a for route in routes for a in route['nodes'] + [s['site'] for s in route['steps']]] + for anchor in anchors: + path = (root/anchor['file']).resolve() + if not path.is_relative_to(root.resolve()): raise ValueError('source path escapes root') + data = read_bounded(path, 4194304) + if hashlib.sha256(data).hexdigest() != anchor['fileSha256']: + raise ValueError('source file digest mismatch') + if anchor['text'] not in data.decode().splitlines()[anchor['line']-1]: + raise ValueError('source witness text mismatch') + inputs() + args.output.mkdir(parents=True, exist_ok=False) + files = [args.registration, args.witnesses, args.graphify_environment, Path(__file__)] + files += [Path(__file__).with_name(n) for n in ['community_identity.py','community_navigation.py','mcp_compare.py','mcp_transport.py','runner.py']] + support = {} + for p in files: + shutil.copy2(p,args.output/p.name); support[p.name]=_sha256_file(p) + binaries={name:dict(path=str(path),sha256=_sha256_file(path)) for name,path in [('compass',args.compass),('graphify-python',args.graphify_python)]} + report=dict(schema='compass.directed-identity-capture/1',complete=False,sourceRun=str(args.run),sourceRunSha256=_sha256_file(args.run),supportFiles=support,binaries=binaries,results=[]) + def save(): (args.output/'capture.json').write_text(json.dumps(report,indent=2)+'\n') + save() + for witness in witnesses['witnesses']: + repo=repositories[witness['repository']]; root=Path(repo['source']) + for tool in ['compass','graphify']: + row=dict(question=witness['id'],repository=witness['repository'],tool=tool,graphSha256=repo[tool+'GraphSha256'],resolvers=[],paths=[]) + argv=[str(args.compass),'serve'] if tool=='compass' else [str(args.graphify_python),'-m','graphify.serve'] + argv+=['--graph',repo[tool+'Graph'],'--transport','stdio'] + directory=args.output/'raw'/witness['id']/tool + try: + with StdioMcp(argv,root,directory/'mcp',timeout=60,max_bytes=1048576) as session: + session.initialize() + listing=session.send('tools/list',{}) + expected='search_symbols' if tool=='compass' else 'get_node' + if expected not in {t['name'] for t in listing.get('result',{}).get('tools',[])}: + raise ValueError('public resolver unavailable') + for endpoint in [witness['nodes'][0],witness['nodes'][-1]]: + coordinate,request=resolver(tool,endpoint,exact=exact) + captured=call(session,request['method'],request['arguments']) + row['resolvers'].append(dict(coordinate=coordinate,call=captured,selection=selected_id(tool,captured,coordinate))) + except (OSError,RuntimeError,ValueError,TimeoutError) as error: + row['resolverError']=str(error) + selectors=[r['selection']['selector'] for r in row['resolvers']] + row['endpointsResolved']=len(selectors)==2 and all(s is not None for s in selectors) + if row['endpointsResolved']: + plans=[('forward',selectors[0],selectors[1],8),('reverse',selectors[1],selectors[0],8)] + if tool=='compass':plans += [('depth-'+str(depth),selectors[0],selectors[1],depth) for depth in range(1,len(witness['steps']))] + for direction,source,target,depth in plans: + argv=([str(args.compass),'node',source,target,'--max-depth',str(depth),'--max-paths','1','--format','json'] if tool=='compass' else [str(args.graphify_python),'-m','graphify','path',source,target,'--directed']) + argv+=['--graph',repo[tool+'Graph']] + stdout=directory/(direction+'.stdout');stderr=directory/(direction+'.stderr') + capture=run_bounded(tuple(argv),cwd=root,timeout_seconds=60,stdout_path=stdout,stderr_path=stderr) + record=dataclasses.asdict(capture);record.pop('stdout');record.pop('stderr') + record.update(direction=direction,maxDepth=depth if tool=='compass' else None,stdoutPath=str(stdout),stderrPath=str(stderr),stdoutSha256=_sha256_file(stdout),stderrSha256=_sha256_file(stderr)) + row['paths'].append(record) + report['results'].append(row);save() + print(witness['id'],tool,row['endpointsResolved'],[(p['direction'],p['exit_code']) for p in row['paths']],flush=True) + inputs();verify_environment(args) + for binary in binaries.values(): + if _sha256_file(Path(binary['path']))!=binary['sha256']:raise ValueError('executable changed') + report['complete']=True;save() + + +if __name__=='__main__': + p=argparse.ArgumentParser(description=__doc__) + for name in ['registration','witnesses','run','output','compass','graphify-python','graphify-environment']: + p.add_argument('--'+name,type=Path,required=True) + execute(p.parse_args()) diff --git a/benchmarks/agent_query/directed_identity_development_registration.json b/benchmarks/agent_query/directed_identity_development_registration.json new file mode 100644 index 000000000..a5678095f --- /dev/null +++ b/benchmarks/agent_query/directed_identity_development_registration.json @@ -0,0 +1,25 @@ +{ + "schema": "compass.directed-identity-development-registration/1", + "scope": "Same five source-reviewed directed call chains from the existing development panel. New public endpoint-resolution workflow and depth-bound diagnostics, not held-out evidence or longer-path coverage.", + "baselineCommit": "8eb1bf0fbede6ffa6353a64343870f992a546dd5", + "baselineBinary": "neighbor-identity-02/compass", + "baselineBinarySha256": "59addb98d357f8ed9b09618a340df6e9dc1352357887d465eb1514c45cbd862f", + "sourceWitnesses": { + "directed_path_development_registration.json": "749eaca9649b1975f099445b4eab7a17259b4578a01747aaa7182a622d0282e6", + "directed_path_development_review.json": "82ef7fd83173a7935e1729c44651324bdd76ae46c58198d5c5ebab17abf192bd" + }, + "graphRun": "rust-index-receiver-03/run.json", + "graphRunSha256": "9a6e670114f5be83773176e54bf0c4faf45582389164dea79ad17306eee1c50c", + "graphs": "Reuse all ten frozen graphs without extraction. Verify hashes and pinned sources before and after.", + "endpointResolution": "Supply the same witness endpoint file, start line and symbol to both tools. Make one public search_symbols request for Compass (max_candidates 256, max_nodes 500, max_response_bytes 524288) and one path::symbol get_node request for Graphify per endpoint. Use existing source-anchor selectors. Request builders cannot read graph IDs/adjacency. Unresolved endpoints remain in the denominator; no oracle-ID substitution.", + "pathRequests": "For each pair of uniquely source-matched returned IDs, invoke Compass node SOURCE TARGET --max-depth 8 --max-paths 1 --format json and Graphify path SOURCE TARGET --directed. Repeat swapped endpoints as a diagnostic; a forward witness does not prove reverse absence. Preserve all errors and output.", + "bounds": "60 seconds and 16 MiB per stdout/stderr stream for each CLI call; 60 seconds and 1 MiB per MCP response. Native internal limits differ (Graphify has no CLI depth flag); no equal-work, latency or extraction comparison.", + "pathJudgment": "Verify ordered exact identities, directed relationship kinds, adjacency, confidence, anchors and source support for every returned route. Registered routes are positive witnesses, not mandatory shortest routes. Review alternate routes against source before credit. Mixed containment/reference routes are not call-chain successes.", + "depthDiagnostics": "For Compass, repeat source-resolved forward IDs with each max_depth from 1 through one below the source witness hop count. Review any found route. Missing bounded results must not assert global direction mismatch or unreachability without proof. Graphify has no equivalent depth control, so this arm is a Compass correctness diagnostic, not a paired score.", + "fixValidation": "First reproduce a longer forward path plus shorter reverse shortcut in a native regression. Preserve successful paths at the boundary, exhausted work budgets, dead-end and cycle cases, deterministic ordering, and JSON/store parity. Run applicable native baseline and public contracts.", + "limitations": [ + "Reused tasks, graphs and known misses; no held-out or population claims.", + "Resolution, path availability, route identity, source-supported call flow and bound correctness are separate outcomes.", + "God-object responsibility, source explanations and broader/longer walks remain outstanding." + ] +} diff --git a/benchmarks/agent_query/directed_identity_development_review.json b/benchmarks/agent_query/directed_identity_development_review.json new file mode 100644 index 000000000..1d398e240 --- /dev/null +++ b/benchmarks/agent_query/directed_identity_development_review.json @@ -0,0 +1,2081 @@ +{ + "schema": "compass.directed-identity-development-review/1", + "scope": "Known development chains across five languages; query replay on ten frozen graphs. Source-assisted IDs and native short labels are separate arms. No held-out, extraction, latency, population precision, or overall superiority claim.", + "implementationCommit": "1ec835bfa66073b9295ac5c58ca089e3959c5c7c", + "registrations": { + "sourceAssisted": { + "commit": "98759ae818a89f89fad19d4219b9c8954b986108", + "sha256": "13f2d40857c320b89958c606d0b673f6232824c4ea88cd6fd107bbbb5b8a56b5" + }, + "nativeLabelControl": { + "commit": "2cc02501", + "sha256": "2201598e675a94675c4f133cc900b7e083018abb0268289a6d59853d1a6b0eb4", + "timing": "After ID baseline failures were seen, before executing label control. Not blind." + } + }, + "tools": { + "compass": { + "version": "0.3.30", + "binarySha256": "58199f5cfbbce9def3acb58bf019179218c8f6cbe379a3cd96ad9542e8f0b31f" + }, + "graphify": { + "version": "0.9.67", + "environmentManifestSha256": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535" + } + }, + "graphs": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "compassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "compassGraphSha256": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "compassGraphSha256": "e68fbe798dcf7422184736971dcdfc29d577e1e37269ea9c43456b9f6af54cb3", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ], + "summary": { + "sourceAssisted": { + "compass": { + "sourceSupportedCallPaths": 4, + "literalFrozenOccurrenceSites": 3, + "positiveTasks": 5 + }, + "graphify": { + "sourceSupportedCallPaths": 1, + "literalFrozenOccurrenceSites": 1, + "positiveTasks": 5 + } + }, + "nativeLabels": { + "compass": { + "sourceSupportedCallPaths": 2, + "literalFrozenOccurrenceSites": 1, + "positiveTasks": 5 + }, + "graphify": { + "sourceSupportedCallPaths": 2, + "literalFrozenOccurrenceSites": 2, + "positiveTasks": 5 + } + }, + "unchangedPayloads": [ + { + "question": "chi-directed-chain", + "tool": "compass", + "direction": "forward" + }, + { + "question": "chi-directed-chain", + "tool": "graphify", + "direction": "forward" + }, + { + "question": "chi-directed-chain", + "tool": "graphify", + "direction": "reverse" + }, + { + "question": "click-directed-chain", + "tool": "compass", + "direction": "forward" + }, + { + "question": "click-directed-chain", + "tool": "graphify", + "direction": "forward" + }, + { + "question": "click-directed-chain", + "tool": "graphify", + "direction": "reverse" + }, + { + "question": "jsoup-directed-chain", + "tool": "compass", + "direction": "forward" + }, + { + "question": "jsoup-directed-chain", + "tool": "graphify", + "direction": "forward" + }, + { + "question": "jsoup-directed-chain", + "tool": "graphify", + "direction": "reverse" + }, + { + "question": "redux-directed-chain", + "tool": "graphify", + "direction": "forward" + }, + { + "question": "redux-directed-chain", + "tool": "graphify", + "direction": "reverse" + }, + { + "question": "walkdir-directed-chain", + "tool": "compass", + "direction": "forward" + }, + { + "question": "walkdir-directed-chain", + "tool": "graphify", + "direction": "forward" + }, + { + "question": "walkdir-directed-chain", + "tool": "graphify", + "direction": "reverse" + } + ], + "depthDiagnostics": { + "beforeCompleteNegatives": 9, + "afterExplicitIncomplete": 9 + } + }, + "sourceAssistedResults": [ + { + "question": "chi-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "failures": [], + "nodes": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "source": { + "file": "mux.go", + "startByte": 4390, + "endByte": 4510, + "startLine": 137, + "startColumn": 0, + "endLine": 139, + "endColumn": 1 + }, + "name": ".MethodFunc()" + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "source": { + "file": "mux.go", + "startByte": 4034, + "endByte": 4267, + "startLine": 127, + "startColumn": 0, + "endLine": 133, + "endColumn": 1 + }, + "name": ".Method()" + }, + { + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "source": { + "file": "mux.go", + "startByte": 13994, + "endByte": 14669, + "startLine": 430, + "startColumn": 0, + "endLine": 451, + "endColumn": 1 + }, + "name": ".handle()" + }, + { + "id": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "source": { + "file": "tree.go", + "startByte": 3152, + "endByte": 5528, + "startLine": 148, + "startColumn": 0, + "endLine": 238, + "endColumn": 1 + }, + "name": ".InsertRoute()" + }, + { + "id": "sha256:14440f0795f62b6428da626ef794bf18b4acd793012fc5148478f8a50519ddaa", + "source": { + "file": "tree.go", + "startByte": 19345, + "endByte": 19481, + "startLine": 822, + "startColumn": 0, + "endLine": 829, + "endColumn": 1 + }, + "name": "longestPrefix()" + } + ], + "steps": [ + { + "edgeId": "sha256:275a2a085c7409a899e065c2d836a8a75506ddd76542ac01de4764e50e899b32", + "source": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "target": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "kind": "calls", + "site": { + "file": "mux.go", + "startByte": 4471, + "endByte": 4480, + "startLine": 138, + "startColumn": 1, + "endLine": 138, + "endColumn": 10 + }, + "sourceBytes": "mx.Method", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:3155b7566154b5aa0c12e18cd3b3049c0b96cc58b9d8a2f0fa38df38f24cb968", + "source": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "target": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "kind": "calls", + "site": { + "file": "mux.go", + "startByte": 4235, + "endByte": 4244, + "startLine": 132, + "startColumn": 1, + "endLine": 132, + "endColumn": 10 + }, + "sourceBytes": "mx.handle", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:a8a9ae5d8e8d38059bf3959a56f6ab77056b2a23faac85a18f88ce28c5fdebb5", + "source": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "target": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "kind": "calls", + "site": { + "file": "mux.go", + "startByte": 14628, + "endByte": 14647, + "startLine": 450, + "startColumn": 8, + "endLine": 450, + "endColumn": 27 + }, + "sourceBytes": "mx.tree.InsertRoute", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:96d37619a29dcb60d5057938e6910b83c6068d29b5e9b01a983588d56070d55c", + "source": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "target": "sha256:14440f0795f62b6428da626ef794bf18b4acd793012fc5148478f8a50519ddaa", + "kind": "calls", + "site": { + "file": "tree.go", + "startByte": 4577, + "endByte": 4590, + "startLine": 201, + "startColumn": 18, + "endLine": 201, + "endColumn": 31 + }, + "sourceBytes": "longestPrefix", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + } + ], + "responseDiagnostics": [], + "truncated": false, + "classification": "reviewed-call-chain", + "resolvedEndpoints": [ + "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "sha256:14440f0795f62b6428da626ef794bf18b4acd793012fc5148478f8a50519ddaa" + ] + }, + { + "question": "chi-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "route length differs from reviewed witness" + ], + "nodes": [], + "steps": [], + "renderedLabels": [ + "Mux", + "node", + ".findPattern()", + "longestPrefix()" + ], + "renderedRelations": [ + "references", + "method", + "calls" + ], + "classification": "mixed-relation-route", + "renderedEndpointCandidates": [ + [ + "mux_go_chi_mux" + ], + [ + "tree_longestprefix" + ] + ], + "resolvedEndpoints": [ + "chi_mux_methodfunc", + "tree_longestprefix" + ], + "renderedEndpointIdentityMatches": [ + false, + true + ] + }, + { + "question": "click-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "failures": [], + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "source": { + "file": "src/click/utils.py", + "startByte": 11486, + "endByte": 13132, + "startLine": 381, + "startColumn": 0, + "endLine": 427, + "endColumn": 12 + }, + "name": "open_file()" + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "source": { + "file": "src/click/_compat.py", + "startByte": 11423, + "endByte": 14244, + "startLine": 374, + "startColumn": 0, + "endLine": 452, + "endColumn": 40 + }, + "name": "open_stream()" + }, + { + "id": "sha256:a6c6eac365b65fafaf2f46514d79c2cb36bb310fcfcb5119fcf65cca36ea35f9", + "source": { + "file": "src/click/_compat.py", + "startByte": 9593, + "endByte": 9800, + "startLine": 319, + "startColumn": 0, + "endLine": 323, + "endColumn": 17 + }, + "name": "get_binary_stdin()" + }, + { + "id": "sha256:786c10821cf94664962fba44589b5e61c43e426efb6b21a72e0f75b8c62e16df", + "source": { + "file": "src/click/_compat.py", + "startByte": 4815, + "endByte": 5484, + "startLine": 176, + "startColumn": 0, + "endLine": 191, + "endColumn": 15 + }, + "name": "_find_binary_reader()" + }, + { + "id": "sha256:e2c76ab69c159b40a93080ab5c1fa322863c8644d0523b5d2dc0ff14c913eba8", + "source": { + "file": "src/click/_compat.py", + "startByte": 4230, + "endByte": 4529, + "startLine": 154, + "startColumn": 0, + "endLine": 160, + "endColumn": 55 + }, + "name": "_is_binary_reader()" + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "source": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "target": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "kind": "calls", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:b3d1f4a591b7a358eb841388e97117bbd4a2377817aa4014c2b9f5fed9759bc5", + "source": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "target": "sha256:a6c6eac365b65fafaf2f46514d79c2cb36bb310fcfcb5119fcf65cca36ea35f9", + "kind": "calls", + "site": { + "file": "src/click/_compat.py", + "startByte": 12085, + "endByte": 12101, + "startLine": 392, + "startColumn": 19, + "endLine": 392, + "endColumn": 35 + }, + "sourceBytes": "get_binary_stdin", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:ab477fcd547ac3d833934602fc1d5871a98378031c63dc125aeaebbf5e84cb34", + "source": "sha256:a6c6eac365b65fafaf2f46514d79c2cb36bb310fcfcb5119fcf65cca36ea35f9", + "target": "sha256:786c10821cf94664962fba44589b5e61c43e426efb6b21a72e0f75b8c62e16df", + "kind": "calls", + "site": { + "file": "src/click/_compat.py", + "startByte": 9644, + "endByte": 9663, + "startLine": 320, + "startColumn": 13, + "endLine": 320, + "endColumn": 32 + }, + "sourceBytes": "_find_binary_reader", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:0ed10b05deb50320b392d13c0e611c3732abfc5d77e1267e3bb744afc3596349", + "source": "sha256:786c10821cf94664962fba44589b5e61c43e426efb6b21a72e0f75b8c62e16df", + "target": "sha256:e2c76ab69c159b40a93080ab5c1fa322863c8644d0523b5d2dc0ff14c913eba8", + "kind": "calls", + "site": { + "file": "src/click/_compat.py", + "startByte": 5399, + "endByte": 5416, + "startLine": 188, + "startColumn": 27, + "endLine": 188, + "endColumn": 44 + }, + "sourceBytes": "_is_binary_reader", + "confidence": [ + "exact" + ], + "frozenSiteMatches": false, + "acceptedAlternateOccurrences": [ + { + "file": "src/click/_compat.py", + "line": 188, + "text": "if buf is not None and _is_binary_reader(buf, True):", + "reason": "Same caller and callee, second direct occurrence; independently source-adjudicated in the earlier panel and reread for this replay. Frozen line 181 remains distinct." + } + ] + } + ], + "responseDiagnostics": [], + "truncated": false, + "classification": "reviewed-call-chain", + "resolvedEndpoints": [ + "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "sha256:e2c76ab69c159b40a93080ab5c1fa322863c8644d0523b5d2dc0ff14c913eba8" + ] + }, + { + "question": "click-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "expected exactly one rendered path header" + ], + "nodes": [], + "steps": [], + "classification": "no-path-reported", + "resolvedEndpoints": [ + "src_click_utils_open_file", + "src_click_compat_is_binary_reader" + ] + }, + { + "question": "jsoup-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "failures": [], + "nodes": [ + { + "id": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "source": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "startByte": 19606, + "endByte": 19743, + "startLine": 434, + "startColumn": 4, + "endLine": 436, + "endColumn": 5 + }, + "name": ".isValid()" + }, + { + "id": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 5577, + "endByte": 6207, + "startLine": 124, + "startColumn": 4, + "endLine": 133, + "endColumn": 5 + }, + "name": ".isValidBodyHtml()" + }, + { + "id": "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 8357, + "endByte": 8584, + "startLine": 182, + "startColumn": 4, + "endLine": 186, + "endColumn": 5 + }, + "name": ".copySafeNodes()" + } + ], + "steps": [ + { + "edgeId": "sha256:38d6c354f2e4a136528e0f8d4261fc07f6a2c9e18886865384966819efd9e046", + "source": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "target": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "kind": "calls", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "startByte": 19711, + "endByte": 19726, + "startLine": 435, + "startColumn": 37, + "endLine": 435, + "endColumn": 52 + }, + "sourceBytes": "isValidBodyHtml", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:d64cc76f4a39ece82f005ff9eb5b59046c4f4a2affc9183dbd7042047afe3c19", + "source": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "target": "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3", + "kind": "calls", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6102, + "endByte": 6115, + "startLine": 131, + "startColumn": 27, + "endLine": 131, + "endColumn": 40 + }, + "sourceBytes": "copySafeNodes", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + } + ], + "responseDiagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "truncated": false, + "classification": "reviewed-call-chain", + "resolvedEndpoints": [ + "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3" + ] + }, + { + "question": "jsoup-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "expected exactly one rendered path header" + ], + "nodes": [], + "steps": [], + "classification": "no-path-reported", + "resolvedEndpoints": [ + "src_main_java_org_jsoup_jsoup_jsoup_isvalid", + "src_main_java_org_jsoup_safety_cleaner_cleaner_copysafenodes" + ] + }, + { + "question": "redux-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "classification": "unresolved-endpoint", + "endpointSelections": [ + { + "status": "ambiguous", + "matchedIds": [ + "sha256:2dc819f91bc866786968c643e45ad6b3419369536fbc2f8851bb810298489506", + "sha256:df1114c0498b4e62ad32946ea04a508c76bd92955defafa89ab7857dbf577770" + ], + "selector": null, + "returnedAnchors": [ + { + "id": "sha256:1c38121eddeb189509bb8d8efb07f7d9f34bfa79e7fab77f18234722d8114e0a", + "file": "src/utils/kindOf.ts", + "line": 2, + "symbols": [ + "miniKindOf" + ] + }, + { + "id": "sha256:1c93d4d4f845f8b68d97822707d5e2d754f37e7ae6c69e307aab7ce195ef297a", + "file": "src/utils/kindOf.ts", + "line": 2, + "symbols": [ + "miniKindOf" + ] + }, + { + "id": "sha256:23d5e35138207bb498c86df080c5a0d26d80cfe44184d297441fb49ed763c9e6", + "file": "src/utils/kindOf.ts", + "line": 1, + "symbols": [ + "ts" + ] + }, + { + "id": "sha256:2dc819f91bc866786968c643e45ad6b3419369536fbc2f8851bb810298489506", + "file": "src/utils/kindOf.ts", + "line": 62, + "symbols": [ + "kindOf" + ] + }, + { + "id": "sha256:3b684eb33ecd37d5eea86502a36408c1047e2ff3c4ad5e0aed7ac9b9cb62710c", + "file": "src/createStore.ts", + "line": 13, + "symbols": [ + "kindOf" + ] + }, + { + "id": "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e", + "file": "src/utils/kindOf.ts", + "line": 40, + "symbols": [ + "ctorName" + ] + }, + { + "id": "sha256:6e1928d086236a4cb8403dded8bf17d37f1abe5823b7091b4f7f6f7326bd9ec0", + "file": "src/utils/kindOf.ts", + "line": 53, + "symbols": [ + "isDate" + ] + }, + { + "id": "sha256:7c75317cab6859b47837e5821768e0e90c92a8cd8396164b9cc6e498d9d997cc", + "file": "src/combineReducers.ts", + "line": 12, + "symbols": [ + "kindOf" + ] + }, + { + "id": "sha256:8c815dd62745a090206d761cb274206829de83dc2f078a138c36c7b230ef0ee4", + "file": "src/utils/kindOf.ts", + "line": 63, + "symbols": [ + "typeOfVal" + ] + }, + { + "id": "sha256:b52e744f4e50b7f16a06ce02cc6cfc1f89b707e35e4ced168687d8603aaf0223", + "file": "src/bindActionCreators.ts", + "line": 7, + "symbols": [ + "kindOf" + ] + }, + { + "id": "sha256:bba968e55231038ae24c8fa0a1e745acd9241259443ab866eb7f63166f9360cf", + "file": "src/utils/kindOf.ts", + "line": 1, + "symbols": [ + "kindOf" + ] + }, + { + "id": "sha256:c6fb95e1a31cabfbecb5ee306b717a388f114ce7b1351712532bc2e75028095b", + "file": "src/utils/kindOf.ts", + "line": 6, + "symbols": [ + "type" + ] + }, + { + "id": "sha256:ddd22666a1a0e212c7d64e402d033e3d0051b79061d09d855ab5a0cbd600c9f9", + "file": "src/utils/kindOf.ts", + "line": 21, + "symbols": [ + "constructorName" + ] + }, + { + "id": "sha256:df1114c0498b4e62ad32946ea04a508c76bd92955defafa89ab7857dbf577770", + "file": "src/utils/kindOf.ts", + "line": 62, + "symbols": [ + "kindOf" + ] + }, + { + "id": "sha256:fa284cf3eb048c8e0b8d62d93c37c43aa43488a186096cef095e897c66a85253", + "file": "src/utils/kindOf.ts", + "line": 44, + "symbols": [ + "isError" + ] + } + ] + }, + { + "status": "resolved", + "matchedIds": [ + "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e" + ], + "selector": "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e", + "returnedAnchors": [ + { + "id": "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e", + "file": "src/utils/kindOf.ts", + "line": 40, + "symbols": [ + "ctorName" + ] + } + ] + } + ] + }, + { + "question": "redux-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "failures": [], + "nodes": [ + "src_utils_kindof_kindof", + "src_utils_kindof_minikindof", + "src_utils_kindof_ctorname" + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "matchingEdges": 1, + "reviewedSite": { + "file": "src/utils/kindOf.ts", + "line": 66, + "text": "typeOfVal = miniKindOf(val)", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + }, + "reviewedSiteSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "matchingEdges": 1, + "reviewedSite": { + "file": "src/utils/kindOf.ts", + "line": 21, + "text": "const constructorName = ctorName(val)", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + }, + "reviewedSiteSupported": true + } + ], + "renderedLabels": [ + "kindOf()", + "miniKindOf()", + "ctorName()" + ], + "renderedRelations": [ + "calls", + "calls" + ], + "classification": "reviewed-call-chain", + "renderedEndpointCandidates": [ + [ + "src_utils_kindof_kindof" + ], + [ + "src_utils_kindof_ctorname" + ] + ], + "resolvedEndpoints": [ + "src_utils_kindof_kindof", + "src_utils_kindof_ctorname" + ], + "renderedEndpointIdentityMatches": [ + true, + true + ] + }, + { + "question": "walkdir-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "failures": [], + "nodes": [ + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "source": { + "file": "src/lib.rs", + "startByte": 29143, + "endByte": 30869, + "startLine": 840, + "startColumn": 4, + "endLine": 882, + "endColumn": 5 + }, + "name": ".handle_entry()" + }, + { + "id": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "source": { + "file": "src/lib.rs", + "startByte": 34443, + "endByte": 34874, + "startLine": 961, + "startColumn": 4, + "endLine": 971, + "endColumn": 5 + }, + "name": ".follow()" + }, + { + "id": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "source": { + "file": "src/lib.rs", + "startByte": 34880, + "endByte": 35480, + "startLine": 973, + "startColumn": 4, + "endLine": 989, + "endColumn": 5 + }, + "name": ".check_loop()" + }, + { + "id": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "source": { + "file": "src/error.rs", + "startByte": 6769, + "endByte": 7076, + "startLine": 184, + "startColumn": 4, + "endLine": 196, + "endColumn": 5 + }, + "name": ".from_loop()" + } + ], + "steps": [ + { + "edgeId": "sha256:db51772e6e2a0f689b69f1447740b96e340679a37df7c50bfc727ffe85a06cf4", + "source": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "target": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "kind": "calls", + "site": { + "file": "src/lib.rs", + "startByte": 29337, + "endByte": 29348, + "startLine": 845, + "startColumn": 25, + "endLine": 845, + "endColumn": 36 + }, + "sourceBytes": "self.follow", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:9d2cbc7e60565250bba8045728a1451893838b7f1b8d26084a542957c88557c3", + "source": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "target": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "kind": "calls", + "site": { + "file": "src/lib.rs", + "startByte": 34811, + "endByte": 34826, + "startLine": 968, + "startColumn": 12, + "endLine": 968, + "endColumn": 27 + }, + "sourceBytes": "self.check_loop", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:32f0ce77ab676891029891f1d836f95f3e4c8458dcee2b5d51f7128b8ad32bcf", + "source": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "target": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "kind": "calls", + "site": { + "file": "src/lib.rs", + "startByte": 35294, + "endByte": 35310, + "startLine": 981, + "startColumn": 27, + "endLine": 981, + "endColumn": 43 + }, + "sourceBytes": "Error::from_loop", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + } + ], + "responseDiagnostics": [], + "truncated": false, + "classification": "reviewed-call-chain", + "resolvedEndpoints": [ + "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01" + ] + }, + { + "question": "walkdir-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "expected exactly one rendered path header" + ], + "nodes": [], + "steps": [], + "classification": "no-path-reported", + "resolvedEndpoints": [ + "src_lib_intoiter_handle_entry", + "src_error_error_from_loop" + ] + } + ], + "nativeLabelResults": [ + { + "question": "chi-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "No single complete path returned." + ], + "nodes": [], + "steps": [], + "responseDiagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"MethodFunc\" matched 2 nodes", + "nodeId": null, + "path": null + } + ], + "truncated": false, + "classification": "ambiguous" + }, + { + "question": "chi-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "route length differs from reviewed witness" + ], + "nodes": [], + "steps": [], + "renderedLabels": [ + ".MethodFunc()", + ".Method()", + ".handle()", + "node", + ".findPattern()", + "longestPrefix()" + ], + "renderedRelations": [ + "calls", + "calls", + "references", + "method", + "calls" + ], + "classification": "mixed-relation-route", + "renderedEndpointCandidates": [ + [ + "chi_mux_methodfunc", + "chi_router_methodfunc" + ], + [ + "tree_longestprefix" + ] + ] + }, + { + "question": "click-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "failures": [], + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "source": { + "file": "src/click/utils.py", + "startByte": 11486, + "endByte": 13132, + "startLine": 381, + "startColumn": 0, + "endLine": 427, + "endColumn": 12 + }, + "name": "open_file()" + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "source": { + "file": "src/click/_compat.py", + "startByte": 11423, + "endByte": 14244, + "startLine": 374, + "startColumn": 0, + "endLine": 452, + "endColumn": 40 + }, + "name": "open_stream()" + }, + { + "id": "sha256:a6c6eac365b65fafaf2f46514d79c2cb36bb310fcfcb5119fcf65cca36ea35f9", + "source": { + "file": "src/click/_compat.py", + "startByte": 9593, + "endByte": 9800, + "startLine": 319, + "startColumn": 0, + "endLine": 323, + "endColumn": 17 + }, + "name": "get_binary_stdin()" + }, + { + "id": "sha256:786c10821cf94664962fba44589b5e61c43e426efb6b21a72e0f75b8c62e16df", + "source": { + "file": "src/click/_compat.py", + "startByte": 4815, + "endByte": 5484, + "startLine": 176, + "startColumn": 0, + "endLine": 191, + "endColumn": 15 + }, + "name": "_find_binary_reader()" + }, + { + "id": "sha256:e2c76ab69c159b40a93080ab5c1fa322863c8644d0523b5d2dc0ff14c913eba8", + "source": { + "file": "src/click/_compat.py", + "startByte": 4230, + "endByte": 4529, + "startLine": 154, + "startColumn": 0, + "endLine": 160, + "endColumn": 55 + }, + "name": "_is_binary_reader()" + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "source": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "target": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "kind": "calls", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:b3d1f4a591b7a358eb841388e97117bbd4a2377817aa4014c2b9f5fed9759bc5", + "source": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "target": "sha256:a6c6eac365b65fafaf2f46514d79c2cb36bb310fcfcb5119fcf65cca36ea35f9", + "kind": "calls", + "site": { + "file": "src/click/_compat.py", + "startByte": 12085, + "endByte": 12101, + "startLine": 392, + "startColumn": 19, + "endLine": 392, + "endColumn": 35 + }, + "sourceBytes": "get_binary_stdin", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:ab477fcd547ac3d833934602fc1d5871a98378031c63dc125aeaebbf5e84cb34", + "source": "sha256:a6c6eac365b65fafaf2f46514d79c2cb36bb310fcfcb5119fcf65cca36ea35f9", + "target": "sha256:786c10821cf94664962fba44589b5e61c43e426efb6b21a72e0f75b8c62e16df", + "kind": "calls", + "site": { + "file": "src/click/_compat.py", + "startByte": 9644, + "endByte": 9663, + "startLine": 320, + "startColumn": 13, + "endLine": 320, + "endColumn": 32 + }, + "sourceBytes": "_find_binary_reader", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:0ed10b05deb50320b392d13c0e611c3732abfc5d77e1267e3bb744afc3596349", + "source": "sha256:786c10821cf94664962fba44589b5e61c43e426efb6b21a72e0f75b8c62e16df", + "target": "sha256:e2c76ab69c159b40a93080ab5c1fa322863c8644d0523b5d2dc0ff14c913eba8", + "kind": "calls", + "site": { + "file": "src/click/_compat.py", + "startByte": 5399, + "endByte": 5416, + "startLine": 188, + "startColumn": 27, + "endLine": 188, + "endColumn": 44 + }, + "sourceBytes": "_is_binary_reader", + "confidence": [ + "exact" + ], + "frozenSiteMatches": false, + "acceptedAlternateOccurrences": [ + { + "file": "src/click/_compat.py", + "line": 188, + "text": "if buf is not None and _is_binary_reader(buf, True):", + "reason": "Same caller and callee, second direct occurrence; independently source-adjudicated in the earlier panel and reread for this replay. Frozen line 181 remains distinct." + } + ] + } + ], + "responseDiagnostics": [], + "truncated": false, + "classification": "reviewed-call-chain" + }, + { + "question": "click-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "failures": [], + "nodes": [ + "src_click_utils_open_file", + "src_click_compat_open_stream", + "src_click_compat_get_binary_stdin", + "src_click_compat_find_binary_reader", + "src_click_compat_is_binary_reader" + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "matchingEdges": 1, + "reviewedSite": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + "reviewedSiteSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "matchingEdges": 1, + "reviewedSite": { + "file": "src/click/_compat.py", + "line": 392, + "text": "return get_binary_stdin(), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + "reviewedSiteSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "matchingEdges": 1, + "reviewedSite": { + "file": "src/click/_compat.py", + "line": 320, + "text": "reader = _find_binary_reader(sys.stdin)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + "reviewedSiteSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "matchingEdges": 1, + "reviewedSite": { + "file": "src/click/_compat.py", + "line": 181, + "text": "if _is_binary_reader(stream, False):", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + "reviewedSiteSupported": true + } + ], + "renderedLabels": [ + "open_file()", + "open_stream()", + "get_binary_stdin()", + "_find_binary_reader()", + "_is_binary_reader()" + ], + "renderedRelations": [ + "calls", + "calls", + "calls", + "calls" + ], + "classification": "reviewed-call-chain", + "renderedEndpointCandidates": [ + [ + "src_click_utils_open_file" + ], + [ + "src_click_compat_is_binary_reader" + ] + ] + }, + { + "question": "jsoup-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "No single complete path returned." + ], + "nodes": [], + "steps": [], + "responseDiagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"isValid\" matched 2 nodes", + "nodeId": null, + "path": null + }, + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "truncated": false, + "classification": "ambiguous" + }, + { + "question": "jsoup-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "expected exactly one rendered path header" + ], + "nodes": [], + "steps": [], + "classification": "no-path-reported" + }, + { + "question": "redux-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "No single complete path returned." + ], + "nodes": [], + "steps": [], + "responseDiagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"kindOf\" matched 5 nodes", + "nodeId": null, + "path": null + }, + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "truncated": false, + "classification": "ambiguous" + }, + { + "question": "redux-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "failures": [], + "nodes": [ + "src_utils_kindof_kindof", + "src_utils_kindof_minikindof", + "src_utils_kindof_ctorname" + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "matchingEdges": 1, + "reviewedSite": { + "file": "src/utils/kindOf.ts", + "line": 66, + "text": "typeOfVal = miniKindOf(val)", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + }, + "reviewedSiteSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "matchingEdges": 1, + "reviewedSite": { + "file": "src/utils/kindOf.ts", + "line": 21, + "text": "const constructorName = ctorName(val)", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + }, + "reviewedSiteSupported": true + } + ], + "renderedLabels": [ + "kindOf()", + "miniKindOf()", + "ctorName()" + ], + "renderedRelations": [ + "calls", + "calls" + ], + "classification": "reviewed-call-chain", + "renderedEndpointCandidates": [ + [ + "src_utils_kindof_kindof" + ], + [ + "src_utils_kindof_ctorname" + ] + ] + }, + { + "question": "walkdir-directed-chain", + "tool": "compass", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "failures": [], + "nodes": [ + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "source": { + "file": "src/lib.rs", + "startByte": 29143, + "endByte": 30869, + "startLine": 840, + "startColumn": 4, + "endLine": 882, + "endColumn": 5 + }, + "name": ".handle_entry()" + }, + { + "id": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "source": { + "file": "src/lib.rs", + "startByte": 34443, + "endByte": 34874, + "startLine": 961, + "startColumn": 4, + "endLine": 971, + "endColumn": 5 + }, + "name": ".follow()" + }, + { + "id": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "source": { + "file": "src/lib.rs", + "startByte": 34880, + "endByte": 35480, + "startLine": 973, + "startColumn": 4, + "endLine": 989, + "endColumn": 5 + }, + "name": ".check_loop()" + }, + { + "id": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "source": { + "file": "src/error.rs", + "startByte": 6769, + "endByte": 7076, + "startLine": 184, + "startColumn": 4, + "endLine": 196, + "endColumn": 5 + }, + "name": ".from_loop()" + } + ], + "steps": [ + { + "edgeId": "sha256:db51772e6e2a0f689b69f1447740b96e340679a37df7c50bfc727ffe85a06cf4", + "source": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "target": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "kind": "calls", + "site": { + "file": "src/lib.rs", + "startByte": 29337, + "endByte": 29348, + "startLine": 845, + "startColumn": 25, + "endLine": 845, + "endColumn": 36 + }, + "sourceBytes": "self.follow", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:9d2cbc7e60565250bba8045728a1451893838b7f1b8d26084a542957c88557c3", + "source": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "target": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "kind": "calls", + "site": { + "file": "src/lib.rs", + "startByte": 34811, + "endByte": 34826, + "startLine": 968, + "startColumn": 12, + "endLine": 968, + "endColumn": 27 + }, + "sourceBytes": "self.check_loop", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + }, + { + "edgeId": "sha256:32f0ce77ab676891029891f1d836f95f3e4c8458dcee2b5d51f7128b8ad32bcf", + "source": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "target": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "kind": "calls", + "site": { + "file": "src/lib.rs", + "startByte": 35294, + "endByte": 35310, + "startLine": 981, + "startColumn": 27, + "endLine": 981, + "endColumn": 43 + }, + "sourceBytes": "Error::from_loop", + "confidence": [ + "exact" + ], + "frozenSiteMatches": true, + "acceptedAlternateOccurrences": [] + } + ], + "responseDiagnostics": [], + "truncated": false, + "classification": "reviewed-call-chain" + }, + { + "question": "walkdir-directed-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "failures": [ + "route length differs from reviewed witness" + ], + "nodes": [], + "steps": [], + "renderedLabels": [ + ".handle_entry()", + ".push()", + ".into_iter()", + "IntoIter", + "WalkDirOptions", + ".fmt()", + "Error", + ".from_loop()" + ], + "renderedRelations": [ + "calls", + "calls", + "references", + "references", + "method", + "references", + "method" + ], + "classification": "mixed-relation-route", + "renderedEndpointCandidates": [ + [ + "src_lib_intoiter_handle_entry" + ], + [ + "src_error_error_from_loop" + ] + ] + } + ], + "baselineDepthDiagnostics": [ + { + "question": "chi-directed-chain", + "maxDepth": 1, + "truncated": false, + "diagnostics": [ + "no_match" + ] + }, + { + "question": "chi-directed-chain", + "maxDepth": 2, + "truncated": false, + "diagnostics": [ + "no_match" + ] + }, + { + "question": "chi-directed-chain", + "maxDepth": 3, + "truncated": false, + "diagnostics": [ + "no_match" + ] + }, + { + "question": "click-directed-chain", + "maxDepth": 1, + "truncated": false, + "diagnostics": [ + "no_match" + ] + }, + { + "question": "click-directed-chain", + "maxDepth": 2, + "truncated": false, + "diagnostics": [ + "no_match" + ] + }, + { + "question": "click-directed-chain", + "maxDepth": 3, + "truncated": false, + "diagnostics": [ + "direction_mismatch" + ] + }, + { + "question": "jsoup-directed-chain", + "maxDepth": 1, + "truncated": false, + "diagnostics": [ + "no_match", + "incomplete_coverage" + ] + }, + { + "question": "walkdir-directed-chain", + "maxDepth": 1, + "truncated": false, + "diagnostics": [ + "no_match" + ] + }, + { + "question": "walkdir-directed-chain", + "maxDepth": 2, + "truncated": false, + "diagnostics": [ + "no_match" + ] + } + ], + "finalDepthDiagnostics": [ + { + "question": "chi-directed-chain", + "maxDepth": 1, + "truncated": true, + "diagnostics": [ + "bounded_truncation" + ] + }, + { + "question": "chi-directed-chain", + "maxDepth": 2, + "truncated": true, + "diagnostics": [ + "bounded_truncation" + ] + }, + { + "question": "chi-directed-chain", + "maxDepth": 3, + "truncated": true, + "diagnostics": [ + "bounded_truncation" + ] + }, + { + "question": "click-directed-chain", + "maxDepth": 1, + "truncated": true, + "diagnostics": [ + "bounded_truncation" + ] + }, + { + "question": "click-directed-chain", + "maxDepth": 2, + "truncated": true, + "diagnostics": [ + "bounded_truncation" + ] + }, + { + "question": "click-directed-chain", + "maxDepth": 3, + "truncated": true, + "diagnostics": [ + "bounded_truncation" + ] + }, + { + "question": "jsoup-directed-chain", + "maxDepth": 1, + "truncated": true, + "diagnostics": [ + "incomplete_coverage", + "bounded_truncation" + ] + }, + { + "question": "walkdir-directed-chain", + "maxDepth": 1, + "truncated": true, + "diagnostics": [ + "bounded_truncation" + ] + }, + { + "question": "walkdir-directed-chain", + "maxDepth": 2, + "truncated": true, + "diagnostics": [ + "bounded_truncation" + ] + } + ], + "reverseDiagnostics": [ + { + "question": "chi-directed-chain", + "tool": "compass", + "truncated": true, + "diagnostics": [ + "direction_mismatch", + "bounded_truncation" + ] + }, + { + "question": "chi-directed-chain", + "tool": "graphify", + "noPathReported": true + }, + { + "question": "click-directed-chain", + "tool": "compass", + "truncated": false, + "diagnostics": [ + "direction_mismatch" + ] + }, + { + "question": "click-directed-chain", + "tool": "graphify", + "noPathReported": true + }, + { + "question": "jsoup-directed-chain", + "tool": "compass", + "truncated": true, + "diagnostics": [ + "incomplete_coverage", + "bounded_truncation" + ] + }, + { + "question": "jsoup-directed-chain", + "tool": "graphify", + "noPathReported": true + }, + { + "question": "redux-directed-chain", + "tool": "graphify", + "noPathReported": true + }, + { + "question": "walkdir-directed-chain", + "tool": "compass", + "truncated": false, + "diagnostics": [ + "direction_mismatch" + ] + }, + { + "question": "walkdir-directed-chain", + "tool": "graphify", + "noPathReported": true + } + ], + "validation": { + "steps": [ + { + "name": "fmt", + "argv": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "seconds": 4.61 + }, + { + "name": "query-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-query", + "--test", + "code_traversal", + "--test", + "code_explore", + "--test", + "bounded_path_oracle", + "--locked" + ], + "exitCode": 0, + "seconds": 31.12 + }, + { + "name": "cli-query-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "code_query_cli", + "--locked" + ], + "exitCode": 0, + "seconds": 55.14 + }, + { + "name": "mcp-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-mcp", + "--locked" + ], + "exitCode": 0, + "seconds": 39.03 + }, + { + "name": "clippy", + "argv": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 13.57 + }, + { + "name": "workspace-tests", + "argv": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "seconds": 88.2 + }, + { + "name": "product-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "seconds": 4.04 + }, + { + "name": "product-boundary", + "argv": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "seconds": 0.09 + }, + { + "name": "qualification", + "argv": [ + "bash", + "scripts/qualify_code_graph_v1.sh", + "--fixtures-only" + ], + "exitCode": 0, + "seconds": 647.3 + }, + { + "name": "build", + "argv": [ + "cargo", + "build", + "--locked", + "-p", + "compass-cli", + "--bin", + "compass" + ], + "exitCode": 0, + "seconds": 1.4 + } + ], + "sourceSha256": { + "crates/compass-query/src/code_query.rs": "94afd1d019f2ca1debce79efca5a4d10fd4c211af68eec29446e00c80bb21950", + "crates/compass-query/tests/code_traversal.rs": "d8f49ba8b6019a83ae72d072a8203eb4ebf9bfbe278c4255e43686fca560cea0", + "crates/compass-query/tests/code_explore.rs": "16d2ca185f7a6bd046661d48ad93a28c23e79f3ad8f5b9d5105e382f2e67acce", + "crates/compass-query/tests/bounded_path_oracle.rs": "8ca188956005b813e6f48f473a6c49b88c1c5fd034cf1a0441137b21f279137b", + "crates/compass-cli/tests/code_query_cli.rs": "9f4f30ee26e43182b2afbd6efa10c05e0df3f4c978f0fe91e68a02af885ac96e" + }, + "testCounts": { + "query-tests": { + "passed": 24, + "failed": 0, + "ignored": 0 + }, + "cli-query-tests": { + "passed": 38, + "failed": 0, + "ignored": 0 + }, + "mcp-tests": { + "passed": 60, + "failed": 0, + "ignored": 0 + }, + "workspace-tests": { + "passed": 1106, + "failed": 0, + "ignored": 2 + }, + "product-tests": { + "passed": 9, + "failed": 0, + "ignored": 0 + } + }, + "pythonHarnessTests": 137, + "binaryMatchesFinalBuild": true + }, + "artifacts": { + "directed-identity-01/baseline/capture.json": "6dfcfad375d3490cae4227d0237997e410c796882ae1361bd0e353b9ab5511b4", + "directed-identity-01/reproduction.log": "f241f47b339889e6160d6c43fc350bb36f51ed0c972ac808f1d22a5618c6a7cf", + "directed-identity-01/explore-reproduction.log": "f1d8ed9b93150502a8ad625fd5013ea324aad3c04980170172b20940cdf25250", + "directed-identity-02/final/capture.json": "f509b41b5c6d82501141e0ebd1b08733837e61623d827f71c73f03fb33b8482c", + "directed-identity-02/label-control/capture.json": "802575bf7b3d454642a26bb0407bfe14ddf511943b5351211f0d2a46e0db1dcf", + "directed-identity-02/verified-summary.json": "6c7826d5d80e2571e3a83853a357ec1b4e34ca0d7373bdd8a7644fd4d3c61af7", + "directed-identity-02/verify_capture.py": "7118ba4011f88d3aa8554330de70ce2401b4d9ecfa480b26f572a894a17e4240", + "directed-identity-02/verification-attempt-01.log": "4761da703b83adf3a1308117d2ab78739a18a6569e23bd7e6f9a3f0eef491bcc", + "directed-identity-02/verification-02.log": "3864f61f93aba50a49463e79a87ab4559feeb4bb7260e768452cd088ad1d59cc", + "directed-identity-02/collect_label_control.py": "9252482e073c26f417b33427fefed93c14ca37ffc83b42a14e92b2ded5bd940b", + "directed-identity-02/validation.json": "0fb33724f84f968d83b22f3d8038d5305ad9857283f47206102177c84251ae8a", + "directed-identity-02/harness-tests.log": "5a2a4394fc4a1d374cf7b7d222a4cc6b6b84b5e7fd57a38b9811b5af13a96163", + "directed-identity-02/fmt-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "directed-identity-02/query-tests-final.log": "13440ea1b60ce8f7654aa8c8fa6e4ab9ab7f83c19fdfa92cf1431318afe98b8e", + "directed-identity-02/cli-query-tests-final.log": "2b3561cfa14d5b5cfa0f8902ba1f476127de6c9f679b60026d6414b2fbc22d50", + "directed-identity-02/mcp-tests-final.log": "3965ef0908e941988a5b2c684844924099dbe84a3b614a58c3682aecad6f97c8", + "directed-identity-02/clippy-final.log": "2b0bada5d0d43f977a463f9c39b2da3abd390c2b9a10318afced2a7c5cc3d522", + "directed-identity-02/workspace-tests-final.log": "876551b1dceab1f0c410a01374dd3b078282d56bab5709b0975d7bf44531d003", + "directed-identity-02/product-tests-final.log": "75a3eed27aa613ea6b78bd4c0ac613063512fd6de7be93a8d63eb5d64ac5c828", + "directed-identity-02/product-boundary-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "directed-identity-02/qualification-final.log": "efd8af9231b5c9276338993d2feb77a4d25ba7faa64c45eb0544fcd688632644", + "directed-identity-02/build-final.log": "0999a44a8902a4828631ce72352b8ed5f89f9cb37241b11bc9111026f175e83e" + }, + "limitations": [ + "Same-agent verification, not independent human adjudication.", + "Known development tasks and frozen graphs, not held-out, source precision population, extraction, or latency evidence.", + "Graphify ID arm measures cross-interface endpoint handling as well as path availability; native label control remains separate.", + "Compass Redux endpoint ambiguity remains failure in both arms.", + "Click line 188 is an accepted alternate occurrence, not a frozen-site match.", + "Reverse outputs receive no source-global absence credit.", + "God-object responsibility, explanations, longer walks and fresh held-out qualification remain outstanding.", + "The native depth fix changes incomplete reporting; all four Compass positive ID-path payloads and ten Graphify path payloads were unchanged from baseline.", + "Both compilers and query capture shared a machine; elapsed times are logs, not comparative latency measurements.", + "The verifier first mistook raw and typed evidence JSON schemas as identical; final checks explicitly verify field and anchor projection. Failed attempt retained." + ] +} diff --git a/benchmarks/agent_query/directed_identity_label_control_registration.json b/benchmarks/agent_query/directed_identity_label_control_registration.json new file mode 100644 index 000000000..6e1288887 --- /dev/null +++ b/benchmarks/agent_query/directed_identity_label_control_registration.json @@ -0,0 +1,11 @@ +{ + "schema": "compass.directed-identity-label-control-registration/1", + "parentProtocolCommit": "98759ae8", + "reason": "The first ID-input capture showed Graphify CLI path selecting a wrong starting node despite using a publicly resolved ID. Preserve that result as cross-interface identity evidence, and retain a separate native label-input comparison rather than presenting it as pure path-algorithm quality.", + "timing": "Registered after observing the ID baseline and the earlier short-label development panel, before executing this label control on the current fixed graph pair. Not blind or held-out.", + "inputs": "Use exactly the original five witness source and target short names from directed_path_development_registration.json. No IDs, new aliases, post-output candidates, retries or scope changes.", + "commands": "Compass node SOURCE TARGET --max-depth 8 --max-paths 1 --format json --graph GRAPH; Graphify path SOURCE TARGET --directed --graph GRAPH.", + "artifacts": "Use the same ten frozen graphs, final evaluated Compass binary and hash-verified Graphify environment as the source-assisted arm.", + "bounds": "60 seconds and 16 MiB per stdout/stderr stream. Internal work limits differ; no speed ranking.", + "scoring": "Keep all five positive tasks. Review full ordered node identity, directed call edges, source anchors and alternate routes with the same source witnesses. Ambiguity, wrong endpoints, mixed-relation paths, limits and missing paths are distinct failures to complete a reviewed call-chain request. Never combine the best outputs from ID and label arms into a new primary score." +} diff --git a/benchmarks/agent_query/directed_path_development_registration.json b/benchmarks/agent_query/directed_path_development_registration.json new file mode 100644 index 000000000..a3f0cf46b --- /dev/null +++ b/benchmarks/agent_query/directed_path_development_registration.json @@ -0,0 +1,459 @@ +{ + "schema": "compass.directed-path-development-registration/1", + "registeredAt": "2026-09-27T04:31:32.969188+00:00", + "scope": "Source-reviewed directed two-to-four-call paths across five existing development repositories. Registered before executing these new endpoint pairs. Prior graphs/outputs and fixes have been observed; not held-out evaluation or population precision.", + "baselineRun": "export-binding-panel-a-01", + "tools": [ + { + "binary": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/export-binding-resolution/compass", + "binarySha256": "04eab05bd5bbc94f3f0f86580bdd3de9950599bc9e548b8f8ba95791b8baa0c9", + "digestScope": "executable-file-only", + "name": "compass", + "version": "compass 0.3.30" + }, + { + "binary": "/Users/haipingfu/.local/bin/graphify", + "binarySha256": "a7fdb4ac8985755be15f10f89a2d17ee517130b3ac90c28c91644ae351881da3", + "digestScope": "executable-file-only", + "name": "graphify", + "version": "graphify 0.9.67" + } + ], + "repositories": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "source": "/Volumes/Workspace/Github/go-chi/chi", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/chi/compass/compass-out/snapshots/snapshot-1790482768478384000-36008-0/graph.json", + "compassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/chi/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "source": "/Volumes/Workspace/Github/pallets/click", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/click/compass/compass-out/snapshots/snapshot-1790482790210688000-36710-0/graph.json", + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/click/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "source": "/Volumes/Workspace/Github/jhy/jsoup", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/jsoup/compass/compass-out/snapshots/snapshot-1790482841846079000-37569-0/graph.json", + "compassGraphSha256": "d69152cc8900afc3f11756b8ce841adbed98ae6663fee4ebc64957974c8f860c", + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/jsoup/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "source": "/Volumes/Workspace/Github/reduxjs/redux", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/redux/compass/compass-out/snapshots/snapshot-1790482928474073000-39900-0/graph.json", + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/redux/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "source": "/Volumes/Workspace/Github/BurntSushi/walkdir", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/walkdir/compass/compass-out/snapshots/snapshot-1790482954351623000-40155-0/graph.json", + "compassGraphSha256": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/export-binding-panel-a-01/artifacts/walkdir/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ], + "protocol": { + "positiveRequests": 5, + "reverseDirectionProbes": 5, + "sourceEndpoints": "Use identical short source names for both tools. No post-output IDs, fuzzy candidate selection, or retry substitutions in the primary comparison.", + "compassArgv": [ + "compass", + "node", + "SOURCE", + "TARGET", + "--max-depth", + "8", + "--max-paths", + "1", + "--format", + "json", + "--graph", + "GRAPH" + ], + "graphifyArgv": [ + "graphify", + "path", + "SOURCE", + "TARGET", + "--directed", + "--graph", + "GRAPH" + ], + "deadlineSeconds": 60, + "captureLimitBytesPerStream": 16777216, + "graphs": "Reuse hash-verified fresh paired graphs. This measures query behavior; no fresh extraction or performance claim.", + "limits": "Compass has an explicit depth bound; Graphify path CLI exposes no corresponding depth flag in help. External deadline and capture bound apply equally; do not claim equal internal work.", + "positiveJudgment": "A complete directed call chain must identify the source declarations and each edge orientation/occurrence in the graph and source. Endpoint echoes, candidate lists, disconnected edges, or a reversed route do not count. Registered route is a positive witness, not a requirement to choose the same shortest route; independently source-review any alternate returned route.", + "reverseJudgment": "Diagnostic probes only. The forward source witness does not prove global reverse unreachability. No-path/ambiguous/limit answers receive no absence credit. Review any returned reverse route for actual directed source support.", + "ambiguity": "Refusal of genuine ambiguity is safe but does not complete a positive path request; retain in recall denominator and report resolution separately. Unwarned selection cannot establish identity when the rendered label collides.", + "confidence": "Source-supported inferred edges may be recorded as such; neither tool gets exact-evidence credit for weak/unknown confidence.", + "timing": "Concurrent fixture qualification; no latency or cost ranking.", + "fullAnswer": "Keep all outputs, failures, alternate-path judgments and rejected identities. No tool-output-only semantic gold." + }, + "witnesses": [ + { + "id": "chi-directed-chain", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "source": "MethodFunc", + "target": "longestPrefix", + "nodes": [ + { + "file": "mux.go", + "line": 137, + "text": "func (mx *Mux) MethodFunc(", + "symbol": "MethodFunc", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 127, + "text": "func (mx *Mux) Method(method,", + "symbol": "Method", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 430, + "text": "func (mx *Mux) handle(method", + "symbol": "handle", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "tree.go", + "line": 148, + "text": "func (n *node) InsertRoute(", + "symbol": "InsertRoute", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + }, + { + "file": "tree.go", + "line": 822, + "text": "func longestPrefix(", + "symbol": "longestPrefix", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 138, + "text": "mx.Method(method, pattern, handlerFn)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 132, + "text": "mx.handle(m, pattern, handler)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 450, + "text": "return mx.tree.InsertRoute(method, pattern, h)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 201, + "text": "commonPrefix := longestPrefix(search, n.prefix)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + } + ], + "sourceInterpretation": "Four static call steps from registering a method function to matching a radix prefix. Conditional traversal within InsertRoute; not a claim that every registration executes every branch." + }, + { + "id": "click-directed-chain", + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "source": "open_file", + "target": "_is_binary_reader", + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 319, + "text": "def get_binary_stdin(", + "symbol": "get_binary_stdin", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 176, + "text": "def _find_binary_reader(", + "symbol": "_find_binary_reader", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 154, + "text": "def _is_binary_reader(", + "symbol": "_is_binary_reader", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 392, + "text": "return get_binary_stdin(), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 320, + "text": "reader = _find_binary_reader(sys.stdin)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 181, + "text": "if _is_binary_reader(stream, False):", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ], + "sourceInterpretation": "Four static calls on the non-lazy binary standard-input branch. The final helper has another occurrence in the same caller; this witness checks at least one supported occurrence, not occurrence completeness." + }, + { + "id": "jsoup-directed-chain", + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "source": "isValid", + "target": "copySafeNodes", + "nodes": [ + { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 434, + "text": "public static boolean isValid(String", + "symbol": "isValid", + "fileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "text": "public boolean isValidBodyHtml(String", + "symbol": "isValidBodyHtml", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 182, + "text": "private int copySafeNodes(Element", + "symbol": "copySafeNodes", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 435, + "text": "return new Cleaner(safelist).isValidBodyHtml(bodyHtml);", + "fileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 131, + "text": "int numDiscarded = copySafeNodes(dirty.body(), clean.body());", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + } + } + ], + "sourceInterpretation": "Two source-proven calls. Constructor receiver is covered by the prior development fix; existing knowledge is disclosed, not fresh held-out confirmation." + }, + { + "id": "redux-directed-chain", + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "source": "kindOf", + "target": "ctorName", + "nodes": [ + { + "file": "src/utils/kindOf.ts", + "line": 62, + "text": "export function kindOf(", + "symbol": "kindOf", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + }, + { + "file": "src/utils/kindOf.ts", + "line": 2, + "text": "export function miniKindOf(", + "symbol": "miniKindOf", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + }, + { + "file": "src/utils/kindOf.ts", + "line": 40, + "text": "function ctorName(", + "symbol": "ctorName", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/utils/kindOf.ts", + "line": 66, + "text": "typeOfVal = miniKindOf(val)", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/utils/kindOf.ts", + "line": 21, + "text": "const constructorName = ctorName(val)", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + } + } + ], + "sourceInterpretation": "Two static calls conditional on development mode and a nonprimitive/non-Date/non-Error input. Export binding correction already informed by this file; no held-out claim." + }, + { + "id": "walkdir-directed-chain", + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "source": "handle_entry", + "target": "from_loop", + "nodes": [ + { + "file": "src/lib.rs", + "line": 840, + "text": " fn handle_entry(", + "symbol": "handle_entry", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a" + }, + { + "file": "src/lib.rs", + "line": 961, + "text": " fn follow(&self", + "symbol": "follow", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a" + }, + { + "file": "src/lib.rs", + "line": 973, + "text": " fn check_loop list[dict]: + if tool not in ("compass", "graphify"): + raise ValueError("unsupported edge audit tool") + nodes = graph.get("nodes", []) + ids = [node.get("id") for node in nodes] + if any(not isinstance(identity, str) or not identity for identity in ids) or len(set(ids)) != len(ids): + raise ValueError("graph must have unique nonempty string node IDs") + edges = graph.get("edges") or graph.get("links") or [] + results = [] + for witness in manifest["witnesses"]: + expected = witness["expected"] + if expected not in ("present", "absent"): + raise ValueError("unsupported edge expectation") + occurrences = witness["occurrences"] + if (expected == "present") != bool(occurrences): + raise ValueError("positive witnesses need occurrences; negatives must have none") + for anchor in (witness["source"], witness["target"], *occurrences): + check_source(root, anchor) + endpoints = [] + for anchor in (witness["source"], witness["target"]): + matches = [] + for node in nodes: + file, line, names = _node_anchor(node, tool) + if (file, line) == (anchor["file"], anchor["line"]) and anchor["symbol"] in names: + matches.append(node["id"]) + endpoints.append(matches) + result = {"id": witness["id"], "tool": tool, "expected": expected, + "sourceCandidates": endpoints[0], "targetCandidates": endpoints[1], + "endpointIdentityVerified": all(len(matches) == 1 for matches in endpoints), + "expectedOccurrences": len(occurrences), "matchedOccurrences": 0, + "relationshipMatched": False, "matched": False} + if not result["endpointIdentityVerified"]: + result["reason"] = "missing or ambiguous declaration identity" + results.append(result) + continue + source, target = endpoints[0][0], endpoints[1][0] + matches = [edge for edge in edges if ( + edge.get("_src", edge.get("source")), edge.get("_tgt", edge.get("target")), + edge.get("kind", edge.get("relation"))) == (source, target, witness["relation"])] + result["matchingEdges"] = len(matches) + result["relationshipMatched"] = bool(matches) if expected == "present" else not matches + expected_sites = Counter((site["file"], site["line"]) for site in occurrences) + observed_sites = Counter(_edge_site(edge, tool) for edge in matches) + # Counter subtraction preserves multiplicity: duplicating one occurrence + # cannot recover another missing call site. + def records(sites: Counter) -> list[dict]: + return [{"file": file, "line": line, "count": count} + for (file, line), count in sorted(sites.items(), key=lambda item: repr(item[0]))] + result["expectedOccurrences"] = sum(expected_sites.values()) + result["matchedOccurrences"] = sum((expected_sites & observed_sites).values()) + result["missingOccurrences"] = records(expected_sites - observed_sites) + result["unexpectedOccurrences"] = records(observed_sites - expected_sites) + result["matched"] = (result["relationshipMatched"] and not result["missingOccurrences"] + and not result["unexpectedOccurrences"]) + results.append(result) + return results + + +def execute(args: argparse.Namespace) -> None: + run_root = args.run.resolve() + code_files = [Path(__file__), Path(__file__).with_name("runner.py"), + Path(__file__).with_name("path_audit.py")] + code_digests = {path.name: _sha256_file(path) for path in code_files} + run_bytes = read_bounded(run_root / "run.json") + run = json.loads(run_bytes) + if run.get("schema") != "compass.agent-query-run/2": + raise ValueError("edge audit requires a provenance-recorded v2 run") + if _sha256_file(run_root / "suite.toml") != run["suiteDigest"]: + raise ValueError("captured suite digest mismatch") + manifest_bytes = read_bounded(args.witnesses) + manifest = json.loads(manifest_bytes) + if manifest.get("schema") != "compass.agent-edge-witnesses/1": + raise ValueError("unsupported edge witness schema") + if not 1 <= len(manifest["witnesses"]) <= 1000: + raise ValueError("witness count outside audit limit") + records = [record for record in run["repositories"] if record["repository"] == manifest["repository"]] + if len(records) != 1: + raise ValueError("expected one captured repository") + record = records[0] + repository = load_suite(run_root / "suite.toml").repository(manifest["repository"]) + if manifest["commit"] != repository.commit or record["commit"] != repository.commit: + raise ValueError("witness or captured source commit mismatch") + source = Path(record["source"]) + _verify_source(repository, source) + results = [] + for tool in ("compass", "graphify"): + graph_path = Path(record[f"{tool}Graph"]).resolve() + if not graph_path.is_relative_to(run_root): + raise ValueError("captured graph escapes the run directory") + graph_bytes = read_bounded(graph_path, MAX_GRAPH_BYTES) + if hashlib.sha256(graph_bytes).hexdigest() != record[f"{tool}GraphSha256"]: + raise ValueError("captured graph digest mismatch") + results.extend(audit_edges(manifest, tool, json.loads(graph_bytes), source)) + _verify_source(repository, source) + if code_digests != {path.name: _sha256_file(path) for path in code_files}: + raise ValueError("audit code changed during execution") + report = {"schema": "compass.agent-edge-audit/1", "runId": run["runId"], + "scope": manifest["scope"], "codeDigests": code_digests, + "runDigest": hashlib.sha256(run_bytes).hexdigest(), + "witnessDigest": hashlib.sha256(manifest_bytes).hexdigest(), "results": results} + args.output.parent.mkdir(parents=True, exist_ok=True) + with args.output.open("x", encoding="utf-8") as stream: + stream.write(json.dumps(report, indent=2, sort_keys=True) + "\n") + for row in results: + print(row["id"], row["tool"], "identity", row["endpointIdentityVerified"], + "relationship", row["relationshipMatched"], "all occurrences", row["matched"]) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--run", type=Path, required=True) + parser.add_argument("--witnesses", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + execute(parser.parse_args()) diff --git a/benchmarks/agent_query/edge_witnesses_chi_route_hierarchy_diagnostic.json b/benchmarks/agent_query/edge_witnesses_chi_route_hierarchy_diagnostic.json new file mode 100644 index 000000000..136cfa5bf --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_chi_route_hierarchy_diagnostic.json @@ -0,0 +1,27 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "scope": "Post-output negative discovered by reviewing a high-degree Compass route hub. Independent test-local chi.NewRouter instances do not create route containment across their files. Graphify absence of route endpoint identities is unavailable evidence, not a correct negative. This is not a representative precision sample.", + "witnesses": [ + { + "id": "independent-chi-test-routers-do-not-contain-each-other", + "source": { + "file": "middleware/clean_path_test.go", + "line": 14, + "symbol": "GET /users/1", + "text": "r.Get(\"/users/1\", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }))" + }, + "target": { + "file": "middleware/throttle_test.go", + "line": 22, + "symbol": "GET /", + "text": "r.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {" + }, + "relation": "contains", + "expected": "absent", + "occurrences": [], + "judgment": "TestCleanPath creates its local r with chi.NewRouter at clean_path_test.go:12; TestThrottleBacklog independently creates its r at throttle_test.go:18. Neither registers or mounts the other. Shared receiver spelling r and directory membership provide no parent-route evidence." + } + ] +} diff --git a/benchmarks/agent_query/edge_witnesses_fd.json b/benchmarks/agent_query/edge_witnesses_fd.json new file mode 100644 index 000000000..c94b7b631 --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_fd.json @@ -0,0 +1,326 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "fd", + "commit": "b422e5d8c9cffaa1ae43ba68e7b97a60fb3e8ae5", + "scope": "Source-first selected direct-call witnesses recorded before extracting or querying either tool on this checkout. Covers named declarations and line-level occurrences, not whole-repository recall, runtime execution, column accuracy, or representative held-out accuracy.", + "witnesses": [ + { + "id": "execute-commands", + "source": { + "file": "src/exec/mod.rs", + "line": 76, + "symbol": "execute", + "text": "pub fn execute(" + }, + "target": { + "file": "src/exec/command.rs", + "line": 60, + "symbol": "execute_commands", + "text": "pub fn execute_commands<" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/mod.rs", + "line": 87, + "text": "execute_commands(commands," + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "command-error", + "source": { + "file": "src/exec/command.rs", + "line": 60, + "symbol": "execute_commands", + "text": "pub fn execute_commands<" + }, + "target": { + "file": "src/exec/command.rs", + "line": 101, + "symbol": "handle_cmd_error", + "text": "pub fn handle_cmd_error(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/command.rs", + "line": 68, + "text": "handle_cmd_error(None, e)" + }, + { + "file": "src/exec/command.rs", + "line": 93, + "text": "handle_cmd_error(Some(&cmd), why)" + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "batch-error", + "source": { + "file": "src/exec/mod.rs", + "line": 90, + "symbol": "execute_batch", + "text": "pub fn execute_batch<" + }, + "target": { + "file": "src/exec/command.rs", + "line": 101, + "symbol": "handle_cmd_error", + "text": "pub fn handle_cmd_error(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/mod.rs", + "line": 105, + "text": "handle_cmd_error(Some(&builder.cmd), e)" + }, + { + "file": "src/exec/mod.rs", + "line": 112, + "text": "handle_cmd_error(Some(&builder.cmd), e)" + }, + { + "file": "src/exec/mod.rs", + "line": 118, + "text": "handle_cmd_error(None, e)" + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "batch-exitcodes", + "source": { + "file": "src/exec/mod.rs", + "line": 90, + "symbol": "execute_batch", + "text": "pub fn execute_batch<" + }, + "target": { + "file": "src/exit_codes.rs", + "line": 46, + "symbol": "merge_exitcodes", + "text": "pub fn merge_exitcodes(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/mod.rs", + "line": 116, + "text": "merge_exitcodes(builders.iter()" + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "builder-push-finish", + "source": { + "file": "src/exec/mod.rs", + "line": 173, + "symbol": "push", + "text": "fn push(" + }, + "target": { + "file": "src/exec/mod.rs", + "line": 191, + "symbol": "finish", + "text": "fn finish(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/mod.rs", + "line": 175, + "text": "self.finish()?" + }, + { + "file": "src/exec/mod.rs", + "line": 183, + "text": "self.finish()?" + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "builder-finish-new-command", + "source": { + "file": "src/exec/mod.rs", + "line": 191, + "symbol": "finish", + "text": "fn finish(" + }, + "target": { + "file": "src/exec/mod.rs", + "line": 164, + "symbol": "new_command", + "text": "fn new_command(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/mod.rs", + "line": 198, + "text": "Self::new_command(&self.pre_args)?" + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "size-parse", + "source": { + "file": "src/filter/size.rs", + "line": 28, + "symbol": "from_string", + "text": "pub fn from_string(" + }, + "target": { + "file": "src/filter/size.rs", + "line": 33, + "symbol": "parse_opt", + "text": "fn parse_opt(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/filter/size.rs", + "line": 29, + "text": "SizeFilter::parse_opt(s)" + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "time-before-parse", + "source": { + "file": "src/filter/time.rs", + "line": 49, + "symbol": "before", + "text": "pub fn before(" + }, + "target": { + "file": "src/filter/time.rs", + "line": 29, + "symbol": "from_str", + "text": "fn from_str(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/filter/time.rs", + "line": 50, + "text": "TimeFilter::from_str(s)" + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "command-buffer-write", + "source": { + "file": "src/exec/command.rs", + "line": 60, + "symbol": "execute_commands", + "text": "pub fn execute_commands<" + }, + "target": { + "file": "src/exec/command.rs", + "line": 30, + "symbol": "write", + "text": "fn write(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/command.rs", + "line": 87, + "text": "output_buffer.write();" + }, + { + "file": "src/exec/command.rs", + "line": 92, + "text": "output_buffer.write();" + }, + { + "file": "src/exec/command.rs", + "line": 97, + "text": "output_buffer.write();" + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "command-buffer-push", + "source": { + "file": "src/exec/command.rs", + "line": 60, + "symbol": "execute_commands", + "text": "pub fn execute_commands<" + }, + "target": { + "file": "src/exec/command.rs", + "line": 26, + "symbol": "push", + "text": "fn push(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/command.rs", + "line": 84, + "text": "output_buffer.push(output.stdout, output.stderr);" + } + ], + "judgment": "Each listed line is an explicit call in the reviewed caller body." + }, + { + "id": "wrong-push-owner", + "source": { + "file": "src/exec/command.rs", + "line": 60, + "symbol": "execute_commands", + "text": "pub fn execute_commands<" + }, + "target": { + "file": "src/exec/mod.rs", + "line": 173, + "symbol": "push", + "text": "fn push(" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "The caller body at command.rs:60-99 invokes OutputBuffer::push, not CommandBuilder::push." + }, + { + "id": "finish-not-executor", + "source": { + "file": "src/exec/mod.rs", + "line": 191, + "symbol": "finish", + "text": "fn finish(" + }, + "target": { + "file": "src/exec/command.rs", + "line": 60, + "symbol": "execute_commands", + "text": "pub fn execute_commands<" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "The complete body at mod.rs:191-203 contains no direct execute_commands call." + } + ] +} diff --git a/benchmarks/agent_query/edge_witnesses_fd_diagnostic.json b/benchmarks/agent_query/edge_witnesses_fd_diagnostic.json new file mode 100644 index 000000000..10b785fa6 --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_fd_diagnostic.json @@ -0,0 +1,127 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "fd", + "commit": "b422e5d8c9cffaa1ae43ba68e7b97a60fb3e8ae5", + "scope": "Post-output diagnostic added after the first fd run exposed an unresolved loop receiver and a wrong constructor owner. Kept separate from preregistered edge witnesses; not held-out accuracy or whole-graph precision/recall.", + "witnesses": [ + { + "id": "batch-builder-finish", + "source": { + "file": "src/exec/mod.rs", + "line": 90, + "symbol": "execute_batch", + "text": "pub fn execute_batch<" + }, + "target": { + "file": "src/exec/mod.rs", + "line": 191, + "symbol": "finish", + "text": "fn finish(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/mod.rs", + "line": 111, + "text": "builder.finish()" + } + ], + "judgment": "Post-output source review of execute_batch: CommandBuilder::new at 97 constructs the values collected into builders; the successful match arm iterates them and calls the reviewed methods. No CommandTemplate::new call appears in this body." + }, + { + "id": "batch-builder-push", + "source": { + "file": "src/exec/mod.rs", + "line": 90, + "symbol": "execute_batch", + "text": "pub fn execute_batch<" + }, + "target": { + "file": "src/exec/mod.rs", + "line": 173, + "symbol": "push", + "text": "fn push(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/mod.rs", + "line": 104, + "text": "builder.push(" + } + ], + "judgment": "Post-output source review of execute_batch: CommandBuilder::new at 97 constructs the values collected into builders; the successful match arm iterates them and calls the reviewed methods. No CommandTemplate::new call appears in this body." + }, + { + "id": "batch-builder-exit-code", + "source": { + "file": "src/exec/mod.rs", + "line": 90, + "symbol": "execute_batch", + "text": "pub fn execute_batch<" + }, + "target": { + "file": "src/exec/mod.rs", + "line": 205, + "symbol": "exit_code", + "text": "fn exit_code(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/mod.rs", + "line": 116, + "text": "b.exit_code()" + } + ], + "judgment": "Post-output source review of execute_batch: CommandBuilder::new at 97 constructs the values collected into builders; the successful match arm iterates them and calls the reviewed methods. No CommandTemplate::new call appears in this body." + }, + { + "id": "batch-builder-new", + "source": { + "file": "src/exec/mod.rs", + "line": 90, + "symbol": "execute_batch", + "text": "pub fn execute_batch<" + }, + "target": { + "file": "src/exec/mod.rs", + "line": 136, + "symbol": "new", + "text": "fn new(template:" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/exec/mod.rs", + "line": 97, + "text": "CommandBuilder::new(c, limit)" + } + ], + "judgment": "Post-output source review of execute_batch: CommandBuilder::new at 97 constructs the values collected into builders; the successful match arm iterates them and calls the reviewed methods. No CommandTemplate::new call appears in this body." + }, + { + "id": "batch-not-template-new", + "source": { + "file": "src/exec/mod.rs", + "line": 90, + "symbol": "execute_batch", + "text": "pub fn execute_batch<" + }, + "target": { + "file": "src/exec/mod.rs", + "line": 220, + "symbol": "new", + "text": "fn new" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "Post-output source review of execute_batch: CommandBuilder::new at 97 constructs the values collected into builders; the successful match arm iterates them and calls the reviewed methods. No CommandTemplate::new call appears in this body." + } + ] +} diff --git a/benchmarks/agent_query/edge_witnesses_go_receiver_chi_diagnostic.json b/benchmarks/agent_query/edge_witnesses_go_receiver_chi_diagnostic.json new file mode 100644 index 000000000..2d0466fed --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_go_receiver_chi_diagnostic.json @@ -0,0 +1,127 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "scope": "Post-output development diagnostic after panel A. Four unchanged registered pairs plus the source-reviewed compression interface call found by inspecting the full graph delta. Not independent confirmation or whole-graph precision.", + "witnesses": [ + { + "id": "chi-source-edge-1", + "source": { + "file": "chi.go", + "line": 62, + "symbol": "NewRouter", + "text": "func NewRouter() *Mux {" + }, + "target": { + "file": "mux.go", + "line": 52, + "symbol": "NewMux", + "text": "func NewMux() *Mux {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "chi.go", + "line": 63, + "text": "return NewMux()" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "chi-source-edge-2", + "source": { + "file": "context.go", + "line": 16, + "symbol": "URLParamFromCtx", + "text": "func URLParamFromCtx(ctx context.Context, key string) string {" + }, + "target": { + "file": "context.go", + "line": 25, + "symbol": "RouteContext", + "text": "func RouteContext(ctx context.Context) *Context {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "context.go", + "line": 17, + "text": "if rctx := RouteContext(ctx); rctx != nil {" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "chi-source-edge-3", + "source": { + "file": "context.go", + "line": 16, + "symbol": "URLParamFromCtx", + "text": "func URLParamFromCtx(ctx context.Context, key string) string {" + }, + "target": { + "file": "context.go", + "line": 124, + "symbol": "URLParam", + "text": "func (x *Context) URLParam(key string) string {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "context.go", + "line": 18, + "text": "return rctx.URLParam(key)" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "chi-source-edge-4", + "source": { + "file": "chi.go", + "line": 62, + "symbol": "NewRouter", + "text": "func NewRouter() *Mux {" + }, + "target": { + "file": "context.go", + "line": 31, + "symbol": "NewRouteContext", + "text": "func NewRouteContext() *Context {" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "chi-compression-interface-diagnostic", + "source": { + "file": "middleware/compress.go", + "line": 357, + "symbol": "Flush", + "text": "func (cw *compressResponseWriter) Flush() {" + }, + "target": { + "file": "middleware/compress.go", + "line": 354, + "symbol": "Flush", + "text": "Flush() error" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "middleware/compress.go", + "line": 364, + "text": "f.Flush()" + } + ], + "judgment": "The comma-ok type assertion to compressFlusher at line 363 supports this interface-method call. This is not a claim about the concrete runtime implementation. Other f bindings at lines 358 and 367 assert the distinct http.Flusher type." + } + ] +} diff --git a/benchmarks/agent_query/edge_witnesses_heldout_chi.json b/benchmarks/agent_query/edge_witnesses_heldout_chi.json new file mode 100644 index 000000000..6eea529af --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_heldout_chi.json @@ -0,0 +1,102 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "scope": "Pre-execution source-reviewed selected direct edges and occurrences on held-out panel A; no model output used as gold, no whole-repository precision/recall claim.", + "witnesses": [ + { + "id": "chi-source-edge-1", + "source": { + "file": "chi.go", + "line": 62, + "symbol": "NewRouter", + "text": "func NewRouter() *Mux {" + }, + "target": { + "file": "mux.go", + "line": 52, + "symbol": "NewMux", + "text": "func NewMux() *Mux {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "chi.go", + "line": 63, + "text": "return NewMux()" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "chi-source-edge-2", + "source": { + "file": "context.go", + "line": 16, + "symbol": "URLParamFromCtx", + "text": "func URLParamFromCtx(ctx context.Context, key string) string {" + }, + "target": { + "file": "context.go", + "line": 25, + "symbol": "RouteContext", + "text": "func RouteContext(ctx context.Context) *Context {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "context.go", + "line": 17, + "text": "if rctx := RouteContext(ctx); rctx != nil {" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "chi-source-edge-3", + "source": { + "file": "context.go", + "line": 16, + "symbol": "URLParamFromCtx", + "text": "func URLParamFromCtx(ctx context.Context, key string) string {" + }, + "target": { + "file": "context.go", + "line": 124, + "symbol": "URLParam", + "text": "func (x *Context) URLParam(key string) string {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "context.go", + "line": 18, + "text": "return rctx.URLParam(key)" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "chi-source-edge-4", + "source": { + "file": "chi.go", + "line": 62, + "symbol": "NewRouter", + "text": "func NewRouter() *Mux {" + }, + "target": { + "file": "context.go", + "line": 31, + "symbol": "NewRouteContext", + "text": "func NewRouteContext() *Context {" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + } + ] +} diff --git a/benchmarks/agent_query/edge_witnesses_heldout_click.json b/benchmarks/agent_query/edge_witnesses_heldout_click.json new file mode 100644 index 000000000..a5bc347b7 --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_heldout_click.json @@ -0,0 +1,102 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "scope": "Pre-execution source-reviewed selected direct edges and occurrences on held-out panel A; no model output used as gold, no whole-repository precision/recall claim.", + "witnesses": [ + { + "id": "click-source-edge-1", + "source": { + "file": "src/click/utils.py", + "line": 381, + "symbol": "open_file", + "text": "def open_file(" + }, + "target": { + "file": "src/click/_compat.py", + "line": 374, + "symbol": "open_stream", + "text": "def open_stream(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "click-source-edge-2", + "source": { + "file": "src/click/_compat.py", + "line": 374, + "symbol": "open_stream", + "text": "def open_stream(" + }, + "target": { + "file": "src/click/_compat.py", + "line": 361, + "symbol": "_wrap_io_open", + "text": "def _wrap_io_open(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/click/_compat.py", + "line": 397, + "text": "return _wrap_io_open(filename, mode, encoding, errors), True" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "click-source-edge-3", + "source": { + "file": "src/click/utils.py", + "line": 153, + "symbol": "open", + "text": "def open(self) -> t.IO[t.Any]:" + }, + "target": { + "file": "src/click/_compat.py", + "line": 374, + "symbol": "open_stream", + "text": "def open_stream(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/click/utils.py", + "line": 161, + "text": "rv, self.should_close = open_stream(" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "click-source-edge-4", + "source": { + "file": "src/click/utils.py", + "line": 381, + "symbol": "open_file", + "text": "def open_file(" + }, + "target": { + "file": "src/click/utils.py", + "line": 430, + "symbol": "format_filename", + "text": "def format_filename(" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + } + ] +} diff --git a/benchmarks/agent_query/edge_witnesses_heldout_click_corrected.json b/benchmarks/agent_query/edge_witnesses_heldout_click_corrected.json new file mode 100644 index 000000000..00943f747 --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_heldout_click_corrected.json @@ -0,0 +1,108 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "scope": "Post-output diagnostic correction to the registered held-out panel A Click witness. The original manifest remains unchanged. Full source-body review found a second open_stream -> _wrap_io_open call at line 450; this is an oracle correction, not a preregistered result.", + "witnesses": [ + { + "id": "click-source-edge-1", + "source": { + "file": "src/click/utils.py", + "line": 381, + "symbol": "open_file", + "text": "def open_file(" + }, + "target": { + "file": "src/click/_compat.py", + "line": 374, + "symbol": "open_stream", + "text": "def open_stream(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "click-source-edge-2", + "source": { + "file": "src/click/_compat.py", + "line": 374, + "symbol": "open_stream", + "text": "def open_stream(" + }, + "target": { + "file": "src/click/_compat.py", + "line": 361, + "symbol": "_wrap_io_open", + "text": "def _wrap_io_open(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/click/_compat.py", + "line": 397, + "text": "return _wrap_io_open(filename, mode, encoding, errors), True" + }, + { + "file": "src/click/_compat.py", + "line": 450, + "text": "f = _wrap_io_open(fd, mode, encoding, errors)" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "click-source-edge-3", + "source": { + "file": "src/click/utils.py", + "line": 153, + "symbol": "open", + "text": "def open(self) -> t.IO[t.Any]:" + }, + "target": { + "file": "src/click/_compat.py", + "line": 374, + "symbol": "open_stream", + "text": "def open_stream(" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/click/utils.py", + "line": 161, + "text": "rv, self.should_close = open_stream(" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "click-source-edge-4", + "source": { + "file": "src/click/utils.py", + "line": 381, + "symbol": "open_file", + "text": "def open_file(" + }, + "target": { + "file": "src/click/utils.py", + "line": 430, + "symbol": "format_filename", + "text": "def format_filename(" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + } + ], + "correctionOf": "edge_witnesses_heldout_click.json" +} diff --git a/benchmarks/agent_query/edge_witnesses_heldout_jsoup.json b/benchmarks/agent_query/edge_witnesses_heldout_jsoup.json new file mode 100644 index 000000000..12288ea6c --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_heldout_jsoup.json @@ -0,0 +1,107 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "scope": "Pre-execution source-reviewed selected direct edges and occurrences on held-out panel A; no model output used as gold, no whole-repository precision/recall claim.", + "witnesses": [ + { + "id": "jsoup-source-edge-1", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "symbol": "isValidBodyHtml", + "text": "public boolean isValidBodyHtml(String bodyHtml) {" + }, + "target": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 182, + "symbol": "copySafeNodes", + "text": "private int copySafeNodes(Element source, Element dest) {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 131, + "text": "int numDiscarded = copySafeNodes(dirty.body(), clean.body());" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "jsoup-source-edge-2", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "symbol": "isValidBodyHtml", + "text": "public boolean isValidBodyHtml(String bodyHtml) {" + }, + "target": { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 65, + "symbol": "createShell", + "text": "public static Document createShell(String baseUri) {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 126, + "text": "Document clean = Document.createShell(baseUri);" + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 127, + "text": "Document dirty = Document.createShell(baseUri);" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "jsoup-source-edge-3", + "source": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 434, + "symbol": "isValid", + "text": "public static boolean isValid(String bodyHtml, Safelist safelist) {" + }, + "target": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "symbol": "isValidBodyHtml", + "text": "public boolean isValidBodyHtml(String bodyHtml) {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 435, + "text": "return new Cleaner(safelist).isValidBodyHtml(bodyHtml);" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "jsoup-source-edge-4", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "symbol": "isValidBodyHtml", + "text": "public boolean isValidBodyHtml(String bodyHtml) {" + }, + "target": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 62, + "symbol": "clean", + "text": "public Document clean(Document dirtyDocument) {" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + } + ] +} diff --git a/benchmarks/agent_query/edge_witnesses_heldout_redux.json b/benchmarks/agent_query/edge_witnesses_heldout_redux.json new file mode 100644 index 000000000..b7506e2f5 --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_heldout_redux.json @@ -0,0 +1,127 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "scope": "Pre-execution source-reviewed selected direct edges and occurrences on held-out panel A; no model output used as gold, no whole-repository precision/recall claim.", + "witnesses": [ + { + "id": "redux-source-edge-1", + "source": { + "file": "src/utils/kindOf.ts", + "line": 2, + "symbol": "miniKindOf", + "text": "export function miniKindOf(val: any): string {" + }, + "target": { + "file": "src/utils/kindOf.ts", + "line": 40, + "symbol": "ctorName", + "text": "function ctorName(val: any): string | null {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/utils/kindOf.ts", + "line": 21, + "text": "const constructorName = ctorName(val)" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "redux-source-edge-2", + "source": { + "file": "src/utils/kindOf.ts", + "line": 2, + "symbol": "miniKindOf", + "text": "export function miniKindOf(val: any): string {" + }, + "target": { + "file": "src/utils/kindOf.ts", + "line": 53, + "symbol": "isDate", + "text": "function isDate(val: any) {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/utils/kindOf.ts", + "line": 18, + "text": "if (isDate(val)) return 'date'" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "redux-source-edge-3", + "source": { + "file": "src/utils/isAction.ts", + "line": 4, + "symbol": "isAction", + "text": "export default function isAction(action: unknown): action is Action {" + }, + "target": { + "file": "src/utils/isPlainObject.ts", + "line": 5, + "symbol": "isPlainObject", + "text": "export default function isPlainObject(obj: any): obj is object {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/utils/isAction.ts", + "line": 6, + "text": "isPlainObject(action) &&" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "redux-source-edge-4", + "source": { + "file": "src/utils/kindOf.ts", + "line": 62, + "symbol": "kindOf", + "text": "export function kindOf(val: any) {" + }, + "target": { + "file": "src/utils/kindOf.ts", + "line": 44, + "symbol": "isError", + "text": "function isError(val: any) {" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "redux-source-edge-5", + "source": { + "file": "src/utils/kindOf.ts", + "line": 62, + "symbol": "kindOf", + "text": "export function kindOf(val: any) {" + }, + "target": { + "file": "src/utils/kindOf.ts", + "line": 2, + "symbol": "miniKindOf", + "text": "export function miniKindOf(val: any): string {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/utils/kindOf.ts", + "line": 66, + "text": "typeOfVal = miniKindOf(val)" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + } + ] +} diff --git a/benchmarks/agent_query/edge_witnesses_heldout_walkdir.json b/benchmarks/agent_query/edge_witnesses_heldout_walkdir.json new file mode 100644 index 000000000..366d46668 --- /dev/null +++ b/benchmarks/agent_query/edge_witnesses_heldout_walkdir.json @@ -0,0 +1,107 @@ +{ + "schema": "compass.agent-edge-witnesses/1", + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "scope": "Pre-execution source-reviewed selected direct edges and occurrences on held-out panel A; no model output used as gold, no whole-repository precision/recall claim.", + "witnesses": [ + { + "id": "walkdir-source-edge-1", + "source": { + "file": "src/lib.rs", + "line": 439, + "symbol": "sort_by_key", + "text": "pub fn sort_by_key(self, mut cmp: F) -> Self" + }, + "target": { + "file": "src/lib.rs", + "line": 417, + "symbol": "sort_by", + "text": "pub fn sort_by(mut self, cmp: F) -> Self" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/lib.rs", + "line": 444, + "text": "self.sort_by(move |a, b| cmp(a).cmp(&cmp(b)))" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "walkdir-source-edge-2", + "source": { + "file": "src/lib.rs", + "line": 456, + "symbol": "sort_by_file_name", + "text": "pub fn sort_by_file_name(self) -> Self {" + }, + "target": { + "file": "src/lib.rs", + "line": 417, + "symbol": "sort_by", + "text": "pub fn sort_by(mut self, cmp: F) -> Self" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/lib.rs", + "line": 457, + "text": "self.sort_by(|a, b| a.file_name().cmp(b.file_name()))" + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "walkdir-source-edge-3", + "source": { + "file": "src/lib.rs", + "line": 687, + "symbol": "next", + "text": "fn next(&mut self) -> Option> {" + }, + "target": { + "file": "src/lib.rs", + "line": 950, + "symbol": "pop", + "text": "fn pop(&mut self) {" + }, + "relation": "calls", + "expected": "present", + "occurrences": [ + { + "file": "src/lib.rs", + "line": 707, + "text": "self.pop();" + }, + { + "file": "src/lib.rs", + "line": 718, + "text": "None => self.pop()," + } + ], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + }, + { + "id": "walkdir-source-edge-4", + "source": { + "file": "src/lib.rs", + "line": 456, + "symbol": "sort_by_file_name", + "text": "pub fn sort_by_file_name(self) -> Self {" + }, + "target": { + "file": "src/lib.rs", + "line": 439, + "symbol": "sort_by_key", + "text": "pub fn sort_by_key(self, mut cmp: F) -> Self" + }, + "relation": "calls", + "expected": "absent", + "occurrences": [], + "judgment": "All direct call sites for this selected declaration pair in the reviewed caller body are listed; an empty list is a direct-edge negative, not a claim of no transitive connection." + } + ] +} diff --git a/benchmarks/agent_query/exact_symbol_development_registration.json b/benchmarks/agent_query/exact_symbol_development_registration.json new file mode 100644 index 000000000..2fd403433 --- /dev/null +++ b/benchmarks/agent_query/exact_symbol_development_registration.json @@ -0,0 +1,56 @@ +{ + "schema": "compass.exact-symbol-development-registration/1", + "baselineCommit": "5131598e0ee06992c12a233656d2816cfd9cf977", + "scope": "Known five-language development subjects. Prior source and outputs have been inspected. Test explicit exact name/ID search with optional source file, declaration line and node-kind filters; no hidden selector substitutions or held-out claim.", + "sourceQuestions": "benchmarks/agent_query/responsibility_questions_panel_a.json", + "sourceQuestionsSha256": "608314dcd5e0a9e40fc7c6b8dd9d44026ba6a9b001e881fa8504fe44cc1fc7b2", + "graphRun": "rust-index-receiver-03/run.json", + "graphRunSha256": "9a6e670114f5be83773176e54bf0c4faf45582389164dea79ad17306eee1c50c", + "tasks": [ + { + "repository": "chi", + "symbol": "Mux", + "file": "mux.go", + "startLine": 21, + "kind": "struct" + }, + { + "repository": "click", + "symbol": "_AtomicFile", + "file": "src/click/_compat.py", + "startLine": 455, + "kind": "class" + }, + { + "repository": "jsoup", + "symbol": "Cleaner", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 43, + "kind": "class" + }, + { + "repository": "redux", + "symbol": "createStore", + "file": "src/createStore.ts", + "startLine": 86, + "kind": "function" + }, + { + "repository": "walkdir", + "symbol": "IntoIter", + "file": "src/lib.rs", + "startLine": 566, + "kind": "struct" + } + ], + "productContract": "Exact node ID takes precedence; otherwise normalized exact name or qualified name lookup. All matching candidate records remain visible; file, start line and kind are explicit conjunctive filters. No fuzzy/lexical fallback or inferred ownership/export collapse. The existing candidate cap applies before filtering and truncation remains explicit, even if the filtered prefix has one or zero results. Default ranked search remains unchanged.", + "identityControl": "Both tools receive the same known symbol, repository-relative file, declaration line and expected kind. Compass uses search_symbols exact=true, source_file, start_line, kind with existing limits (256 candidates, 500 nodes, 524288 response bytes). Graphify uses its existing file::symbol get_node; validate returned source identity and source-declaration kind afterward. Do not imply Graphify natively accepts all filters. One call per tool/subject, no retries. Preserve all ambiguity/error/limit outcomes.", + "followup": "For each uniquely source-validated endpoint, repeat the member_source_development_registration symmetric public-neighbor/source-window policy verbatim, with the same 8000-byte source quota and all 20 facts. Keep the earlier 11/20 vs 15/20 workflow and native-member 13/20 scores separate. Capture native declaration explanation for resolved roots separately if used; do not combine scores.", + "negativeControls": "Native fixtures must cover duplicate exact names, same source coordinates with distinct kinds, multiple overloads of the same kind, exact IDs, wrong file/line/kind, no exact match despite lexical hits, truncated exact lookup even after filters, response limits, invalid selectors/filters, and JSON/store parity. Public real-source probes retain Redux function/export ambiguity when kind is omitted and reject a nonexistent line.", + "verification": "Preserve raw argv, MCP requests/responses, graphs, source pins, binary and support hashes. Verify every selected identity against pinned source and every follow-up window against public returned anchors. Existing unscoped resolver payloads must be replayed unchanged; expose any differences.", + "limitations": [ + "Same-agent semantic adjudication, not independent human review.", + "Explicit identity constraints are additional task inputs; do not retroactively replace old unresolved outcomes.", + "This does not improve extraction, synthesize explanations, or prove god-object quality or broad superiority." + ] +} diff --git a/benchmarks/agent_query/exact_symbol_development_review.json b/benchmarks/agent_query/exact_symbol_development_review.json new file mode 100644 index 000000000..f31ba3de1 --- /dev/null +++ b/benchmarks/agent_query/exact_symbol_development_review.json @@ -0,0 +1,3064 @@ +{ + "schema": "compass.exact-symbol-development-review/1", + "registration": "benchmarks/agent_query/exact_symbol_development_registration.json", + "registrationSha256": "78781c22e1357515e9cd4e1093ecabe0fc1263262fae3a4fee1b0bf02a8086f2", + "productCommit": "9cc6ba9e2b83c8bf3a573cf8dec755092f9c93e9", + "evaluatedBinarySha256": "2cc997ff293da1900a1c5e43175930862c19e83c44bf0ef4a160b1ea3927dab9", + "scope": "Known five-language development subjects. Prior source and outputs have been inspected. Test explicit exact name/ID search with optional source file, declaration line and node-kind filters; no hidden selector substitutions or held-out claim.", + "summary": { + "compass": { + "subjects": 5, + "resolvedSubjects": 5, + "facts": 20, + "sourceEvidenceFacts": 14, + "literalWitnessFacts": 13, + "explicitNativeFacts": 0, + "sourceBytes": 35673, + "neighborTextBytes": 33061, + "neighborWireBytes": 372829, + "resolverTextBytes": 3039, + "resolverWireBytes": 21983 + }, + "graphify": { + "subjects": 5, + "resolvedSubjects": 5, + "facts": 20, + "sourceEvidenceFacts": 15, + "literalWitnessFacts": 14, + "explicitNativeFacts": 0, + "sourceBytes": 35673, + "neighborTextBytes": 6980, + "neighborWireBytes": 7534, + "resolverTextBytes": 619, + "resolverWireBytes": 1094 + } + }, + "results": [ + { + "repository": "chi", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "chi-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "chi-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "chi-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "chi-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 476, + "expected": "\tmethod, ok := methodMap[rctx.RouteMethod]", + "returned": null + }, + { + "line": 477, + "expected": "\tif !ok {", + "returned": null + }, + { + "line": 478, + "expected": "\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)", + "returned": null + }, + { + "line": 479, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 480, + "expected": "\t}", + "returned": null + }, + { + "line": 481, + "expected": "", + "returned": null + }, + { + "line": 482, + "expected": "\t// Find the route", + "returned": null + }, + { + "line": 483, + "expected": "\tif _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil {", + "returned": null + }, + { + "line": 484, + "expected": "\t\t// Set http.Request path values from our request context", + "returned": null + }, + { + "line": 485, + "expected": "\t\tfor i, key := range rctx.URLParams.Keys {", + "returned": null + }, + { + "line": 486, + "expected": "\t\t\tvalue := rctx.URLParams.Values[i]", + "returned": null + }, + { + "line": 487, + "expected": "\t\t\tr.SetPathValue(key, value)", + "returned": null + }, + { + "line": 488, + "expected": "\t\t}", + "returned": null + }, + { + "line": 489, + "expected": "\t\tr.Pattern = rctx.RoutePattern()", + "returned": null + }, + { + "line": 490, + "expected": "", + "returned": null + }, + { + "line": 491, + "expected": "\t\th.ServeHTTP(w, r)", + "returned": null + }, + { + "line": 492, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 493, + "expected": "\t}", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 13154, + "neighborWireBytes": 147275, + "returnedMembershipRows": 33, + "windows": [ + { + "file": "mux.go", + "startLine": 63, + "lastReturnedLine": 99, + "sourceBytes": 1373, + "partial": false + }, + { + "file": "mux.go", + "startLine": 100, + "lastReturnedLine": 108, + "sourceBytes": 333, + "partial": false + }, + { + "file": "mux.go", + "startLine": 109, + "lastReturnedLine": 120, + "sourceBytes": 386, + "partial": false + }, + { + "file": "mux.go", + "startLine": 121, + "lastReturnedLine": 126, + "sourceBytes": 217, + "partial": false + }, + { + "file": "mux.go", + "startLine": 127, + "lastReturnedLine": 136, + "sourceBytes": 356, + "partial": false + }, + { + "file": "mux.go", + "startLine": 137, + "lastReturnedLine": 142, + "sourceBytes": 241, + "partial": false + }, + { + "file": "mux.go", + "startLine": 143, + "lastReturnedLine": 148, + "sourceBytes": 230, + "partial": false + }, + { + "file": "mux.go", + "startLine": 149, + "lastReturnedLine": 154, + "sourceBytes": 222, + "partial": false + }, + { + "file": "mux.go", + "startLine": 155, + "lastReturnedLine": 160, + "sourceBytes": 218, + "partial": false + }, + { + "file": "mux.go", + "startLine": 161, + "lastReturnedLine": 166, + "sourceBytes": 227, + "partial": false + }, + { + "file": "mux.go", + "startLine": 167, + "lastReturnedLine": 172, + "sourceBytes": 228, + "partial": false + }, + { + "file": "mux.go", + "startLine": 173, + "lastReturnedLine": 178, + "sourceBytes": 222, + "partial": false + }, + { + "file": "mux.go", + "startLine": 179, + "lastReturnedLine": 184, + "sourceBytes": 218, + "partial": false + }, + { + "file": "mux.go", + "startLine": 185, + "lastReturnedLine": 190, + "sourceBytes": 220, + "partial": false + }, + { + "file": "mux.go", + "startLine": 191, + "lastReturnedLine": 196, + "sourceBytes": 224, + "partial": false + }, + { + "file": "mux.go", + "startLine": 197, + "lastReturnedLine": 202, + "sourceBytes": 242, + "partial": false + }, + { + "file": "mux.go", + "startLine": 203, + "lastReturnedLine": 222, + "sourceBytes": 579, + "partial": false + }, + { + "file": "mux.go", + "startLine": 223, + "lastReturnedLine": 241, + "sourceBytes": 526, + "partial": false + }, + { + "file": "mux.go", + "startLine": 242, + "lastReturnedLine": 267, + "sourceBytes": 880, + "partial": false + }, + { + "file": "mux.go", + "startLine": 268, + "lastReturnedLine": 277, + "sourceBytes": 253, + "partial": false + }, + { + "file": "mux.go", + "startLine": 278, + "lastReturnedLine": 293, + "sourceBytes": 605, + "partial": true + } + ], + "omittedGroups": 12, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "chi", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "chi-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "chi-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "chi-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "chi-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 476, + "expected": "\tmethod, ok := methodMap[rctx.RouteMethod]", + "returned": null + }, + { + "line": 477, + "expected": "\tif !ok {", + "returned": null + }, + { + "line": 478, + "expected": "\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)", + "returned": null + }, + { + "line": 479, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 480, + "expected": "\t}", + "returned": null + }, + { + "line": 481, + "expected": "", + "returned": null + }, + { + "line": 482, + "expected": "\t// Find the route", + "returned": null + }, + { + "line": 483, + "expected": "\tif _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil {", + "returned": null + }, + { + "line": 484, + "expected": "\t\t// Set http.Request path values from our request context", + "returned": null + }, + { + "line": 485, + "expected": "\t\tfor i, key := range rctx.URLParams.Keys {", + "returned": null + }, + { + "line": 486, + "expected": "\t\t\tvalue := rctx.URLParams.Values[i]", + "returned": null + }, + { + "line": 487, + "expected": "\t\t\tr.SetPathValue(key, value)", + "returned": null + }, + { + "line": 488, + "expected": "\t\t}", + "returned": null + }, + { + "line": 489, + "expected": "\t\tr.Pattern = rctx.RoutePattern()", + "returned": null + }, + { + "line": 490, + "expected": "", + "returned": null + }, + { + "line": 491, + "expected": "\t\th.ServeHTTP(w, r)", + "returned": null + }, + { + "line": 492, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 493, + "expected": "\t}", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 2189, + "neighborWireBytes": 2319, + "returnedMembershipRows": 33, + "windows": [ + { + "file": "mux.go", + "startLine": 63, + "lastReturnedLine": 99, + "sourceBytes": 1373, + "partial": false + }, + { + "file": "mux.go", + "startLine": 100, + "lastReturnedLine": 108, + "sourceBytes": 333, + "partial": false + }, + { + "file": "mux.go", + "startLine": 109, + "lastReturnedLine": 120, + "sourceBytes": 386, + "partial": false + }, + { + "file": "mux.go", + "startLine": 121, + "lastReturnedLine": 126, + "sourceBytes": 217, + "partial": false + }, + { + "file": "mux.go", + "startLine": 127, + "lastReturnedLine": 136, + "sourceBytes": 356, + "partial": false + }, + { + "file": "mux.go", + "startLine": 137, + "lastReturnedLine": 142, + "sourceBytes": 241, + "partial": false + }, + { + "file": "mux.go", + "startLine": 143, + "lastReturnedLine": 148, + "sourceBytes": 230, + "partial": false + }, + { + "file": "mux.go", + "startLine": 149, + "lastReturnedLine": 154, + "sourceBytes": 222, + "partial": false + }, + { + "file": "mux.go", + "startLine": 155, + "lastReturnedLine": 160, + "sourceBytes": 218, + "partial": false + }, + { + "file": "mux.go", + "startLine": 161, + "lastReturnedLine": 166, + "sourceBytes": 227, + "partial": false + }, + { + "file": "mux.go", + "startLine": 167, + "lastReturnedLine": 172, + "sourceBytes": 228, + "partial": false + }, + { + "file": "mux.go", + "startLine": 173, + "lastReturnedLine": 178, + "sourceBytes": 222, + "partial": false + }, + { + "file": "mux.go", + "startLine": 179, + "lastReturnedLine": 184, + "sourceBytes": 218, + "partial": false + }, + { + "file": "mux.go", + "startLine": 185, + "lastReturnedLine": 190, + "sourceBytes": 220, + "partial": false + }, + { + "file": "mux.go", + "startLine": 191, + "lastReturnedLine": 196, + "sourceBytes": 224, + "partial": false + }, + { + "file": "mux.go", + "startLine": 197, + "lastReturnedLine": 202, + "sourceBytes": 242, + "partial": false + }, + { + "file": "mux.go", + "startLine": 203, + "lastReturnedLine": 222, + "sourceBytes": 579, + "partial": false + }, + { + "file": "mux.go", + "startLine": 223, + "lastReturnedLine": 241, + "sourceBytes": 526, + "partial": false + }, + { + "file": "mux.go", + "startLine": 242, + "lastReturnedLine": 267, + "sourceBytes": 880, + "partial": false + }, + { + "file": "mux.go", + "startLine": 268, + "lastReturnedLine": 277, + "sourceBytes": 253, + "partial": false + }, + { + "file": "mux.go", + "startLine": 278, + "lastReturnedLine": 293, + "sourceBytes": 605, + "partial": true + } + ], + "omittedGroups": 12, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "click", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "click-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 455, + "expected": "class _AtomicFile:", + "returned": null + } + ], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Only the class header is absent; the exact owner identity is verified independently. All initialization, @property and getter code is returned. Same semantic allowance as the prior registered window control." + }, + { + "fact": "click-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "click-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "click-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + } + ], + "sourceBytes": 3673, + "stdoutBytes": 0, + "neighborTextBytes": 2092, + "neighborWireBytes": 23086, + "returnedMembershipRows": 7, + "windows": [ + { + "file": "src/click/_compat.py", + "startLine": 456, + "lastReturnedLine": 462, + "sourceBytes": 236, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 463, + "lastReturnedLine": 465, + "sourceBytes": 63, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 466, + "lastReturnedLine": 472, + "sourceBytes": 206, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 473, + "lastReturnedLine": 475, + "sourceBytes": 86, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 476, + "lastReturnedLine": 478, + "sourceBytes": 61, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 479, + "lastReturnedLine": 486, + "sourceBytes": 217, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 487, + "lastReturnedLine": 590, + "sourceBytes": 2804, + "partial": false + } + ], + "omittedGroups": 0, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "click", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "click-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 455, + "expected": "class _AtomicFile:", + "returned": null + } + ], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Only the class header is absent; the exact owner identity is verified independently. All initialization, @property and getter code is returned. Same semantic allowance as the prior registered window control." + }, + { + "fact": "click-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "click-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "click-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + } + ], + "sourceBytes": 3673, + "stdoutBytes": 0, + "neighborTextBytes": 636, + "neighborWireBytes": 735, + "returnedMembershipRows": 7, + "windows": [ + { + "file": "src/click/_compat.py", + "startLine": 456, + "lastReturnedLine": 462, + "sourceBytes": 236, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 463, + "lastReturnedLine": 465, + "sourceBytes": 63, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 466, + "lastReturnedLine": 472, + "sourceBytes": 206, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 473, + "lastReturnedLine": 475, + "sourceBytes": 86, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 476, + "lastReturnedLine": 478, + "sourceBytes": 61, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 479, + "lastReturnedLine": 486, + "sourceBytes": 217, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 487, + "lastReturnedLine": 590, + "sourceBytes": 2804, + "partial": false + } + ], + "omittedGroups": 0, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "jsoup", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "jsoup-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "jsoup-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "jsoup-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 206, + "expected": " Range.AttributeRange range = sourceAttrs.sourceRange(key);", + "returned": " Range.AttributeRange r" + }, + { + "line": 207, + "expected": " destAttrs.put(key, value);", + "returned": null + }, + { + "line": 208, + "expected": " NodeInternals.attributeRange(destAttrs, key, range);", + "returned": null + }, + { + "line": 209, + "expected": " } else", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "jsoup-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 7014, + "neighborWireBytes": 66437, + "returnedMembershipRows": 9, + "windows": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 44, + "lastReturnedLine": 49, + "sourceBytes": 180, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 50, + "lastReturnedLine": 61, + "sourceBytes": 541, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 62, + "lastReturnedLine": 93, + "sourceBytes": 1549, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 94, + "lastReturnedLine": 123, + "sourceBytes": 1625, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 124, + "lastReturnedLine": 137, + "sourceBytes": 748, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 138, + "lastReturnedLine": 181, + "sourceBytes": 2032, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 182, + "lastReturnedLine": 187, + "sourceBytes": 233, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 188, + "lastReturnedLine": 206, + "sourceBytes": 1092, + "partial": true + } + ], + "omittedGroups": 1, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "jsoup", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "jsoup-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "jsoup-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "jsoup-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "jsoup-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 1034, + "neighborWireBytes": 1135, + "returnedMembershipRows": 8, + "windows": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 50, + "lastReturnedLine": 61, + "sourceBytes": 541, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 62, + "lastReturnedLine": 93, + "sourceBytes": 1549, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 94, + "lastReturnedLine": 123, + "sourceBytes": 1625, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 124, + "lastReturnedLine": 137, + "sourceBytes": 748, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 138, + "lastReturnedLine": 181, + "sourceBytes": 2032, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 182, + "lastReturnedLine": 187, + "sourceBytes": 233, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 188, + "lastReturnedLine": 210, + "sourceBytes": 1272, + "partial": true + } + ], + "omittedGroups": 1, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "explicitNativeFacts": 0 + }, + { + "repository": "redux", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "redux-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "redux-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "redux-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "redux-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 344, + "expected": " function observable() {", + "returned": null + }, + { + "line": 345, + "expected": " const outerSubscribe = subscribe", + "returned": null + }, + { + "line": 346, + "expected": " return {", + "returned": null + }, + { + "line": 347, + "expected": " /**", + "returned": null + }, + { + "line": 348, + "expected": " * The minimal observable subscription method.", + "returned": null + }, + { + "line": 349, + "expected": " * @param observer Any object that can be used as an observer.", + "returned": null + }, + { + "line": 350, + "expected": " * The observer object should have a `next` method.", + "returned": null + }, + { + "line": 351, + "expected": " * @returns An object with an `unsubscribe` method that can", + "returned": null + }, + { + "line": 352, + "expected": " * be used to unsubscribe the observable from the store, and prevent further", + "returned": null + }, + { + "line": 353, + "expected": " * emission of values from the observable.", + "returned": null + }, + { + "line": 354, + "expected": " */", + "returned": null + }, + { + "line": 355, + "expected": " subscribe(observer: unknown) {", + "returned": null + }, + { + "line": 356, + "expected": " if (typeof observer !== 'object' || observer === null) {", + "returned": null + }, + { + "line": 357, + "expected": " throw new TypeError(", + "returned": null + }, + { + "line": 358, + "expected": " `Expected the observer to be an object. Instead, received: '${kindOf(", + "returned": null + }, + { + "line": 359, + "expected": " observer", + "returned": null + }, + { + "line": 360, + "expected": " )}'`", + "returned": null + }, + { + "line": 361, + "expected": " )", + "returned": null + }, + { + "line": 362, + "expected": " }", + "returned": null + }, + { + "line": 363, + "expected": "", + "returned": null + }, + { + "line": 364, + "expected": " function observeState() {", + "returned": null + }, + { + "line": 365, + "expected": " const observerAsObserver = observer as Observer", + "returned": null + }, + { + "line": 366, + "expected": " if (observerAsObserver.next) {", + "returned": null + }, + { + "line": 367, + "expected": " observerAsObserver.next(getState())", + "returned": null + }, + { + "line": 368, + "expected": " }", + "returned": null + }, + { + "line": 369, + "expected": " }", + "returned": null + }, + { + "line": 370, + "expected": "", + "returned": null + }, + { + "line": 371, + "expected": " observeState()", + "returned": null + }, + { + "line": 372, + "expected": " const unsubscribe = outerSubscribe(observeState)", + "returned": null + }, + { + "line": 373, + "expected": " return { unsubscribe }", + "returned": null + }, + { + "line": 374, + "expected": " },", + "returned": null + }, + { + "line": 375, + "expected": "", + "returned": null + }, + { + "line": 376, + "expected": " [$$observable]() {", + "returned": null + }, + { + "line": 377, + "expected": " return this", + "returned": null + }, + { + "line": 378, + "expected": " }", + "returned": null + }, + { + "line": 379, + "expected": " }", + "returned": null + }, + { + "line": 380, + "expected": " }", + "returned": null + }, + { + "line": 381, + "expected": "", + "returned": null + }, + { + "line": 382, + "expected": " // When a store is created, an \"INIT\" action is dispatched so that every", + "returned": null + }, + { + "line": 383, + "expected": " // reducer returns their initial state. This effectively populates", + "returned": null + }, + { + "line": 384, + "expected": " // the initial state tree.", + "returned": null + }, + { + "line": 385, + "expected": " dispatch({ type: ActionTypes.INIT } as A)", + "returned": null + }, + { + "line": 386, + "expected": "", + "returned": null + }, + { + "line": 387, + "expected": " const store = {", + "returned": null + }, + { + "line": 388, + "expected": " dispatch: dispatch as Dispatch,", + "returned": null + }, + { + "line": 389, + "expected": " subscribe,", + "returned": null + }, + { + "line": 390, + "expected": " getState,", + "returned": null + }, + { + "line": 391, + "expected": " replaceReducer,", + "returned": null + }, + { + "line": 392, + "expected": " [$$observable]: observable", + "returned": null + }, + { + "line": 393, + "expected": " } as unknown as Store & Ext", + "returned": null + }, + { + "line": 394, + "expected": " return store", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 6564, + "neighborWireBytes": 91587, + "returnedMembershipRows": 23, + "windows": [ + { + "file": "src/createStore.ts", + "startLine": 87, + "lastReturnedLine": 87, + "sourceBytes": 5, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 88, + "lastReturnedLine": 88, + "sourceBytes": 20, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 89, + "lastReturnedLine": 89, + "sourceBytes": 23, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 90, + "lastReturnedLine": 90, + "sourceBytes": 28, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 91, + "lastReturnedLine": 94, + "sourceBytes": 144, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 95, + "lastReturnedLine": 135, + "sourceBytes": 1298, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 136, + "lastReturnedLine": 136, + "sourceBytes": 31, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 137, + "lastReturnedLine": 139, + "sourceBytes": 108, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 140, + "lastReturnedLine": 140, + "sourceBytes": 73, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 141, + "lastReturnedLine": 141, + "sourceBytes": 39, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 142, + "lastReturnedLine": 142, + "sourceBytes": 28, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 143, + "lastReturnedLine": 151, + "sourceBytes": 278, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 152, + "lastReturnedLine": 165, + "sourceBytes": 358, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 166, + "lastReturnedLine": 200, + "sourceBytes": 1555, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 201, + "lastReturnedLine": 269, + "sourceBytes": 2608, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 270, + "lastReturnedLine": 312, + "sourceBytes": 1404, + "partial": true + } + ], + "omittedGroups": 7, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "redux", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "redux-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 121, + "expected": " if (typeof enhancer !== 'undefined') {", + "returned": null + }, + { + "line": 122, + "expected": " if (typeof enhancer !== 'function') {", + "returned": null + }, + { + "line": 123, + "expected": " throw new Error(", + "returned": null + }, + { + "line": 124, + "expected": " `Expected the enhancer to be a function. Instead, received: '${kindOf(", + "returned": null + }, + { + "line": 125, + "expected": " enhancer", + "returned": null + }, + { + "line": 126, + "expected": " )}'`", + "returned": null + }, + { + "line": 127, + "expected": " )", + "returned": null + }, + { + "line": 128, + "expected": " }", + "returned": null + }, + { + "line": 129, + "expected": "", + "returned": null + }, + { + "line": 130, + "expected": " return enhancer(createStore)(", + "returned": null + }, + { + "line": 131, + "expected": " reducer,", + "returned": null + }, + { + "line": 132, + "expected": " preloadedState as PreloadedState | undefined", + "returned": null + }, + { + "line": 133, + "expected": " )", + "returned": null + }, + { + "line": 134, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "redux-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "redux-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "redux-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 365, + "expected": " const observerAsObserver = observer as Observer", + "returned": " const observerAsObserver = observer a" + }, + { + "line": 366, + "expected": " if (observerAsObserver.next) {", + "returned": null + }, + { + "line": 367, + "expected": " observerAsObserver.next(getState())", + "returned": null + }, + { + "line": 368, + "expected": " }", + "returned": null + }, + { + "line": 369, + "expected": " }", + "returned": null + }, + { + "line": 370, + "expected": "", + "returned": null + }, + { + "line": 371, + "expected": " observeState()", + "returned": null + }, + { + "line": 372, + "expected": " const unsubscribe = outerSubscribe(observeState)", + "returned": null + }, + { + "line": 373, + "expected": " return { unsubscribe }", + "returned": null + }, + { + "line": 374, + "expected": " },", + "returned": null + }, + { + "line": 375, + "expected": "", + "returned": null + }, + { + "line": 376, + "expected": " [$$observable]() {", + "returned": null + }, + { + "line": 377, + "expected": " return this", + "returned": null + }, + { + "line": 378, + "expected": " }", + "returned": null + }, + { + "line": 379, + "expected": " }", + "returned": null + }, + { + "line": 380, + "expected": " }", + "returned": null + }, + { + "line": 381, + "expected": "", + "returned": null + }, + { + "line": 382, + "expected": " // When a store is created, an \"INIT\" action is dispatched so that every", + "returned": null + }, + { + "line": 383, + "expected": " // reducer returns their initial state. This effectively populates", + "returned": null + }, + { + "line": 384, + "expected": " // the initial state tree.", + "returned": null + }, + { + "line": 385, + "expected": " dispatch({ type: ActionTypes.INIT } as A)", + "returned": null + }, + { + "line": 386, + "expected": "", + "returned": null + }, + { + "line": 387, + "expected": " const store = {", + "returned": null + }, + { + "line": 388, + "expected": " dispatch: dispatch as Dispatch,", + "returned": null + }, + { + "line": 389, + "expected": " subscribe,", + "returned": null + }, + { + "line": 390, + "expected": " getState,", + "returned": null + }, + { + "line": 391, + "expected": " replaceReducer,", + "returned": null + }, + { + "line": 392, + "expected": " [$$observable]: observable", + "returned": null + }, + { + "line": 393, + "expected": " } as unknown as Store & Ext", + "returned": null + }, + { + "line": 394, + "expected": " return store", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 1785, + "neighborWireBytes": 1897, + "returnedMembershipRows": 2, + "windows": [ + { + "file": "src/createStore.ts", + "startLine": 152, + "lastReturnedLine": 269, + "sourceBytes": 4521, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 270, + "lastReturnedLine": 365, + "sourceBytes": 3479, + "partial": true + } + ], + "omittedGroups": 0, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "explicitNativeFacts": 0 + }, + { + "repository": "walkdir", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "walkdir-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "walkdir-2", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 901, + "expected": " fn push(&mut self, dent: &DirEntry) -> Result<()> {", + "returned": null + }, + { + "line": 902, + "expected": " // Make room for another open file descriptor if we've hit the max.", + "returned": null + }, + { + "line": 903, + "expected": " let free =", + "returned": null + }, + { + "line": 904, + "expected": " self.stack_list.len().checked_sub(self.oldest_opened).unwrap();", + "returned": null + }, + { + "line": 905, + "expected": " if free == self.opts.max_open {", + "returned": null + }, + { + "line": 906, + "expected": " self.stack_list[self.oldest_opened].close();", + "returned": null + }, + { + "line": 907, + "expected": " }", + "returned": null + }, + { + "line": 908, + "expected": " // Open a handle to reading the directory's entries.", + "returned": null + }, + { + "line": 909, + "expected": " let rd = fs::read_dir(dent.path()).map_err(|err| {", + "returned": null + }, + { + "line": 910, + "expected": " Some(Error::from_path(self.depth, dent.path().to_path_buf(), err))", + "returned": null + }, + { + "line": 911, + "expected": " });", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "walkdir-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 961, + "expected": " fn follow(&self, mut dent: DirEntry) -> Result {", + "returned": null + }, + { + "line": 962, + "expected": " dent =", + "returned": null + }, + { + "line": 963, + "expected": " DirEntry::from_path(self.depth, dent.path().to_path_buf(), true)?;", + "returned": null + }, + { + "line": 964, + "expected": " // The only way a symlink can cause a loop is if it points", + "returned": null + }, + { + "line": 965, + "expected": " // to a directory. Otherwise, it always points to a leaf", + "returned": null + }, + { + "line": 966, + "expected": " // and we can omit any loop checks.", + "returned": null + }, + { + "line": 967, + "expected": " if dent.is_dir() {", + "returned": null + }, + { + "line": 968, + "expected": " self.check_loop(dent.path())?;", + "returned": null + }, + { + "line": 969, + "expected": " }", + "returned": null + }, + { + "line": 970, + "expected": " Ok(dent)", + "returned": null + }, + { + "line": 971, + "expected": " }", + "returned": null + }, + { + "line": 972, + "expected": "", + "returned": null + }, + { + "line": 973, + "expected": " fn check_loop>(&self, child: P) -> Result<()> {", + "returned": null + }, + { + "line": 974, + "expected": " let hchild = Handle::from_path(&child)", + "returned": null + }, + { + "line": 975, + "expected": " .map_err(|err| Error::from_io(self.depth, err))?;", + "returned": null + }, + { + "line": 976, + "expected": " for ancestor in self.stack_path.iter().rev() {", + "returned": null + }, + { + "line": 977, + "expected": " let is_same = ancestor", + "returned": null + }, + { + "line": 978, + "expected": " .is_same(&hchild)", + "returned": null + }, + { + "line": 979, + "expected": " .map_err(|err| Error::from_io(self.depth, err))?;", + "returned": null + }, + { + "line": 980, + "expected": " if is_same {", + "returned": null + }, + { + "line": 981, + "expected": " return Err(Error::from_loop(", + "returned": null + }, + { + "line": 982, + "expected": " self.depth,", + "returned": null + }, + { + "line": 983, + "expected": " &ancestor.path,", + "returned": null + }, + { + "line": 984, + "expected": " child.as_ref(),", + "returned": null + }, + { + "line": 985, + "expected": " ));", + "returned": null + }, + { + "line": 986, + "expected": " }", + "returned": null + }, + { + "line": 987, + "expected": " }", + "returned": null + }, + { + "line": 988, + "expected": " Ok(())", + "returned": null + }, + { + "line": 989, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "walkdir-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 873, + "expected": " }", + "returned": null + }, + { + "line": 874, + "expected": " if is_normal_dir && self.opts.contents_first {", + "returned": null + }, + { + "line": 875, + "expected": " self.deferred_dirs.push(dent);", + "returned": null + }, + { + "line": 876, + "expected": " None", + "returned": null + }, + { + "line": 877, + "expected": " } else if self.skippable() {", + "returned": null + }, + { + "line": 878, + "expected": " None", + "returned": null + }, + { + "line": 879, + "expected": " } else {", + "returned": null + }, + { + "line": 880, + "expected": " Some(Ok(dent))", + "returned": null + }, + { + "line": 881, + "expected": " }", + "returned": null + }, + { + "line": 882, + "expected": " }", + "returned": null + }, + { + "line": 883, + "expected": "", + "returned": null + }, + { + "line": 884, + "expected": " fn get_deferred_dir(&mut self) -> Option {", + "returned": null + }, + { + "line": 885, + "expected": " if self.opts.contents_first {", + "returned": null + }, + { + "line": 886, + "expected": " if self.depth < self.deferred_dirs.len() {", + "returned": null + }, + { + "line": 887, + "expected": " // Unwrap is safe here because we've guaranteed that", + "returned": null + }, + { + "line": 888, + "expected": " // `self.deferred_dirs.len()` can never be less than 1", + "returned": null + }, + { + "line": 889, + "expected": " let deferred: DirEntry = self", + "returned": null + }, + { + "line": 890, + "expected": " .deferred_dirs", + "returned": null + }, + { + "line": 891, + "expected": " .pop()", + "returned": null + }, + { + "line": 892, + "expected": " .expect(\"BUG: deferred_dirs should be non-empty\");", + "returned": null + }, + { + "line": 893, + "expected": " if !self.skippable() {", + "returned": null + }, + { + "line": 894, + "expected": " return Some(deferred);", + "returned": null + }, + { + "line": 895, + "expected": " }", + "returned": null + }, + { + "line": 896, + "expected": " }", + "returned": null + }, + { + "line": 897, + "expected": " }", + "returned": null + }, + { + "line": 898, + "expected": " None", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 4237, + "neighborWireBytes": 44444, + "returnedMembershipRows": 20, + "windows": [ + { + "file": "src/lib.rs", + "startLine": 568, + "lastReturnedLine": 572, + "sourceBytes": 167, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 573, + "lastReturnedLine": 578, + "sourceBytes": 348, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 579, + "lastReturnedLine": 585, + "sourceBytes": 253, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 586, + "lastReturnedLine": 590, + "sourceBytes": 283, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 591, + "lastReturnedLine": 593, + "sourceBytes": 135, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 594, + "lastReturnedLine": 597, + "sourceBytes": 207, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 598, + "lastReturnedLine": 604, + "sourceBytes": 318, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 605, + "lastReturnedLine": 679, + "sourceBytes": 2788, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 680, + "lastReturnedLine": 686, + "sourceBytes": 273, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 687, + "lastReturnedLine": 776, + "sourceBytes": 3228, + "partial": true + } + ], + "omittedGroups": 10, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "explicitNativeFacts": 0 + }, + { + "repository": "walkdir", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "walkdir-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + }, + { + "fact": "walkdir-2", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 902, + "expected": " // Make room for another open file descriptor if we've hit the max.", + "returned": " // Make room for another open file descriptor if we" + }, + { + "line": 903, + "expected": " let free =", + "returned": null + }, + { + "line": 904, + "expected": " self.stack_list.len().checked_sub(self.oldest_opened).unwrap();", + "returned": null + }, + { + "line": 905, + "expected": " if free == self.opts.max_open {", + "returned": null + }, + { + "line": 906, + "expected": " self.stack_list[self.oldest_opened].close();", + "returned": null + }, + { + "line": 907, + "expected": " }", + "returned": null + }, + { + "line": 908, + "expected": " // Open a handle to reading the directory's entries.", + "returned": null + }, + { + "line": 909, + "expected": " let rd = fs::read_dir(dent.path()).map_err(|err| {", + "returned": null + }, + { + "line": 910, + "expected": " Some(Error::from_path(self.depth, dent.path().to_path_buf(), err))", + "returned": null + }, + { + "line": 911, + "expected": " });", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "walkdir-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 961, + "expected": " fn follow(&self, mut dent: DirEntry) -> Result {", + "returned": null + }, + { + "line": 962, + "expected": " dent =", + "returned": null + }, + { + "line": 963, + "expected": " DirEntry::from_path(self.depth, dent.path().to_path_buf(), true)?;", + "returned": null + }, + { + "line": 964, + "expected": " // The only way a symlink can cause a loop is if it points", + "returned": null + }, + { + "line": 965, + "expected": " // to a directory. Otherwise, it always points to a leaf", + "returned": null + }, + { + "line": 966, + "expected": " // and we can omit any loop checks.", + "returned": null + }, + { + "line": 967, + "expected": " if dent.is_dir() {", + "returned": null + }, + { + "line": 968, + "expected": " self.check_loop(dent.path())?;", + "returned": null + }, + { + "line": 969, + "expected": " }", + "returned": null + }, + { + "line": 970, + "expected": " Ok(dent)", + "returned": null + }, + { + "line": 971, + "expected": " }", + "returned": null + }, + { + "line": 972, + "expected": "", + "returned": null + }, + { + "line": 973, + "expected": " fn check_loop>(&self, child: P) -> Result<()> {", + "returned": null + }, + { + "line": 974, + "expected": " let hchild = Handle::from_path(&child)", + "returned": null + }, + { + "line": 975, + "expected": " .map_err(|err| Error::from_io(self.depth, err))?;", + "returned": null + }, + { + "line": 976, + "expected": " for ancestor in self.stack_path.iter().rev() {", + "returned": null + }, + { + "line": 977, + "expected": " let is_same = ancestor", + "returned": null + }, + { + "line": 978, + "expected": " .is_same(&hchild)", + "returned": null + }, + { + "line": 979, + "expected": " .map_err(|err| Error::from_io(self.depth, err))?;", + "returned": null + }, + { + "line": 980, + "expected": " if is_same {", + "returned": null + }, + { + "line": 981, + "expected": " return Err(Error::from_loop(", + "returned": null + }, + { + "line": 982, + "expected": " self.depth,", + "returned": null + }, + { + "line": 983, + "expected": " &ancestor.path,", + "returned": null + }, + { + "line": 984, + "expected": " child.as_ref(),", + "returned": null + }, + { + "line": 985, + "expected": " ));", + "returned": null + }, + { + "line": 986, + "expected": " }", + "returned": null + }, + { + "line": 987, + "expected": " }", + "returned": null + }, + { + "line": 988, + "expected": " Ok(())", + "returned": null + }, + { + "line": 989, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "walkdir-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Every literal source witness is returned." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 1336, + "neighborWireBytes": 1448, + "returnedMembershipRows": 11, + "windows": [ + { + "file": "src/lib.rs", + "startLine": 687, + "lastReturnedLine": 780, + "sourceBytes": 3391, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 781, + "lastReturnedLine": 832, + "sourceBytes": 1974, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 833, + "lastReturnedLine": 839, + "sourceBytes": 175, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 840, + "lastReturnedLine": 883, + "sourceBytes": 1732, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 884, + "lastReturnedLine": 900, + "sourceBytes": 613, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 901, + "lastReturnedLine": 902, + "sourceBytes": 115, + "partial": true + } + ], + "omittedGroups": 5, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "explicitNativeFacts": 0 + } + ], + "identityChecks": { + "defaultResolverResponsesUnchanged": 10, + "unchangedPriorNeighborAndWindowControls": [ + { + "repository": "chi", + "tool": "compass" + }, + { + "repository": "chi", + "tool": "graphify" + }, + { + "repository": "click", + "tool": "compass" + }, + { + "repository": "click", + "tool": "graphify" + }, + { + "repository": "jsoup", + "tool": "compass" + }, + { + "repository": "jsoup", + "tool": "graphify" + }, + { + "repository": "redux", + "tool": "graphify" + }, + { + "repository": "walkdir", + "tool": "compass" + }, + { + "repository": "walkdir", + "tool": "graphify" + } + ], + "newReduxEndpoint": { + "id": "sha256:ceae4b39dd8902b6888096a1827ee67422d04d3c19d527d674ec740c3e903785", + "kind": "function", + "file": "src/createStore.ts", + "line": 86, + "sourceDeclaration": "export function createStore<" + }, + "negativeControls": "Without the explicit function kind, exact Redux lookup returns both the declaration and its coincident export record. A nonexistent declaration line returns no match with complete execution. No binding is silently discarded.", + "sourceKinds": "Pinned source declaration lines were checked for Mux struct, _AtomicFile class, Cleaner class, createStore function and IntoIter struct. Graphify get_node does not accept the kind filter; its returned identity is checked against the same supplied constraints after capture.", + "publicCallsVerified": 32, + "sourceWindowPolicyFunctionHashes": { + "anchors": "b49ff9fc521d4eecfae2987fd3706b461c09a0dbb5161693afa67aa32ab3424a", + "windows": "b39fbb5cf512a35b2ea4385fcc857f29118506057c728a529b869ae4b70abeb5" + } + }, + "comparison": { + "priorUnscopedWindowControl": { + "compass": 11, + "graphify": 15, + "facts": 20 + }, + "newConstrainedWindowControl": { + "compass": 14, + "graphify": 15, + "facts": 20 + }, + "delta": "Three newly supported Redux facts: enhancer behavior, dispatch state/reentrancy, and listener snapshot/unsubscribe semantics. Earlier parameter anchors also expose the enhancer body. Observable/store API code remains beyond the source budget.", + "remainingGap": "Compass trails Graphify by one total fact: Graphify gains jsoup attribute-copy and WalkDir deferred-directory evidence; Compass gains Redux enhancer evidence. Both miss other facts.", + "noAggregation": "Explicit file, declaration line and kind are supplied task constraints in this new arm. Do not retroactively replace the old unresolved result or combine this score with native source-member/declaration arms." + }, + "validation": { + "baseCommit": "2ef40e95ca45972f92696cc5d427c8e9808476dd", + "sourceSha256": { + "crates/compass-output/src/agent_query.rs": "8fc6f67d56f17c3298a4752a0ab7b7f5fca2eea3ca4868536c2f13f5d2edb300", + "crates/compass-output/tests/agent_query.rs": "19ddf5eb5f5fc4c06257b3219317789c77bb9d042aed2e986845be93e23d2562", + "crates/compass-query/src/code_query.rs": "9af2f720b1b5d6962482073d29547c049ec8480500049c9c74ae565a85921800", + "crates/compass-query/src/lib.rs": "982a3bd5c8213556d04454b8bd08f2c7a2c61f516ea0639bc3f92b4279ee08e6", + "crates/compass-query/tests/code_search.rs": "f14342daacc57ada5d496f4b4baf565bff8c5f232a93324d5b0782accf1a2796", + "crates/compass-cli/src/code_query_commands.rs": "a0820b81ea78212cdc0dca0d88f66c3ee8be89fe7afd168526323194b8a8c0d6", + "crates/compass-cli/src/help.rs": "a4ba97efbbaa3d6d8a6a4c2883f9d07615ba7324602fd56040ded958cacd3edc", + "crates/compass-cli/tests/code_query_cli.rs": "1690034e88dbdcbd024f755d360f1eebba17d3db87dd688f62b69077ec544fb8", + "crates/compass-mcp/src/code_query.rs": "24e676846d0d8a6a158a0417fe3248bfa76dc1fde7f166deb4bfd2373f011d6d", + "crates/compass-mcp/src/lib.rs": "837fcc126e236be64611bf58ac08b82fd683fd7d667aa5b5ef1df2f98614f6bb", + "crates/compass-mcp/tests/code_query_tools.rs": "74f1a9d4e14468761e0b08395e37e36ff323e00bc35bfb50f659211c5fff259b" + }, + "steps": [ + { + "name": "fmt", + "argv": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "seconds": 3.81 + }, + { + "name": "query-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-query", + "--test", + "code_search", + "--test", + "store_engine", + "--test", + "export_binding_resolution", + "--locked" + ], + "exitCode": 0, + "seconds": 18.39 + }, + { + "name": "output-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-output", + "--test", + "agent_query", + "--locked" + ], + "exitCode": 0, + "seconds": 0.65 + }, + { + "name": "cli-query-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "code_query_cli", + "--locked" + ], + "exitCode": 0, + "seconds": 2.85 + }, + { + "name": "mcp-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-mcp", + "--locked" + ], + "exitCode": 0, + "seconds": 26.07 + }, + { + "name": "clippy", + "argv": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 43.66 + }, + { + "name": "workspace-tests", + "argv": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "seconds": 98.44 + }, + { + "name": "product-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "seconds": 14.83 + }, + { + "name": "product-boundary", + "argv": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "seconds": 0.04 + }, + { + "name": "build", + "argv": [ + "cargo", + "build", + "--locked", + "-p", + "compass-cli", + "--bin", + "compass" + ], + "exitCode": 0, + "seconds": 0.39 + } + ] + }, + "testCounts": { + "product-tests-final.log": { + "passed": 9, + "failed": 0, + "ignored": 0 + }, + "workspace-tests-final.log": { + "passed": 1106, + "failed": 0, + "ignored": 2 + }, + "mcp-tests-final.log": { + "passed": 61, + "failed": 0, + "ignored": 0 + }, + "cli-query-tests-final.log": { + "passed": 41, + "failed": 0, + "ignored": 0 + }, + "output-tests-final.log": { + "passed": 20, + "failed": 0, + "ignored": 0 + }, + "query-tests-final.log": { + "passed": 37, + "failed": 0, + "ignored": 0 + } + }, + "validationScope": "Formatting, targeted query/backend/export-binding suites, output contract suite, CLI suite, full MCP suite, workspace Clippy and lib/bin tests, product tests, product boundary, and CLI build passed. JS/viewer and extraction/publication qualification not rerun: these surfaces are unchanged. Shared Python benchmark modules unchanged; external collector/verifier completed.", + "reproductions": [ + "Attempt 01 failed to compile a new test fixture using edges instead of links; corrected.", + "Attempt 02 rejected the new fixture because its other.rs file record was missing; corrected.", + "Attempt 03 exposed a new exact-mode response bug: node bounds left excess hits. Candidate truncation now happens before projecting both nodes and hits.", + "Attempt 04 CLI test incorrectly expected raw diagnostic prose in the compact text formatter; changed assertion to its documented bounded_truncation status.", + "Attempts 05/06 exposed an Agent View failure on empty truncated search: it attempted no_match without evidence of absence. It now preserves unknown match/partial execution and passes regression coverage. The legacy MCP error assertion also needed its documented Error prefix.", + "Attempt 07 focused output/query/CLI/MCP checks pass; attempt 08 records the final unchanged-source validation and repository capture." + ], + "artifacts": { + "exact-symbol-01/focused.py": "ae34625de3762e955494d54d97933bc1caf7f4a0f6b7af64212f2606c4591d70", + "exact-symbol-01/query.log": "cf3347ab792464520b0c6c3860af2195788b8ca216be1ddaa3a0904079396602", + "exact-symbol-02/focused.py": "ae34625de3762e955494d54d97933bc1caf7f4a0f6b7af64212f2606c4591d70", + "exact-symbol-02/query.log": "4a791e31e736be06d8f5b4456202935eab61f85ccdb7be3f8b4582306a7ff3a2", + "exact-symbol-03/focused.py": "ae34625de3762e955494d54d97933bc1caf7f4a0f6b7af64212f2606c4591d70", + "exact-symbol-03/query.log": "70df33567d79460f86fb38428f9dd1501022d4333a643d845b7564c73138cf4c", + "exact-symbol-04/cli.log": "17085d17fd7b5b8ec2fadf5e028ad6ceb223c885490e831b296dc270038a1f92", + "exact-symbol-04/focused.py": "ae34625de3762e955494d54d97933bc1caf7f4a0f6b7af64212f2606c4591d70", + "exact-symbol-04/query.log": "9b9182b7f2b77f876380fa4b1ff85489e4fb0179c307f537603fc58980143b79", + "exact-symbol-05/cli.log": "580a27c6fdb11e8732eae5c5a7aa6031a8133bda72e290289d5aa847d78b7a4d", + "exact-symbol-05/collect.py": "44fc18ff82318dd82b3de106d4a8c8bc55f2d882eb8badf5e1699c43493fb8bd", + "exact-symbol-05/focused.py": "ae34625de3762e955494d54d97933bc1caf7f4a0f6b7af64212f2606c4591d70", + "exact-symbol-05/mcp.log": "93b3fa40d7aeaddb6fe40eff1ffd607d5da5dee5c3240a148bd16496fff82f37", + "exact-symbol-05/query.log": "a9ea5a790ac1e192a5da9333a6e93a5461703aaf29ee6147d28502b919401d15", + "exact-symbol-05/validate.py": "f054b50fedf61cab3e5600318486c8dc82a0d09f96815b8ba65d69a124a42020", + "exact-symbol-05/verify_capture.py": "ee23ac7674d87dec92a01b3e8e244ac6957f6e3473dc718832c51d9394182168", + "exact-symbol-05/window_policy.py": "b81cd0a57472dfe74a41eff8ee70dd8492fcf627f255f9c5dc88877628d94b94", + "exact-symbol-06/focused.py": "1e9010ccd6a59666c9694c60c945ae653b189bb2c2b06019565387823ab76530", + "exact-symbol-06/mcp.log": "f9a4f08a714331df18a3503c2aba60833de8ff1de6d00b9e0759433b62433067", + "exact-symbol-07/cli.log": "6a2111eba9eaea4083ef90a0089c039aabdbcfed119e49d5688e7f6d6bd2f994", + "exact-symbol-07/focused.py": "06df8a5d7969a49bbcac09f3e71feac96d836305b8c2009b69ccbbbb31c16b54", + "exact-symbol-07/mcp.log": "eabd86c386033baa83387b6470948adb99e65b0e242d0ce4319ed877fb4ca0b2", + "exact-symbol-07/output.log": "f35fa7bc346afa0677067d4fb9b9cc443dbc586367074811026ef0f963b5f61a", + "exact-symbol-07/query.log": "b4861ddcd537e02b5c63dfccdeaaff3b621337373b7f447df0c13efd073c291a", + "exact-symbol-08/build-final.log": "9e016f5f155581ff3875df43030558b9deaf182b9be48c4c84b52b9bf783046b", + "exact-symbol-08/capture/capture.json": "4263f8d01ace8a5d7caa3595642115875bdd91c63e5b3a3d03bd12c3abd3c91a", + "exact-symbol-08/capture/collect.py": "44fc18ff82318dd82b3de106d4a8c8bc55f2d882eb8badf5e1699c43493fb8bd", + "exact-symbol-08/capture/community_identity.py": "5bc3d1c574211aa3180a2334fe6c758043f384651948b7077aba3ea879de4503", + "exact-symbol-08/capture/community_navigation.py": "808df1c7b15c8c2afc86ac1ed09dc4f339c98a77d7a7b14eb4866e3da1c8c0f8", + "exact-symbol-08/capture/community_tasks.py": "77f599ff7ee7eebfe4b590fee6c771ecfb3ed475d1944e37bcabc110634d3660", + "exact-symbol-08/capture/exact_symbol_development_registration.json": "78781c22e1357515e9cd4e1093ecabe0fc1263262fae3a4fee1b0bf02a8086f2", + "exact-symbol-08/capture/graphify-mcp-environment.json": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "exact-symbol-08/capture/mcp_compare.py": "d23f093a1300fcf825457f917694097f0f8b8dc8ee8d671946032f5e4e89a5dc", + "exact-symbol-08/capture/mcp_transport.py": "daaad69c554f824a1df94f0ef93cb9d4c6e9b4f4b712d1611323d524e10d44ee", + "exact-symbol-08/capture/raw/chi/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/chi/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "exact-symbol-08/capture/raw/chi/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/chi/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/chi/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "exact-symbol-08/capture/raw/chi/compass/mcp/04.request.json": "b825c94e647e210dbf316cbbd7220d9e0fd22ffb58190d125770ee341c9eeb4c", + "exact-symbol-08/capture/raw/chi/compass/mcp/04.response.jsonl": "9592fe0f5e3501858b96e73f166bfb9abfa98fc0cfeaeff911ff5b9deb383871", + "exact-symbol-08/capture/raw/chi/compass/mcp/05.request.json": "e71b68a06dc19edf7714aa8da45ecc4f622709859ed76f8abde1a264eac6cab0", + "exact-symbol-08/capture/raw/chi/compass/mcp/05.response.jsonl": "34457c5e5dde851a97ba147dcf47065d3bf30d45af44898c0360d9568c79eb7a", + "exact-symbol-08/capture/raw/chi/compass/mcp/06.request.json": "d554a89dd893efe9555f85df9574d29a28a43a1e3281df8d114c81883d7a8412", + "exact-symbol-08/capture/raw/chi/compass/mcp/06.response.jsonl": "ffeb9c96e595a85c958c528bce6f050c7734aedcbbc771cb147daae1705bf713", + "exact-symbol-08/capture/raw/chi/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/chi/compass/windows/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "exact-symbol-08/capture/raw/chi/compass/windows/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "exact-symbol-08/capture/raw/chi/compass/windows/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "exact-symbol-08/capture/raw/chi/compass/windows/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "exact-symbol-08/capture/raw/chi/compass/windows/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "exact-symbol-08/capture/raw/chi/compass/windows/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "exact-symbol-08/capture/raw/chi/compass/windows/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "exact-symbol-08/capture/raw/chi/compass/windows/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "exact-symbol-08/capture/raw/chi/compass/windows/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "exact-symbol-08/capture/raw/chi/compass/windows/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "exact-symbol-08/capture/raw/chi/compass/windows/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "exact-symbol-08/capture/raw/chi/compass/windows/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "exact-symbol-08/capture/raw/chi/compass/windows/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "exact-symbol-08/capture/raw/chi/compass/windows/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "exact-symbol-08/capture/raw/chi/compass/windows/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "exact-symbol-08/capture/raw/chi/compass/windows/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "exact-symbol-08/capture/raw/chi/compass/windows/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "exact-symbol-08/capture/raw/chi/compass/windows/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "exact-symbol-08/capture/raw/chi/compass/windows/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "exact-symbol-08/capture/raw/chi/compass/windows/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "exact-symbol-08/capture/raw/chi/compass/windows/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "exact-symbol-08/capture/raw/chi/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/chi/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "exact-symbol-08/capture/raw/chi/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/chi/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/chi/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "exact-symbol-08/capture/raw/chi/graphify/mcp/04.request.json": "5212851af235eed2bd62a674fa14313ea9a38591a8d706897051badabc911735", + "exact-symbol-08/capture/raw/chi/graphify/mcp/04.response.jsonl": "d4d8b29632b3aae99cc57178a3b6ccb52935ae78e6848569b08c64f60b5a75a8", + "exact-symbol-08/capture/raw/chi/graphify/mcp/05.request.json": "ddcfc95089d296baa8b47c0889d687bd1504bf40ec9477fdd8089bfac9ff8020", + "exact-symbol-08/capture/raw/chi/graphify/mcp/05.response.jsonl": "03e89d1f3c49018cfa685aa8798dd92581aca4364a0fe9c4cb5d3a3e96ec252f", + "exact-symbol-08/capture/raw/chi/graphify/mcp/06.request.json": "f023f938c3a203f59cebf58bab070f7f55b28a6101c05335f1352481ab3516fb", + "exact-symbol-08/capture/raw/chi/graphify/mcp/06.response.jsonl": "f9beb5c0e11adba184464dd20e27d9f5d2cc2d1a080feac6b021de0c8790402f", + "exact-symbol-08/capture/raw/chi/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/chi/graphify/windows/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "exact-symbol-08/capture/raw/chi/graphify/windows/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "exact-symbol-08/capture/raw/chi/graphify/windows/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "exact-symbol-08/capture/raw/chi/graphify/windows/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "exact-symbol-08/capture/raw/chi/graphify/windows/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "exact-symbol-08/capture/raw/chi/graphify/windows/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "exact-symbol-08/capture/raw/chi/graphify/windows/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "exact-symbol-08/capture/raw/chi/graphify/windows/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "exact-symbol-08/capture/raw/chi/graphify/windows/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "exact-symbol-08/capture/raw/chi/graphify/windows/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "exact-symbol-08/capture/raw/chi/graphify/windows/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "exact-symbol-08/capture/raw/chi/graphify/windows/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "exact-symbol-08/capture/raw/chi/graphify/windows/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "exact-symbol-08/capture/raw/chi/graphify/windows/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "exact-symbol-08/capture/raw/chi/graphify/windows/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "exact-symbol-08/capture/raw/chi/graphify/windows/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "exact-symbol-08/capture/raw/chi/graphify/windows/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "exact-symbol-08/capture/raw/chi/graphify/windows/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "exact-symbol-08/capture/raw/chi/graphify/windows/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "exact-symbol-08/capture/raw/chi/graphify/windows/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "exact-symbol-08/capture/raw/chi/graphify/windows/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "exact-symbol-08/capture/raw/click/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/click/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "exact-symbol-08/capture/raw/click/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/click/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/click/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "exact-symbol-08/capture/raw/click/compass/mcp/04.request.json": "60e1587fdef73541c850a02da90047bc38daaaa290ff434dc49c9c764060ff8d", + "exact-symbol-08/capture/raw/click/compass/mcp/04.response.jsonl": "cadf5337b5ecc3d0f07dee4ac5ae685c5ae3d79c38a12ec418083df565fc2016", + "exact-symbol-08/capture/raw/click/compass/mcp/05.request.json": "a5981f00d010433776e9462d29265dd8c1e3f1ddc72acb13bca73b28101f54a8", + "exact-symbol-08/capture/raw/click/compass/mcp/05.response.jsonl": "9288557f654e4e06fa41497700b814650aaa5d059796f455bf083d37c43ce627", + "exact-symbol-08/capture/raw/click/compass/mcp/06.request.json": "6389615d7c92f8d1fff4aa1102e7a6830a879d8861610c9d3b538badd499d48d", + "exact-symbol-08/capture/raw/click/compass/mcp/06.response.jsonl": "13cd279203e5684b0748fffe6e8d3ca66e6fbae34d0ef4a0305408d733b5bbfb", + "exact-symbol-08/capture/raw/click/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/click/compass/windows/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "exact-symbol-08/capture/raw/click/compass/windows/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "exact-symbol-08/capture/raw/click/compass/windows/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "exact-symbol-08/capture/raw/click/compass/windows/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "exact-symbol-08/capture/raw/click/compass/windows/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "exact-symbol-08/capture/raw/click/compass/windows/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "exact-symbol-08/capture/raw/click/compass/windows/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "exact-symbol-08/capture/raw/click/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/click/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "exact-symbol-08/capture/raw/click/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/click/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/click/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "exact-symbol-08/capture/raw/click/graphify/mcp/04.request.json": "4aad9fe4bfc910ea3b74fa2a6bb4335c66ede5da3d24cf48609142507b61a000", + "exact-symbol-08/capture/raw/click/graphify/mcp/04.response.jsonl": "d22730f840576483c14ecb89c933817acf713e534c6a2b8b8a69ecc7e98714a2", + "exact-symbol-08/capture/raw/click/graphify/mcp/05.request.json": "f9283949d9100177a2d60e99bce661f8e92dbe8efc14cb4d3ab3f76c9326b59d", + "exact-symbol-08/capture/raw/click/graphify/mcp/05.response.jsonl": "fd6c5e880f241cf7eaccbadbfe53caaed3e77ef8388bb623c0dc5ec20f54d6a9", + "exact-symbol-08/capture/raw/click/graphify/mcp/06.request.json": "55a8fc30790c83303e0e809c7eb566223055122e5a26c5885071a26ed9850062", + "exact-symbol-08/capture/raw/click/graphify/mcp/06.response.jsonl": "fbc4566d865d13f935a1ce0c1dd6672f04f9387e43c594e05c5e1af88ad2e59d", + "exact-symbol-08/capture/raw/click/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/click/graphify/windows/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "exact-symbol-08/capture/raw/click/graphify/windows/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "exact-symbol-08/capture/raw/click/graphify/windows/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "exact-symbol-08/capture/raw/click/graphify/windows/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "exact-symbol-08/capture/raw/click/graphify/windows/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "exact-symbol-08/capture/raw/click/graphify/windows/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "exact-symbol-08/capture/raw/click/graphify/windows/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/04.request.json": "03209bfedf1902849eed749b636a24bfdf30174b0165a2186c5347a9e86c1ae5", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/04.response.jsonl": "9ccfeea5efe0917876f249b287ed70127e0d87f88ee2021e5c6dc606a8d69bbd", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/05.request.json": "678e71f511deadca622e16348bf9b0037f38612114f2bc92624fcb53b66676e0", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/05.response.jsonl": "116864610383d2d3070dd9dd7bb8eb91a1178ede5f14b90a326175247c3cb70e", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/06.request.json": "f02cf7ee1913dd1d549058f1a4e3200a1cb3753d2dcc2cc9e784020d87d3c831", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/06.response.jsonl": "c365ad586bf53567f59e2451f9505a8e5b8b3deb1ea2f91b8f95e33bab5c8bd1", + "exact-symbol-08/capture/raw/jsoup/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/jsoup/compass/windows/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "exact-symbol-08/capture/raw/jsoup/compass/windows/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "exact-symbol-08/capture/raw/jsoup/compass/windows/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "exact-symbol-08/capture/raw/jsoup/compass/windows/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "exact-symbol-08/capture/raw/jsoup/compass/windows/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "exact-symbol-08/capture/raw/jsoup/compass/windows/005.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "exact-symbol-08/capture/raw/jsoup/compass/windows/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "exact-symbol-08/capture/raw/jsoup/compass/windows/007.source": "c80f32af2fa6b5b37f6a6b6aed035cc318e7d4e6bda0580a428bff234b2ac17a", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/04.request.json": "883da0706262e806f7254d1763f680dbebb7917ab916867d30c4f43b2ae6b8b9", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/04.response.jsonl": "7ac5d473f020a3eef7e5f7aeb277fa5b33784b888f2d83cdb791ee569b66ec11", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/05.request.json": "33b44290f58b057bb67d81ec9e47bca5a6429c9d2d3f4a3cdf19052109786d5a", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/05.response.jsonl": "03ba969917582be251f52502cd8877f5fd9d3efc4206dea7660b64ea5958f4b0", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/06.request.json": "ec9c984810cec2fdfd8633a8ba906c052d12aeef1ba5f16dbed27c511704bcc2", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/06.response.jsonl": "809aa7cb8af3974d0dfbf64410832d5a09f0b729832295984a8565afd46afd83", + "exact-symbol-08/capture/raw/jsoup/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/jsoup/graphify/windows/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "exact-symbol-08/capture/raw/jsoup/graphify/windows/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "exact-symbol-08/capture/raw/jsoup/graphify/windows/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "exact-symbol-08/capture/raw/jsoup/graphify/windows/003.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "exact-symbol-08/capture/raw/jsoup/graphify/windows/004.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "exact-symbol-08/capture/raw/jsoup/graphify/windows/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "exact-symbol-08/capture/raw/jsoup/graphify/windows/006.source": "655f66ae9b5a39084ace665e8c4bc2908062931d8d7a8d4370ae0af6e4792230", + "exact-symbol-08/capture/raw/redux/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/redux/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "exact-symbol-08/capture/raw/redux/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/redux/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/redux/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "exact-symbol-08/capture/raw/redux/compass/mcp/04.request.json": "5de4d816d7e1214748c0029181a97e54e90745c28cdb0dedff21b317636597f6", + "exact-symbol-08/capture/raw/redux/compass/mcp/04.response.jsonl": "b5e13c9bc3a4f5766bd24b5972e5d5803158869444a5c8c4f27afc481a6e3874", + "exact-symbol-08/capture/raw/redux/compass/mcp/05.request.json": "699af445a5be27d04e0061a3a9ec02af4594111a68f2fcd21cbf3ad824a46740", + "exact-symbol-08/capture/raw/redux/compass/mcp/05.response.jsonl": "78b7f2af44f37d40d9c7728bd88fdf1442f0dd59a80427d99afd624fa43ac9dd", + "exact-symbol-08/capture/raw/redux/compass/mcp/06.request.json": "dd5627f790fe07b2458afbac59ef35159101a16e731f958c5a1b5a7dbdf5da78", + "exact-symbol-08/capture/raw/redux/compass/mcp/06.response.jsonl": "0dc3a0e74b4a35ce129be9a1896cc5c00740caaa1e4e89aa7c05ea7f56338b11", + "exact-symbol-08/capture/raw/redux/compass/mcp/07.request.json": "7f325ed609e0b5566f68fc1afa4d56ee6ea4b17b9cf637aa35f2ad87437f4afe", + "exact-symbol-08/capture/raw/redux/compass/mcp/07.response.jsonl": "484d9b3a10f0e3a9a3bef7f38db457640e12463a642efe44a8b063bedf5c20ff", + "exact-symbol-08/capture/raw/redux/compass/mcp/08.request.json": "964bed0361814bdeee4c195a4dbd5636944a020232a5c3228845d7b70b834cb2", + "exact-symbol-08/capture/raw/redux/compass/mcp/08.response.jsonl": "feb194ebac4bb6527224048e08e29446df490d750712dcb097b1e6803649ee95", + "exact-symbol-08/capture/raw/redux/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/redux/compass/windows/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "exact-symbol-08/capture/raw/redux/compass/windows/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "exact-symbol-08/capture/raw/redux/compass/windows/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "exact-symbol-08/capture/raw/redux/compass/windows/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "exact-symbol-08/capture/raw/redux/compass/windows/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "exact-symbol-08/capture/raw/redux/compass/windows/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "exact-symbol-08/capture/raw/redux/compass/windows/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "exact-symbol-08/capture/raw/redux/compass/windows/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "exact-symbol-08/capture/raw/redux/compass/windows/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "exact-symbol-08/capture/raw/redux/compass/windows/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "exact-symbol-08/capture/raw/redux/compass/windows/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "exact-symbol-08/capture/raw/redux/compass/windows/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "exact-symbol-08/capture/raw/redux/compass/windows/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "exact-symbol-08/capture/raw/redux/compass/windows/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "exact-symbol-08/capture/raw/redux/compass/windows/014.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "exact-symbol-08/capture/raw/redux/compass/windows/015.source": "2fa50459f3adaa2c60d3d328d13ddb749207e27feb3c92fe43812e9f2edc01c6", + "exact-symbol-08/capture/raw/redux/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/redux/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "exact-symbol-08/capture/raw/redux/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/redux/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/redux/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "exact-symbol-08/capture/raw/redux/graphify/mcp/04.request.json": "c32cfb2450c017920145bae06b04af6f131c02499e30d987f76daf8e53f1a5e9", + "exact-symbol-08/capture/raw/redux/graphify/mcp/04.response.jsonl": "cba36e66dcc88f9313662b40b072d5c24cf9fbf25310ac3b1c2f4eaebc8e02c6", + "exact-symbol-08/capture/raw/redux/graphify/mcp/05.request.json": "d09ec5f892edc9b5060a5c26c87e8f17c71cbfde6c12d4d531c783009a1571e1", + "exact-symbol-08/capture/raw/redux/graphify/mcp/05.response.jsonl": "1e48f4a2d7cd27755a2d0d75cfde9d97c6556e720ac2e341ad33db57a1529b65", + "exact-symbol-08/capture/raw/redux/graphify/mcp/06.request.json": "cc1a38cf606bc4c2aebb49742322ce284f708e44a3d49246b05d4ecddbb9fd5c", + "exact-symbol-08/capture/raw/redux/graphify/mcp/06.response.jsonl": "121e650b10614f3521ee06ed0a7caff654bf7640d1fba6d6d583de997a08f881", + "exact-symbol-08/capture/raw/redux/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/redux/graphify/windows/000.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "exact-symbol-08/capture/raw/redux/graphify/windows/001.source": "104842ff0af72b77928d0a849bc5aa5e5bf080e95aeca8f8bc0baacd3dd90aa1", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/04.request.json": "6731b10af0227cd2c72027c483067f2f6c66e5132cc795e94c526b2621dce8b4", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/04.response.jsonl": "059aeda7dc5b8db56e899c21607f48a9a155d27af5ad9de59a847b4389947eb3", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/05.request.json": "c529b2d84f61070e4b8e529556ae15058513f80f2e5f95ecaa9d6ba21c7bb2c5", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/05.response.jsonl": "799db45137a079944ca35821d15c2080d77a3933041bec763188dc7960dfee47", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/06.request.json": "351ffaebecafa6ec3d3b75f67301f651bd8235ec0931203df270a33b35c57bcb", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/06.response.jsonl": "8b25fa3d0fc64cadfc4699a6fadbc54a1c780c7e27d8c03dc784faf4f333d016", + "exact-symbol-08/capture/raw/walkdir/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/walkdir/compass/windows/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "exact-symbol-08/capture/raw/walkdir/compass/windows/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "exact-symbol-08/capture/raw/walkdir/compass/windows/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "exact-symbol-08/capture/raw/walkdir/compass/windows/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "exact-symbol-08/capture/raw/walkdir/compass/windows/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "exact-symbol-08/capture/raw/walkdir/compass/windows/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "exact-symbol-08/capture/raw/walkdir/compass/windows/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "exact-symbol-08/capture/raw/walkdir/compass/windows/007.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "exact-symbol-08/capture/raw/walkdir/compass/windows/008.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "exact-symbol-08/capture/raw/walkdir/compass/windows/009.source": "907ef6bd190a9985da364ec084579cacae6b06067d5a3bdfa8d98a2c3256eb9b", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/04.request.json": "ac9506fc18f6f6cf468a46a9e781188b01156b4b7c6ab64ad601ab06640a8c25", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/04.response.jsonl": "2190ecdb65f6a8ba2da85c820eccc0fdd4f5c647cedd341f1d624e1368c0977e", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/05.request.json": "65c2b9b1c1a27b16b80c79f218792a08426c4816c596679d0d57190ece2f87e5", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/05.response.jsonl": "8b3d0bf2593d26ad5f4914c6ca5a2da3d546495d6ad44b659fae6db89f914d98", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/06.request.json": "e0c2889dd22e5bf4dcb7bfbd1988c411c468102dcd3171bccc1839bef002c67b", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/06.response.jsonl": "4414636125991fe30a997d1431d766c61638dd0aacd3de29c97cc6fa11c08d3b", + "exact-symbol-08/capture/raw/walkdir/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/capture/raw/walkdir/graphify/windows/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "exact-symbol-08/capture/raw/walkdir/graphify/windows/001.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "exact-symbol-08/capture/raw/walkdir/graphify/windows/002.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "exact-symbol-08/capture/raw/walkdir/graphify/windows/003.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "exact-symbol-08/capture/raw/walkdir/graphify/windows/004.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "exact-symbol-08/capture/raw/walkdir/graphify/windows/005.source": "b0c0b5e23f7d4cf98d355ff7f08101ea772f51b09b278f51ab7bb66ad2aaf4a6", + "exact-symbol-08/capture/runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "exact-symbol-08/capture/window_policy.py": "b81cd0a57472dfe74a41eff8ee70dd8492fcf627f255f9c5dc88877628d94b94", + "exact-symbol-08/capture.log": "7942afdcda3ed01a7a1d851b7ebb495fcc52bbd2eb3caa938a3c989e7740137c", + "exact-symbol-08/cli-query-tests-final.log": "ced998b6596679b097d1d01b7e617b7d28a5d5acabbe005057d62bed90f82733", + "exact-symbol-08/clippy-final.log": "49ffaeaceeba3d02bf3df5eedbc0408b69a356da5e924d56fba5519fd66a30af", + "exact-symbol-08/collect.py": "44fc18ff82318dd82b3de106d4a8c8bc55f2d882eb8badf5e1699c43493fb8bd", + "exact-symbol-08/fmt-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/mcp-tests-final.log": "97a746b70c66d0335eb132fed03db34c164ecd51efb4adb61bef13e11fc19d7b", + "exact-symbol-08/output-tests-final.log": "5b9f76bf7c3ff9dbf360218e8ea3a64e9c4402249c6a4494ee28f335cbc5c4b1", + "exact-symbol-08/product-boundary-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "exact-symbol-08/product-tests-final.log": "97cfb0fd95e80663cc5a9fb2a98ae5aab534ebc898be1447fe39f75b0b47794f", + "exact-symbol-08/query-tests-final.log": "7bf34bbd052c4f89e78f888ac8df99433ec6072b4d6871c55a7874bfdba9f75b", + "exact-symbol-08/validate.py": "0136921ad1abff40d4049185c31a3709fc09fca560f297829ba603bae308594b", + "exact-symbol-08/validation.json": "e6f433eecccde7fc0e27873fc2fb63d7ecb9479a4c986c1ad09b097fd172b1b7", + "exact-symbol-08/verification.log": "e8c0969f1e23ab63fc159ad1687f368e6ea3064674062e0334a5e15ea8c24e99", + "exact-symbol-08/verified-summary.json": "491b33b8387939ca82d44b6baa32683333689cbdc327183a7894119168f2dee7", + "exact-symbol-08/verify_capture.py": "fe01411d464f9a216e010a44b66706fe85bc0e1de3cf44ec29154186d43a014e", + "exact-symbol-08/window_policy.py": "b81cd0a57472dfe74a41eff8ee70dd8492fcf627f255f9c5dc88877628d94b94", + "exact-symbol-08/workspace-tests-final.log": "14362090d14b3654e0e2efee13379b1337ca0db98fecb6e52bea3eb2006c8bba", + "exact-symbol-08/write_review.py": "8c5c4ea53179bd519fd0eb32128448cce741adebeec3e4e0964e551a056d578f" + }, + "limitations": [ + "Known five-subject development panel; no held-out confirmation or representative precision claim.", + "Same-agent source review with a separate verifier, not independent human adjudication.", + "All 153 returned membership anchors were checked as declaration, binding or property sites; this is not a review of every returned non-membership edge.", + "The shared source policy can include code between anchors, and the tools expose different anchor sets. It is not a best-possible workflow or equal-compute comparison.", + "Exact lookup filters after the bounded name-index read. Names exceeding the candidate limit remain incomplete even if a specific file filter would eventually be unique.", + "No authored responsibility explanations, god-object defect judgments, broad caller/callee precision, longer-walk superiority or universal dominance is established." + ] +} diff --git a/benchmarks/agent_query/explanation_budget_registration.json b/benchmarks/agent_query/explanation_budget_registration.json new file mode 100644 index 000000000..4b1f7398f --- /dev/null +++ b/benchmarks/agent_query/explanation_budget_registration.json @@ -0,0 +1,67 @@ +{ + "schema": "compass.explanation-budget-registration/1", + "baselineCommit": "7b9d46f17f876c4c1414b4c08cdda80aaa07b82c", + "scope": "Previously inspected five-language development panel; budget sensitivity and latest-graph replay, not held-out evidence or authored-answer scoring.", + "sourceQuestions": "benchmarks/agent_query/responsibility_questions_panel_a.json", + "sourceQuestionsSha256": "608314dcd5e0a9e40fc7c6b8dd9d44026ba6a9b001e881fa8504fe44cc1fc7b2", + "tasks": [ + { + "repository": "chi", + "symbol": "Mux", + "file": "mux.go", + "startLine": 21, + "kind": "struct" + }, + { + "repository": "click", + "symbol": "_AtomicFile", + "file": "src/click/_compat.py", + "startLine": 455, + "kind": "class" + }, + { + "repository": "jsoup", + "symbol": "Cleaner", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 43, + "kind": "class" + }, + { + "repository": "redux", + "symbol": "createStore", + "file": "src/createStore.ts", + "startLine": 86, + "kind": "function" + }, + { + "repository": "walkdir", + "symbol": "IntoIter", + "file": "src/lib.rs", + "startLine": 566, + "kind": "struct" + } + ], + "graphRun": "java-state-access-02/run.json", + "graphRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "binary": "java-state-access-02/compass", + "binarySha256": "5f6ff5f9b7b13866fdc7435e7a05888d3a95a0b23636be89cf45bc3478660139", + "priorCapture": "exact-symbol-08/capture/capture.json", + "priorCaptureSha256": "4263f8d01ace8a5d7caa3595642115875bdd91c63e5b3a3d03bd12c3abd3c91a", + "sourceBudgets": [ + 2000, + 4000, + 8000, + 16000, + 32000 + ], + "identityControl": "Both tools receive the same known symbol, repository-relative file, declaration line and expected kind. Compass uses search_symbols exact=true, source_file, start_line, kind with existing limits (256 candidates, 500 nodes, 524288 response bytes). Graphify uses its existing file::symbol get_node; validate returned source identity and source-declaration kind afterward. Do not imply Graphify natively accepts all filters. One call per tool/subject, no retries. Preserve all ambiguity/error/limit outcomes.", + "retrieval": "One public exact resolver and one public get_neighbors request per tool/subject. Membership anchors come only from outgoing contains/method rows in that response. Group equal file/line anchors, sort by file and line, read from each anchor to the next returned anchor in its file; final window ends at min(EOF, start+4096). Cap concatenated raw source bytes by each registered budget. No question, witness, graph-file, name-ranking or source-content selection. Same policy for both tools. No extra calls or retries to improve a score.", + "scoring": "Preserve all 20 facts at every budget. Report literal witness coverage and the prior fixed semantic allowance for click-1 (only class header missing, source identity verified and all other witness lines present). No partial-fact credit. Missing resolver, source, truncation or tool error remains explicit and cannot become a successful empty inventory. Raw source is evidence, never an authored answer.", + "verification": "Check source pins, clean source checkouts, source/graph/binary/package hashes before and after capture; preserve raw MCP calls and bytes. Independently replay window byte offsets and source hashes. Compare the 8000-byte results with the old capture, report every payload/anchor/window change. Publish all five budgets, including ties and losses; retain the historical scores.", + "limitations": [ + "Known development questions and prior misses have been read before choosing these geometric budgets.", + "Equal retained source quotas are not equal compute, context tokens or graph-payload budgets. Report actual source and response bytes.", + "A larger source quota is not a product improvement; no product changes or superior explanation claim follow from this experiment.", + "Full question coverage, semantic correctness, authored answers, god-object judgments and held-out quality remain separate requirements." + ] +} diff --git a/benchmarks/agent_query/explanation_budget_review.json b/benchmarks/agent_query/explanation_budget_review.json new file mode 100644 index 000000000..681bf81b3 --- /dev/null +++ b/benchmarks/agent_query/explanation_budget_review.json @@ -0,0 +1,1536 @@ +{ + "schema": "compass.explanation-budget-review/1", + "registration": "benchmarks/agent_query/explanation_budget_registration.json", + "registrationSha256": "7c59d1338ee3076028d2f32934c22a921786e6eec8cd392658ceb2eefcd37d52", + "registrationCommit": "35cb4aee", + "productCommit": "f2cacfebba15d69a738e7c14694d51320e4e07ba", + "evaluatedBinarySha256": "5f6ff5f9b7b13866fdc7435e7a05888d3a95a0b23636be89cf45bc3478660139", + "scope": "Previously inspected five-language development panel; budget sensitivity and latest-graph replay, not held-out evidence or authored-answer scoring.", + "summary": [ + { + "budget": 2000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 8, + "literalWitnessFacts": 7, + "sourceBytes": 10000 + }, + { + "budget": 2000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 8, + "literalWitnessFacts": 7, + "sourceBytes": 10000 + }, + { + "budget": 4000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 8, + "literalWitnessFacts": 7, + "sourceBytes": 19673 + }, + { + "budget": 4000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 8, + "literalWitnessFacts": 7, + "sourceBytes": 19673 + }, + { + "budget": 8000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 14, + "literalWitnessFacts": 13, + "sourceBytes": 35673 + }, + { + "budget": 8000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 15, + "literalWitnessFacts": 14, + "sourceBytes": 35673 + }, + { + "budget": 16000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 19, + "literalWitnessFacts": 18, + "sourceBytes": 59542 + }, + { + "budget": 16000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 18, + "literalWitnessFacts": 17, + "sourceBytes": 53417 + }, + { + "budget": 32000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 20, + "literalWitnessFacts": 19, + "sourceBytes": 64644 + }, + { + "budget": 32000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 18, + "literalWitnessFacts": 17, + "sourceBytes": 53747 + } + ], + "results": [ + { + "repository": "chi", + "tool": "compass", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-3", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "compass", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-3", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "compass", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "compass", + "budget": 16000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "compass", + "budget": 32000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-3", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-3", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 16000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 32000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 4000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 8000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 16000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 32000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 4000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 8000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 16000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 32000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "jsoup-3" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 16000, + "sourceBytes": 9724, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 32000, + "sourceBytes": 9724, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 16000, + "sourceBytes": 9544, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 32000, + "sourceBytes": 9544, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 16000, + "sourceBytes": 14562, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 32000, + "sourceBytes": 14562, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "redux-1", + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "redux-1", + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "redux-1", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 16000, + "sourceBytes": 8617, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "redux-1", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 32000, + "sourceBytes": 8617, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "redux-1", + "redux-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "walkdir-1", + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "walkdir-1", + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 16000, + "sourceBytes": 16000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "walkdir-3" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 32000, + "sourceBytes": 21102, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "walkdir-2", + "walkdir-3" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 16000, + "sourceBytes": 16000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 32000, + "sourceBytes": 16330, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + } + ], + "publicCalls": 20, + "publicCallCosts": { + "compass": { + "resolver": { + "textBytes": 3039, + "wireResponseBytes": 21983 + }, + "neighbors": { + "textBytes": 33061, + "wireResponseBytes": 372871 + } + }, + "graphify": { + "resolver": { + "textBytes": 619, + "wireResponseBytes": 1094 + }, + "neighbors": { + "textBytes": 6980, + "wireResponseBytes": 7534 + } + } + }, + "historicalComparisons": [ + { + "repository": "chi", + "tool": "compass", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + }, + { + "repository": "chi", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + }, + { + "repository": "click", + "tool": "compass", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + }, + { + "repository": "click", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + }, + { + "repository": "jsoup", + "tool": "compass", + "resolverResponseUnchanged": false, + "neighborResponseUnchanged": false, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + }, + { + "repository": "jsoup", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + }, + { + "repository": "redux", + "tool": "compass", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + }, + { + "repository": "redux", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + }, + { + "repository": "walkdir", + "tool": "compass", + "resolverResponseUnchanged": false, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + }, + { + "repository": "walkdir", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true, + "windowBytesUnchanged": true, + "omittedGroupsUnchanged": true + } + ], + "verification": { + "publicCallsVerified": 20, + "windowArmsVerified": 50, + "membershipAnchorsVerified": 153, + "sourcePinsAndHashesBeforeAfter": true, + "unchanged8000ByteWindowArms": 10, + "previous8000ByteScoresReproduced": true, + "legacy8000BytePolicyReplayed": true, + "benchmarkTests": 187, + "newWindowTests": 11, + "productBoundaryPassed": true + }, + "findings": [ + "The unchanged 8000-byte workflow still yields Compass 14/20 versus Graphify 15/20; Java and Rust field improvements did not improve this membership-only retrieval policy.", + "Both tools tie 8/20 at 2000 and 4000 bytes. Compass reaches 19/20 at 16000 and 20/20 at 32000; Graphify reaches 18/20 at both larger quotas.", + "Compass still misses the WalkDir symlink-loop fact at 16000 bytes. Graphify lacks the Redux enhancer witness before its earliest returned membership anchor and the final store/observable witness beyond the fixed 4096-byte last window. These are limitations of the registered workflow, not proof the tools cannot retrieve that source using other operations.", + "Compass returns substantially larger graph payloads. Higher quota scores also consume more actual source bytes: 64644 versus 53747 at the largest per-subject quota.", + "All membership rows and 8000-byte windows are unchanged. Changed resolver payloads carry graph/view digests for jsoup and WalkDir; jsoup neighbor differences are community metadata and its corresponding serialized-byte requirement. See payload-deltas.json.", + "Full 20/20 witness support does not establish complete answers to the natural-language questions, semantic entailment of unseen callees, independent adjudication, god-object detection or overall superiority." + ], + "limitations": [ + "Known development questions and prior misses have been read before choosing these geometric budgets.", + "Equal retained source quotas are not equal compute, context tokens or graph-payload budgets. Report actual source and response bytes.", + "A larger source quota is not a product improvement; no product changes or superior explanation claim follow from this experiment.", + "Full question coverage, semantic correctness, authored answers, god-object judgments and held-out quality remain separate requirements.", + "The fixed Click class-header allowance contributes one non-literal fact to each tool at each budget; report literal totals alongside source-evidence totals.", + "Reading source between membership anchors can include comments or unrelated declarations. The last-window 4096-byte rule can impose a ceiling even when global quota remains.", + "The evaluator reads and validates all anchor files, including omitted anchors, before selecting windows. Equal retained-byte quotas are not equal disk reads.", + "No Rust, JavaScript, platform or packaging checks were rerun: this change is an audit harness and evidence update, with no product code change." + ], + "artifacts": { + "explanation-budget-01/benchmark-tests.log": "b961c66bc71e45d83631701c53491f62f2c63ac92b6203d5fe2e8abea16b173a", + "explanation-budget-01/capture/capture.json": "c2db3be974793b100dbb183eab35d474b0ed4d6d3c62f85aba6934c326738e0d", + "explanation-budget-01/capture/collect.py": "7c5e857a7f59a145438be7acba1e1df1aa181be2f96fe3f024eb01c64d8b5a65", + "explanation-budget-01/capture/community_identity.py": "5bc3d1c574211aa3180a2334fe6c758043f384651948b7077aba3ea879de4503", + "explanation-budget-01/capture/community_navigation.py": "808df1c7b15c8c2afc86ac1ed09dc4f339c98a77d7a7b14eb4866e3da1c8c0f8", + "explanation-budget-01/capture/community_tasks.py": "77f599ff7ee7eebfe4b590fee6c771ecfb3ed475d1944e37bcabc110634d3660", + "explanation-budget-01/capture/explanation_budget_registration.json": "7c59d1338ee3076028d2f32934c22a921786e6eec8cd392658ceb2eefcd37d52", + "explanation-budget-01/capture/graphify-mcp-environment.json": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "explanation-budget-01/capture/mcp_compare.py": "d23f093a1300fcf825457f917694097f0f8b8dc8ee8d671946032f5e4e89a5dc", + "explanation-budget-01/capture/mcp_transport.py": "daaad69c554f824a1df94f0ef93cb9d4c6e9b4f4b712d1611323d524e10d44ee", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "explanation-budget-01/capture/raw/chi/compass/legacy-8000/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "explanation-budget-01/capture/raw/chi/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/chi/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "explanation-budget-01/capture/raw/chi/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/chi/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/chi/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "explanation-budget-01/capture/raw/chi/compass/mcp/04.request.json": "34232dc4cae123d91883f2efff5f57b566033c899dbfaa93e98c0050c7f62a3c", + "explanation-budget-01/capture/raw/chi/compass/mcp/04.response.jsonl": "7938a7e7afec02546e9bae682eefd8973e7dbccbd446fece89aecbfccdbbdb7d", + "explanation-budget-01/capture/raw/chi/compass/mcp/05.request.json": "350ecbf25523d5f934821418e2b92aa51e54ac60547d2f2ba2787b5aee29c14e", + "explanation-budget-01/capture/raw/chi/compass/mcp/05.response.jsonl": "09b3992280dc91e7c6a9203f46e1c8b994742d81bc4c2f179b3160c2adf3f08a", + "explanation-budget-01/capture/raw/chi/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/020.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/021.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/022.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/023.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/024.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/025.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/026.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/027.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/028.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/029.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/030.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/031.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "explanation-budget-01/capture/raw/chi/compass/windows/16000/032.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "explanation-budget-01/capture/raw/chi/compass/windows/2000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/compass/windows/2000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/compass/windows/2000/002.source": "21c866f0d603e57248e2400aeaf96ff1167fac4310cac372c28986e727c32649", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/020.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/021.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/022.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/023.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/024.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/025.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/026.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/027.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/028.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/029.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/030.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/031.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "explanation-budget-01/capture/raw/chi/compass/windows/32000/032.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/compass/windows/4000/010.source": "18c9e1ec72927bc57f70d271df8bd2a55e9b1dd6852595b02f63ce83430a4883", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "explanation-budget-01/capture/raw/chi/compass/windows/8000/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "explanation-budget-01/capture/raw/chi/graphify/legacy-8000/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "explanation-budget-01/capture/raw/chi/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/chi/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "explanation-budget-01/capture/raw/chi/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/chi/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/chi/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "explanation-budget-01/capture/raw/chi/graphify/mcp/04.request.json": "5212851af235eed2bd62a674fa14313ea9a38591a8d706897051badabc911735", + "explanation-budget-01/capture/raw/chi/graphify/mcp/04.response.jsonl": "d4d8b29632b3aae99cc57178a3b6ccb52935ae78e6848569b08c64f60b5a75a8", + "explanation-budget-01/capture/raw/chi/graphify/mcp/05.request.json": "43b918f02295bb3b8b86531c0b4f139acb79116d408969e2655c76a0601119e3", + "explanation-budget-01/capture/raw/chi/graphify/mcp/05.response.jsonl": "43678e134e41a496da5198713dbc822810d661c9644a5b50fda48dfa6e13b552", + "explanation-budget-01/capture/raw/chi/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/020.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/021.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/022.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/023.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/024.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/025.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/026.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/027.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/028.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/029.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/030.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/031.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "explanation-budget-01/capture/raw/chi/graphify/windows/16000/032.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "explanation-budget-01/capture/raw/chi/graphify/windows/2000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/graphify/windows/2000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/graphify/windows/2000/002.source": "21c866f0d603e57248e2400aeaf96ff1167fac4310cac372c28986e727c32649", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/020.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/021.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/022.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/023.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/024.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/025.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/026.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/027.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/028.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/029.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/030.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/031.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "explanation-budget-01/capture/raw/chi/graphify/windows/32000/032.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/graphify/windows/4000/010.source": "18c9e1ec72927bc57f70d271df8bd2a55e9b1dd6852595b02f63ce83430a4883", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "explanation-budget-01/capture/raw/chi/graphify/windows/8000/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "explanation-budget-01/capture/raw/click/compass/legacy-8000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/compass/legacy-8000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/compass/legacy-8000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/compass/legacy-8000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/compass/legacy-8000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/compass/legacy-8000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/compass/legacy-8000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/click/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/click/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "explanation-budget-01/capture/raw/click/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/click/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/click/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "explanation-budget-01/capture/raw/click/compass/mcp/04.request.json": "e148a7f5170d1a8363e3cbaa97110c53950669de602afcc5ef3fd30d2c60c770", + "explanation-budget-01/capture/raw/click/compass/mcp/04.response.jsonl": "b246a63c4f33e46eed5f15e5789db1bfa54e6ea0eb63c4759a5c4462426d4b21", + "explanation-budget-01/capture/raw/click/compass/mcp/05.request.json": "4c0ad7366492176ab7c2dd6510655cb151eead3831c1217eb92772f9d1eb4bb2", + "explanation-budget-01/capture/raw/click/compass/mcp/05.response.jsonl": "b1cfb966e35d68905b7d7f888a689d58a57d162d738d49355b58e7ec0f1a7eff", + "explanation-budget-01/capture/raw/click/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/click/compass/windows/16000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/compass/windows/16000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/compass/windows/16000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/compass/windows/16000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/compass/windows/16000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/compass/windows/16000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/compass/windows/16000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/click/compass/windows/2000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/compass/windows/2000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/compass/windows/2000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/compass/windows/2000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/compass/windows/2000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/compass/windows/2000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/compass/windows/2000/006.source": "8fa9d06237cf26939e2c2e30c99bff71e0c5bb6e4207fb596e7cf754952e2fb0", + "explanation-budget-01/capture/raw/click/compass/windows/32000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/compass/windows/32000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/compass/windows/32000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/compass/windows/32000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/compass/windows/32000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/compass/windows/32000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/compass/windows/32000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/click/compass/windows/4000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/compass/windows/4000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/compass/windows/4000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/compass/windows/4000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/compass/windows/4000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/compass/windows/4000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/compass/windows/4000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/click/compass/windows/8000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/compass/windows/8000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/compass/windows/8000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/compass/windows/8000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/compass/windows/8000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/compass/windows/8000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/compass/windows/8000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/click/graphify/legacy-8000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/graphify/legacy-8000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/graphify/legacy-8000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/graphify/legacy-8000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/graphify/legacy-8000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/graphify/legacy-8000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/graphify/legacy-8000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/click/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/click/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "explanation-budget-01/capture/raw/click/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/click/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/click/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "explanation-budget-01/capture/raw/click/graphify/mcp/04.request.json": "4aad9fe4bfc910ea3b74fa2a6bb4335c66ede5da3d24cf48609142507b61a000", + "explanation-budget-01/capture/raw/click/graphify/mcp/04.response.jsonl": "d22730f840576483c14ecb89c933817acf713e534c6a2b8b8a69ecc7e98714a2", + "explanation-budget-01/capture/raw/click/graphify/mcp/05.request.json": "faea67c086ba783dd80230e4b0f019e3c07bfef93a31ed288f0f2cec10cc0c03", + "explanation-budget-01/capture/raw/click/graphify/mcp/05.response.jsonl": "b98212f878f04290fcd5c68ab617bd1cff708c7ba1b23dd9d277a584b595bb72", + "explanation-budget-01/capture/raw/click/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/click/graphify/windows/16000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/graphify/windows/16000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/graphify/windows/16000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/graphify/windows/16000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/graphify/windows/16000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/graphify/windows/16000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/graphify/windows/16000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/click/graphify/windows/2000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/graphify/windows/2000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/graphify/windows/2000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/graphify/windows/2000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/graphify/windows/2000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/graphify/windows/2000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/graphify/windows/2000/006.source": "8fa9d06237cf26939e2c2e30c99bff71e0c5bb6e4207fb596e7cf754952e2fb0", + "explanation-budget-01/capture/raw/click/graphify/windows/32000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/graphify/windows/32000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/graphify/windows/32000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/graphify/windows/32000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/graphify/windows/32000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/graphify/windows/32000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/graphify/windows/32000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/click/graphify/windows/4000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/graphify/windows/4000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/graphify/windows/4000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/graphify/windows/4000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/graphify/windows/4000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/graphify/windows/4000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/graphify/windows/4000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/click/graphify/windows/8000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "explanation-budget-01/capture/raw/click/graphify/windows/8000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "explanation-budget-01/capture/raw/click/graphify/windows/8000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "explanation-budget-01/capture/raw/click/graphify/windows/8000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "explanation-budget-01/capture/raw/click/graphify/windows/8000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "explanation-budget-01/capture/raw/click/graphify/windows/8000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "explanation-budget-01/capture/raw/click/graphify/windows/8000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "explanation-budget-01/capture/raw/jsoup/compass/legacy-8000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "explanation-budget-01/capture/raw/jsoup/compass/legacy-8000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/compass/legacy-8000/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/compass/legacy-8000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/compass/legacy-8000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "explanation-budget-01/capture/raw/jsoup/compass/legacy-8000/005.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "explanation-budget-01/capture/raw/jsoup/compass/legacy-8000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "explanation-budget-01/capture/raw/jsoup/compass/legacy-8000/007.source": "c80f32af2fa6b5b37f6a6b6aed035cc318e7d4e6bda0580a428bff234b2ac17a", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/04.request.json": "88321b0cefc99d73f5f5bab430106fa357e7ce37ea60d7273e573f6caf186d36", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/04.response.jsonl": "c88e7e11ddfca95460f1ba73fd91d2ff376914106db214ad87cc62253d4410fc", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/05.request.json": "ff3fcdd774e4493d27f81784e37e91f956cbecc7f07e434c96ec212f96bf2280", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/05.response.jsonl": "875ee5125b384d6f9e66d56e231c491c8959d95014b256f08253ea5a8e483b0a", + "explanation-budget-01/capture/raw/jsoup/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/jsoup/compass/windows/16000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "explanation-budget-01/capture/raw/jsoup/compass/windows/16000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/compass/windows/16000/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/compass/windows/16000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/compass/windows/16000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "explanation-budget-01/capture/raw/jsoup/compass/windows/16000/005.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "explanation-budget-01/capture/raw/jsoup/compass/windows/16000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "explanation-budget-01/capture/raw/jsoup/compass/windows/16000/007.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "explanation-budget-01/capture/raw/jsoup/compass/windows/16000/008.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "explanation-budget-01/capture/raw/jsoup/compass/windows/2000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "explanation-budget-01/capture/raw/jsoup/compass/windows/2000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/compass/windows/2000/002.source": "f001d1fcca3d1fcb243f116312615cc01d807a28d05dfc3cdf4b8b0287ebc490", + "explanation-budget-01/capture/raw/jsoup/compass/windows/32000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "explanation-budget-01/capture/raw/jsoup/compass/windows/32000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/compass/windows/32000/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/compass/windows/32000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/compass/windows/32000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "explanation-budget-01/capture/raw/jsoup/compass/windows/32000/005.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "explanation-budget-01/capture/raw/jsoup/compass/windows/32000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "explanation-budget-01/capture/raw/jsoup/compass/windows/32000/007.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "explanation-budget-01/capture/raw/jsoup/compass/windows/32000/008.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "explanation-budget-01/capture/raw/jsoup/compass/windows/4000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "explanation-budget-01/capture/raw/jsoup/compass/windows/4000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/compass/windows/4000/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/compass/windows/4000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/compass/windows/4000/004.source": "426592e2fb2b4d671f607a34bc6d5eedfe454775ce3304674af04738bdd220a2", + "explanation-budget-01/capture/raw/jsoup/compass/windows/8000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "explanation-budget-01/capture/raw/jsoup/compass/windows/8000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/compass/windows/8000/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/compass/windows/8000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/compass/windows/8000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "explanation-budget-01/capture/raw/jsoup/compass/windows/8000/005.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "explanation-budget-01/capture/raw/jsoup/compass/windows/8000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "explanation-budget-01/capture/raw/jsoup/compass/windows/8000/007.source": "c80f32af2fa6b5b37f6a6b6aed035cc318e7d4e6bda0580a428bff234b2ac17a", + "explanation-budget-01/capture/raw/jsoup/graphify/legacy-8000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/graphify/legacy-8000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/graphify/legacy-8000/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/graphify/legacy-8000/003.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "explanation-budget-01/capture/raw/jsoup/graphify/legacy-8000/004.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "explanation-budget-01/capture/raw/jsoup/graphify/legacy-8000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "explanation-budget-01/capture/raw/jsoup/graphify/legacy-8000/006.source": "655f66ae9b5a39084ace665e8c4bc2908062931d8d7a8d4370ae0af6e4792230", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/04.request.json": "883da0706262e806f7254d1763f680dbebb7917ab916867d30c4f43b2ae6b8b9", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/04.response.jsonl": "7ac5d473f020a3eef7e5f7aeb277fa5b33784b888f2d83cdb791ee569b66ec11", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/05.request.json": "722d113b0a110540d31515b29f0c07c5ef96f04d5bf471ffb26605db2cd493ff", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/05.response.jsonl": "b3f990a6d8fc01f0d15ca9272e7c95e8ad376f2a4dae010105662903f08d3896", + "explanation-budget-01/capture/raw/jsoup/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/16000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/16000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/16000/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/16000/003.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/16000/004.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/16000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/16000/006.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/16000/007.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/2000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/2000/001.source": "88dc87722aeb25b94e9d65aca2fba435de9549e5b610468138f69fad1007f03b", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/32000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/32000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/32000/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/32000/003.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/32000/004.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/32000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/32000/006.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/32000/007.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/4000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/4000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/4000/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/4000/003.source": "92f42d96bb1e12fff294e506bf96320736381f55b60044a2e0fcaa394d7a7e66", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/8000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/8000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/8000/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/8000/003.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/8000/004.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/8000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "explanation-budget-01/capture/raw/jsoup/graphify/windows/8000/006.source": "655f66ae9b5a39084ace665e8c4bc2908062931d8d7a8d4370ae0af6e4792230", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/014.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "explanation-budget-01/capture/raw/redux/compass/legacy-8000/015.source": "2fa50459f3adaa2c60d3d328d13ddb749207e27feb3c92fe43812e9f2edc01c6", + "explanation-budget-01/capture/raw/redux/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/redux/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "explanation-budget-01/capture/raw/redux/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/redux/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/redux/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "explanation-budget-01/capture/raw/redux/compass/mcp/04.request.json": "8803daedf87b9bd35456accb3487cc9e3491a392638e95b56a3d55f8e66f89d5", + "explanation-budget-01/capture/raw/redux/compass/mcp/04.response.jsonl": "f44f175ad81c0379dd06e156a504fb1f3ceb8e31bd4ddf62777feabdc0700b8c", + "explanation-budget-01/capture/raw/redux/compass/mcp/05.request.json": "f14c1893f73d7dc8de473fa0cf98d94ca628c56f486b2eb9f9d3f062f42fc479", + "explanation-budget-01/capture/raw/redux/compass/mcp/05.response.jsonl": "52c6b1012ea90597e06714535dacfd36b80c47132d41501ec6db928751620cc0", + "explanation-budget-01/capture/raw/redux/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/014.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/015.source": "8fdb35987b453edb7790f834259829503f8198d58ef579224df9fd4517da2639", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/016.source": "a953ead67ac621be50be7865aa5126243ba01f2aff770cbe69f1af5549683196", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/017.source": "4757864d63eee59db076a53611238958606303997f9a6275d5aa54a6be06b4a4", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/018.source": "86cf9d28574843366105776ab0a44ee3a3ae791d1f7e090d64d159b6ee1ea3fe", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/019.source": "664104220b590744932c6f2b032be0cd60ae9dc02e32b24841c006400675d5f1", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/020.source": "c4a60c00a9c6b8b4c772f637dae7d21634838abf8b3110018e233fda6dd62b02", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/021.source": "d2e88b5804619ae89b7b5e5a754917fb44638ec1f45fd662c9d5bd8696a9cb7d", + "explanation-budget-01/capture/raw/redux/compass/windows/16000/022.source": "297cd3652a03e447c7e6176c8469bbbe1d8a37b4e06c008db06c77f625e859e9", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "explanation-budget-01/capture/raw/redux/compass/windows/2000/011.source": "1bb164faae3ccfe7de42a98c03dbd69039a01c9cd6741b48f9b017d0d583ddac", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/014.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/015.source": "8fdb35987b453edb7790f834259829503f8198d58ef579224df9fd4517da2639", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/016.source": "a953ead67ac621be50be7865aa5126243ba01f2aff770cbe69f1af5549683196", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/017.source": "4757864d63eee59db076a53611238958606303997f9a6275d5aa54a6be06b4a4", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/018.source": "86cf9d28574843366105776ab0a44ee3a3ae791d1f7e090d64d159b6ee1ea3fe", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/019.source": "664104220b590744932c6f2b032be0cd60ae9dc02e32b24841c006400675d5f1", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/020.source": "c4a60c00a9c6b8b4c772f637dae7d21634838abf8b3110018e233fda6dd62b02", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/021.source": "d2e88b5804619ae89b7b5e5a754917fb44638ec1f45fd662c9d5bd8696a9cb7d", + "explanation-budget-01/capture/raw/redux/compass/windows/32000/022.source": "297cd3652a03e447c7e6176c8469bbbe1d8a37b4e06c008db06c77f625e859e9", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "explanation-budget-01/capture/raw/redux/compass/windows/4000/014.source": "f991a26b534be8084f3b1bb9067c7031357eb3c52bc9adcb9f504010fb133047", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/014.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "explanation-budget-01/capture/raw/redux/compass/windows/8000/015.source": "2fa50459f3adaa2c60d3d328d13ddb749207e27feb3c92fe43812e9f2edc01c6", + "explanation-budget-01/capture/raw/redux/graphify/legacy-8000/000.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "explanation-budget-01/capture/raw/redux/graphify/legacy-8000/001.source": "104842ff0af72b77928d0a849bc5aa5e5bf080e95aeca8f8bc0baacd3dd90aa1", + "explanation-budget-01/capture/raw/redux/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/redux/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "explanation-budget-01/capture/raw/redux/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/redux/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/redux/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "explanation-budget-01/capture/raw/redux/graphify/mcp/04.request.json": "c32cfb2450c017920145bae06b04af6f131c02499e30d987f76daf8e53f1a5e9", + "explanation-budget-01/capture/raw/redux/graphify/mcp/04.response.jsonl": "cba36e66dcc88f9313662b40b072d5c24cf9fbf25310ac3b1c2f4eaebc8e02c6", + "explanation-budget-01/capture/raw/redux/graphify/mcp/05.request.json": "f38f6d67ccd3f8f0281ba3709abeaab237da52011550ad8bd0bd1a9fa035a6b1", + "explanation-budget-01/capture/raw/redux/graphify/mcp/05.response.jsonl": "0ec3d11ad7c82aab1979ae0fe8cd9dc1622478bc3a24e0898627e61b9636769b", + "explanation-budget-01/capture/raw/redux/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/redux/graphify/windows/16000/000.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "explanation-budget-01/capture/raw/redux/graphify/windows/16000/001.source": "207289d44efe42419f6d7493db434d0417b5247dd9b87cd5ce6d3db29f664f7e", + "explanation-budget-01/capture/raw/redux/graphify/windows/2000/000.source": "718759fe6d1d524a045503d49b4d6af5791f62227270ed358a0c8efd1cb2c0e8", + "explanation-budget-01/capture/raw/redux/graphify/windows/32000/000.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "explanation-budget-01/capture/raw/redux/graphify/windows/32000/001.source": "207289d44efe42419f6d7493db434d0417b5247dd9b87cd5ce6d3db29f664f7e", + "explanation-budget-01/capture/raw/redux/graphify/windows/4000/000.source": "6ac89178efb4169df169a238447bcdb738c5a8f6d926212dded707cedc73ea22", + "explanation-budget-01/capture/raw/redux/graphify/windows/8000/000.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "explanation-budget-01/capture/raw/redux/graphify/windows/8000/001.source": "104842ff0af72b77928d0a849bc5aa5e5bf080e95aeca8f8bc0baacd3dd90aa1", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/007.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/008.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "explanation-budget-01/capture/raw/walkdir/compass/legacy-8000/009.source": "907ef6bd190a9985da364ec084579cacae6b06067d5a3bdfa8d98a2c3256eb9b", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/04.request.json": "d339f2ef2ad14a8ba3ccfaeed06102dae89e51ee863ddda562fcef92e1262bd2", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/04.response.jsonl": "28624be871949873b0f55b789ce3549ba5c966eeca09c89ccb526adc0607fa00", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/05.request.json": "75e03f39e5544dca970a2ed6183ee7389eaab84a0edf9b41c9ed3aead0a0b2f5", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/05.response.jsonl": "2b14975c56bdfab6f4d8926511462d5603fc9b83dfffe030cbdb8e6c3b11610f", + "explanation-budget-01/capture/raw/walkdir/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/007.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/008.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/009.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/010.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/011.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/012.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/013.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/014.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/015.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "explanation-budget-01/capture/raw/walkdir/compass/windows/16000/016.source": "6e64bcf58026de82970666d4b4db45e862854dac48782a6034087bc047263137", + "explanation-budget-01/capture/raw/walkdir/compass/windows/2000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "explanation-budget-01/capture/raw/walkdir/compass/windows/2000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "explanation-budget-01/capture/raw/walkdir/compass/windows/2000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "explanation-budget-01/capture/raw/walkdir/compass/windows/2000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "explanation-budget-01/capture/raw/walkdir/compass/windows/2000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "explanation-budget-01/capture/raw/walkdir/compass/windows/2000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "explanation-budget-01/capture/raw/walkdir/compass/windows/2000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "explanation-budget-01/capture/raw/walkdir/compass/windows/2000/007.source": "cbbf1bd40fef95750f8722ee53276dca4d5289613e8082eb030a14236d235ed0", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/007.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/008.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/009.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/010.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/011.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/012.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/013.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/014.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/015.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/016.source": "73920176fac6c226d78800a2c09e7edab016a662796fca44eb64102a7269849e", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/017.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/018.source": "b71caf66004b029b7c98c5f78d373a7c78ab1a9f7b6bfa10a4d6b876f1957af6", + "explanation-budget-01/capture/raw/walkdir/compass/windows/32000/019.source": "d4f9d4bcbdd802b0a3b9865ec683a6a16ae0752470aea7878e9fa03fee02fbea", + "explanation-budget-01/capture/raw/walkdir/compass/windows/4000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "explanation-budget-01/capture/raw/walkdir/compass/windows/4000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "explanation-budget-01/capture/raw/walkdir/compass/windows/4000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "explanation-budget-01/capture/raw/walkdir/compass/windows/4000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "explanation-budget-01/capture/raw/walkdir/compass/windows/4000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "explanation-budget-01/capture/raw/walkdir/compass/windows/4000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "explanation-budget-01/capture/raw/walkdir/compass/windows/4000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "explanation-budget-01/capture/raw/walkdir/compass/windows/4000/007.source": "b01050c7b77958949f0ba035e4783dc6e44688bd1937800531564e275cfb29f6", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/007.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/008.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "explanation-budget-01/capture/raw/walkdir/compass/windows/8000/009.source": "907ef6bd190a9985da364ec084579cacae6b06067d5a3bdfa8d98a2c3256eb9b", + "explanation-budget-01/capture/raw/walkdir/graphify/legacy-8000/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "explanation-budget-01/capture/raw/walkdir/graphify/legacy-8000/001.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "explanation-budget-01/capture/raw/walkdir/graphify/legacy-8000/002.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "explanation-budget-01/capture/raw/walkdir/graphify/legacy-8000/003.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "explanation-budget-01/capture/raw/walkdir/graphify/legacy-8000/004.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "explanation-budget-01/capture/raw/walkdir/graphify/legacy-8000/005.source": "b0c0b5e23f7d4cf98d355ff7f08101ea772f51b09b278f51ab7bb66ad2aaf4a6", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/04.request.json": "ac9506fc18f6f6cf468a46a9e781188b01156b4b7c6ab64ad601ab06640a8c25", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/04.response.jsonl": "2190ecdb65f6a8ba2da85c820eccc0fdd4f5c647cedd341f1d624e1368c0977e", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/05.request.json": "18b4ad53dd232900c7db7d584dd42b068d0d3e27cd663c34c4433b6ad5b89197", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/05.response.jsonl": "ea3873a259a5818f1f61c5cef724df012ca38927954973acd3c2e8ff860c2585", + "explanation-budget-01/capture/raw/walkdir/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/001.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/002.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/003.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/004.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/005.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/006.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/007.source": "73920176fac6c226d78800a2c09e7edab016a662796fca44eb64102a7269849e", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/008.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/009.source": "b71caf66004b029b7c98c5f78d373a7c78ab1a9f7b6bfa10a4d6b876f1957af6", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/16000/010.source": "6200f361738587d8826b72cc779afd1b8d11b135feaa3b98377ead3d14218764", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/2000/000.source": "e9afda558aa648a1626f292d9445290945caf90d6eaf7af24e1a9f32e032118a", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/001.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/002.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/003.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/004.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/005.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/006.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/007.source": "73920176fac6c226d78800a2c09e7edab016a662796fca44eb64102a7269849e", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/008.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/009.source": "b71caf66004b029b7c98c5f78d373a7c78ab1a9f7b6bfa10a4d6b876f1957af6", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/32000/010.source": "d4f9d4bcbdd802b0a3b9865ec683a6a16ae0752470aea7878e9fa03fee02fbea", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/4000/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/4000/001.source": "fb4eb23be72cc1c60225692eb7bf38b91a4aea2f2b830a4ae4c9063b853f37cf", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/8000/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/8000/001.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/8000/002.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/8000/003.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/8000/004.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "explanation-budget-01/capture/raw/walkdir/graphify/windows/8000/005.source": "b0c0b5e23f7d4cf98d355ff7f08101ea772f51b09b278f51ab7bb66ad2aaf4a6", + "explanation-budget-01/capture/runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "explanation-budget-01/capture/source_windows.py": "019561cb6849e4e38f62b0322a1f6a65d73c6f32f15955c1e371c4925e38cf94", + "explanation-budget-01/capture/window_policy.py": "b81cd0a57472dfe74a41eff8ee70dd8492fcf627f255f9c5dc88877628d94b94", + "explanation-budget-01/capture.log": "cd264ee9554666a37bfc20ab8cc45e85980978732d3ca1a9446beb304576538f", + "explanation-budget-01/collect.py": "7c5e857a7f59a145438be7acba1e1df1aa181be2f96fe3f024eb01c64d8b5a65", + "explanation-budget-01/payload-category-check.json": "0d139801d76ba0c462e832238999c52525659bcc0fbce847321f88419f1b38b7", + "explanation-budget-01/payload-deltas.json": "89264b6bd67fcd64cb7bafd41645f624a2ca12c6ac2b0c86615a9c303b7dcbc4", + "explanation-budget-01/product-boundary.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "explanation-budget-01/repeat-verification.log": "0e160a6f599cbcece7c6754fe654b81d0fbbfabb2572020821d2b3e6a006c0cf", + "explanation-budget-01/replay.json": "92cdfeaf21d781cf956f73a9e9eb604a7ed62a6e302b436effccda759a5b8826", + "explanation-budget-01/verification.log": "0e160a6f599cbcece7c6754fe654b81d0fbbfabb2572020821d2b3e6a006c0cf", + "explanation-budget-01/verified-summary.json": "12530435c1ea5c21d0dc93e540868b20cee37f06b295864d568cae9060d97c3f", + "explanation-budget-01/verify.py": "40123dee617836b5ecdd6fa4f1503ee2e38d95a08381d288065623c371385495", + "explanation-budget-01/window_policy.py": "b81cd0a57472dfe74a41eff8ee70dd8492fcf627f255f9c5dc88877628d94b94", + "explanation-budget-01/write_review.py": "4f7c7a11d135ca343104022d48a34f859b5af12bec7bb512bf1abda38dd99fd7" + } +} diff --git a/benchmarks/agent_query/explanation_focus_registration.json b/benchmarks/agent_query/explanation_focus_registration.json new file mode 100644 index 000000000..703eae314 --- /dev/null +++ b/benchmarks/agent_query/explanation_focus_registration.json @@ -0,0 +1,53 @@ +{ + "schema": "compass.explanation-focus-registration/1", + "baselineCommit": "e445c5c6891432c30771a316c48d7ebda331c3ef", + "scope": "Known development questions; additive opt-in member-name focus, not a held-out experiment or a new paired superiority score.", + "sourceQuestions": "benchmarks/agent_query/responsibility_questions_panel_a.json", + "sourceQuestionsSha256": "608314dcd5e0a9e40fc7c6b8dd9d44026ba6a9b001e881fa8504fe44cc1fc7b2", + "tasks": [ + { + "repository": "chi", + "symbol": "Mux", + "file": "mux.go", + "startLine": 21, + "kind": "struct" + }, + { + "repository": "click", + "symbol": "_AtomicFile", + "file": "src/click/_compat.py", + "startLine": 455, + "kind": "class" + }, + { + "repository": "jsoup", + "symbol": "Cleaner", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 43, + "kind": "class" + }, + { + "repository": "redux", + "symbol": "createStore", + "file": "src/createStore.ts", + "startLine": 86, + "kind": "function" + }, + { + "repository": "walkdir", + "symbol": "IntoIter", + "file": "src/lib.rs", + "startLine": 566, + "kind": "struct" + } + ], + "graphRun": "java-state-access-02/run.json", + "graphRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "baselineBinary": "java-state-access-02/compass", + "baselineBinarySha256": "5f6ff5f9b7b13866fdc7435e7a05888d3a95a0b23636be89cf45bc3478660139", + "policy": "Optional --member-focus TEXT with --source-members. Use existing query_terms normalization for TEXT; distinct searchable terms, maximum 32, input maximum 4096 bytes. Score each discovered callable by count of distinct focus terms occurring in its recorded name after existing identifier tokenization and canonical code-token normalization. Rank by descending count then existing source file/byte range/exact ID order. Do not read source to rank, use oracle witnesses, follow calls, collapse overloads, or select between ambiguous roots. Zero matches preserve original source order. Preserve existing discovery, metadata, verification and shared source-byte limits.", + "capture": "Use source-validated exact root IDs from explanation-budget-01 public resolver capture. Run each latest Compass subject with existing --source-members and with --member-focus set to its full unchanged natural-language question. Use --budget 2000 --max-source-bytes 8000 for every invocation. Replay old unfocused behavior against frozen baseline binary. Preserve all 20 facts, source bytes, complete stdout/stderr, hashes, source verification statuses, omitted and unavailable counts. No per-subject focus tuning after results.", + "scoring": "Literal source-witness coverage is primary. Native callable spans omit decorators and may be insufficient. Report all losses and remaining misses; no class-header allowance without the full rest of the witness. Do not combine native member scores with the symmetric public-neighbor source-window control.", + "fairness": "Graphify has no equivalent native member-source/focus flag in the recorded interface. This is a Compass before/after experiment only. Retain the paired 8k control at 14/20 versus 15/20; evaluate any future common focus policy separately on both tools before claiming a paired gain.", + "verification": "Native tests cover later matching members under a small shared budget, zero-match/default equivalence, duplicate terms, camel/snake case, Unicode, deterministic shuffled graph order, ambiguous and stale sources, source read bounds and CLI argument/output contracts. Run native baseline and relevant CLI gates; hash the final binary and unchanged production sources before real captures." +} diff --git a/benchmarks/agent_query/explanation_focus_review.json b/benchmarks/agent_query/explanation_focus_review.json new file mode 100644 index 000000000..ffd663a75 --- /dev/null +++ b/benchmarks/agent_query/explanation_focus_review.json @@ -0,0 +1,2971 @@ +{ + "schema": "compass.explanation-focus-review/1", + "registration": "benchmarks/agent_query/explanation_focus_registration.json", + "registrationSha256": "8287faea7015f865cbea8b5088ef20ca04d10ee1f367724327ac02ce3fa80cc6", + "registrationCommit": "1c80747a", + "productCommit": "293582c38085a195b9a8272c8828196bc3724aaf", + "evaluatedBinarySha256": "e33934b94d1e254ba59906fddece098d8433bf7e31af746e46aac3dfc6744f97", + "scope": "Known development questions; additive opt-in member-name focus, not a held-out experiment or a new paired superiority score.", + "summary": { + "baseline": { + "facts": 20, + "literalWitnessFacts": 5, + "sourceEvidenceFacts": 14, + "sourceBytes": 28129, + "stdoutBytes": 58506, + "verificationBytesCharged": 28636, + "unverifiedSourceExcerpts": 6 + }, + "unfocused": { + "facts": 20, + "literalWitnessFacts": 5, + "sourceEvidenceFacts": 14, + "sourceBytes": 28129, + "stdoutBytes": 58506, + "verificationBytesCharged": 28636, + "unverifiedSourceExcerpts": 6 + }, + "focused": { + "facts": 20, + "literalWitnessFacts": 6, + "sourceEvidenceFacts": 15, + "sourceBytes": 28129, + "stdoutBytes": 60942, + "verificationBytesCharged": 29287, + "unverifiedSourceExcerpts": 6 + } + }, + "results": [ + { + "repository": "chi", + "arm": "baseline", + "focusTerms": [], + "sourceBytes": 8000, + "verificationBytesCharged": 8102, + "stdoutBytes": 18858, + "omittedMembers": 5, + "unavailableMembers": 0, + "truncated": true, + "literalFacts": 3, + "sourceEvidenceFacts": 3, + "members": [ + { + "id": "sha256:0b03f729c4b4c93626eb48b705704c97e8d051ebb76354fdb1028644c0c003f3", + "name": ".ServeHTTP()", + "matchedTerms": [], + "startLine": 63, + "endLine": 92, + "sourceBytes": 1039, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f592c330a46544e8c614e234af51ff29c320c18c021fc1bc1b5410a58761786b", + "name": ".Use()", + "matchedTerms": [], + "startLine": 100, + "endLine": 105, + "sourceBytes": 225, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:b6f4933c875274b7724a57dc037f278cef17603b5a17c0123f74f09c4859ade3", + "name": ".Handle()", + "matchedTerms": [], + "startLine": 109, + "endLine": 117, + "sourceBytes": 268, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:00488c58ae8e3d2aea91ae763f174cddbcbfa1edb9fda7a9650119778dac1272", + "name": ".HandleFunc()", + "matchedTerms": [], + "startLine": 121, + "endLine": 123, + "sourceBytes": 104, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "matchedTerms": [], + "startLine": 127, + "endLine": 133, + "sourceBytes": 233, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "matchedTerms": [], + "startLine": 137, + "endLine": 139, + "sourceBytes": 120, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c68a79f08a92785f7b855336a541459e9fdc62201d4430b22c5a267720fe0e2e", + "name": ".Connect()", + "matchedTerms": [], + "startLine": 143, + "endLine": 145, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7eaf9ccc10f79e519444ce15ca5e733334b9706658f775085bcd446e28339098", + "name": ".Delete()", + "matchedTerms": [], + "startLine": 149, + "endLine": 151, + "sourceBytes": 109, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:cc338ab0fc91b15feee67ab6ef6b5cb5f32500ccb4011e5a672be9f91a09e728", + "name": ".Get()", + "matchedTerms": [], + "startLine": 155, + "endLine": 157, + "sourceBytes": 103, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f6e8a7560084fdf9a66af0e486fd6ceed76e6607c6ede28fdb1bf8c314ed4a19", + "name": ".Head()", + "matchedTerms": [], + "startLine": 161, + "endLine": 163, + "sourceBytes": 105, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:86384a3e1b4355bef88f940fa46a5af66a9ba09309b1555884da609ceabad4b5", + "name": ".Options()", + "matchedTerms": [], + "startLine": 167, + "endLine": 169, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:940225f9f7c63134e90084b0f543639b43293824ada2130d5aa1c37c6e3de01f", + "name": ".Patch()", + "matchedTerms": [], + "startLine": 173, + "endLine": 175, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:4dc5dca620fc82d5378b46e6646c03877017e141daa1474dab9ce69c1d4cfc56", + "name": ".Post()", + "matchedTerms": [], + "startLine": 179, + "endLine": 181, + "sourceBytes": 105, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:af7652f3b85f23544717c7555bffe88a5b3ee1fc645491c1dd5d6fd3e5367bbe", + "name": ".Put()", + "matchedTerms": [], + "startLine": 185, + "endLine": 187, + "sourceBytes": 103, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:e2015cff9c7be8cb29614b5a597580ec714c51b3a9bb8622c8a0c15674b79ade", + "name": ".Query()", + "matchedTerms": [], + "startLine": 191, + "endLine": 193, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:8fb9d62ca6fa95670412c09930734152e8175fa59cb9ba6e74c30eba422ed530", + "name": ".Trace()", + "matchedTerms": [], + "startLine": 197, + "endLine": 199, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:eb197ef3e44ebc05271156e9e59ec93db988e2df4ca08efea5788baa91401518", + "name": ".NotFound()", + "matchedTerms": [], + "startLine": 203, + "endLine": 219, + "sourceBytes": 419, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1ac18c4f1a692f25a73fdc98b240ed310b2c4a6cf5065ffde2524dd41b7a1f78", + "name": ".MethodNotAllowed()", + "matchedTerms": [], + "startLine": 223, + "endLine": 239, + "sourceBytes": 467, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:8b2e84e1fc793772014c2d4ab2775681cef7c9e3f005e37905794d12600d4162", + "name": ".With()", + "matchedTerms": [], + "startLine": 242, + "endLine": 263, + "sourceBytes": 682, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:0ac374940442cf9a4d0a0d3270546ca4b87d036fd9ec4aa8f8e48ca2d49e4407", + "name": ".Group()", + "matchedTerms": [], + "startLine": 268, + "endLine": 274, + "sourceBytes": 106, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:395cabe22892d311ed21d29bf7a01cb9d9d2eb1681c634bfd76121bdcf20b34f", + "name": ".Route()", + "matchedTerms": [], + "startLine": 278, + "endLine": 286, + "sourceBytes": 258, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:29cd93db4ec894393cf257f027b8988a07ee77181191167f3eb2037f2cfdf5be", + "name": ".Mount()", + "matchedTerms": [], + "startLine": 295, + "endLine": 354, + "sourceBytes": 1986, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:0fa43499c8e3e06b415a5fd6585b87c3fd541d6c883379d774c9247edeb94951", + "name": ".Routes()", + "matchedTerms": [], + "startLine": 358, + "endLine": 360, + "sourceBytes": 60, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:2e266536f77bb3848784eb117cb5935bce2575bba587e1653ce1e6f9c056ebef", + "name": ".Middlewares()", + "matchedTerms": [], + "startLine": 363, + "endLine": 365, + "sourceBytes": 67, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f0a27beb5e2a6ff88e563c8dbed4dc6b6a697c1895287734f456edcb78d3ada3", + "name": ".Match()", + "matchedTerms": [], + "startLine": 373, + "endLine": 375, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:b84d22d8b0ff377822bcdc4cb0d4aaf092970f4a85c5e1107b4d09b1592c015d", + "name": ".Find()", + "matchedTerms": [], + "startLine": 382, + "endLine": 408, + "sourceBytes": 537, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1580e9037451fb2ed515953396059772522a762628fd281119ff95ef6389357a", + "name": ".NotFoundHandler()", + "matchedTerms": [], + "startLine": 412, + "endLine": 417, + "sourceBytes": 138, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:6d0c29b15fa70de4383c9685161ae0dea68e92fdbb120770c4a7315e8a2fc10b", + "name": ".MethodNotAllowedHandler()", + "matchedTerms": [], + "startLine": 421, + "endLine": 426, + "sourceBytes": 116, + "truncated": true, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "chi-1", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "chi-2", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "chi-3", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "chi-4", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 476, + 477, + 478, + 479, + 480, + 481, + 482, + 483, + 484, + 485, + 486, + 487, + 488, + 489, + 490, + 491, + 492, + 493 + ] + } + ] + }, + { + "repository": "chi", + "arm": "unfocused", + "focusTerms": [], + "sourceBytes": 8000, + "verificationBytesCharged": 8102, + "stdoutBytes": 18858, + "omittedMembers": 5, + "unavailableMembers": 0, + "truncated": true, + "literalFacts": 3, + "sourceEvidenceFacts": 3, + "members": [ + { + "id": "sha256:0b03f729c4b4c93626eb48b705704c97e8d051ebb76354fdb1028644c0c003f3", + "name": ".ServeHTTP()", + "matchedTerms": [], + "startLine": 63, + "endLine": 92, + "sourceBytes": 1039, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f592c330a46544e8c614e234af51ff29c320c18c021fc1bc1b5410a58761786b", + "name": ".Use()", + "matchedTerms": [], + "startLine": 100, + "endLine": 105, + "sourceBytes": 225, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:b6f4933c875274b7724a57dc037f278cef17603b5a17c0123f74f09c4859ade3", + "name": ".Handle()", + "matchedTerms": [], + "startLine": 109, + "endLine": 117, + "sourceBytes": 268, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:00488c58ae8e3d2aea91ae763f174cddbcbfa1edb9fda7a9650119778dac1272", + "name": ".HandleFunc()", + "matchedTerms": [], + "startLine": 121, + "endLine": 123, + "sourceBytes": 104, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "matchedTerms": [], + "startLine": 127, + "endLine": 133, + "sourceBytes": 233, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "matchedTerms": [], + "startLine": 137, + "endLine": 139, + "sourceBytes": 120, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c68a79f08a92785f7b855336a541459e9fdc62201d4430b22c5a267720fe0e2e", + "name": ".Connect()", + "matchedTerms": [], + "startLine": 143, + "endLine": 145, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7eaf9ccc10f79e519444ce15ca5e733334b9706658f775085bcd446e28339098", + "name": ".Delete()", + "matchedTerms": [], + "startLine": 149, + "endLine": 151, + "sourceBytes": 109, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:cc338ab0fc91b15feee67ab6ef6b5cb5f32500ccb4011e5a672be9f91a09e728", + "name": ".Get()", + "matchedTerms": [], + "startLine": 155, + "endLine": 157, + "sourceBytes": 103, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f6e8a7560084fdf9a66af0e486fd6ceed76e6607c6ede28fdb1bf8c314ed4a19", + "name": ".Head()", + "matchedTerms": [], + "startLine": 161, + "endLine": 163, + "sourceBytes": 105, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:86384a3e1b4355bef88f940fa46a5af66a9ba09309b1555884da609ceabad4b5", + "name": ".Options()", + "matchedTerms": [], + "startLine": 167, + "endLine": 169, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:940225f9f7c63134e90084b0f543639b43293824ada2130d5aa1c37c6e3de01f", + "name": ".Patch()", + "matchedTerms": [], + "startLine": 173, + "endLine": 175, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:4dc5dca620fc82d5378b46e6646c03877017e141daa1474dab9ce69c1d4cfc56", + "name": ".Post()", + "matchedTerms": [], + "startLine": 179, + "endLine": 181, + "sourceBytes": 105, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:af7652f3b85f23544717c7555bffe88a5b3ee1fc645491c1dd5d6fd3e5367bbe", + "name": ".Put()", + "matchedTerms": [], + "startLine": 185, + "endLine": 187, + "sourceBytes": 103, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:e2015cff9c7be8cb29614b5a597580ec714c51b3a9bb8622c8a0c15674b79ade", + "name": ".Query()", + "matchedTerms": [], + "startLine": 191, + "endLine": 193, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:8fb9d62ca6fa95670412c09930734152e8175fa59cb9ba6e74c30eba422ed530", + "name": ".Trace()", + "matchedTerms": [], + "startLine": 197, + "endLine": 199, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:eb197ef3e44ebc05271156e9e59ec93db988e2df4ca08efea5788baa91401518", + "name": ".NotFound()", + "matchedTerms": [], + "startLine": 203, + "endLine": 219, + "sourceBytes": 419, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1ac18c4f1a692f25a73fdc98b240ed310b2c4a6cf5065ffde2524dd41b7a1f78", + "name": ".MethodNotAllowed()", + "matchedTerms": [], + "startLine": 223, + "endLine": 239, + "sourceBytes": 467, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:8b2e84e1fc793772014c2d4ab2775681cef7c9e3f005e37905794d12600d4162", + "name": ".With()", + "matchedTerms": [], + "startLine": 242, + "endLine": 263, + "sourceBytes": 682, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:0ac374940442cf9a4d0a0d3270546ca4b87d036fd9ec4aa8f8e48ca2d49e4407", + "name": ".Group()", + "matchedTerms": [], + "startLine": 268, + "endLine": 274, + "sourceBytes": 106, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:395cabe22892d311ed21d29bf7a01cb9d9d2eb1681c634bfd76121bdcf20b34f", + "name": ".Route()", + "matchedTerms": [], + "startLine": 278, + "endLine": 286, + "sourceBytes": 258, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:29cd93db4ec894393cf257f027b8988a07ee77181191167f3eb2037f2cfdf5be", + "name": ".Mount()", + "matchedTerms": [], + "startLine": 295, + "endLine": 354, + "sourceBytes": 1986, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:0fa43499c8e3e06b415a5fd6585b87c3fd541d6c883379d774c9247edeb94951", + "name": ".Routes()", + "matchedTerms": [], + "startLine": 358, + "endLine": 360, + "sourceBytes": 60, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:2e266536f77bb3848784eb117cb5935bce2575bba587e1653ce1e6f9c056ebef", + "name": ".Middlewares()", + "matchedTerms": [], + "startLine": 363, + "endLine": 365, + "sourceBytes": 67, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f0a27beb5e2a6ff88e563c8dbed4dc6b6a697c1895287734f456edcb78d3ada3", + "name": ".Match()", + "matchedTerms": [], + "startLine": 373, + "endLine": 375, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:b84d22d8b0ff377822bcdc4cb0d4aaf092970f4a85c5e1107b4d09b1592c015d", + "name": ".Find()", + "matchedTerms": [], + "startLine": 382, + "endLine": 408, + "sourceBytes": 537, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1580e9037451fb2ed515953396059772522a762628fd281119ff95ef6389357a", + "name": ".NotFoundHandler()", + "matchedTerms": [], + "startLine": 412, + "endLine": 417, + "sourceBytes": 138, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:6d0c29b15fa70de4383c9685161ae0dea68e92fdbb120770c4a7315e8a2fc10b", + "name": ".MethodNotAllowedHandler()", + "matchedTerms": [], + "startLine": 421, + "endLine": 426, + "sourceBytes": 116, + "truncated": true, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "chi-1", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "chi-2", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "chi-3", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "chi-4", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 476, + 477, + 478, + 479, + 480, + 481, + 482, + 483, + 484, + 485, + 486, + 487, + 488, + 489, + 490, + 491, + 492, + 493 + ] + } + ] + }, + { + "repository": "chi", + "arm": "focused", + "focusTerms": [ + "coordinate", + "explain", + "middleware", + "mux", + "route", + "shar", + "state", + "subrouter" + ], + "sourceBytes": 8000, + "verificationBytesCharged": 8753, + "stdoutBytes": 19718, + "omittedMembers": 5, + "unavailableMembers": 0, + "truncated": true, + "literalFacts": 4, + "sourceEvidenceFacts": 4, + "members": [ + { + "id": "sha256:395cabe22892d311ed21d29bf7a01cb9d9d2eb1681c634bfd76121bdcf20b34f", + "name": ".Route()", + "matchedTerms": [ + "route" + ], + "startLine": 278, + "endLine": 286, + "sourceBytes": 258, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:0fa43499c8e3e06b415a5fd6585b87c3fd541d6c883379d774c9247edeb94951", + "name": ".Routes()", + "matchedTerms": [ + "route" + ], + "startLine": 358, + "endLine": 360, + "sourceBytes": 60, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:2e266536f77bb3848784eb117cb5935bce2575bba587e1653ce1e6f9c056ebef", + "name": ".Middlewares()", + "matchedTerms": [ + "middleware" + ], + "startLine": 363, + "endLine": 365, + "sourceBytes": 67, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f71b5f8096d259bcc0b17183b18ac62c1c5c4c0927a574f2f2d258824782917f", + "name": ".routeHTTP()", + "matchedTerms": [ + "route" + ], + "startLine": 455, + "endLine": 499, + "sourceBytes": 1075, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c84499b6acb377e9014fa77ee2eddee3dc058a6c36da3e0b4c219cb84435ba47", + "name": ".nextRoutePath()", + "matchedTerms": [ + "route" + ], + "startLine": 501, + "endLine": 508, + "sourceBytes": 297, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:fd923e9ae2c3dec208ca0ee6d8b2033b3d0b175532ec383cfeef661d3f378ea9", + "name": ".updateSubRoutes()", + "matchedTerms": [ + "route" + ], + "startLine": 511, + "endLine": 519, + "sourceBytes": 172, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:8527a45e38e92b6d4e24c5284bec8a457fec3c27674c35d8a68d099d885b0807", + "name": ".updateRouteHandler()", + "matchedTerms": [ + "route" + ], + "startLine": 525, + "endLine": 527, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:0b03f729c4b4c93626eb48b705704c97e8d051ebb76354fdb1028644c0c003f3", + "name": ".ServeHTTP()", + "matchedTerms": [], + "startLine": 63, + "endLine": 92, + "sourceBytes": 1039, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f592c330a46544e8c614e234af51ff29c320c18c021fc1bc1b5410a58761786b", + "name": ".Use()", + "matchedTerms": [], + "startLine": 100, + "endLine": 105, + "sourceBytes": 225, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:b6f4933c875274b7724a57dc037f278cef17603b5a17c0123f74f09c4859ade3", + "name": ".Handle()", + "matchedTerms": [], + "startLine": 109, + "endLine": 117, + "sourceBytes": 268, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:00488c58ae8e3d2aea91ae763f174cddbcbfa1edb9fda7a9650119778dac1272", + "name": ".HandleFunc()", + "matchedTerms": [], + "startLine": 121, + "endLine": 123, + "sourceBytes": 104, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "matchedTerms": [], + "startLine": 127, + "endLine": 133, + "sourceBytes": 233, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "matchedTerms": [], + "startLine": 137, + "endLine": 139, + "sourceBytes": 120, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c68a79f08a92785f7b855336a541459e9fdc62201d4430b22c5a267720fe0e2e", + "name": ".Connect()", + "matchedTerms": [], + "startLine": 143, + "endLine": 145, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7eaf9ccc10f79e519444ce15ca5e733334b9706658f775085bcd446e28339098", + "name": ".Delete()", + "matchedTerms": [], + "startLine": 149, + "endLine": 151, + "sourceBytes": 109, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:cc338ab0fc91b15feee67ab6ef6b5cb5f32500ccb4011e5a672be9f91a09e728", + "name": ".Get()", + "matchedTerms": [], + "startLine": 155, + "endLine": 157, + "sourceBytes": 103, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f6e8a7560084fdf9a66af0e486fd6ceed76e6607c6ede28fdb1bf8c314ed4a19", + "name": ".Head()", + "matchedTerms": [], + "startLine": 161, + "endLine": 163, + "sourceBytes": 105, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:86384a3e1b4355bef88f940fa46a5af66a9ba09309b1555884da609ceabad4b5", + "name": ".Options()", + "matchedTerms": [], + "startLine": 167, + "endLine": 169, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:940225f9f7c63134e90084b0f543639b43293824ada2130d5aa1c37c6e3de01f", + "name": ".Patch()", + "matchedTerms": [], + "startLine": 173, + "endLine": 175, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:4dc5dca620fc82d5378b46e6646c03877017e141daa1474dab9ce69c1d4cfc56", + "name": ".Post()", + "matchedTerms": [], + "startLine": 179, + "endLine": 181, + "sourceBytes": 105, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:af7652f3b85f23544717c7555bffe88a5b3ee1fc645491c1dd5d6fd3e5367bbe", + "name": ".Put()", + "matchedTerms": [], + "startLine": 185, + "endLine": 187, + "sourceBytes": 103, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:e2015cff9c7be8cb29614b5a597580ec714c51b3a9bb8622c8a0c15674b79ade", + "name": ".Query()", + "matchedTerms": [], + "startLine": 191, + "endLine": 193, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:8fb9d62ca6fa95670412c09930734152e8175fa59cb9ba6e74c30eba422ed530", + "name": ".Trace()", + "matchedTerms": [], + "startLine": 197, + "endLine": 199, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:eb197ef3e44ebc05271156e9e59ec93db988e2df4ca08efea5788baa91401518", + "name": ".NotFound()", + "matchedTerms": [], + "startLine": 203, + "endLine": 219, + "sourceBytes": 419, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1ac18c4f1a692f25a73fdc98b240ed310b2c4a6cf5065ffde2524dd41b7a1f78", + "name": ".MethodNotAllowed()", + "matchedTerms": [], + "startLine": 223, + "endLine": 239, + "sourceBytes": 467, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:8b2e84e1fc793772014c2d4ab2775681cef7c9e3f005e37905794d12600d4162", + "name": ".With()", + "matchedTerms": [], + "startLine": 242, + "endLine": 263, + "sourceBytes": 682, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:0ac374940442cf9a4d0a0d3270546ca4b87d036fd9ec4aa8f8e48ca2d49e4407", + "name": ".Group()", + "matchedTerms": [], + "startLine": 268, + "endLine": 274, + "sourceBytes": 106, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:29cd93db4ec894393cf257f027b8988a07ee77181191167f3eb2037f2cfdf5be", + "name": ".Mount()", + "matchedTerms": [], + "startLine": 295, + "endLine": 354, + "sourceBytes": 1233, + "truncated": true, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "chi-1", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "chi-2", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "chi-3", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "chi-4", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + } + ] + }, + { + "repository": "click", + "arm": "baseline", + "focusTerms": [], + "sourceBytes": 874, + "verificationBytesCharged": 874, + "stdoutBytes": 3408, + "omittedMembers": 0, + "unavailableMembers": 0, + "truncated": false, + "literalFacts": 0, + "sourceEvidenceFacts": 3, + "members": [ + { + "id": "sha256:f2973c383f7639367620131c87a5de0b9e0845a87f6dadebdf32160c1463a936", + "name": ".__init__()", + "matchedTerms": [], + "startLine": 456, + "endLine": 460, + "sourceBytes": 216, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:e878c6438bdce958c03a089d80b07294ed83ae9ee2f0f0a633df5fbf50ae9e52", + "name": ".name()", + "matchedTerms": [], + "startLine": 463, + "endLine": 464, + "sourceBytes": 57, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1e4e32dfcdfe036023e5c263eaba38bfe92eb391597b74fc5d70ab50a877cfa3", + "name": ".close()", + "matchedTerms": [], + "startLine": 466, + "endLine": 471, + "sourceBytes": 200, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:5bb38e0f070dd04a772efc8c9ee16003caa1e687bc2c12cc19b86bef7e08349e", + "name": ".__getattr__()", + "matchedTerms": [], + "startLine": 473, + "endLine": 474, + "sourceBytes": 80, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:bc6d909e3fad7e2cbc5726cdd962e543d80d2c22e04f4748a0c4a6a6df90301b", + "name": ".__enter__()", + "matchedTerms": [], + "startLine": 476, + "endLine": 477, + "sourceBytes": 55, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7bf788bd87c967bb2c80b682108ca265ce1ea9c213b3c8d55931a267d73c15b4", + "name": ".__exit__()", + "matchedTerms": [], + "startLine": 479, + "endLine": 485, + "sourceBytes": 211, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1b6882765c798cf51eff1c70453ffc9687e893d38733a758d193bd1e6c7845f1", + "name": ".__repr__()", + "matchedTerms": [], + "startLine": 487, + "endLine": 488, + "sourceBytes": 55, + "truncated": false, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "click-1", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 455, + 461, + 462 + ] + }, + { + "fact": "click-2", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "click-3", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "click-4", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + } + ] + }, + { + "repository": "click", + "arm": "unfocused", + "focusTerms": [], + "sourceBytes": 874, + "verificationBytesCharged": 874, + "stdoutBytes": 3408, + "omittedMembers": 0, + "unavailableMembers": 0, + "truncated": false, + "literalFacts": 0, + "sourceEvidenceFacts": 3, + "members": [ + { + "id": "sha256:f2973c383f7639367620131c87a5de0b9e0845a87f6dadebdf32160c1463a936", + "name": ".__init__()", + "matchedTerms": [], + "startLine": 456, + "endLine": 460, + "sourceBytes": 216, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:e878c6438bdce958c03a089d80b07294ed83ae9ee2f0f0a633df5fbf50ae9e52", + "name": ".name()", + "matchedTerms": [], + "startLine": 463, + "endLine": 464, + "sourceBytes": 57, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1e4e32dfcdfe036023e5c263eaba38bfe92eb391597b74fc5d70ab50a877cfa3", + "name": ".close()", + "matchedTerms": [], + "startLine": 466, + "endLine": 471, + "sourceBytes": 200, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:5bb38e0f070dd04a772efc8c9ee16003caa1e687bc2c12cc19b86bef7e08349e", + "name": ".__getattr__()", + "matchedTerms": [], + "startLine": 473, + "endLine": 474, + "sourceBytes": 80, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:bc6d909e3fad7e2cbc5726cdd962e543d80d2c22e04f4748a0c4a6a6df90301b", + "name": ".__enter__()", + "matchedTerms": [], + "startLine": 476, + "endLine": 477, + "sourceBytes": 55, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7bf788bd87c967bb2c80b682108ca265ce1ea9c213b3c8d55931a267d73c15b4", + "name": ".__exit__()", + "matchedTerms": [], + "startLine": 479, + "endLine": 485, + "sourceBytes": 211, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1b6882765c798cf51eff1c70453ffc9687e893d38733a758d193bd1e6c7845f1", + "name": ".__repr__()", + "matchedTerms": [], + "startLine": 487, + "endLine": 488, + "sourceBytes": 55, + "truncated": false, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "click-1", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 455, + 461, + 462 + ] + }, + { + "fact": "click-2", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "click-3", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "click-4", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + } + ] + }, + { + "repository": "click", + "arm": "focused", + "focusTerms": [ + "_atomic", + "behavior", + "cleanup", + "close", + "context", + "exception", + "explain", + "file", + "manager", + "ownership" + ], + "sourceBytes": 874, + "verificationBytesCharged": 874, + "stdoutBytes": 3771, + "omittedMembers": 0, + "unavailableMembers": 0, + "truncated": false, + "literalFacts": 0, + "sourceEvidenceFacts": 3, + "members": [ + { + "id": "sha256:1e4e32dfcdfe036023e5c263eaba38bfe92eb391597b74fc5d70ab50a877cfa3", + "name": ".close()", + "matchedTerms": [ + "close" + ], + "startLine": 466, + "endLine": 471, + "sourceBytes": 200, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f2973c383f7639367620131c87a5de0b9e0845a87f6dadebdf32160c1463a936", + "name": ".__init__()", + "matchedTerms": [], + "startLine": 456, + "endLine": 460, + "sourceBytes": 216, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:e878c6438bdce958c03a089d80b07294ed83ae9ee2f0f0a633df5fbf50ae9e52", + "name": ".name()", + "matchedTerms": [], + "startLine": 463, + "endLine": 464, + "sourceBytes": 57, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:5bb38e0f070dd04a772efc8c9ee16003caa1e687bc2c12cc19b86bef7e08349e", + "name": ".__getattr__()", + "matchedTerms": [], + "startLine": 473, + "endLine": 474, + "sourceBytes": 80, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:bc6d909e3fad7e2cbc5726cdd962e543d80d2c22e04f4748a0c4a6a6df90301b", + "name": ".__enter__()", + "matchedTerms": [], + "startLine": 476, + "endLine": 477, + "sourceBytes": 55, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7bf788bd87c967bb2c80b682108ca265ce1ea9c213b3c8d55931a267d73c15b4", + "name": ".__exit__()", + "matchedTerms": [], + "startLine": 479, + "endLine": 485, + "sourceBytes": 211, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1b6882765c798cf51eff1c70453ffc9687e893d38733a758d193bd1e6c7845f1", + "name": ".__repr__()", + "matchedTerms": [], + "startLine": 487, + "endLine": 488, + "sourceBytes": 55, + "truncated": false, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "click-1", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 455, + 461, + 462 + ] + }, + { + "fact": "click-2", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "click-3", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "click-4", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + } + ] + }, + { + "repository": "jsoup", + "arm": "baseline", + "focusTerms": [], + "sourceBytes": 6208, + "verificationBytesCharged": 6208, + "stdoutBytes": 12866, + "omittedMembers": 0, + "unavailableMembers": 0, + "truncated": false, + "literalFacts": 0, + "sourceEvidenceFacts": 4, + "members": [ + { + "id": "sha256:66aaadb3479119cae227c0e51b5674eae36cb9b29e80428e2697aa7cb45518f0", + "name": "", + "matchedTerms": [], + "startLine": 50, + "endLine": 53, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:d490451c6bf56501db666f0a6c3c143f1a6d8a90120632415cc739cbf1a8f034", + "name": ".clean()", + "matchedTerms": [], + "startLine": 62, + "endLine": 70, + "sourceBytes": 319, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:817144c6469132780623c859650f3dbb59eef49b75108e12e8fd2efe7763b330", + "name": ".isValid()", + "matchedTerms": [], + "startLine": 94, + "endLine": 101, + "sourceBytes": 441, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "name": ".isValidBodyHtml()", + "matchedTerms": [], + "startLine": 124, + "endLine": 133, + "sourceBytes": 630, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:d82578355e71b0d55f68499706f70276db9cf44a16bf283bba6360df410deec5", + "name": "", + "matchedTerms": [], + "startLine": 143, + "endLine": 146, + "sourceBytes": 144, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:65912eb3660f15092355589775d874a7a702efcf0336e9865cf93b4fb56aaa29", + "name": ".head()", + "matchedTerms": [], + "startLine": 148, + "endLine": 173, + "sourceBytes": 1371, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:fb8588d79c5d9dcbd1a0c6a8e2f901d5c54be3050e7626a3b8f59a8c55bd025c", + "name": ".tail()", + "matchedTerms": [], + "startLine": 175, + "endLine": 179, + "sourceBytes": 266, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3", + "name": ".copySafeNodes()", + "matchedTerms": [], + "startLine": 182, + "endLine": 186, + "sourceBytes": 227, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7ce3db44fb899d894dd900ab8808bd0fdc411323a6276f4164fede39e46f8157", + "name": ".createSafeElement()", + "matchedTerms": [], + "startLine": 188, + "endLine": 235, + "sourceBytes": 2553, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:bd66755ef9e0f349f3e772c8d9b23a0441194bd6300a6431d51bc2f11650e890", + "name": "", + "matchedTerms": [], + "startLine": 241, + "endLine": 244, + "sourceBytes": 146, + "truncated": false, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "jsoup-1", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "jsoup-2", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "jsoup-3", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "jsoup-4", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + } + ] + }, + { + "repository": "jsoup", + "arm": "unfocused", + "focusTerms": [], + "sourceBytes": 6208, + "verificationBytesCharged": 6208, + "stdoutBytes": 12866, + "omittedMembers": 0, + "unavailableMembers": 0, + "truncated": false, + "literalFacts": 0, + "sourceEvidenceFacts": 4, + "members": [ + { + "id": "sha256:66aaadb3479119cae227c0e51b5674eae36cb9b29e80428e2697aa7cb45518f0", + "name": "", + "matchedTerms": [], + "startLine": 50, + "endLine": 53, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:d490451c6bf56501db666f0a6c3c143f1a6d8a90120632415cc739cbf1a8f034", + "name": ".clean()", + "matchedTerms": [], + "startLine": 62, + "endLine": 70, + "sourceBytes": 319, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:817144c6469132780623c859650f3dbb59eef49b75108e12e8fd2efe7763b330", + "name": ".isValid()", + "matchedTerms": [], + "startLine": 94, + "endLine": 101, + "sourceBytes": 441, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "name": ".isValidBodyHtml()", + "matchedTerms": [], + "startLine": 124, + "endLine": 133, + "sourceBytes": 630, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:d82578355e71b0d55f68499706f70276db9cf44a16bf283bba6360df410deec5", + "name": "", + "matchedTerms": [], + "startLine": 143, + "endLine": 146, + "sourceBytes": 144, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:65912eb3660f15092355589775d874a7a702efcf0336e9865cf93b4fb56aaa29", + "name": ".head()", + "matchedTerms": [], + "startLine": 148, + "endLine": 173, + "sourceBytes": 1371, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:fb8588d79c5d9dcbd1a0c6a8e2f901d5c54be3050e7626a3b8f59a8c55bd025c", + "name": ".tail()", + "matchedTerms": [], + "startLine": 175, + "endLine": 179, + "sourceBytes": 266, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3", + "name": ".copySafeNodes()", + "matchedTerms": [], + "startLine": 182, + "endLine": 186, + "sourceBytes": 227, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7ce3db44fb899d894dd900ab8808bd0fdc411323a6276f4164fede39e46f8157", + "name": ".createSafeElement()", + "matchedTerms": [], + "startLine": 188, + "endLine": 235, + "sourceBytes": 2553, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:bd66755ef9e0f349f3e772c8d9b23a0441194bd6300a6431d51bc2f11650e890", + "name": "", + "matchedTerms": [], + "startLine": 241, + "endLine": 244, + "sourceBytes": 146, + "truncated": false, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "jsoup-1", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "jsoup-2", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "jsoup-3", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "jsoup-4", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + } + ] + }, + { + "repository": "jsoup", + "arm": "focused", + "focusTerms": [ + "clean", + "cleaner", + "document", + "explain", + "input", + "mutate", + "responsibility", + "safelist", + "supply", + "us", + "whether" + ], + "sourceBytes": 6208, + "verificationBytesCharged": 6208, + "stdoutBytes": 13309, + "omittedMembers": 0, + "unavailableMembers": 0, + "truncated": false, + "literalFacts": 0, + "sourceEvidenceFacts": 4, + "members": [ + { + "id": "sha256:d490451c6bf56501db666f0a6c3c143f1a6d8a90120632415cc739cbf1a8f034", + "name": ".clean()", + "matchedTerms": [ + "clean" + ], + "startLine": 62, + "endLine": 70, + "sourceBytes": 319, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:66aaadb3479119cae227c0e51b5674eae36cb9b29e80428e2697aa7cb45518f0", + "name": "", + "matchedTerms": [], + "startLine": 50, + "endLine": 53, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:817144c6469132780623c859650f3dbb59eef49b75108e12e8fd2efe7763b330", + "name": ".isValid()", + "matchedTerms": [], + "startLine": 94, + "endLine": 101, + "sourceBytes": 441, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "name": ".isValidBodyHtml()", + "matchedTerms": [], + "startLine": 124, + "endLine": 133, + "sourceBytes": 630, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:d82578355e71b0d55f68499706f70276db9cf44a16bf283bba6360df410deec5", + "name": "", + "matchedTerms": [], + "startLine": 143, + "endLine": 146, + "sourceBytes": 144, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:65912eb3660f15092355589775d874a7a702efcf0336e9865cf93b4fb56aaa29", + "name": ".head()", + "matchedTerms": [], + "startLine": 148, + "endLine": 173, + "sourceBytes": 1371, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:fb8588d79c5d9dcbd1a0c6a8e2f901d5c54be3050e7626a3b8f59a8c55bd025c", + "name": ".tail()", + "matchedTerms": [], + "startLine": 175, + "endLine": 179, + "sourceBytes": 266, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3", + "name": ".copySafeNodes()", + "matchedTerms": [], + "startLine": 182, + "endLine": 186, + "sourceBytes": 227, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7ce3db44fb899d894dd900ab8808bd0fdc411323a6276f4164fede39e46f8157", + "name": ".createSafeElement()", + "matchedTerms": [], + "startLine": 188, + "endLine": 235, + "sourceBytes": 2553, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:bd66755ef9e0f349f3e772c8d9b23a0441194bd6300a6431d51bc2f11650e890", + "name": "", + "matchedTerms": [], + "startLine": 241, + "endLine": 244, + "sourceBytes": 146, + "truncated": false, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "jsoup-1", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "jsoup-2", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "jsoup-3", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "jsoup-4", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + } + ] + }, + { + "repository": "redux", + "arm": "baseline", + "focusTerms": [], + "sourceBytes": 5047, + "verificationBytesCharged": 5047, + "stdoutBytes": 10329, + "omittedMembers": 0, + "unavailableMembers": 0, + "truncated": false, + "literalFacts": 1, + "sourceEvidenceFacts": 2, + "members": [ + { + "id": "sha256:692fe8cbc7b8e5a03bcb79c20531aefdbfa31098ea43bbe9b0301d61cd869f27", + "name": "ensureCanMutateNextListeners()", + "matchedTerms": [], + "startLine": 152, + "endLine": 159, + "sourceBytes": 231, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:ac32c352aac7217b9b481c36ebdbd1304d84593968416c35058a0445860f30e2", + "name": "getState()", + "matchedTerms": [], + "startLine": 166, + "endLine": 176, + "sourceBytes": 357, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:f27566baebab97a78ea7b6d143149ecdff76b39167fb12b42612a3e69fba5a5d", + "name": "subscribe()", + "matchedTerms": [], + "startLine": 201, + "endLine": 243, + "sourceBytes": 1287, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:ee27944e9b61e75b17b685fb67d51cccd459621e8ed9db30b18f5c7b02094612", + "name": "dispatch()", + "matchedTerms": [], + "startLine": 270, + "endLine": 309, + "sourceBytes": 1378, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:32f1ead88c324d96b4c7dd1db2d0692f3c7fb04a33e23d485f4b2ad5ea62b6a4", + "name": "replaceReducer()", + "matchedTerms": [], + "startLine": 320, + "endLine": 336, + "sourceBytes": 654, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:5afb3e08978d3232121b2cf67a14f748a5e6039c4a5256a2cf64a30473551eea", + "name": "observable()", + "matchedTerms": [], + "startLine": 344, + "endLine": 380, + "sourceBytes": 1140, + "truncated": false, + "digestVerified": false + } + ], + "facts": [ + { + "fact": "redux-1", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134 + ] + }, + { + "fact": "redux-2", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "redux-3", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "redux-4", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394 + ] + } + ] + }, + { + "repository": "redux", + "arm": "unfocused", + "focusTerms": [], + "sourceBytes": 5047, + "verificationBytesCharged": 5047, + "stdoutBytes": 10329, + "omittedMembers": 0, + "unavailableMembers": 0, + "truncated": false, + "literalFacts": 1, + "sourceEvidenceFacts": 2, + "members": [ + { + "id": "sha256:692fe8cbc7b8e5a03bcb79c20531aefdbfa31098ea43bbe9b0301d61cd869f27", + "name": "ensureCanMutateNextListeners()", + "matchedTerms": [], + "startLine": 152, + "endLine": 159, + "sourceBytes": 231, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:ac32c352aac7217b9b481c36ebdbd1304d84593968416c35058a0445860f30e2", + "name": "getState()", + "matchedTerms": [], + "startLine": 166, + "endLine": 176, + "sourceBytes": 357, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:f27566baebab97a78ea7b6d143149ecdff76b39167fb12b42612a3e69fba5a5d", + "name": "subscribe()", + "matchedTerms": [], + "startLine": 201, + "endLine": 243, + "sourceBytes": 1287, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:ee27944e9b61e75b17b685fb67d51cccd459621e8ed9db30b18f5c7b02094612", + "name": "dispatch()", + "matchedTerms": [], + "startLine": 270, + "endLine": 309, + "sourceBytes": 1378, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:32f1ead88c324d96b4c7dd1db2d0692f3c7fb04a33e23d485f4b2ad5ea62b6a4", + "name": "replaceReducer()", + "matchedTerms": [], + "startLine": 320, + "endLine": 336, + "sourceBytes": 654, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:5afb3e08978d3232121b2cf67a14f748a5e6039c4a5256a2cf64a30473551eea", + "name": "observable()", + "matchedTerms": [], + "startLine": 344, + "endLine": 380, + "sourceBytes": 1140, + "truncated": false, + "digestVerified": false + } + ], + "facts": [ + { + "fact": "redux-1", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134 + ] + }, + { + "fact": "redux-2", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "redux-3", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "redux-4", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394 + ] + } + ] + }, + { + "repository": "redux", + "arm": "focused", + "focusTerms": [ + "create", + "dispatch", + "explain", + "responsibility", + "safely", + "share", + "state", + "store", + "subscription" + ], + "sourceBytes": 5047, + "verificationBytesCharged": 5047, + "stdoutBytes": 10673, + "omittedMembers": 0, + "unavailableMembers": 0, + "truncated": false, + "literalFacts": 1, + "sourceEvidenceFacts": 2, + "members": [ + { + "id": "sha256:ac32c352aac7217b9b481c36ebdbd1304d84593968416c35058a0445860f30e2", + "name": "getState()", + "matchedTerms": [ + "state" + ], + "startLine": 166, + "endLine": 176, + "sourceBytes": 357, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:ee27944e9b61e75b17b685fb67d51cccd459621e8ed9db30b18f5c7b02094612", + "name": "dispatch()", + "matchedTerms": [ + "dispatch" + ], + "startLine": 270, + "endLine": 309, + "sourceBytes": 1378, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:692fe8cbc7b8e5a03bcb79c20531aefdbfa31098ea43bbe9b0301d61cd869f27", + "name": "ensureCanMutateNextListeners()", + "matchedTerms": [], + "startLine": 152, + "endLine": 159, + "sourceBytes": 231, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:f27566baebab97a78ea7b6d143149ecdff76b39167fb12b42612a3e69fba5a5d", + "name": "subscribe()", + "matchedTerms": [], + "startLine": 201, + "endLine": 243, + "sourceBytes": 1287, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:32f1ead88c324d96b4c7dd1db2d0692f3c7fb04a33e23d485f4b2ad5ea62b6a4", + "name": "replaceReducer()", + "matchedTerms": [], + "startLine": 320, + "endLine": 336, + "sourceBytes": 654, + "truncated": false, + "digestVerified": false + }, + { + "id": "sha256:5afb3e08978d3232121b2cf67a14f748a5e6039c4a5256a2cf64a30473551eea", + "name": "observable()", + "matchedTerms": [], + "startLine": 344, + "endLine": 380, + "sourceBytes": 1140, + "truncated": false, + "digestVerified": false + } + ], + "facts": [ + { + "fact": "redux-1", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134 + ] + }, + { + "fact": "redux-2", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "redux-3", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "redux-4", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394 + ] + } + ] + }, + { + "repository": "walkdir", + "arm": "baseline", + "focusTerms": [], + "sourceBytes": 8000, + "verificationBytesCharged": 8405, + "stdoutBytes": 13045, + "omittedMembers": 2, + "unavailableMembers": 0, + "truncated": true, + "literalFacts": 1, + "sourceEvidenceFacts": 2, + "members": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "matchedTerms": [], + "startLine": 687, + "endLine": 734, + "sourceBytes": 1812, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c3fe8fc9e9d0038d0c1191e7cf0d4ee7783cebd55c755a07c627023b60a3d188", + "name": ".skip_current_dir()", + "matchedTerms": [], + "startLine": 781, + "endLine": 785, + "sourceBytes": 117, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:5704b7023e55533acf5164ddd3ae50467aea1abf4c19866f3e143ae7bf09d370", + "name": ".filter_entry()", + "matchedTerms": [], + "startLine": 833, + "endLine": 838, + "sourceBytes": 169, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "name": ".handle_entry()", + "matchedTerms": [], + "startLine": 840, + "endLine": 882, + "sourceBytes": 1726, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:219c38f772358d6f0cd42cd06b879fe706b6672b0deee9461f8f7ec785618867", + "name": ".get_deferred_dir()", + "matchedTerms": [], + "startLine": 884, + "endLine": 899, + "sourceBytes": 607, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c4870d899db4c0d3e82cf28916d9cadef5b8d7b249ea6fe7aa97bc7d465dfe45", + "name": ".push()", + "matchedTerms": [], + "startLine": 901, + "endLine": 948, + "sourceBytes": 2459, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:3d843599c82e0cf88d7512278cc2b4f2ffc87c5797785e0c9caad89ab4af8f98", + "name": ".pop()", + "matchedTerms": [], + "startLine": 950, + "endLine": 959, + "sourceBytes": 484, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "name": ".follow()", + "matchedTerms": [], + "startLine": 961, + "endLine": 971, + "sourceBytes": 431, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "name": ".check_loop()", + "matchedTerms": [], + "startLine": 973, + "endLine": 989, + "sourceBytes": 195, + "truncated": true, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "walkdir-1", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "walkdir-2", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "walkdir-3", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 972, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989 + ] + }, + { + "fact": "walkdir-4", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 883 + ] + } + ] + }, + { + "repository": "walkdir", + "arm": "unfocused", + "focusTerms": [], + "sourceBytes": 8000, + "verificationBytesCharged": 8405, + "stdoutBytes": 13045, + "omittedMembers": 2, + "unavailableMembers": 0, + "truncated": true, + "literalFacts": 1, + "sourceEvidenceFacts": 2, + "members": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "matchedTerms": [], + "startLine": 687, + "endLine": 734, + "sourceBytes": 1812, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c3fe8fc9e9d0038d0c1191e7cf0d4ee7783cebd55c755a07c627023b60a3d188", + "name": ".skip_current_dir()", + "matchedTerms": [], + "startLine": 781, + "endLine": 785, + "sourceBytes": 117, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:5704b7023e55533acf5164ddd3ae50467aea1abf4c19866f3e143ae7bf09d370", + "name": ".filter_entry()", + "matchedTerms": [], + "startLine": 833, + "endLine": 838, + "sourceBytes": 169, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "name": ".handle_entry()", + "matchedTerms": [], + "startLine": 840, + "endLine": 882, + "sourceBytes": 1726, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:219c38f772358d6f0cd42cd06b879fe706b6672b0deee9461f8f7ec785618867", + "name": ".get_deferred_dir()", + "matchedTerms": [], + "startLine": 884, + "endLine": 899, + "sourceBytes": 607, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c4870d899db4c0d3e82cf28916d9cadef5b8d7b249ea6fe7aa97bc7d465dfe45", + "name": ".push()", + "matchedTerms": [], + "startLine": 901, + "endLine": 948, + "sourceBytes": 2459, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:3d843599c82e0cf88d7512278cc2b4f2ffc87c5797785e0c9caad89ab4af8f98", + "name": ".pop()", + "matchedTerms": [], + "startLine": 950, + "endLine": 959, + "sourceBytes": 484, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "name": ".follow()", + "matchedTerms": [], + "startLine": 961, + "endLine": 971, + "sourceBytes": 431, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "name": ".check_loop()", + "matchedTerms": [], + "startLine": 973, + "endLine": 989, + "sourceBytes": 195, + "truncated": true, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "walkdir-1", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "walkdir-2", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "walkdir-3", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 972, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989 + ] + }, + { + "fact": "walkdir-4", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 883 + ] + } + ] + }, + { + "repository": "walkdir", + "arm": "focused", + "focusTerms": [ + "detect", + "directory", + "explain", + "iter", + "limit", + "loop", + "open", + "responsibility", + "symlink" + ], + "sourceBytes": 8000, + "verificationBytesCharged": 8405, + "stdoutBytes": 13471, + "omittedMembers": 2, + "unavailableMembers": 0, + "truncated": true, + "literalFacts": 1, + "sourceEvidenceFacts": 2, + "members": [ + { + "id": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "name": ".check_loop()", + "matchedTerms": [ + "loop" + ], + "startLine": 973, + "endLine": 989, + "sourceBytes": 600, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "matchedTerms": [], + "startLine": 687, + "endLine": 734, + "sourceBytes": 1812, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c3fe8fc9e9d0038d0c1191e7cf0d4ee7783cebd55c755a07c627023b60a3d188", + "name": ".skip_current_dir()", + "matchedTerms": [], + "startLine": 781, + "endLine": 785, + "sourceBytes": 117, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:5704b7023e55533acf5164ddd3ae50467aea1abf4c19866f3e143ae7bf09d370", + "name": ".filter_entry()", + "matchedTerms": [], + "startLine": 833, + "endLine": 838, + "sourceBytes": 169, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "name": ".handle_entry()", + "matchedTerms": [], + "startLine": 840, + "endLine": 882, + "sourceBytes": 1726, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:219c38f772358d6f0cd42cd06b879fe706b6672b0deee9461f8f7ec785618867", + "name": ".get_deferred_dir()", + "matchedTerms": [], + "startLine": 884, + "endLine": 899, + "sourceBytes": 607, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c4870d899db4c0d3e82cf28916d9cadef5b8d7b249ea6fe7aa97bc7d465dfe45", + "name": ".push()", + "matchedTerms": [], + "startLine": 901, + "endLine": 948, + "sourceBytes": 2459, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:3d843599c82e0cf88d7512278cc2b4f2ffc87c5797785e0c9caad89ab4af8f98", + "name": ".pop()", + "matchedTerms": [], + "startLine": 950, + "endLine": 959, + "sourceBytes": 484, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "name": ".follow()", + "matchedTerms": [], + "startLine": 961, + "endLine": 971, + "sourceBytes": 26, + "truncated": true, + "digestVerified": true + } + ], + "facts": [ + { + "fact": "walkdir-1", + "literalWitnessCoverage": true, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "walkdir-2", + "literalWitnessCoverage": false, + "sourceEvidence": true, + "missingLines": [] + }, + { + "fact": "walkdir-3", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972 + ] + }, + { + "fact": "walkdir-4", + "literalWitnessCoverage": false, + "sourceEvidence": false, + "missingLines": [ + 883 + ] + } + ] + } + ], + "comparison": "Compass native member-source before/after only. The separate paired public-neighbor 8000-byte control remains Compass 14/20 versus Graphify 15/20. Do not equate it with the native-member totals or claim a Graphify focus comparison.", + "changes": { + "gainedFacts": [ + "chi-4" + ], + "lostFacts": [], + "unchangedUnfocusedStdoutAndStderr": 5, + "unchangedSourceBytes": true, + "extraStdoutBytes": 2436, + "extraVerificationBytesCharged": 651 + }, + "remaining": [ + "Click ownership/name fact lacks the class header and @property decorator outside recorded callable spans. No class-header allowance is applied.", + "Redux enhancer delegation and complete store/observable API are not fully within callable member evidence. Six returned Redux source excerpts have no recorded digest in both arms; output correctly labels them unverified. The external audit checks current pinned source without upgrading native provenance.", + "WalkDir still lacks complete symlink-loop and contents-first witnesses. Prioritizing check_loop does not by itself retrieve all its surrounding call-path evidence.", + "Name focus is a lexical heuristic, not semantic entailment or a completeness guarantee for natural-language questions. Broader or held-out questions can regress." + ], + "validation": { + "complete": true, + "sourceSha256": { + "CHANGELOG.md": "9dc1d9ab982aec9dc8fe18a0a097d25f6556d695bbdbe0542d1c1ce0997f3c5e", + "COMPATIBILITY.md": "20a82fa52684237608e320173141573b1649da5f30006b86b5f720d4d4a6420c", + "crates/compass-cli/src/help.rs": "2fde352a44872278408173f11ffeb9a693453724f0e268f453e73b9657cf200f", + "crates/compass-cli/src/lib.rs": "ca2d616acc7536df7569783ae40cde86a0940412ae3a9edd5a8100585ad7a7d3", + "crates/compass-cli/tests/code_query_cli.rs": "b8f0c339dcb1db197fa5f5589763c9279d02f025108a684ba7bf9955ec399e63", + "crates/compass-query/src/explanation_members.rs": "ce7dedd242f7b44c724ba11f914aed58a4cfdffdbbcdb91cf158c3e2c19b9927", + "crates/compass-query/src/lib.rs": "f0c59af96732ab0c35f577043c3941c57c138ed0e13efe96f0b8d039d5cc6f8d", + "crates/compass-query/tests/explanation_members.rs": "a2897b9a609be0c023830ee8c5f45f88e2695d91f18684075216040a902b0d06", + "docs/reference/outputs.md": "4f4612efdb08d5e28f2f628084b908df652660e2149c0575340356bc16e26a13" + }, + "steps": [ + { + "name": "fmt", + "argv": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "seconds": 3.6076712920330465 + }, + { + "name": "query", + "argv": [ + "cargo", + "test", + "-p", + "compass-query", + "--test", + "explanation_members", + "--test", + "explanation_source", + "--locked" + ], + "exitCode": 0, + "seconds": 23.21706162497867 + }, + { + "name": "cli", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "code_query_cli", + "--locked" + ], + "exitCode": 0, + "seconds": 125.1199858749751 + }, + { + "name": "clippy", + "argv": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 45.434337500017136 + }, + { + "name": "workspace-tests", + "argv": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "seconds": 125.17055554199032 + }, + { + "name": "product", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "seconds": 15.18113749998156 + }, + { + "name": "boundary", + "argv": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "seconds": 0.04564858297817409 + }, + { + "name": "build", + "argv": [ + "cargo", + "build", + "-p", + "compass-cli", + "--bin", + "compass", + "--locked" + ], + "exitCode": 0, + "seconds": 3.6144565829308704 + } + ], + "binarySha256": "e33934b94d1e254ba59906fddece098d8433bf7e31af746e46aac3dfc6744f97" + }, + "testCounts": { + "query": { + "passed": 19, + "failed": 0, + "ignored": 0 + }, + "cli": { + "passed": 42, + "failed": 0, + "ignored": 0 + }, + "workspace-tests": { + "passed": 1106, + "failed": 0, + "ignored": 2 + }, + "product": { + "passed": 9, + "failed": 0, + "ignored": 0 + } + }, + "benchmarkTests": 187, + "replay": { + "exitCode": 0, + "byteIdentical": true, + "verifiedSummarySha256": "cc397fe9a825189f9678e8a7b0167ff544fc250a1294af649d4327b297d578ae" + }, + "attempts": [ + "Round 01 failed to compile because the graph runtime NodeRecord exposes attributes rather than a public name field. Corrected to its existing string accessor.", + "Inspection also required the existing lexical index convention of retaining snake-case identifiers and adding their components, since identifier_tokens itself preserves underscores. No experiment scores informed this correction.", + "The initial real-source verifier assumed every member had a digest. Redux exposes six correctly labeled unverified members; the verifier now checks both statuses and retains the six missing-digest cases. Original verifier and failure log are preserved." + ], + "limitations": [ + "Previously inspected five-language development subjects and source witnesses, not held-out evidence.", + "Separate same-agent verifier independently checks ordering, literal source, provenance and scoring; no independent human semantic adjudication.", + "Indentation normalization permits source evidence when the recorded span starts at a declaration token; literal totals remain separate.", + "Graphify has no recorded equivalent native flag. No new paired superiority claim is made.", + "This adds an optional lexical ordering; it does not synthesize explanations, prove god-object defects, improve extraction or establish path/community quality.", + "JavaScript, browser, full platform, packaging and extraction fixture qualification were not rerun because these production surfaces are unchanged." + ], + "artifacts": { + "member-focus-01/fmt.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-01/query.log": "3adccd3daa7a924f3dacf82161db3e064c28aaa3260ed1d61f8cc8cdb6cd66af", + "member-focus-01/validate.py": "f53d716f5193cf59ace12193efa0b79cbe6dc3e49efb233396cfe0a3425bf616", + "member-focus-01/validation.json": "4fb1ecaba056176fbca23f66add3b158b23772284bb492ab3e9c588d7661f07e", + "member-focus-01/validation.log": "e0c517a18d1dde4c86693ba272c3363e30348cae387d839b3134c002c63c3ec6", + "member-focus-02/benchmark-tests.log": "f350f703f21eac7462f3f181aeb1ff015d2adc50583af1604011b84f4039da8f", + "member-focus-02/boundary.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/build.log": "77a964cd95b5d11d0c62ba003bf7c011ec878fb3d764793073654e9706249374", + "member-focus-02/capture/capture.json": "9429bc124b14c2d697e9990ca79899de5f9b044e0cb0967b8a961139f510ec48", + "member-focus-02/capture/capture.py": "881c5438d17db97bcf77c349267daca5ddcffaa9574bad8f90592a2437ec2905", + "member-focus-02/capture/explanation_focus_registration.json": "8287faea7015f865cbea8b5088ef20ca04d10ee1f367724327ac02ce3fa80cc6", + "member-focus-02/capture/explanation_members.rs": "ce7dedd242f7b44c724ba11f914aed58a4cfdffdbbcdb91cf158c3e2c19b9927", + "member-focus-02/capture/lexical.rs": "145f751ba0755c29adbb6498d206fbf729aa62a9559ad58d256a05b3e43f50ee", + "member-focus-02/capture/raw/chi/baseline.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/chi/baseline.stdout": "a827aea6e1c28e363d972da58943349455dd43154d162d5adecfffaaf2bcd41f", + "member-focus-02/capture/raw/chi/focused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/chi/focused.stdout": "97377fc95987e0e976d369cfb8a77d75bdd15d6c131fdffc1c7460c1250c793b", + "member-focus-02/capture/raw/chi/unfocused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/chi/unfocused.stdout": "a827aea6e1c28e363d972da58943349455dd43154d162d5adecfffaaf2bcd41f", + "member-focus-02/capture/raw/click/baseline.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/click/baseline.stdout": "c12fa7fd7a03bcdf46578c982de39a5d539d41846e69dd3a93bd5a8b59bfcba2", + "member-focus-02/capture/raw/click/focused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/click/focused.stdout": "b104435f28a6569dc47ef30aa624f46dec11d93309d15d7c06857f25db11f5fb", + "member-focus-02/capture/raw/click/unfocused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/click/unfocused.stdout": "c12fa7fd7a03bcdf46578c982de39a5d539d41846e69dd3a93bd5a8b59bfcba2", + "member-focus-02/capture/raw/jsoup/baseline.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/jsoup/baseline.stdout": "d0fa6a20d92ec2792e13ba6e7560c2bf0b8056a783238b095156fefb75dff88c", + "member-focus-02/capture/raw/jsoup/focused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/jsoup/focused.stdout": "07c72538d2cb1144da311e8e396a48d4cf62fd5bbe4c9470fec8fbe3e15a9a25", + "member-focus-02/capture/raw/jsoup/unfocused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/jsoup/unfocused.stdout": "d0fa6a20d92ec2792e13ba6e7560c2bf0b8056a783238b095156fefb75dff88c", + "member-focus-02/capture/raw/redux/baseline.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/redux/baseline.stdout": "09cae94ec07ddd8ae7e792231f0d16573651bae7698a307a454064d48b2db35b", + "member-focus-02/capture/raw/redux/focused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/redux/focused.stdout": "727e9a271cdee034c631b5faa71892da159dfe3bbd611024a9fa8bb5db22fd63", + "member-focus-02/capture/raw/redux/unfocused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/redux/unfocused.stdout": "09cae94ec07ddd8ae7e792231f0d16573651bae7698a307a454064d48b2db35b", + "member-focus-02/capture/raw/walkdir/baseline.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/walkdir/baseline.stdout": "9457c5572e2d628f72669b37702d9c25ad9368e5431cb54bfcb7d2ce1a4f9459", + "member-focus-02/capture/raw/walkdir/focused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/walkdir/focused.stdout": "564d5ec339b8cce15de47828f1b0f001818e17d69c05678daff4921317f68925", + "member-focus-02/capture/raw/walkdir/unfocused.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/capture/raw/walkdir/unfocused.stdout": "9457c5572e2d628f72669b37702d9c25ad9368e5431cb54bfcb7d2ce1a4f9459", + "member-focus-02/capture/runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "member-focus-02/capture/text.rs": "4df8680d3af04cc8be70c6f4279fda6a928b83c1a732d3d0f43132c7cf05e177", + "member-focus-02/capture.log": "b466a4a18114007fefe8bb8dd35d87d3daf0bb8606dac897c1b110fd8b063e9d", + "member-focus-02/capture.py": "881c5438d17db97bcf77c349267daca5ddcffaa9574bad8f90592a2437ec2905", + "member-focus-02/cli.log": "a0cd18279e48a3ff75e62d26fdae71d05e105664de0aef8754d49e9239728049", + "member-focus-02/clippy.log": "3702ebc838cdc4b12c75dd08bd3e94438ca071747259f0f9d35279093531c083", + "member-focus-02/fmt.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-focus-02/product.log": "e610f15bfe18551483b5a9558502fcda1b66c3ed3d11db340bd7319f29804931", + "member-focus-02/query.log": "f3615b2a40ca586da9789e51e6c5a5130bf4917d228f98e85bb0b6c83ac36029", + "member-focus-02/repeat-verification.log": "5bffc34b4de117f0c44e4da27e27e1a4df873534e4c4cd2532290438e333f9ad", + "member-focus-02/replay.json": "237c3b095a5f92f54fda4e7f2337cb4439762971bdd9773b192dd3ff87ea0ead", + "member-focus-02/validate.py": "f53d716f5193cf59ace12193efa0b79cbe6dc3e49efb233396cfe0a3425bf616", + "member-focus-02/validation.json": "a6ccd56bb1d0fae365623e21d5a0eb69ed13b868ce0bf3ac73b149bc7ea551d9", + "member-focus-02/validation.log": "f15fb96a5c9b73738583adfaab96077850ac08ce3db9ba0a297770526f5d52c8", + "member-focus-02/verification-attempt-01.log": "fae002c6186bb6c9c4bb993a213acbb53155683392bce278313874f7c970f615", + "member-focus-02/verification.log": "5bffc34b4de117f0c44e4da27e27e1a4df873534e4c4cd2532290438e333f9ad", + "member-focus-02/verified-summary.json": "cc397fe9a825189f9678e8a7b0167ff544fc250a1294af649d4327b297d578ae", + "member-focus-02/verify-attempt-01.py": "016fa550ec325a23e55601b7ad43a0022b0ab9b3180a8090c78fe6b46ae57239", + "member-focus-02/verify.py": "a3ddabd6c2d354012aa8ab99fffd5130199b4abda0d54910311c5bd155ca4bc3", + "member-focus-02/workspace-tests.log": "f96af4283a25ab2adadf1b80b460e938a97950bed8f7c875d6dddbff3e2b859f", + "member-focus-02/write_review.py": "3b58fea9f1ac1e189b79e3c529789172cb3657facdfdadf23590f47d9b15da79" + } +} diff --git a/benchmarks/agent_query/export_binding_development_review.json b/benchmarks/agent_query/export_binding_development_review.json new file mode 100644 index 000000000..09c3c6d98 --- /dev/null +++ b/benchmarks/agent_query/export_binding_development_review.json @@ -0,0 +1,240 @@ +{ + "schema": "compass.export-binding-development-review/1", + "scope": "Repeated five-language development comparison; queries and repositories have informed changes. Not held-out evidence, full-answer precision, representative extraction precision, or performance superiority.", + "runId": "export-binding-panel-a-01", + "baselineRunId": "java-constructor-panel-a-01", + "suiteDigest": "820a5c29f59e68b4ee8493e153c806b23e458a396431f3cf381660e469391237", + "runnerDigest": "173242988699eb6fabd175c293634d3cf37c1394f76429540fd7af2a48ef7026", + "tools": [ + { + "binary": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/export-binding-resolution/compass", + "binarySha256": "04eab05bd5bbc94f3f0f86580bdd3de9950599bc9e548b8f8ba95791b8baa0c9", + "digestScope": "executable-file-only", + "name": "compass", + "version": "compass 0.3.30" + }, + { + "binary": "/Users/haipingfu/.local/bin/graphify", + "binarySha256": "a7fdb4ac8985755be15f10f89a2d17ee517130b3ac90c28c91644ae351881da3", + "digestScope": "executable-file-only", + "name": "graphify", + "version": "graphify 0.9.67" + } + ], + "baseCommit": "d71c389bb3a142fe44f79019aea0255e65821ee8", + "sourceSha256": { + "crates/compass-model/src/document.rs": "44d4f127600283af1adb32a378fcd233b22679ee21b32ab7335f76b4c25dfb6d", + "crates/compass-query/src/lib.rs": "e278a19f408edabd934711d725c06c357d590e3e5cf3d971515783b517167540", + "crates/compass-query/src/code_query.rs": "738e811194bdf0fac0593c58a594aa6cd7da43209b07d95833864e2cbe1ce856", + "crates/compass-query/src/score.rs": "e6e63abff3864a6a0a6d9e9b2a96e366bcb2317c1e0b1acc1fa4cae9fabe60d0", + "crates/compass-query/src/export_binding.rs": "f8da01cb357be0b85d140b941e5ea6ceeb602523e4b61242c021d6d750a36dc8", + "crates/compass-model/tests/traversal_confidence.rs": "b148d9f96e0cee987392d2e9be712cef01d6d65a8b17d4b988c6989cce729f83", + "crates/compass-query/tests/export_binding_resolution.rs": "0a5afcf41ae417f25d791ac8acb16cc2276333e50d06ee4a98e6294bf1e90c77" + }, + "metrics": { + "compass": { + "text": { + "medianAnswerTokens": 148.0, + "medianFirstPageTokens": 148.0, + "medianWallMs": 765.0, + "passRate": 0.8909, + "passed": 49, + "questions": 55 + }, + "selectedSourceRelationships": { + "passed": 17, + "allOccurrencesPassed": 17, + "total": 21 + }, + "sourcePaths": { + "passed": 8, + "total": 10 + } + }, + "graphify": { + "text": { + "medianAnswerTokens": 104.0, + "medianFirstPageTokens": 75.0, + "medianWallMs": 150.0, + "passRate": 0.8364, + "passed": 46, + "questions": 55 + }, + "selectedSourceRelationships": { + "passed": 20, + "allOccurrencesPassed": 17, + "total": 21 + }, + "sourcePaths": { + "passed": 8, + "total": 10 + } + } + }, + "repositories": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf", + "compassGraphByteIdenticalToBaseline": true, + "graphifyGraphByteIdenticalToBaseline": true + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234", + "compassGraphByteIdenticalToBaseline": true, + "graphifyGraphByteIdenticalToBaseline": true + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "d69152cc8900afc3f11756b8ce841adbed98ae6663fee4ebc64957974c8f860c", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69", + "compassGraphByteIdenticalToBaseline": true, + "graphifyGraphByteIdenticalToBaseline": true + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b", + "compassGraphByteIdenticalToBaseline": true, + "graphifyGraphByteIdenticalToBaseline": true + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd", + "compassGraphByteIdenticalToBaseline": true, + "graphifyGraphByteIdenticalToBaseline": true + } + ], + "textOracleDelta": [ + { + "repository": "redux", + "tool": "compass", + "question": "redux-holdout-callees", + "before": false, + "after": true + }, + { + "repository": "redux", + "tool": "compass", + "question": "redux-holdout-path-forward", + "before": false, + "after": true + }, + { + "repository": "redux", + "tool": "compass", + "question": "redux-holdout-path-reverse", + "before": false, + "after": true + } + ], + "queryChange": { + "proof": "Remove a redundant export candidate only with complete exact nondeferred contains/exports occurrence evidence, one target already in the candidate set, matching normalized name and nonempty qualified name, and same source file.", + "limits": { + "candidates": 256, + "examinedEdges": 1024, + "truncationProbe": 1 + }, + "ambiguity": "Missing, conflicting, coarse, deferred, weaker-confidence, or exhausted evidence retains ambiguity. Exact-ID lookup remains available for export bindings.", + "graphChange": "None: all five Compass graph files are byte-identical. Published identities/relationships and AST cache semantics 5 are unchanged.", + "traversalCache": "TRAILT06 replaces disposable TRAILT05; complete evidence confidence and deferred state survive compact projection.", + "reviewedSourceCensus": { + "reduxCoincidentBindings": 126, + "otherFourRepositories": 0, + "limitation": "Post-output static binding/declaration correspondence review, not 126 successful public queries or a representative precision estimate." + } + }, + "verification": { + "native": { + "passed": 1180, + "failed": 0, + "ignored": 2, + "scope": "Workspace lib/bin plus export_binding_resolution, traversal_confidence, code_traversal, store_engine, code_query_cli, compass_product; all --locked." + }, + "clippy": "Workspace lib/bin plus export_binding_resolution and traversal_confidence, --locked, -D warnings: passed.", + "newRegressionCounts": { + "exportBinding": 4, + "traversalCache": 1 + }, + "regressionSurfaces": [ + "JSON graph", + "generic materialized store", + "direct SQLite reader", + "cold and warm compact projection", + "stale cache rebuild", + "forward/reversed graph order", + "exact export ID", + "genuine ambiguity", + "candidate truncation", + "proof work exhaustion", + "coarse source location", + "weakest mixed confidence and deferred state" + ], + "fullFixtureQualification": { + "status": "passed", + "exitCode": 0, + "productionCommit": "9b63873a", + "scope": "Native scale ceilings, semantic/topology assertions, deterministic lifecycle builds, Markdown, release build and frontend precedence/positive/negative/source-anchor checks.", + "logSha256": "08d1d2312cbe4860772a9e7ebf03de41e4c257a03a4ec366cde5ebf2cb93dad4", + "releaseExecutableSha256": "a073e8599c83f14fa21e37359ff3c183540c36adce7b7bbdea4823c9f031c322" + } + }, + "remainingLimits": [ + "WalkDir ordinary-name path witnesses fail both tools; Compass retains genuine ambiguity and Graphify returns an unreviewed route.", + "Original Redux relationship identity oracle still fails four pairs because distinct export/function records remain; do not relabel these as missing calls or replace the oracle after observing results.", + "Click corrected occurrence witness remains a post-output diagnostic; original witness history is preserved.", + "Source paths are limited to previously selected short witnesses; directed and long paths remain unqualified.", + "No new MCP or source-responsibility/god-object/community-quality evidence in this run.", + "Shared-machine query timings overlap native verification; no speed or cost superiority claim.", + "General superiority and full-answer precision remain unproven." + ], + "artifactBase": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926", + "artifactsSha256": { + "export-binding-resolution/coincident-binding-census.json": "baa84957b4d2fd79a177fbd868310426a4a5cf2b9a713b1d047a4798f832ef7d", + "export-binding-resolution/confidence-census.json": "045d11e24b9927a760654cf7620caf651384cfbe463739a490ac7640b6ec9580", + "export-binding-resolution/manifest.json": "659c8d97a08ad9c90f9815c851f2f1cf4c2cea2e2954e3932a9d7ddd1debb6c8", + "export-binding-resolution/panel-a-chi-audit-01.json": "38d8758985e319e059b6e366e29ed8720c0e6ba8f2cb5ab0202e6c7efbdb59c1", + "export-binding-resolution/panel-a-click-audit-01.json": "46fa5eb5468eefe475d83f0f510d45b3f9d7f3e9f2e45916ef303a535472a87c", + "export-binding-resolution/panel-a-jsoup-audit-01.json": "7a679e6a705c86b9ede6359828f6ba9b47021bd8532c01fb88adb909637bd20f", + "export-binding-resolution/panel-a-path-audit-01.json": "a949ce75bbc98e982c51fe24fcca8dabc7e3a477388e3e3a1e9edf5bd4d08508", + "export-binding-resolution/panel-a-redux-audit-01.json": "279d10f15c3c875b45bef0948ee606a37eb18ee6fe5a1d92de298726905aa6b0", + "export-binding-resolution/panel-a-walkdir-audit-01.json": "3a4859150163e6f41cb6e4ec421bf112da5ac1b3e9568662c15270dbf55d061d", + "export-binding-resolution/policy.json": "19b85a2082136d8bce5694e05aa7082ba9f6316d61c26a2b70446cd018dd78da", + "export-binding-resolution/redux-binding-source-rows.json": "5c41ea508e29f6abd723dd6ddf33849958361da9af474904258f2e221c12d971", + "export-binding-resolution/build-01.log": "337f2e5fab181a48d2f326cb7b93a44fc0dd3d0551904ea80c45e309f33e6915", + "export-binding-resolution/cache-after-01.log": "6c21340925799b40b3cac520020c3ca9582ecc14f1f3fab29237bfe6e1de2d5a", + "export-binding-resolution/cache-after-02.log": "8bc84459762d872d85d8e48d6bd6436e17238882ced91936d22fafc59aca7d7a", + "export-binding-resolution/cache-after-03.log": "417e780cf9134f02f42e993fe1f3f5634da1fc55f25ac577e0cef9caed2717ae", + "export-binding-resolution/cache-before.log": "1902cc5e43b986ce35fe5cf379b892b4a4d09cf33858435bc30124ef81fdbccc", + "export-binding-resolution/clippy-01.log": "7fe13ed49c54c46adfde630793497e93676224e421d5e4225a398853e1626e40", + "export-binding-resolution/clippy-broad-01.log": "b72c1ff1f61423bc4f887a70bba44054cc2cd7aa52fa27d972367649f3a58e3a", + "export-binding-resolution/initial-format.log": "89441c383180099db4e4450c20a6d435e28cc007f3fd956aa6a6ec12de8dccc6", + "export-binding-resolution/native-after-01.log": "feb5b2b287d146551b0d242a4713edc2c9d57ed7144c64c75e2b20ca635ebf88", + "export-binding-resolution/native-after-02.log": "2b32cf27ae84c6dec132802c5d305b80ee3a8c3e2bbc725f1d0d6838b0032cfa", + "export-binding-resolution/native-after-03.log": "2800a5ab5cdc73a643e4c53e62ad0e5f0442780627792ef2008a40e11fb5f7f1", + "export-binding-resolution/native-before-02.log": "a2bd56d4129191018cdd298d3df8f7f15c544dd7ecdae33777606aa5e38ebb9b", + "export-binding-resolution/native-before.log": "110c861b9e2a5806b5e9d4505af0dc66fdbc859d336d86e72eb503a9fbb17d35", + "export-binding-resolution/native-broad-01.log": "27a6976b0a8c97692f75940feb5fa80c0942aa0bfa94a0b39760fdc48b0d449e", + "export-binding-resolution/panel-a-01.log": "91ef624640fff89c04522ee0fd95fdd9ab0d35eba5d7e89ac54fdda4d5f9d55d", + "runs/export-binding-panel-a-01/run.json": "c96dfecd4fc47096673e7b1eb105e79fb8a3a631394e79be7be1227c0c1db8a4", + "export-binding-resolution/full-qualification-01.log": "08d1d2312cbe4860772a9e7ebf03de41e4c257a03a4ec366cde5ebf2cb93dad4" + } +} diff --git a/benchmarks/agent_query/fastapi_owner_suffix_replay.json b/benchmarks/agent_query/fastapi_owner_suffix_replay.json new file mode 100644 index 000000000..962b3ef70 --- /dev/null +++ b/benchmarks/agent_query/fastapi_owner_suffix_replay.json @@ -0,0 +1,101 @@ +{ + "callSite": "fastapi/routing.py:1232", + "calleeId": "sha256:42b62dabbde5a02228214591292b7c6a4b23a1c5093d5c336fcbf8b7d008effd", + "callerId": "sha256:f96627f0b6942549af09703f30f4b20cc8b16cf26058d77f785ab5307b760f1d", + "candidateBinarySha256": "17620181b2ca2fb051b234fa022c1fe1bd03913fad2246f48b643603fe85c623", + "classification": "Post-registration development replay on a known failing source; not a new scored or held-out result", + "graphSha256": "1dc5712533cce50634e91994fb6bf888ea35eb0b6b3818432da69518652ac09a", + "interpretation": "Owner-qualified typed ask, legacy explain and path recover the frozen direct call; nonexistent owner fails. The registered short-name protocol still failed and is not rescored.", + "questions": [ + { + "argv": [ + "compass", + "ask", + "what does APIRoute.get_route_handler call?", + "--format", + "json", + "--graph", + "" + ], + "exitCode": 0, + "id": "ask-callees", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutSha256": "d84f348f73d22ae483925dcb4384d4ca62206f00b3fcd4be3b9e5c8039041905" + }, + { + "argv": [ + "compass", + "ask", + "call path from APIRoute.get_route_handler to get_request_handler", + "--format", + "json", + "--graph", + "" + ], + "exitCode": 0, + "id": "ask-call-path", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutSha256": "bdc359bcd0fc2a4b06160d60791bad7c2180abe3b5949c83a63aa8bcf85bc924" + }, + { + "argv": [ + "compass", + "explain", + "APIRoute.get_route_handler", + "--graph", + "" + ], + "exitCode": 0, + "id": "explain", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutSha256": "6bcaa2af1c6c56bb8a2a9ed286bd9a3615c951018d82a60c87e33c9c16dfb32e" + }, + { + "argv": [ + "compass", + "path", + "APIRoute.get_route_handler", + "get_request_handler", + "--graph", + "" + ], + "exitCode": 0, + "id": "path", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutSha256": "d764b53096b6b9153b8804e349bf8c8811504236f2a7ee7a44aa95434a15e685" + }, + { + "argv": [ + "compass", + "path", + "MissingRoute.get_route_handler", + "get_request_handler", + "--graph", + "" + ], + "exitCode": 1, + "id": "missing-path", + "stderrSha256": "7af006b515a12e70563f693252489acd3f4b67ebabadbe6347cfd5555aaef956", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + ], + "registeredRunJsonSha256": "f28a92dd08363607f534632471e15f61e7f3d6cd3ce34e479ab04ff09ebdba4c", + "registeredScoresUnchanged": { + "registeredText": { + "compass": 9, + "graphify": 8 + }, + "sourceSupported": { + "compass": 9, + "graphify": 6 + } + }, + "registeredSuiteSha256": "13338a37b219b82d6b0a99f5a8b884cc27efa8043b1a38d5a32dcfa88a53da0e", + "schema": "compass.fastapi-owner-suffix-replay/1", + "source": { + "commit": "0c2b6aafd7a2e3a5bf1055ea0ed0a41da15ba5f4", + "file": "fastapi/routing.py", + "repository": "fastapi/fastapi", + "sha256": "7b1ef65fb6b209445dc43be070a23324b7879aef9c6b9f63e6968234b7723b55" + } +} diff --git a/benchmarks/agent_query/fd_result_vec_replay.json b/benchmarks/agent_query/fd_result_vec_replay.json new file mode 100644 index 000000000..84a5c9db5 --- /dev/null +++ b/benchmarks/agent_query/fd_result_vec_replay.json @@ -0,0 +1,37 @@ +{ + "schema": "compass.agent-query-replay/1", + "repository": "sharkdp/fd", + "sourceCommit": "b422e5d8c9cffaa1ae43ba68e7b97a60fb3e8ae5", + "sourceFile": "src/exec/mod.rs", + "sourceFileSha256": "bd1aa5927c74a583c57ae7c49b160df28eaa5b543685fec3a06be0e417dea620", + "registrationSha256": "34cddd72fb17386bfe29d42e1fd8c3e9f0683a9b16ddd06500492b93cb273721", + "runnerSha256": "173242988699eb6fabd175c293634d3cf37c1394f76429540fd7af2a48ef7026", + "baselineRun": "fd-shadow-02", + "replayRun": "fd-result-vec-03", + "compassBinarySha256": "da2c565517ea7976b42540d242c060eee578dd61d2e9bd194ab7f25c7de02781", + "baselineCompassGraphSha256": "70eb55937cc7c92d250a3a102d6af8153aa0a2966f64d76ba7490be88d5deb04", + "replayCompassGraphSha256": "d4b858b6128a1a696b4542876e48ce546c984f23e342eeeb48b609b4b2781be6", + "graphifyGraphSha256": "f75a8fd15c6a4db40e7f7464d7c68a5530f9425c47c732a49a379e1b00cb7e69", + "selectedTextOracles": { + "baselineCompass": "11/12", + "replayCompass": "12/12", + "graphify": "9/12", + "scope": "One known Rust repository and 12 previously registered questions; not a whole-graph or held-out accuracy estimate" + }, + "addedSourceReviewedCalls": [ + {"caller": "CommandSet::execute", "callee": "CommandTemplate::generate", "line": 86}, + {"caller": "CommandSet::execute_batch", "callee": "CommandBuilder::push", "line": 104}, + {"caller": "CommandSet::execute_batch", "callee": "CommandBuilder::finish", "line": 111}, + {"caller": "CommandSet::execute_batch", "callee": "CommandBuilder::exit_code", "line": 116}, + {"caller": "CommandTemplate::generate", "callee": "FormatTemplate::generate", "line": 267}, + {"caller": "tests::generate_str", "callee": "FormatTemplate::generate", "line": 283} + ], + "removedCalls": 0, + "additionalReferenceKeysWithoutIndependentPrecisionReview": 213, + "knownGraphifyWrongConstructor": { + "line": 97, + "sourceTarget": "CommandBuilder::new", + "graphifyTarget": "CommandTemplate::new", + "textOraclePassRetained": true + } +} diff --git a/benchmarks/agent_query/fixtures/java_field_bindings/BindingFixture.java b/benchmarks/agent_query/fixtures/java_field_bindings/BindingFixture.java new file mode 100644 index 000000000..11def8775 --- /dev/null +++ b/benchmarks/agent_query/fixtures/java_field_bindings/BindingFixture.java @@ -0,0 +1,38 @@ +package bindings; +import static java.lang.Integer.MAX_VALUE; + +// UTF-16 and UTF-8 offsets differ after λ and 🧭. +public class BindingFixture extends Base { + int left, right; + static final int LIMIT = 3; + String label = "λ🧭"; + int initial = left; // expect left; owner initial + { right = left; } // expect right,left; owner BindingFixture + int read(int seed) { return left; } // expect left; overload 1 + int read(String seed) { return right; } // expect right; overload 2 + int compound() { left += right; return left; } // expect left,right,left + int constant() { return LIMIT; } // expect LIMIT despite bytecode folding + int external() { return MAX_VALUE; } // external field, no source declaration + int commented(BindingFixture self) { return self./* comment */left; } // expect left + int \u0078; + int escaped() { return \u0078; } // expect x with unsupported raw spelling anchor + java.util.function.IntSupplier lambda() { return () -> left; } // expect left; owner lambda + int hidden() { return super.left + left; } // expect Base.left,left + Object anonymous() { + return new Object() { + int left; + int get() { return left; } // expect anonymous left; owner get + }; + } + int local() { + class Local { + int left; + int get() { return left; } // expect local left; owner get + } + return new Local().get(); + } + enum Token { A, B } + Token token() { return Token.A; } // expect enum constant A + int intrinsic(int[] values) { return values.length + BindingFixture.class.getName().length(); } // two intrinsics +} +class Base { int left; } diff --git a/benchmarks/agent_query/fixtures/java_field_bindings/adversarial-manifest.json b/benchmarks/agent_query/fixtures/java_field_bindings/adversarial-manifest.json new file mode 100644 index 000000000..a3f77d719 --- /dev/null +++ b/benchmarks/agent_query/fixtures/java_field_bindings/adversarial-manifest.json @@ -0,0 +1,8 @@ +{ + "files": { + "BindingFixture.java": "3c6af5eee01529024a68fa9822cf882d60791b860eb164e180329c8e2eb1f19b" + }, + "captureSha256": "be9b847db2aa9a8a298c9fe2c91453250e3c8b2d8ba89dbca87c787e6f5f7967", + "toolSha256": "0616d29730f77fc33a313e5c3280d6905c5435433f8e52ac4250ce2a8124e9d6", + "compilerRuntime": "17.0.8.1+8-LTS" +} diff --git a/benchmarks/agent_query/fixtures/java_field_bindings/adversarial.jsonl b/benchmarks/agent_query/fixtures/java_field_bindings/adversarial.jsonl new file mode 100644 index 000000000..dc807d864 --- /dev/null +++ b/benchmarks/agent_query/fixtures/java_field_bindings/adversarial.jsonl @@ -0,0 +1,53 @@ +{"type":"header","schema":"compass.javac-field-bindings/1","files":1,"sourceBytes":1680,"release":"17","positionEncoding":"UTF-16 code units","compilerRuntime":"17.0.8.1+8-LTS"} +{"type":"declaration","declaration":{"id":"BindingFixture.java:113:1648:class:BindingFixture","kind":"class","file":"BindingFixture.java","name":"BindingFixture","qualified":"bindings.BindingFixture","startUtf16":113,"endUtf16":1648,"startLine":5,"endLine":37}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:160:169:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.BindingFixture::left","startUtf16":160,"endUtf16":169,"startLine":6,"endLine":6}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:160:176:field:right","kind":"field","file":"BindingFixture.java","name":"right","qualified":"bindings.BindingFixture::right","startUtf16":160,"endUtf16":176,"startLine":6,"endLine":6}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:181:208:field:LIMIT","kind":"field","file":"BindingFixture.java","name":"LIMIT","qualified":"bindings.BindingFixture::LIMIT","startUtf16":181,"endUtf16":208,"startLine":7,"endLine":7}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:213:234:field:label","kind":"field","file":"BindingFixture.java","name":"label","qualified":"bindings.BindingFixture::label","startUtf16":213,"endUtf16":234,"startLine":8,"endLine":8}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:239:258:field:initial","kind":"field","file":"BindingFixture.java","name":"initial","qualified":"bindings.BindingFixture::initial","startUtf16":239,"endUtf16":258,"startLine":9,"endLine":9}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":253,"expressionEndUtf16":257,"tokenStartUtf16":253,"tokenEndUtf16":257,"anchorStatus":"exact","line":9,"targetKind":"field","targetQualified":"bindings.BindingFixture::left","targetOrigin":"source","target":{"id":"BindingFixture.java:160:169:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.BindingFixture::left","startUtf16":160,"endUtf16":169,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:239:258:field:initial","kind":"field","file":"BindingFixture.java","name":"initial","qualified":"bindings.BindingFixture::initial","startUtf16":239,"endUtf16":258,"startLine":9,"endLine":9}} +{"type":"fieldReference","file":"BindingFixture.java","name":"right","expressionStartUtf16":295,"expressionEndUtf16":300,"tokenStartUtf16":295,"tokenEndUtf16":300,"anchorStatus":"exact","line":10,"targetKind":"field","targetQualified":"bindings.BindingFixture::right","targetOrigin":"source","target":{"id":"BindingFixture.java:160:176:field:right","kind":"field","file":"BindingFixture.java","name":"right","qualified":"bindings.BindingFixture::right","startUtf16":160,"endUtf16":176,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:113:1648:class:BindingFixture","kind":"class","file":"BindingFixture.java","name":"BindingFixture","qualified":"bindings.BindingFixture","startUtf16":113,"endUtf16":1648,"startLine":5,"endLine":37}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":303,"expressionEndUtf16":307,"tokenStartUtf16":303,"tokenEndUtf16":307,"anchorStatus":"exact","line":10,"targetKind":"field","targetQualified":"bindings.BindingFixture::left","targetOrigin":"source","target":{"id":"BindingFixture.java:160:169:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.BindingFixture::left","startUtf16":160,"endUtf16":169,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:113:1648:class:BindingFixture","kind":"class","file":"BindingFixture.java","name":"BindingFixture","qualified":"bindings.BindingFixture","startUtf16":113,"endUtf16":1648,"startLine":5,"endLine":37}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:358:393:method:read","kind":"method","file":"BindingFixture.java","name":"read","qualified":"bindings.BindingFixture::read","startUtf16":358,"endUtf16":393,"startLine":11,"endLine":11}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":386,"expressionEndUtf16":390,"tokenStartUtf16":386,"tokenEndUtf16":390,"anchorStatus":"exact","line":11,"targetKind":"field","targetQualified":"bindings.BindingFixture::left","targetOrigin":"source","target":{"id":"BindingFixture.java:160:169:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.BindingFixture::left","startUtf16":160,"endUtf16":169,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:358:393:method:read","kind":"method","file":"BindingFixture.java","name":"read","qualified":"bindings.BindingFixture::read","startUtf16":358,"endUtf16":393,"startLine":11,"endLine":11}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:425:464:method:read","kind":"method","file":"BindingFixture.java","name":"read","qualified":"bindings.BindingFixture::read","startUtf16":425,"endUtf16":464,"startLine":12,"endLine":12}} +{"type":"fieldReference","file":"BindingFixture.java","name":"right","expressionStartUtf16":456,"expressionEndUtf16":461,"tokenStartUtf16":456,"tokenEndUtf16":461,"anchorStatus":"exact","line":12,"targetKind":"field","targetQualified":"bindings.BindingFixture::right","targetOrigin":"source","target":{"id":"BindingFixture.java:160:176:field:right","kind":"field","file":"BindingFixture.java","name":"right","qualified":"bindings.BindingFixture::right","startUtf16":160,"endUtf16":176,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:425:464:method:read","kind":"method","file":"BindingFixture.java","name":"read","qualified":"bindings.BindingFixture::read","startUtf16":425,"endUtf16":464,"startLine":12,"endLine":12}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:497:543:method:compound","kind":"method","file":"BindingFixture.java","name":"compound","qualified":"bindings.BindingFixture::compound","startUtf16":497,"endUtf16":543,"startLine":13,"endLine":13}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":514,"expressionEndUtf16":518,"tokenStartUtf16":514,"tokenEndUtf16":518,"anchorStatus":"exact","line":13,"targetKind":"field","targetQualified":"bindings.BindingFixture::left","targetOrigin":"source","target":{"id":"BindingFixture.java:160:169:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.BindingFixture::left","startUtf16":160,"endUtf16":169,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:497:543:method:compound","kind":"method","file":"BindingFixture.java","name":"compound","qualified":"bindings.BindingFixture::compound","startUtf16":497,"endUtf16":543,"startLine":13,"endLine":13}} +{"type":"fieldReference","file":"BindingFixture.java","name":"right","expressionStartUtf16":522,"expressionEndUtf16":527,"tokenStartUtf16":522,"tokenEndUtf16":527,"anchorStatus":"exact","line":13,"targetKind":"field","targetQualified":"bindings.BindingFixture::right","targetOrigin":"source","target":{"id":"BindingFixture.java:160:176:field:right","kind":"field","file":"BindingFixture.java","name":"right","qualified":"bindings.BindingFixture::right","startUtf16":160,"endUtf16":176,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:497:543:method:compound","kind":"method","file":"BindingFixture.java","name":"compound","qualified":"bindings.BindingFixture::compound","startUtf16":497,"endUtf16":543,"startLine":13,"endLine":13}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":536,"expressionEndUtf16":540,"tokenStartUtf16":536,"tokenEndUtf16":540,"anchorStatus":"exact","line":13,"targetKind":"field","targetQualified":"bindings.BindingFixture::left","targetOrigin":"source","target":{"id":"BindingFixture.java:160:169:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.BindingFixture::left","startUtf16":160,"endUtf16":169,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:497:543:method:compound","kind":"method","file":"BindingFixture.java","name":"compound","qualified":"bindings.BindingFixture::compound","startUtf16":497,"endUtf16":543,"startLine":13,"endLine":13}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:574:606:method:constant","kind":"method","file":"BindingFixture.java","name":"constant","qualified":"bindings.BindingFixture::constant","startUtf16":574,"endUtf16":606,"startLine":14,"endLine":14}} +{"type":"fieldReference","file":"BindingFixture.java","name":"LIMIT","expressionStartUtf16":598,"expressionEndUtf16":603,"tokenStartUtf16":598,"tokenEndUtf16":603,"anchorStatus":"exact","line":14,"targetKind":"field","targetQualified":"bindings.BindingFixture::LIMIT","targetOrigin":"source","target":{"id":"BindingFixture.java:181:208:field:LIMIT","kind":"field","file":"BindingFixture.java","name":"LIMIT","qualified":"bindings.BindingFixture::LIMIT","startUtf16":181,"endUtf16":208,"startLine":7,"endLine":7},"owner":{"id":"BindingFixture.java:574:606:method:constant","kind":"method","file":"BindingFixture.java","name":"constant","qualified":"bindings.BindingFixture::constant","startUtf16":574,"endUtf16":606,"startLine":14,"endLine":14}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:652:688:method:external","kind":"method","file":"BindingFixture.java","name":"external","qualified":"bindings.BindingFixture::external","startUtf16":652,"endUtf16":688,"startLine":15,"endLine":15}} +{"type":"fieldReference","file":"BindingFixture.java","name":"MAX_VALUE","expressionStartUtf16":676,"expressionEndUtf16":685,"tokenStartUtf16":676,"tokenEndUtf16":685,"anchorStatus":"exact","line":15,"targetKind":"field","targetQualified":"java.lang.Integer::MAX_VALUE","targetOrigin":"external","target":null,"owner":{"id":"BindingFixture.java:652:688:method:external","kind":"method","file":"BindingFixture.java","name":"external","qualified":"bindings.BindingFixture::external","startUtf16":652,"endUtf16":688,"startLine":15,"endLine":15}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:734:803:method:commented","kind":"method","file":"BindingFixture.java","name":"commented","qualified":"bindings.BindingFixture::commented","startUtf16":734,"endUtf16":803,"startLine":16,"endLine":16}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":778,"expressionEndUtf16":800,"tokenStartUtf16":796,"tokenEndUtf16":800,"anchorStatus":"exact","line":16,"targetKind":"field","targetQualified":"bindings.BindingFixture::left","targetOrigin":"source","target":{"id":"BindingFixture.java:160:169:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.BindingFixture::left","startUtf16":160,"endUtf16":169,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:734:803:method:commented","kind":"method","file":"BindingFixture.java","name":"commented","qualified":"bindings.BindingFixture::commented","startUtf16":734,"endUtf16":803,"startLine":16,"endLine":16}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:823:834:field:x","kind":"field","file":"BindingFixture.java","name":"x","qualified":"bindings.BindingFixture::x","startUtf16":823,"endUtf16":834,"startLine":17,"endLine":17}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:839:871:method:escaped","kind":"method","file":"BindingFixture.java","name":"escaped","qualified":"bindings.BindingFixture::escaped","startUtf16":839,"endUtf16":871,"startLine":18,"endLine":18}} +{"type":"fieldReference","file":"BindingFixture.java","name":"x","expressionStartUtf16":862,"expressionEndUtf16":868,"tokenStartUtf16":null,"tokenEndUtf16":null,"anchorStatus":"unsupported-raw-spelling","line":18,"targetKind":"field","targetQualified":"bindings.BindingFixture::x","targetOrigin":"source","target":{"id":"BindingFixture.java:823:834:field:x","kind":"field","file":"BindingFixture.java","name":"x","qualified":"bindings.BindingFixture::x","startUtf16":823,"endUtf16":834,"startLine":17,"endLine":17},"owner":{"id":"BindingFixture.java:839:871:method:escaped","kind":"method","file":"BindingFixture.java","name":"escaped","qualified":"bindings.BindingFixture::escaped","startUtf16":839,"endUtf16":871,"startLine":18,"endLine":18}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:925:987:method:lambda","kind":"method","file":"BindingFixture.java","name":"lambda","qualified":"bindings.BindingFixture::lambda","startUtf16":925,"endUtf16":987,"startLine":19,"endLine":19}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":980,"expressionEndUtf16":984,"tokenStartUtf16":980,"tokenEndUtf16":984,"anchorStatus":"exact","line":19,"targetKind":"field","targetQualified":"bindings.BindingFixture::left","targetOrigin":"source","target":{"id":"BindingFixture.java:160:169:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.BindingFixture::left","startUtf16":160,"endUtf16":169,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:925:987:method:lambda","kind":"method","file":"BindingFixture.java","name":"lambda","qualified":"bindings.BindingFixture::lambda","startUtf16":925,"endUtf16":987,"startLine":19,"endLine":19}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1021:1063:method:hidden","kind":"method","file":"BindingFixture.java","name":"hidden","qualified":"bindings.BindingFixture::hidden","startUtf16":1021,"endUtf16":1063,"startLine":20,"endLine":20}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":1043,"expressionEndUtf16":1053,"tokenStartUtf16":1049,"tokenEndUtf16":1053,"anchorStatus":"exact","line":20,"targetKind":"field","targetQualified":"bindings.Base::left","targetOrigin":"source","target":{"id":"BindingFixture.java:1662:1671:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.Base::left","startUtf16":1662,"endUtf16":1671,"startLine":38,"endLine":38},"owner":{"id":"BindingFixture.java:1021:1063:method:hidden","kind":"method","file":"BindingFixture.java","name":"hidden","qualified":"bindings.BindingFixture::hidden","startUtf16":1021,"endUtf16":1063,"startLine":20,"endLine":20}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":1056,"expressionEndUtf16":1060,"tokenStartUtf16":1056,"tokenEndUtf16":1060,"anchorStatus":"exact","line":20,"targetKind":"field","targetQualified":"bindings.BindingFixture::left","targetOrigin":"source","target":{"id":"BindingFixture.java:160:169:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.BindingFixture::left","startUtf16":160,"endUtf16":169,"startLine":6,"endLine":6},"owner":{"id":"BindingFixture.java:1021:1063:method:hidden","kind":"method","file":"BindingFixture.java","name":"hidden","qualified":"bindings.BindingFixture::hidden","startUtf16":1021,"endUtf16":1063,"startLine":20,"endLine":20}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1093:1257:method:anonymous","kind":"method","file":"BindingFixture.java","name":"anonymous","qualified":"bindings.BindingFixture::anonymous","startUtf16":1093,"endUtf16":1257,"startLine":21,"endLine":26}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1142:1250:class:","kind":"class","file":"BindingFixture.java","name":"","qualified":"","startUtf16":1142,"endUtf16":1250,"startLine":22,"endLine":25}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1156:1165:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"::left","startUtf16":1156,"endUtf16":1165,"startLine":23,"endLine":23}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1178:1204:method:get","kind":"method","file":"BindingFixture.java","name":"get","qualified":"::get","startUtf16":1178,"endUtf16":1204,"startLine":24,"endLine":24}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":1197,"expressionEndUtf16":1201,"tokenStartUtf16":1197,"tokenEndUtf16":1201,"anchorStatus":"exact","line":24,"targetKind":"field","targetQualified":"::left","targetOrigin":"source","target":{"id":"BindingFixture.java:1156:1165:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"::left","startUtf16":1156,"endUtf16":1165,"startLine":23,"endLine":23},"owner":{"id":"BindingFixture.java:1178:1204:method:get","kind":"method","file":"BindingFixture.java","name":"get","qualified":"::get","startUtf16":1178,"endUtf16":1204,"startLine":24,"endLine":24}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1262:1440:method:local","kind":"method","file":"BindingFixture.java","name":"local","qualified":"bindings.BindingFixture::local","startUtf16":1262,"endUtf16":1440,"startLine":27,"endLine":33}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1284:1400:class:Local","kind":"class","file":"BindingFixture.java","name":"Local","qualified":"Local","startUtf16":1284,"endUtf16":1400,"startLine":28,"endLine":31}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1310:1319:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"Local::left","startUtf16":1310,"endUtf16":1319,"startLine":29,"endLine":29}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1332:1358:method:get","kind":"method","file":"BindingFixture.java","name":"get","qualified":"Local::get","startUtf16":1332,"endUtf16":1358,"startLine":30,"endLine":30}} +{"type":"fieldReference","file":"BindingFixture.java","name":"left","expressionStartUtf16":1351,"expressionEndUtf16":1355,"tokenStartUtf16":1351,"tokenEndUtf16":1355,"anchorStatus":"exact","line":30,"targetKind":"field","targetQualified":"Local::left","targetOrigin":"source","target":{"id":"BindingFixture.java:1310:1319:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"Local::left","startUtf16":1310,"endUtf16":1319,"startLine":29,"endLine":29},"owner":{"id":"BindingFixture.java:1332:1358:method:get","kind":"method","file":"BindingFixture.java","name":"get","qualified":"Local::get","startUtf16":1332,"endUtf16":1358,"startLine":30,"endLine":30}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1445:1464:enum:Token","kind":"enum","file":"BindingFixture.java","name":"Token","qualified":"bindings.BindingFixture.Token","startUtf16":1445,"endUtf16":1464,"startLine":34,"endLine":34}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1458:1459:enum_constant:A","kind":"enum_constant","file":"BindingFixture.java","name":"A","qualified":"bindings.BindingFixture.Token::A","startUtf16":1458,"endUtf16":1459,"startLine":34,"endLine":34}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1461:1462:enum_constant:B","kind":"enum_constant","file":"BindingFixture.java","name":"B","qualified":"bindings.BindingFixture.Token::B","startUtf16":1461,"endUtf16":1462,"startLine":34,"endLine":34}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1469:1502:method:token","kind":"method","file":"BindingFixture.java","name":"token","qualified":"bindings.BindingFixture::token","startUtf16":1469,"endUtf16":1502,"startLine":35,"endLine":35}} +{"type":"fieldReference","file":"BindingFixture.java","name":"A","expressionStartUtf16":1492,"expressionEndUtf16":1499,"tokenStartUtf16":1498,"tokenEndUtf16":1499,"anchorStatus":"exact","line":35,"targetKind":"enum_constant","targetQualified":"bindings.BindingFixture.Token::A","targetOrigin":"source","target":{"id":"BindingFixture.java:1458:1459:enum_constant:A","kind":"enum_constant","file":"BindingFixture.java","name":"A","qualified":"bindings.BindingFixture.Token::A","startUtf16":1458,"endUtf16":1459,"startLine":34,"endLine":34},"owner":{"id":"BindingFixture.java:1469:1502:method:token","kind":"method","file":"BindingFixture.java","name":"token","qualified":"bindings.BindingFixture::token","startUtf16":1469,"endUtf16":1502,"startLine":35,"endLine":35}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1533:1628:method:intrinsic","kind":"method","file":"BindingFixture.java","name":"intrinsic","qualified":"bindings.BindingFixture::intrinsic","startUtf16":1533,"endUtf16":1628,"startLine":36,"endLine":36}} +{"type":"fieldReference","file":"BindingFixture.java","name":"length","expressionStartUtf16":1570,"expressionEndUtf16":1583,"tokenStartUtf16":1577,"tokenEndUtf16":1583,"anchorStatus":"exact","line":36,"targetKind":"field","targetQualified":"Array::length","targetOrigin":"array-length","target":null,"owner":{"id":"BindingFixture.java:1533:1628:method:intrinsic","kind":"method","file":"BindingFixture.java","name":"intrinsic","qualified":"bindings.BindingFixture::intrinsic","startUtf16":1533,"endUtf16":1628,"startLine":36,"endLine":36}} +{"type":"fieldReference","file":"BindingFixture.java","name":"class","expressionStartUtf16":1586,"expressionEndUtf16":1606,"tokenStartUtf16":1601,"tokenEndUtf16":1606,"anchorStatus":"exact","line":36,"targetKind":"field","targetQualified":"bindings.BindingFixture::class","targetOrigin":"class-literal","target":null,"owner":{"id":"BindingFixture.java:1533:1628:method:intrinsic","kind":"method","file":"BindingFixture.java","name":"intrinsic","qualified":"bindings.BindingFixture::intrinsic","startUtf16":1533,"endUtf16":1628,"startLine":36,"endLine":36}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1649:1673:class:Base","kind":"class","file":"BindingFixture.java","name":"Base","qualified":"bindings.Base","startUtf16":1649,"endUtf16":1673,"startLine":38,"endLine":38}} +{"type":"declaration","declaration":{"id":"BindingFixture.java:1662:1671:field:left","kind":"field","file":"BindingFixture.java","name":"left","qualified":"bindings.Base::left","startUtf16":1662,"endUtf16":1671,"startLine":38,"endLine":38}} +{"type":"complete","declarations":31,"fieldReferences":20,"unboundExpressions":0} diff --git a/benchmarks/agent_query/fixtures/java_field_bindings/scope-manifest.json b/benchmarks/agent_query/fixtures/java_field_bindings/scope-manifest.json new file mode 100644 index 000000000..12f9b1405 --- /dev/null +++ b/benchmarks/agent_query/fixtures/java_field_bindings/scope-manifest.json @@ -0,0 +1,8 @@ +{ + "files": { + "ScopeFixture.java": "bfc306296dbc95809b0d0171ed770785ce442ba6253dd98ecbbf37cff9730335" + }, + "captureSha256": "f9add7ff7e6b7158f6a0afdc8be51c439417952b7f4a26dad8eedd047484b1c6", + "toolSha256": "0616d29730f77fc33a313e5c3280d6905c5435433f8e52ac4250ce2a8124e9d6", + "compilerRuntime": "17.0.8.1+8-LTS" +} diff --git a/benchmarks/agent_query/fixtures/java_field_bindings/scope.jsonl b/benchmarks/agent_query/fixtures/java_field_bindings/scope.jsonl new file mode 100644 index 000000000..1b97a46b6 --- /dev/null +++ b/benchmarks/agent_query/fixtures/java_field_bindings/scope.jsonl @@ -0,0 +1,105 @@ +{"type":"header","schema":"compass.javac-field-bindings/1","files":1,"sourceBytes":5634,"release":"17","positionEncoding":"UTF-16 code units","compilerRuntime":"17.0.8.1+8-LTS"} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:182:5362:class:ScopeFixture","kind":"class","file":"ScopeFixture.java","name":"ScopeFixture","qualified":"audit.ScopeFixture","startUtf16":182,"endUtf16":5362,"startLine":7,"endLine":154}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:263:273:field:slot","kind":"field","file":"ScopeFixture.java","name":"slot","qualified":"audit.ScopeFixture::slot","startUtf16":263,"endUtf16":273,"startLine":9,"endLine":9}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:298:311:field:items","kind":"field","file":"ScopeFixture.java","name":"items","qualified":"audit.ScopeFixture::items","startUtf16":298,"endUtf16":311,"startLine":10,"endLine":10}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:337:362:field:failure","kind":"field","file":"ScopeFixture.java","name":"failure","qualified":"audit.ScopeFixture::failure","startUtf16":337,"endUtf16":362,"startLine":11,"endLine":11}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:390:405:field:resource","kind":"field","file":"ScopeFixture.java","name":"resource","qualified":"audit.ScopeFixture::resource","startUtf16":390,"endUtf16":405,"startLine":12,"endLine":12}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:434:449:field:pattern","kind":"field","file":"ScopeFixture.java","name":"pattern","qualified":"audit.ScopeFixture::pattern","startUtf16":434,"endUtf16":449,"startLine":13,"endLine":13}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:477:500:field:staticValue","kind":"field","file":"ScopeFixture.java","name":"staticValue","qualified":"audit.ScopeFixture::staticValue","startUtf16":477,"endUtf16":500,"startLine":14,"endLine":14}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:528:620:constructor:","kind":"constructor","file":"ScopeFixture.java","name":"","qualified":"audit.ScopeFixture::","startUtf16":528,"endUtf16":620,"startLine":16,"endLine":18}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":562,"expressionEndUtf16":572,"tokenStartUtf16":567,"tokenEndUtf16":572,"anchorStatus":"exact","line":17,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:528:620:constructor:","kind":"constructor","file":"ScopeFixture.java","name":"","qualified":"audit.ScopeFixture::","startUtf16":528,"endUtf16":620,"startLine":16,"endLine":18}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:625:709:method:explicit","kind":"method","file":"ScopeFixture.java","name":"explicit","qualified":"audit.ScopeFixture::explicit","startUtf16":625,"endUtf16":709,"startLine":19,"endLine":21}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":657,"expressionEndUtf16":667,"tokenStartUtf16":662,"tokenEndUtf16":667,"anchorStatus":"exact","line":20,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:625:709:method:explicit","kind":"method","file":"ScopeFixture.java","name":"explicit","qualified":"audit.ScopeFixture::explicit","startUtf16":625,"endUtf16":709,"startLine":19,"endLine":21}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:714:793:method:implicit","kind":"method","file":"ScopeFixture.java","name":"implicit","qualified":"audit.ScopeFixture::implicit","startUtf16":714,"endUtf16":793,"startLine":22,"endLine":24}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":746,"expressionEndUtf16":751,"tokenStartUtf16":746,"tokenEndUtf16":751,"anchorStatus":"exact","line":23,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:714:793:method:implicit","kind":"method","file":"ScopeFixture.java","name":"implicit","qualified":"audit.ScopeFixture::implicit","startUtf16":714,"endUtf16":793,"startLine":22,"endLine":24}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:798:897:method:repeated","kind":"method","file":"ScopeFixture.java","name":"repeated","qualified":"audit.ScopeFixture::repeated","startUtf16":798,"endUtf16":897,"startLine":25,"endLine":27}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":830,"expressionEndUtf16":835,"tokenStartUtf16":830,"tokenEndUtf16":835,"anchorStatus":"exact","line":26,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:798:897:method:repeated","kind":"method","file":"ScopeFixture.java","name":"repeated","qualified":"audit.ScopeFixture::repeated","startUtf16":798,"endUtf16":897,"startLine":25,"endLine":27}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":838,"expressionEndUtf16":848,"tokenStartUtf16":843,"tokenEndUtf16":848,"anchorStatus":"exact","line":26,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:798:897:method:repeated","kind":"method","file":"ScopeFixture.java","name":"repeated","qualified":"audit.ScopeFixture::repeated","startUtf16":798,"endUtf16":897,"startLine":25,"endLine":27}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:902:984:method:parameter","kind":"method","file":"ScopeFixture.java","name":"parameter","qualified":"audit.ScopeFixture::parameter","startUtf16":902,"endUtf16":984,"startLine":28,"endLine":30}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:989:1214:method:block","kind":"method","file":"ScopeFixture.java","name":"block","qualified":"audit.ScopeFixture::block","startUtf16":989,"endUtf16":1214,"startLine":31,"endLine":38}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":1017,"expressionEndUtf16":1022,"tokenStartUtf16":1017,"tokenEndUtf16":1022,"anchorStatus":"exact","line":32,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:989:1214:method:block","kind":"method","file":"ScopeFixture.java","name":"block","qualified":"audit.ScopeFixture::block","startUtf16":989,"endUtf16":1214,"startLine":31,"endLine":38}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":1168,"expressionEndUtf16":1173,"tokenStartUtf16":1168,"tokenEndUtf16":1173,"anchorStatus":"exact","line":37,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:989:1214:method:block","kind":"method","file":"ScopeFixture.java","name":"block","qualified":"audit.ScopeFixture::block","startUtf16":989,"endUtf16":1214,"startLine":31,"endLine":38}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:1219:1367:method:beforeLocal","kind":"method","file":"ScopeFixture.java","name":"beforeLocal","qualified":"audit.ScopeFixture::beforeLocal","startUtf16":1219,"endUtf16":1367,"startLine":39,"endLine":43}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":1252,"expressionEndUtf16":1257,"tokenStartUtf16":1252,"tokenEndUtf16":1257,"anchorStatus":"exact","line":40,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:1219:1367:method:beforeLocal","kind":"method","file":"ScopeFixture.java","name":"beforeLocal","qualified":"audit.ScopeFixture::beforeLocal","startUtf16":1219,"endUtf16":1367,"startLine":39,"endLine":43}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:1372:1550:method:loop","kind":"method","file":"ScopeFixture.java","name":"loop","qualified":"audit.ScopeFixture::loop","startUtf16":1372,"endUtf16":1550,"startLine":44,"endLine":49}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":1506,"expressionEndUtf16":1511,"tokenStartUtf16":1506,"tokenEndUtf16":1511,"anchorStatus":"exact","line":48,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:1372:1550:method:loop","kind":"method","file":"ScopeFixture.java","name":"loop","qualified":"audit.ScopeFixture::loop","startUtf16":1372,"endUtf16":1550,"startLine":44,"endLine":49}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:1555:1800:method:enhanced","kind":"method","file":"ScopeFixture.java","name":"enhanced","qualified":"audit.ScopeFixture::enhanced","startUtf16":1555,"endUtf16":1800,"startLine":50,"endLine":55}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"items","expressionStartUtf16":1597,"expressionEndUtf16":1602,"tokenStartUtf16":1597,"tokenEndUtf16":1602,"anchorStatus":"exact","line":51,"targetKind":"field","targetQualified":"audit.ScopeFixture::items","targetOrigin":"source","target":{"id":"ScopeFixture.java:298:311:field:items","kind":"field","file":"ScopeFixture.java","name":"items","qualified":"audit.ScopeFixture::items","startUtf16":298,"endUtf16":311,"startLine":10,"endLine":10},"owner":{"id":"ScopeFixture.java:1555:1800:method:enhanced","kind":"method","file":"ScopeFixture.java","name":"enhanced","qualified":"audit.ScopeFixture::enhanced","startUtf16":1555,"endUtf16":1800,"startLine":50,"endLine":55}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":1662,"expressionEndUtf16":1672,"tokenStartUtf16":1667,"tokenEndUtf16":1672,"anchorStatus":"exact","line":52,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:1555:1800:method:enhanced","kind":"method","file":"ScopeFixture.java","name":"enhanced","qualified":"audit.ScopeFixture::enhanced","startUtf16":1555,"endUtf16":1800,"startLine":50,"endLine":55}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":1737,"expressionEndUtf16":1747,"tokenStartUtf16":1742,"tokenEndUtf16":1747,"anchorStatus":"exact","line":54,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:1555:1800:method:enhanced","kind":"method","file":"ScopeFixture.java","name":"enhanced","qualified":"audit.ScopeFixture::enhanced","startUtf16":1555,"endUtf16":1800,"startLine":50,"endLine":55}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"slot","expressionStartUtf16":1737,"expressionEndUtf16":1741,"tokenStartUtf16":1737,"tokenEndUtf16":1741,"anchorStatus":"exact","line":54,"targetKind":"field","targetQualified":"audit.ScopeFixture::slot","targetOrigin":"source","target":{"id":"ScopeFixture.java:263:273:field:slot","kind":"field","file":"ScopeFixture.java","name":"slot","qualified":"audit.ScopeFixture::slot","startUtf16":263,"endUtf16":273,"startLine":9,"endLine":9},"owner":{"id":"ScopeFixture.java:1555:1800:method:enhanced","kind":"method","file":"ScopeFixture.java","name":"enhanced","qualified":"audit.ScopeFixture::enhanced","startUtf16":1555,"endUtf16":1800,"startLine":50,"endLine":55}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:1805:2107:method:lambdas","kind":"method","file":"ScopeFixture.java","name":"lambdas","qualified":"audit.ScopeFixture::lambdas","startUtf16":1805,"endUtf16":2107,"startLine":56,"endLine":61}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":1926,"expressionEndUtf16":1936,"tokenStartUtf16":1931,"tokenEndUtf16":1936,"anchorStatus":"exact","line":58,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:1805:2107:method:lambdas","kind":"method","file":"ScopeFixture.java","name":"lambdas","qualified":"audit.ScopeFixture::lambdas","startUtf16":1805,"endUtf16":2107,"startLine":56,"endLine":61}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":2001,"expressionEndUtf16":2006,"tokenStartUtf16":2001,"tokenEndUtf16":2006,"anchorStatus":"exact","line":59,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:1805:2107:method:lambdas","kind":"method","file":"ScopeFixture.java","name":"lambdas","qualified":"audit.ScopeFixture::lambdas","startUtf16":1805,"endUtf16":2107,"startLine":56,"endLine":61}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:2112:2374:method:catches","kind":"method","file":"ScopeFixture.java","name":"catches","qualified":"audit.ScopeFixture::catches","startUtf16":2112,"endUtf16":2374,"startLine":62,"endLine":68}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"failure","expressionStartUtf16":2308,"expressionEndUtf16":2315,"tokenStartUtf16":2308,"tokenEndUtf16":2315,"anchorStatus":"exact","line":67,"targetKind":"field","targetQualified":"audit.ScopeFixture::failure","targetOrigin":"source","target":{"id":"ScopeFixture.java:337:362:field:failure","kind":"field","file":"ScopeFixture.java","name":"failure","qualified":"audit.ScopeFixture::failure","startUtf16":337,"endUtf16":362,"startLine":11,"endLine":11},"owner":{"id":"ScopeFixture.java:2112:2374:method:catches","kind":"method","file":"ScopeFixture.java","name":"catches","qualified":"audit.ScopeFixture::catches","startUtf16":2112,"endUtf16":2374,"startLine":62,"endLine":68}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:2379:2735:method:resources","kind":"method","file":"ScopeFixture.java","name":"resources","qualified":"audit.ScopeFixture::resources","startUtf16":2379,"endUtf16":2735,"startLine":69,"endLine":76}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":2460,"expressionEndUtf16":2474,"tokenStartUtf16":2469,"tokenEndUtf16":2474,"anchorStatus":"exact","line":71,"targetKind":"field","targetQualified":"audit.Token::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5573:5583:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Token::value","startUtf16":5573,"endUtf16":5583,"startLine":165,"endLine":165},"owner":{"id":"ScopeFixture.java:2379:2735:method:resources","kind":"method","file":"ScopeFixture.java","name":"resources","qualified":"audit.ScopeFixture::resources","startUtf16":2379,"endUtf16":2735,"startLine":69,"endLine":76}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":2571,"expressionEndUtf16":2585,"tokenStartUtf16":2580,"tokenEndUtf16":2585,"anchorStatus":"exact","line":73,"targetKind":"field","targetQualified":"audit.Token::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5573:5583:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Token::value","startUtf16":5573,"endUtf16":5583,"startLine":165,"endLine":165},"owner":{"id":"ScopeFixture.java:2379:2735:method:resources","kind":"method","file":"ScopeFixture.java","name":"resources","qualified":"audit.ScopeFixture::resources","startUtf16":2379,"endUtf16":2735,"startLine":69,"endLine":76}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"resource","expressionStartUtf16":2571,"expressionEndUtf16":2579,"tokenStartUtf16":2571,"tokenEndUtf16":2579,"anchorStatus":"exact","line":73,"targetKind":"field","targetQualified":"audit.ScopeFixture::resource","targetOrigin":"source","target":{"id":"ScopeFixture.java:390:405:field:resource","kind":"field","file":"ScopeFixture.java","name":"resource","qualified":"audit.ScopeFixture::resource","startUtf16":390,"endUtf16":405,"startLine":12,"endLine":12},"owner":{"id":"ScopeFixture.java:2379:2735:method:resources","kind":"method","file":"ScopeFixture.java","name":"resources","qualified":"audit.ScopeFixture::resources","startUtf16":2379,"endUtf16":2735,"startLine":69,"endLine":76}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":2662,"expressionEndUtf16":2676,"tokenStartUtf16":2671,"tokenEndUtf16":2676,"anchorStatus":"exact","line":75,"targetKind":"field","targetQualified":"audit.Token::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5573:5583:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Token::value","startUtf16":5573,"endUtf16":5583,"startLine":165,"endLine":165},"owner":{"id":"ScopeFixture.java:2379:2735:method:resources","kind":"method","file":"ScopeFixture.java","name":"resources","qualified":"audit.ScopeFixture::resources","startUtf16":2379,"endUtf16":2735,"startLine":69,"endLine":76}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"resource","expressionStartUtf16":2662,"expressionEndUtf16":2670,"tokenStartUtf16":2662,"tokenEndUtf16":2670,"anchorStatus":"exact","line":75,"targetKind":"field","targetQualified":"audit.ScopeFixture::resource","targetOrigin":"source","target":{"id":"ScopeFixture.java:390:405:field:resource","kind":"field","file":"ScopeFixture.java","name":"resource","qualified":"audit.ScopeFixture::resource","startUtf16":390,"endUtf16":405,"startLine":12,"endLine":12},"owner":{"id":"ScopeFixture.java:2379:2735:method:resources","kind":"method","file":"ScopeFixture.java","name":"resources","qualified":"audit.ScopeFixture::resources","startUtf16":2379,"endUtf16":2735,"startLine":69,"endLine":76}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:2740:2961:method:pattern","kind":"method","file":"ScopeFixture.java","name":"pattern","qualified":"audit.ScopeFixture::pattern","startUtf16":2740,"endUtf16":2961,"startLine":77,"endLine":82}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":2829,"expressionEndUtf16":2839,"tokenStartUtf16":2834,"tokenEndUtf16":2839,"anchorStatus":"exact","line":79,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:2740:2961:method:pattern","kind":"method","file":"ScopeFixture.java","name":"pattern","qualified":"audit.ScopeFixture::pattern","startUtf16":2740,"endUtf16":2961,"startLine":77,"endLine":82}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":2899,"expressionEndUtf16":2909,"tokenStartUtf16":2904,"tokenEndUtf16":2909,"anchorStatus":"exact","line":81,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:2740:2961:method:pattern","kind":"method","file":"ScopeFixture.java","name":"pattern","qualified":"audit.ScopeFixture::pattern","startUtf16":2740,"endUtf16":2961,"startLine":77,"endLine":82}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"slot","expressionStartUtf16":2899,"expressionEndUtf16":2903,"tokenStartUtf16":2899,"tokenEndUtf16":2903,"anchorStatus":"exact","line":81,"targetKind":"field","targetQualified":"audit.ScopeFixture::slot","targetOrigin":"source","target":{"id":"ScopeFixture.java:263:273:field:slot","kind":"field","file":"ScopeFixture.java","name":"slot","qualified":"audit.ScopeFixture::slot","startUtf16":263,"endUtf16":273,"startLine":9,"endLine":9},"owner":{"id":"ScopeFixture.java:2740:2961:method:pattern","kind":"method","file":"ScopeFixture.java","name":"pattern","qualified":"audit.ScopeFixture::pattern","startUtf16":2740,"endUtf16":2961,"startLine":77,"endLine":82}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:2966:3146:method:negatedPattern","kind":"method","file":"ScopeFixture.java","name":"negatedPattern","qualified":"audit.ScopeFixture::negatedPattern","startUtf16":2966,"endUtf16":3146,"startLine":83,"endLine":86}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"pattern","expressionStartUtf16":3003,"expressionEndUtf16":3010,"tokenStartUtf16":3003,"tokenEndUtf16":3010,"anchorStatus":"exact","line":84,"targetKind":"field","targetQualified":"audit.ScopeFixture::pattern","targetOrigin":"source","target":{"id":"ScopeFixture.java:434:449:field:pattern","kind":"field","file":"ScopeFixture.java","name":"pattern","qualified":"audit.ScopeFixture::pattern","startUtf16":434,"endUtf16":449,"startLine":13,"endLine":13},"owner":{"id":"ScopeFixture.java:2966:3146:method:negatedPattern","kind":"method","file":"ScopeFixture.java","name":"negatedPattern","qualified":"audit.ScopeFixture::negatedPattern","startUtf16":2966,"endUtf16":3146,"startLine":83,"endLine":86}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":3096,"expressionEndUtf16":3106,"tokenStartUtf16":3101,"tokenEndUtf16":3106,"anchorStatus":"exact","line":85,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:2966:3146:method:negatedPattern","kind":"method","file":"ScopeFixture.java","name":"negatedPattern","qualified":"audit.ScopeFixture::negatedPattern","startUtf16":2966,"endUtf16":3146,"startLine":83,"endLine":86}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:3151:3242:method:typed","kind":"method","file":"ScopeFixture.java","name":"typed","qualified":"audit.ScopeFixture::typed","startUtf16":3151,"endUtf16":3242,"startLine":87,"endLine":89}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":3189,"expressionEndUtf16":3199,"tokenStartUtf16":3194,"tokenEndUtf16":3199,"anchorStatus":"exact","line":88,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:3151:3242:method:typed","kind":"method","file":"ScopeFixture.java","name":"typed","qualified":"audit.ScopeFixture::typed","startUtf16":3151,"endUtf16":3242,"startLine":87,"endLine":89}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:3247:3346:method:cast","kind":"method","file":"ScopeFixture.java","name":"cast","qualified":"audit.ScopeFixture::cast","startUtf16":3247,"endUtf16":3346,"startLine":90,"endLine":92}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":3286,"expressionEndUtf16":3305,"tokenStartUtf16":3300,"tokenEndUtf16":3305,"anchorStatus":"exact","line":91,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:3247:3346:method:cast","kind":"method","file":"ScopeFixture.java","name":"cast","qualified":"audit.ScopeFixture::cast","startUtf16":3247,"endUtf16":3346,"startLine":90,"endLine":92}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:3351:3440:method:chain","kind":"method","file":"ScopeFixture.java","name":"chain","qualified":"audit.ScopeFixture::chain","startUtf16":3351,"endUtf16":3440,"startLine":93,"endLine":95}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":3380,"expressionEndUtf16":3390,"tokenStartUtf16":3385,"tokenEndUtf16":3390,"anchorStatus":"exact","line":94,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:3351:3440:method:chain","kind":"method","file":"ScopeFixture.java","name":"chain","qualified":"audit.ScopeFixture::chain","startUtf16":3351,"endUtf16":3440,"startLine":93,"endLine":95}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"slot","expressionStartUtf16":3380,"expressionEndUtf16":3384,"tokenStartUtf16":3380,"tokenEndUtf16":3384,"anchorStatus":"exact","line":94,"targetKind":"field","targetQualified":"audit.ScopeFixture::slot","targetOrigin":"source","target":{"id":"ScopeFixture.java:263:273:field:slot","kind":"field","file":"ScopeFixture.java","name":"slot","qualified":"audit.ScopeFixture::slot","startUtf16":263,"endUtf16":273,"startLine":9,"endLine":9},"owner":{"id":"ScopeFixture.java:3351:3440:method:chain","kind":"method","file":"ScopeFixture.java","name":"chain","qualified":"audit.ScopeFixture::chain","startUtf16":3351,"endUtf16":3440,"startLine":93,"endLine":95}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:3445:3544:method:indexed","kind":"method","file":"ScopeFixture.java","name":"indexed","qualified":"audit.ScopeFixture::indexed","startUtf16":3445,"endUtf16":3544,"startLine":96,"endLine":98}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":3476,"expressionEndUtf16":3490,"tokenStartUtf16":3485,"tokenEndUtf16":3490,"anchorStatus":"exact","line":97,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:3445:3544:method:indexed","kind":"method","file":"ScopeFixture.java","name":"indexed","qualified":"audit.ScopeFixture::indexed","startUtf16":3445,"endUtf16":3544,"startLine":96,"endLine":98}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"items","expressionStartUtf16":3476,"expressionEndUtf16":3481,"tokenStartUtf16":3476,"tokenEndUtf16":3481,"anchorStatus":"exact","line":97,"targetKind":"field","targetQualified":"audit.ScopeFixture::items","targetOrigin":"source","target":{"id":"ScopeFixture.java:298:311:field:items","kind":"field","file":"ScopeFixture.java","name":"items","qualified":"audit.ScopeFixture::items","startUtf16":298,"endUtf16":311,"startLine":10,"endLine":10},"owner":{"id":"ScopeFixture.java:3445:3544:method:indexed","kind":"method","file":"ScopeFixture.java","name":"indexed","qualified":"audit.ScopeFixture::indexed","startUtf16":3445,"endUtf16":3544,"startLine":96,"endLine":98}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:3549:3629:method:parent","kind":"method","file":"ScopeFixture.java","name":"parent","qualified":"audit.ScopeFixture::parent","startUtf16":3549,"endUtf16":3629,"startLine":99,"endLine":101}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":3579,"expressionEndUtf16":3590,"tokenStartUtf16":3585,"tokenEndUtf16":3590,"anchorStatus":"exact","line":100,"targetKind":"field","targetQualified":"audit.Base::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5380:5390:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Base::value","startUtf16":5380,"endUtf16":5390,"startLine":156,"endLine":156},"owner":{"id":"ScopeFixture.java:3549:3629:method:parent","kind":"method","file":"ScopeFixture.java","name":"parent","qualified":"audit.ScopeFixture::parent","startUtf16":3549,"endUtf16":3629,"startLine":99,"endLine":101}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:3634:3750:method:staticBinding","kind":"method","file":"ScopeFixture.java","name":"staticBinding","qualified":"audit.ScopeFixture::staticBinding","startUtf16":3634,"endUtf16":3750,"startLine":102,"endLine":104}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":3695,"expressionEndUtf16":3705,"tokenStartUtf16":3700,"tokenEndUtf16":3705,"anchorStatus":"exact","line":103,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:3634:3750:method:staticBinding","kind":"method","file":"ScopeFixture.java","name":"staticBinding","qualified":"audit.ScopeFixture::staticBinding","startUtf16":3634,"endUtf16":3750,"startLine":102,"endLine":104}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:3755:3852:method:subtype","kind":"method","file":"ScopeFixture.java","name":"subtype","qualified":"audit.ScopeFixture::subtype","startUtf16":3755,"endUtf16":3852,"startLine":105,"endLine":107}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":3797,"expressionEndUtf16":3807,"tokenStartUtf16":3802,"tokenEndUtf16":3807,"anchorStatus":"exact","line":106,"targetKind":"field","targetQualified":"audit.Shadow::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5495:5505:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Shadow::value","startUtf16":5495,"endUtf16":5505,"startLine":162,"endLine":162},"owner":{"id":"ScopeFixture.java:3755:3852:method:subtype","kind":"method","file":"ScopeFixture.java","name":"subtype","qualified":"audit.ScopeFixture::subtype","startUtf16":3755,"endUtf16":3852,"startLine":105,"endLine":107}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:3857:3962:method:generic","kind":"method","file":"ScopeFixture.java","name":"generic","qualified":"audit.ScopeFixture::generic","startUtf16":3857,"endUtf16":3962,"startLine":108,"endLine":110}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":3911,"expressionEndUtf16":3921,"tokenStartUtf16":3916,"tokenEndUtf16":3921,"anchorStatus":"exact","line":109,"targetKind":"field","targetQualified":"audit.Cell::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159},"owner":{"id":"ScopeFixture.java:3857:3962:method:generic","kind":"method","file":"ScopeFixture.java","name":"generic","qualified":"audit.ScopeFixture::generic","startUtf16":3857,"endUtf16":3962,"startLine":108,"endLine":110}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:3967:4099:method:statics","kind":"method","file":"ScopeFixture.java","name":"statics","qualified":"audit.ScopeFixture::statics","startUtf16":3967,"endUtf16":4099,"startLine":111,"endLine":113}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"staticValue","expressionStartUtf16":4005,"expressionEndUtf16":4016,"tokenStartUtf16":4005,"tokenEndUtf16":4016,"anchorStatus":"exact","line":112,"targetKind":"field","targetQualified":"audit.ScopeFixture::staticValue","targetOrigin":"source","target":{"id":"ScopeFixture.java:477:500:field:staticValue","kind":"field","file":"ScopeFixture.java","name":"staticValue","qualified":"audit.ScopeFixture::staticValue","startUtf16":477,"endUtf16":500,"startLine":14,"endLine":14},"owner":{"id":"ScopeFixture.java:3967:4099:method:statics","kind":"method","file":"ScopeFixture.java","name":"statics","qualified":"audit.ScopeFixture::statics","startUtf16":3967,"endUtf16":4099,"startLine":111,"endLine":113}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"staticValue","expressionStartUtf16":4019,"expressionEndUtf16":4043,"tokenStartUtf16":4032,"tokenEndUtf16":4043,"anchorStatus":"exact","line":112,"targetKind":"field","targetQualified":"audit.ScopeFixture::staticValue","targetOrigin":"source","target":{"id":"ScopeFixture.java:477:500:field:staticValue","kind":"field","file":"ScopeFixture.java","name":"staticValue","qualified":"audit.ScopeFixture::staticValue","startUtf16":477,"endUtf16":500,"startLine":14,"endLine":14},"owner":{"id":"ScopeFixture.java:3967:4099:method:statics","kind":"method","file":"ScopeFixture.java","name":"statics","qualified":"audit.ScopeFixture::statics","startUtf16":3967,"endUtf16":4099,"startLine":111,"endLine":113}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4104:4129:method:value","kind":"method","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":4104,"endUtf16":4129,"startLine":114,"endLine":114}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4134:4214:method:methodSelector","kind":"method","file":"ScopeFixture.java","name":"methodSelector","qualified":"audit.ScopeFixture::methodSelector","startUtf16":4134,"endUtf16":4214,"startLine":115,"endLine":117}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4219:4379:method:declarators","kind":"method","file":"ScopeFixture.java","name":"declarators","qualified":"audit.ScopeFixture::declarators","startUtf16":4219,"endUtf16":4379,"startLine":118,"endLine":121}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":4260,"expressionEndUtf16":4265,"tokenStartUtf16":4260,"tokenEndUtf16":4265,"anchorStatus":"exact","line":119,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:4219:4379:method:declarators","kind":"method","file":"ScopeFixture.java","name":"declarators","qualified":"audit.ScopeFixture::declarators","startUtf16":4219,"endUtf16":4379,"startLine":118,"endLine":121}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4384:4642:class:Inner","kind":"class","file":"ScopeFixture.java","name":"Inner","qualified":"audit.ScopeFixture.Inner","startUtf16":4384,"endUtf16":4642,"startLine":122,"endLine":130}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4406:4416:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture.Inner::value","startUtf16":4406,"endUtf16":4416,"startLine":123,"endLine":123}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4446:4524:method:own","kind":"method","file":"ScopeFixture.java","name":"own","qualified":"audit.ScopeFixture.Inner::own","startUtf16":4446,"endUtf16":4524,"startLine":124,"endLine":126}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":4477,"expressionEndUtf16":4482,"tokenStartUtf16":4477,"tokenEndUtf16":4482,"anchorStatus":"exact","line":125,"targetKind":"field","targetQualified":"audit.ScopeFixture.Inner::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:4406:4416:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture.Inner::value","startUtf16":4406,"endUtf16":4416,"startLine":123,"endLine":123},"owner":{"id":"ScopeFixture.java:4446:4524:method:own","kind":"method","file":"ScopeFixture.java","name":"own","qualified":"audit.ScopeFixture.Inner::own","startUtf16":4446,"endUtf16":4524,"startLine":124,"endLine":126}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4533:4636:method:outer","kind":"method","file":"ScopeFixture.java","name":"outer","qualified":"audit.ScopeFixture.Inner::outer","startUtf16":4533,"endUtf16":4636,"startLine":127,"endLine":129}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":4566,"expressionEndUtf16":4589,"tokenStartUtf16":4584,"tokenEndUtf16":4589,"anchorStatus":"exact","line":128,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:4533:4636:method:outer","kind":"method","file":"ScopeFixture.java","name":"outer","qualified":"audit.ScopeFixture.Inner::outer","startUtf16":4533,"endUtf16":4636,"startLine":127,"endLine":129}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4647:4787:class:Inherited","kind":"class","file":"ScopeFixture.java","name":"Inherited","qualified":"audit.ScopeFixture.Inherited","startUtf16":4647,"endUtf16":4787,"startLine":131,"endLine":135}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4686:4781:method:inherited","kind":"method","file":"ScopeFixture.java","name":"inherited","qualified":"audit.ScopeFixture.Inherited::inherited","startUtf16":4686,"endUtf16":4781,"startLine":132,"endLine":134}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":4723,"expressionEndUtf16":4728,"tokenStartUtf16":4723,"tokenEndUtf16":4728,"anchorStatus":"exact","line":133,"targetKind":"field","targetQualified":"audit.Base::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5380:5390:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Base::value","startUtf16":5380,"endUtf16":5390,"startLine":156,"endLine":156},"owner":{"id":"ScopeFixture.java:4686:4781:method:inherited","kind":"method","file":"ScopeFixture.java","name":"inherited","qualified":"audit.ScopeFixture.Inherited::inherited","startUtf16":4686,"endUtf16":4781,"startLine":132,"endLine":134}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4792:5080:method:anonymous","kind":"method","file":"ScopeFixture.java","name":"anonymous","qualified":"audit.ScopeFixture::anonymous","startUtf16":4792,"endUtf16":5080,"startLine":136,"endLine":143}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4851:5073:class:","kind":"class","file":"ScopeFixture.java","name":"","qualified":"","startUtf16":4851,"endUtf16":5073,"startLine":137,"endLine":142}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4865:4875:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"::value","startUtf16":4865,"endUtf16":4875,"startLine":138,"endLine":138}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:4913:5063:method:getAsInt","kind":"method","file":"ScopeFixture.java","name":"getAsInt","qualified":"::getAsInt","startUtf16":4913,"endUtf16":5063,"startLine":139,"endLine":141}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":4960,"expressionEndUtf16":4970,"tokenStartUtf16":4965,"tokenEndUtf16":4970,"anchorStatus":"exact","line":140,"targetKind":"field","targetQualified":"::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:4865:4875:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"::value","startUtf16":4865,"endUtf16":4875,"startLine":138,"endLine":138},"owner":{"id":"ScopeFixture.java:4913:5063:method:getAsInt","kind":"method","file":"ScopeFixture.java","name":"getAsInt","qualified":"::getAsInt","startUtf16":4913,"endUtf16":5063,"startLine":139,"endLine":141}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":4973,"expressionEndUtf16":4996,"tokenStartUtf16":4991,"tokenEndUtf16":4996,"anchorStatus":"exact","line":140,"targetKind":"field","targetQualified":"audit.ScopeFixture::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:227:237:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.ScopeFixture::value","startUtf16":227,"endUtf16":237,"startLine":8,"endLine":8},"owner":{"id":"ScopeFixture.java:4913:5063:method:getAsInt","kind":"method","file":"ScopeFixture.java","name":"getAsInt","qualified":"::getAsInt","startUtf16":4913,"endUtf16":5063,"startLine":139,"endLine":141}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5085:5325:method:local","kind":"method","file":"ScopeFixture.java","name":"local","qualified":"audit.ScopeFixture::local","startUtf16":5085,"endUtf16":5325,"startLine":144,"endLine":152}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5107:5285:class:Local","kind":"class","file":"ScopeFixture.java","name":"Local","qualified":"Local","startUtf16":5107,"endUtf16":5285,"startLine":145,"endLine":150}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5133:5143:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"Local::value","startUtf16":5133,"endUtf16":5143,"startLine":146,"endLine":146}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5177:5275:method:get","kind":"method","file":"ScopeFixture.java","name":"get","qualified":"Local::get","startUtf16":5177,"endUtf16":5275,"startLine":147,"endLine":149}} +{"type":"fieldReference","file":"ScopeFixture.java","name":"value","expressionStartUtf16":5212,"expressionEndUtf16":5222,"tokenStartUtf16":5217,"tokenEndUtf16":5222,"anchorStatus":"exact","line":148,"targetKind":"field","targetQualified":"Local::value","targetOrigin":"source","target":{"id":"ScopeFixture.java:5133:5143:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"Local::value","startUtf16":5133,"endUtf16":5143,"startLine":146,"endLine":146},"owner":{"id":"ScopeFixture.java:5177:5275:method:get","kind":"method","file":"ScopeFixture.java","name":"get","qualified":"Local::get","startUtf16":5177,"endUtf16":5275,"startLine":147,"endLine":149}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5330:5360:method:sink","kind":"method","file":"ScopeFixture.java","name":"sink","qualified":"audit.ScopeFixture::sink","startUtf16":5330,"endUtf16":5360,"startLine":153,"endLine":153}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5363:5412:class:Base","kind":"class","file":"ScopeFixture.java","name":"Base","qualified":"audit.Base","startUtf16":5363,"endUtf16":5412,"startLine":155,"endLine":157}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5380:5390:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Base::value","startUtf16":5380,"endUtf16":5390,"startLine":156,"endLine":156}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5413:5462:class:Cell","kind":"class","file":"ScopeFixture.java","name":"Cell","qualified":"audit.Cell","startUtf16":5413,"endUtf16":5462,"startLine":158,"endLine":160}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5430:5440:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Cell::value","startUtf16":5430,"endUtf16":5440,"startLine":159,"endLine":159}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5463:5529:class:Shadow","kind":"class","file":"ScopeFixture.java","name":"Shadow","qualified":"audit.Shadow","startUtf16":5463,"endUtf16":5529,"startLine":161,"endLine":163}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5495:5505:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Shadow::value","startUtf16":5495,"endUtf16":5505,"startLine":162,"endLine":162}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5530:5633:class:Token","kind":"class","file":"ScopeFixture.java","name":"Token","qualified":"audit.Token","startUtf16":5530,"endUtf16":5633,"startLine":164,"endLine":167}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5573:5583:field:value","kind":"field","file":"ScopeFixture.java","name":"value","qualified":"audit.Token::value","startUtf16":5573,"endUtf16":5583,"startLine":165,"endLine":165}} +{"type":"declaration","declaration":{"id":"ScopeFixture.java:5609:5631:method:close","kind":"method","file":"ScopeFixture.java","name":"close","qualified":"audit.Token::close","startUtf16":5609,"endUtf16":5631,"startLine":166,"endLine":166}} +{"type":"complete","declarations":58,"fieldReferences":45,"unboundExpressions":0} diff --git a/benchmarks/agent_query/fixtures/java_state_access/ScopeFixture.java b/benchmarks/agent_query/fixtures/java_state_access/ScopeFixture.java new file mode 100644 index 000000000..40c94fb24 --- /dev/null +++ b/benchmarks/agent_query/fixtures/java_state_access/ScopeFixture.java @@ -0,0 +1,167 @@ +package audit; + +import java.util.function.IntSupplier; +import java.util.function.IntUnaryOperator; + +// Compiler-checkable development fixture; no product runtime dependency on Java. +public class ScopeFixture extends Base { + int value; // field scope_value + Cell slot; // field scope_slot + Cell[] items; // field scope_items + RuntimeException failure; // field scope_failure + Token resource; // field scope_resource + Object pattern; // field scope_pattern + static int staticValue; // field scope_static + + ScopeFixture(int value) { + this.value = value; // case constructor: scope_value + } + int explicit() { + return this.value; // case explicit_this: scope_value + } + int implicit() { + return value; // case implicit_this: scope_value + } + int repeated() { + return value + this.value; // case repeated: scope_value,scope_value + } + int parameter(int value) { + return value; // case parameter_shadow: - + } + void block() { + sink(value); // case block_before: scope_value + { + int value = 7; + sink(value); // case block_shadow: - + } + sink(value); // case block_after: scope_value + } + int beforeLocal() { + sink(value); // case before_local: scope_value + int value = 3; + return value; // case after_local: - + } + void loop() { + for (int value = 0; value < 1; value++) { + sink(value); // case for_shadow: - + } + sink(value); // case for_after: scope_value + } + int enhanced() { + for (Cell slot : items) { // case enhanced_iterable: scope_items + sink(slot.value); // case enhanced_binding: cell_value + } + return slot.value; // case enhanced_after: scope_slot,cell_value + } + void lambdas() { + IntUnaryOperator a = value -> value + 1; // case lambda_shadow: - + IntSupplier b = () -> this.value; // case lambda_this: scope_value + IntSupplier c = () -> value; // case lambda_implicit: scope_value + sink(a.applyAsInt(b.getAsInt()) + c.getAsInt()); + } + void catches() { + try { throw new RuntimeException(); } + catch (RuntimeException failure) { + sink(failure == null ? 0 : 1); // case catch_shadow: - + } + sink(failure == null ? 0 : 1); // case catch_after: scope_failure + } + void resources() { + try (Token resource = new Token()) { + sink(resource.value); // case resource_binding: token_value + } catch (RuntimeException e) { + sink(resource.value); // case resource_catch: scope_resource,token_value + } + sink(resource.value); // case resource_after: scope_resource,token_value + } + int pattern(Object input) { + if (input instanceof Cell slot) { + return slot.value; // case pattern_true: cell_value + } + return slot.value; // case pattern_after: scope_slot,cell_value + } + int negatedPattern() { + if (!(pattern instanceof Cell slot)) return 0; // case pattern_input: scope_pattern + return slot.value; // case pattern_flow: cell_value + } + int typed(Cell cell) { + return cell.value; // case typed_parameter: cell_value + } + int cast(Object cell) { + return ((Cell) cell).value; // case cast_receiver: cell_value + } + int chain() { + return slot.value; // case field_chain: scope_slot,cell_value + } + int indexed() { + return items[0].value; // case array_receiver: scope_items,cell_value + } + int parent() { + return super.value; // case super_field: base_value + } + int staticBinding(Cell cell, Shadow shadow) { + return cell.value; // case declared_receiver: cell_value + } + int subtype(Shadow cell) { + return cell.value; // case hiding_receiver: shadow_value + } + int generic(T cell) { + return cell.value; // case generic_bound: cell_value + } + static int statics() { + return staticValue + ScopeFixture.staticValue; // case static_fields: scope_static,scope_static + } + int value() { return 1; } + int methodSelector() { + return value(); // case method_not_field: - + } + void declarators() { + int first = value, value = 2; // case declarator_order: scope_value + sink(first + value); // case declarator_shadow: - + } + class Inner { + int value; // field inner_value + int own() { + return value; // case inner_own: inner_value + } + int outer() { + return ScopeFixture.this.value; // case qualified_this: scope_value + } + } + class Inherited extends Base { + int inherited() { + return value; // case inherited_beats_outer: base_value + } + } + IntSupplier anonymous() { + return new IntSupplier() { + int value; // field anonymous_value + public int getAsInt() { + return this.value + ScopeFixture.this.value; // case anonymous_this: anonymous_value,scope_value + } + }; + } + int local() { + class Local { + int value; // field local_value + int get() { + return this.value; // case local_class_this: local_value + } + } + return new Local().get(); + } + static void sink(int value) {} +} +class Base { + int value; // field base_value +} +class Cell { + int value; // field cell_value +} +class Shadow extends Cell { + int value; // field shadow_value +} +class Token implements AutoCloseable { + int value; // field token_value + public void close() {} +} diff --git a/benchmarks/agent_query/fixtures/java_varargs/ExtendedVarargs.java b/benchmarks/agent_query/fixtures/java_varargs/ExtendedVarargs.java new file mode 100644 index 000000000..1423142ba --- /dev/null +++ b/benchmarks/agent_query/fixtures/java_varargs/ExtendedVarargs.java @@ -0,0 +1,42 @@ +package audit; + +public class ExtendedVarargs { + static void strings(String... values) {} + static void integers(int... values) {} + static void shape(String value) {} + static void shape(String[] value) {} + static void shape(String[][] value) {} + static void choose(Object... values) {} + static void choose(String... values) {} + static void phase(Object value) {} + static void phase(String... values) {} + static void widen(long value) {} + static void widen(Integer value) {} + static void loose(Integer value) {} + static void loose(int... values) {} + static void primitive(long... values) {} + static void primitive(int... values) {} + static void prefixed(String prefix, int... values) {} + + static void empty() { strings(); } + static void mostSpecificEmpty() { choose(); } + static void mostSpecificMany() { choose("a", "b"); } + static void nullArray() { choose((String[]) null); } + static void fixedBeforeExpanded() { phase("a"); } + static void wideningBeforeBoxing() { widen(1); } + static void boxingBeforeExpanded() { loose(1); } + static void primitiveSpecific() { primitive(1, 2); } + static void prefixEmpty() { prefixed("a"); } + static void arrayArgument() { shape(new String[1]); } + static void matrixArgument() { shape(new String[1][]); } + static void matrixInitializer() { shape(new String[][] {{"a"}}); } + static void spreadForward(final String... values) { shape(values); } + static void trailingDimensions(String values[]) { shape(values); } + static void repeated() { strings("a"); strings("b"); } + static void unknown(String value) { choose(value.toString()); } + + void receiver(ExtendedVarargs this, String... values) { shape(values); } + static void modified(@Deprecated final String... values) { shape(values); } + static void arrays(String[]... values) { shape(values); } + static void generic(java.util.List... values) {} +} diff --git a/benchmarks/agent_query/fixtures/java_varargs/VarargsDemo.java b/benchmarks/agent_query/fixtures/java_varargs/VarargsDemo.java new file mode 100644 index 000000000..22377b193 --- /dev/null +++ b/benchmarks/agent_query/fixtures/java_varargs/VarargsDemo.java @@ -0,0 +1,14 @@ +package audit; + +public final class VarargsDemo { + static String join(String... values) { return "text"; } + static String join(int... values) { return "numbers"; } + static String join(boolean flag) { return "flag"; } + static String prefixed(String prefix, String... values) { return prefix; } + static String arrays(String[] values, int[] counts) { return "arrays"; } + static String text() { return join("a", "b"); } + static String numbers() { return join(1, 2); } + static String flag() { return join(true); } + static String explicitArray() { return join(new String[] {"a", "b"}); } + static String mixed() { return prefixed("p", "a", "b"); } +} diff --git a/benchmarks/agent_query/go_field_access_oracle.go b/benchmarks/agent_query/go_field_access_oracle.go new file mode 100644 index 000000000..24d9bf683 --- /dev/null +++ b/benchmarks/agent_query/go_field_access_oracle.go @@ -0,0 +1,326 @@ +// Enumerate direct method-receiver field selectors using Go's parser object bindings. +// This development oracle is independent of Compass and Graphify graph output. +package main + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "go/ast" + "go/parser" + "go/token" + "os" + "path/filepath" + "sort" + "strings" +) + +const maxPaths = 200 +const maxFileBytes = 1 << 20 +const maxSelectors = 100000 + +type sourceFile struct { + Path string `json:"path"` + Package string `json:"package"` + Bytes int `json:"bytes"` + SHA256 string `json:"sha256"` + Tree *ast.File `json:"-"` +} + +type directField struct { + File string `json:"file"` + Package string `json:"package"` + Struct string `json:"struct"` + StructLine int `json:"structLine"` + Field string `json:"field"` + FieldLine int `json:"fieldLine"` +} + +type contact struct { + File string `json:"file"` + Package string `json:"package"` + Struct string `json:"struct"` + StructFile string `json:"structFile"` + StructLine int `json:"structLine"` + Method string `json:"method"` + MethodLine int `json:"methodLine"` + Field string `json:"field"` + FieldFile string `json:"fieldFile"` + FieldLine int `json:"fieldLine"` + Line int `json:"line"` + ByteOffset int `json:"byteOffset"` +} + +type exclusion struct { + File string `json:"file"` + Method string `json:"method"` + MethodLine int `json:"methodLine"` + Line int `json:"line"` + ByteOffset int `json:"byteOffset"` + Receiver string `json:"receiver"` + Field string `json:"field"` + Category string `json:"category"` +} + +type output struct { + Schema string `json:"schema"` + Files []sourceFile `json:"files"` + DirectFields []directField `json:"directFields"` + Contacts []contact `json:"contacts"` + Exclusions []exclusion `json:"exclusions"` + SelectorCount int `json:"selectorCount"` + Categories map[string]int `json:"categories"` +} + +func packageTypeKey(path, pkg, name string) string { + return filepath.ToSlash(filepath.Dir(path)) + "\x00" + pkg + "\x00" + name +} + +func baseReceiverType(expr ast.Expr) string { + switch value := expr.(type) { + case *ast.Ident: + return value.Name + case *ast.StarExpr: + return baseReceiverType(value.X) + case *ast.IndexExpr: + return baseReceiverType(value.X) + case *ast.IndexListExpr: + return baseReceiverType(value.X) + default: + return "" + } +} + +func sourcePaths() ([]string, error) { + paths := os.Args[1:] + if len(paths) == 0 || len(paths) > maxPaths { + return nil, fmt.Errorf("expected 1..%d registered relative Go paths", maxPaths) + } + seen := make(map[string]bool, len(paths)) + for _, path := range paths { + if filepath.IsAbs(path) || filepath.Clean(path) != path || !strings.HasSuffix(path, ".go") { + return nil, fmt.Errorf("invalid relative Go path: %q", path) + } + for _, part := range strings.Split(filepath.ToSlash(path), "/") { + if part == ".." || part == "." || part == "" { + return nil, fmt.Errorf("unsafe source path: %q", path) + } + } + if seen[path] { + return nil, fmt.Errorf("duplicate source path: %q", path) + } + seen[path] = true + } + sort.Strings(paths) + return paths, nil +} + +func run() (output, error) { + paths, err := sourcePaths() + if err != nil { + return output{}, err + } + result := output{ + Schema: "compass.go-field-access-oracle/1", Files: []sourceFile{}, + DirectFields: []directField{}, Contacts: []contact{}, Exclusions: []exclusion{}, + Categories: make(map[string]int), + } + positions := token.NewFileSet() + // A package/type name must identify one declaration before a field can be + // credited. Build-tag alternatives remain ambiguous in this all-file census. + types := make(map[string]map[string][]directField) + for _, path := range paths { + data, err := os.ReadFile(path) + if err != nil { + return output{}, err + } + if len(data) > maxFileBytes { + return output{}, fmt.Errorf("source byte bound exceeded: %s", path) + } + tree, err := parser.ParseFile(positions, path, data, parser.AllErrors) + if err != nil { + return output{}, fmt.Errorf("parse %s: %w", path, err) + } + sum := sha256.Sum256(data) + pkg := tree.Name.Name + result.Files = append(result.Files, sourceFile{path, pkg, len(data), hex.EncodeToString(sum[:]), tree}) + for _, declaration := range tree.Decls { + general, ok := declaration.(*ast.GenDecl) + if !ok || general.Tok != token.TYPE { + continue + } + for _, spec := range general.Specs { + named, ok := spec.(*ast.TypeSpec) + if !ok { + continue + } + structure, ok := named.Type.(*ast.StructType) + if !ok { + continue + } + key := packageTypeKey(path, pkg, named.Name.Name) + fields := make(map[string][]directField) + for _, field := range structure.Fields.List { + for _, name := range field.Names { + if name.Name == "_" { + continue + } + item := directField{path, pkg, named.Name.Name, + positions.Position(named.Name.Pos()).Line, name.Name, + positions.Position(name.Pos()).Line} + fields[name.Name] = append(fields[name.Name], item) + result.DirectFields = append(result.DirectFields, item) + } + } + if types[key] == nil { + types[key] = fields + } else { + for name, items := range fields { + types[key][name] = append(types[key][name], items...) + } + // Even if fields are disjoint, duplicate nominal declarations + // cannot establish a unique owner. + types[key]["\x00duplicate-type"] = nil + } + } + } + } + for _, file := range result.Files { + for _, declaration := range file.Tree.Decls { + method, ok := declaration.(*ast.FuncDecl) + if !ok || method.Recv == nil || len(method.Recv.List) != 1 || method.Body == nil { + continue + } + receiverField := method.Recv.List[0] + if len(receiverField.Names) != 1 || receiverField.Names[0].Name == "_" { + continue + } + receiver := receiverField.Names[0] + typeName := baseReceiverType(receiverField.Type) + index := types[packageTypeKey(file.Path, file.Package, typeName)] + called := make(map[*ast.SelectorExpr]bool) + ast.Inspect(method.Body, func(node ast.Node) bool { + if call, ok := node.(*ast.CallExpr); ok { + if selector, ok := call.Fun.(*ast.SelectorExpr); ok { + called[selector] = true + } + } + return true + }) + var walkError error + ast.Inspect(method.Body, func(node ast.Node) bool { + selector, ok := node.(*ast.SelectorExpr) + if !ok || walkError != nil { + return walkError == nil + } + result.SelectorCount++ + if result.SelectorCount > maxSelectors { + walkError = fmt.Errorf("selector bound exceeded") + return false + } + operand, direct := selector.X.(*ast.Ident) + category := "" + switch { + case !direct: + category = "non_identifier_receiver" + case operand.Name != receiver.Name: + category = "other_receiver" + case receiver.Obj == nil || operand.Obj != receiver.Obj: + category = "shadowed_or_unresolved_receiver" + case typeName == "" || index == nil: + category = "unavailable_struct" + case len(index) > 0 && duplicateType(index): + category = "ambiguous_struct" + case len(index[selector.Sel.Name]) == 0: + category = "not_direct_named_field" + case len(index[selector.Sel.Name]) > 1: + category = "ambiguous_field" + case called[selector]: + category = "called_field_selector" + } + position := positions.Position(selector.Sel.Pos()) + if category == "" { + field := index[selector.Sel.Name][0] + result.Contacts = append(result.Contacts, contact{ + File: file.Path, Package: file.Package, Struct: typeName, + StructFile: field.File, StructLine: field.StructLine, + Method: method.Name.Name, MethodLine: positions.Position(method.Name.Pos()).Line, + Field: field.Field, FieldFile: field.File, FieldLine: field.FieldLine, + Line: position.Line, ByteOffset: position.Offset, + }) + result.Categories["accepted_direct_field"]++ + } else { + receiverName := "" + if direct { + receiverName = operand.Name + } + result.Exclusions = append(result.Exclusions, exclusion{ + File: file.Path, Method: method.Name.Name, + MethodLine: positions.Position(method.Name.Pos()).Line, + Line: position.Line, ByteOffset: position.Offset, + Receiver: receiverName, Field: selector.Sel.Name, + Category: category, + }) + result.Categories[category]++ + } + return true + }) + if walkError != nil { + return output{}, walkError + } + } + } + sort.Slice(result.DirectFields, func(i, j int) bool { + a, b := result.DirectFields[i], result.DirectFields[j] + if a.File != b.File { + return a.File < b.File + } + if a.StructLine != b.StructLine { + return a.StructLine < b.StructLine + } + if a.FieldLine != b.FieldLine { + return a.FieldLine < b.FieldLine + } + return a.Field < b.Field + }) + sort.Slice(result.Contacts, func(i, j int) bool { + a, b := result.Contacts[i], result.Contacts[j] + if a.File != b.File { + return a.File < b.File + } + if a.ByteOffset != b.ByteOffset { + return a.ByteOffset < b.ByteOffset + } + return a.Field < b.Field + }) + sort.Slice(result.Exclusions, func(i, j int) bool { + a, b := result.Exclusions[i], result.Exclusions[j] + if a.File != b.File { + return a.File < b.File + } + if a.ByteOffset != b.ByteOffset { + return a.ByteOffset < b.ByteOffset + } + return a.Category < b.Category + }) + return result, nil +} + +func duplicateType(fields map[string][]directField) bool { + _, duplicate := fields["\x00duplicate-type"] + return duplicate +} + +func main() { + result, err := run() + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + encoder := json.NewEncoder(os.Stdout) + if err := encoder.Encode(result); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/benchmarks/agent_query/go_field_access_probe.py b/benchmarks/agent_query/go_field_access_probe.py new file mode 100644 index 000000000..6e2c88658 --- /dev/null +++ b/benchmarks/agent_query/go_field_access_probe.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python3 +"""Join the preregistered Go self-field oracle to a published Compass graph. + +This is a development audit. It validates exact direct receiver contacts only; +other field edges are retained for review, not counted as true positives. +""" + +import argparse +import collections +import hashlib +import json +from pathlib import Path + + +# Post-capture read-bound amendment recorded in go_field_access_registration.json. +MAX_GRAPH_BYTES = 24 * 1024 * 1024 +MAX_ORACLE_BYTES = 8 * 1024 * 1024 + + +def load(path: Path, limit: int): + data = path.read_bytes() + if len(data) > limit: + raise ValueError(f"{path}: {len(data)} bytes exceeds {limit}") + return json.loads(data), hashlib.sha256(data).hexdigest(), len(data) + + +def source(node): + return node.get("source") or {} + + +def site(link): + anchor = link.get("relationshipSite") or {} + return anchor.get("file"), anchor.get("startLine"), anchor.get("startByte") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--oracle", type=Path, required=True) + parser.add_argument("--baseline", type=Path, required=True) + parser.add_argument("--candidate", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + + oracle, oracle_sha, oracle_bytes = load(args.oracle, MAX_ORACLE_BYTES) + baseline, baseline_sha, baseline_bytes = load(args.baseline, MAX_GRAPH_BYTES) + candidate, candidate_sha, candidate_bytes = load(args.candidate, MAX_GRAPH_BYTES) + if oracle.get("schema") != "compass.go-field-access-oracle/1": + raise ValueError("unexpected oracle schema") + contacts = oracle["contacts"] + if len(contacts) > 100_000: + raise ValueError("oracle contact bound exceeded") + for graph in (baseline, candidate): + if len(graph["nodes"]) > 100_000 or len(graph["links"]) > 100_000: + raise ValueError("graph record bound exceeded") + + old_nodes = {node["id"]: node for node in baseline["nodes"]} + nodes = {node["id"]: node for node in candidate["nodes"]} + old_links = {link["id"]: link for link in baseline["links"]} + links = {link["id"]: link for link in candidate["links"]} + if len(old_nodes) != len(baseline["nodes"]) or len(nodes) != len(candidate["nodes"]): + raise ValueError("duplicate node ID") + if len(old_links) != len(baseline["links"]) or len(links) != len(candidate["links"]): + raise ValueError("duplicate link ID") + + structs = collections.defaultdict(list) + qualified = collections.defaultdict(list) + for node in nodes.values(): + qualified[node.get("qualifiedName")].append(node) + if node.get("kind") == "struct": + structs[(node.get("name"), source(node).get("file"), + source(node).get("startLine"))].append(node) + containment = {(link["source"], link["target"]) for link in links.values() + if link.get("kind") == "contains"} + accesses = collections.defaultdict(list) + for link in links.values(): + if link.get("kind") == "references" and str(link.get("occurrenceRule", "")).startswith( + "universal-member-access"): + if nodes[link["target"]].get("kind") != "field": + raise ValueError("member-access link has a non-field target") + accesses[(link["source"], link["target"], *site(link))].append(link) + + outcomes = [] + credited_ids = set() + for contact in contacts: + owner = structs[(contact["struct"], contact["structFile"], contact["structLine"])] + method = field = [] + if len(owner) == 1: + prefix = owner[0]["qualifiedName"] + "::" + method = [node for node in qualified[prefix + contact["method"]] + if source(node).get("file") == contact["file"] + and source(node).get("startLine") == contact["methodLine"]] + field = [node for node in qualified[prefix + contact["field"]] + if source(node).get("file") == contact["fieldFile"] + and source(node).get("startLine") == contact["fieldLine"]] + status = "missing_or_ambiguous_declaration" + edge_ids = [] + if len(owner) == len(method) == len(field) == 1: + if (owner[0]["id"], field[0]["id"]) not in containment: + status = "missing_field_ownership" + else: + matched = accesses[(method[0]["id"], field[0]["id"], contact["file"], + contact["line"], contact["byteOffset"])] + edge_ids = [link["id"] for link in matched] + status = "exact" if len(matched) == 1 else "missing_or_ambiguous_edge" + if status == "exact": + credited_ids.add(matched[0]["id"]) + outcomes.append({"contact": contact, "status": status, "edgeIds": edge_ids, + "ownerCount": len(owner), "methodCount": len(method), + "fieldCount": len(field)}) + + exclusions = collections.defaultdict(set) + for excluded in oracle["exclusions"]: + exclusions[(excluded["file"], excluded["line"], excluded["byteOffset"])].add( + excluded["category"]) + uncredited = [] + categories = collections.Counter() + for edge_group in accesses.values(): + for link in edge_group: + if link["id"] in credited_ids: + continue + edge_site = site(link) + category = ",".join(sorted(exclusions.get(edge_site, ()))) or "outside_oracle_scope" + categories[category] += 1 + uncredited.append({"edgeId": link["id"], "site": edge_site, + "source": nodes[link["source"]].get("qualifiedName"), + "target": nodes[link["target"]].get("qualifiedName"), + "oracleCategory": category}) + + added = [link for link_id, link in links.items() if link_id not in old_links] + output = { + "schema": "compass.go-field-access-review/1", + "scope": "known Litestream development repository; direct receiver-field contacts only", + "inputs": {"oracle": {"sha256": oracle_sha, "bytes": oracle_bytes}, + "baseline": {"sha256": baseline_sha, "bytes": baseline_bytes}, + "candidate": {"sha256": candidate_sha, "bytes": candidate_bytes}}, + "summary": {"oracleContacts": len(contacts), "exact": len(credited_ids), + "outcomes": dict(sorted(collections.Counter( + item["status"] for item in outcomes).items())), + "baselineNodes": len(old_nodes), "candidateNodes": len(nodes), + "removedNodeIds": len(old_nodes.keys() - nodes.keys()), + "addedNodeIds": len(nodes.keys() - old_nodes.keys()), + "baselineLinks": len(old_links), "candidateLinks": len(links), + "removedLinks": len(old_links.keys() - links.keys()), + "changedOldLinks": sum(links.get(key) != link + for key, link in old_links.items()), + "addedLinks": len(added), "addedMemberAccessLinks": sum( + link.get("kind") == "references" + and str(link.get("occurrenceRule", "")).startswith( + "universal-member-access") for link in added), + "uncreditedAccessLinks": len(uncredited), + "uncreditedOracleCategories": dict(sorted(categories.items()))}, + "outcomes": outcomes, + "uncreditedAccessLinks": sorted(uncredited, key=lambda item: item["edgeId"]), + } + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n") + print(json.dumps(output["summary"], sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/benchmarks/agent_query/go_field_access_registration.json b/benchmarks/agent_query/go_field_access_registration.json new file mode 100644 index 000000000..ef6a1d88f --- /dev/null +++ b/benchmarks/agent_query/go_field_access_registration.json @@ -0,0 +1,45 @@ +{ + "schema": "compass.go-field-access-registration/1", + "declaredBeforeSourceCapture": true, + "purpose": "Measure exact direct receiver-to-named-field contacts across every tracked Go file in the pinned Litestream repository, and preserve unsupported cases rather than crediting name-only matches.", + "developmentStatus": "The prior all-file field declaration result and candidate graph were inspected. This is development qualification, not a fresh holdout or a god-object label evaluation.", + "sourceRepository": "benbjohnson/litestream", + "sourceCommit": "6a71ccd9ad2bea0c4dc19bc274a8dc64c9b0fafa", + "sourceSelection": "All 146 tracked Go paths from go_full_field_registration.json, including tests and generated files, with no post-hoc file exclusions.", + "priorFieldRegistrationSha256": "3beb1693382f278730f083a43bc8e6444f893ae12967ee0339d3139a3ce4c84d", + "priorFieldReviewSha256": "773f3eb5744da9f530811d296605cf06ad5b793121efce9e306c16dab40837e0", + "frozenGraphs": [ + { + "tool": "compass-before-access", + "sha256": "3aed3fe0dab1fec6e1a9e197474ae3727f4c74dd6f3b68ff7cd91462cb4d29e4", + "bytes": 12971447 + }, + { + "tool": "graphify", + "sha256": "9cb6df8dcc053cea5b395292a7f460eaaeb2afc566acddb021ae003e51862b0e", + "bytes": 5333935 + } + ], + "sourceOracle": { + "implementation": "Use only Go standard-library go/parser and go/ast on every tracked file, with default identifier-object resolution enabled. Index top-level named struct fields by directory, parsed package name, struct name, field name and exact declaration position. For each method body, accept only selector expressions whose operand identifier resolves to that method's receiver declaration object and whose selector has one unique direct named field declaration in the package/type index. Exclude selector expressions used as the direct function of a call expression. Record all other selector categories and duplicate type/field identities separately.", + "coordinates": "Preserve repository-relative source file, parsed package, owner struct and its declaration source line, method name and declaration source line, field name and declaration source line, and exact selector identifier source line and byte offset. Preserve repeated uses as separate occurrences.", + "negativePolicy": "A selector on a different local variable, a shadowed receiver spelling, package qualifier, method call, promoted or embedded-only field, or ambiguous declaration is never credited as a direct self-field contact. Report categories and examples rather than removing uncertain cases silently.", + "scopeLimit": "This independent syntax oracle checks explicit direct receiver field selectors only. It does not establish expression-chain, promoted, interface, package-wide alias, reflection, or indirect field contacts. It does not validate responsibility cohesion." + }, + "graphJoin": "Require unique source-located method and field declarations and a directed, source-anchored method-to-field accesses relationship at the exact selector line. Require the field's direct contains owner to be the source struct. Preserve missing, ambiguous, unresolved and extra candidate outcomes. Compare frozen graphs with the same exact join; Graphify field-type context records remain a separate category, not named field targets.", + "bounds": { + "maxSourcePaths": 200, + "maxSourceBytesPerFile": 1048576, + "maxOracleOccurrences": 100000, + "maxGraphBytes": 16777216, + "maxGraphNodes": 100000, + "maxGraphEdges": 100000, + "maxSecondsPerOracle": 60 + }, + "postCaptureAmendment": { + "status": "declared after observing the candidate graph byte count; not preregistered", + "reason": "The additive access graph is 16902487 bytes, above the original 16777216-byte graph read cap. No source files, oracle contacts, joins, or graph records are excluded.", + "amendedMaxGraphBytes": 25165824 + }, + "outputs": "Retain all source contacts and exclusions, exact graph outcomes, producer/binary/graph/source hashes, cold/warm equivalence, unexpected additions and omissions, and public god_nodes member-evidence changes. Run twice for deterministic reports. Do not infer broad source precision or Graphify superiority from this one known repository." +} diff --git a/benchmarks/agent_query/go_field_access_review.json b/benchmarks/agent_query/go_field_access_review.json new file mode 100644 index 000000000..03b8427e1 --- /dev/null +++ b/benchmarks/agent_query/go_field_access_review.json @@ -0,0 +1,38 @@ +{ + "schema": "compass.go-field-access-development-review/1", + "scope": "Pinned Litestream 6a71ccd9ad2bea0c4dc19bc274a8dc64c9b0fafa, all 146 tracked Go files; development qualification, not a held-out result", + "registration": "go_field_access_registration.json", + "postCaptureAmendment": "Candidate graph is 16902487 bytes, so the audit read cap was raised from 16777216 to 25165824 bytes after observing the output. No source, oracle or graph records were filtered.", + "sourceOracleSha256": "c44eaa86cee1b0faa73a0ff4f18aa8961825939b102ba985f2eb7bd057168b10", + "probeSourceSha256": "5fe2767ea6166eb4bbc22d202b406621cf68d668555c6ac9135199ab657de820", + "candidateBinarySha256": "05352621dfe9238f4d32cf328a35d17b559cd26dc6d811989c4c01e219cd0098", + "baselineCompassGraphSha256": "3aed3fe0dab1fec6e1a9e197474ae3727f4c74dd6f3b68ff7cd91462cb4d29e4", + "candidateCompassGraphSha256": "d6bbc036d3cf6d294995ba734be7e70f02763fe273aa87597f40d3113f82e732", + "frozenGraphifyGraphSha256": "9cb6df8dcc053cea5b395292a7f460eaaeb2afc566acddb021ae003e51862b0e", + "rawProbeSha256": "f6e9916dc323b03b89496b066b5cfd4936d7cbc82902b866d905b40804454c0e", + "rawRun": "go-field-access-02 in the external code-graph audit runs directory", + "sourceDirectReceiverFieldContacts": 2742, + "candidateExactContacts": 2742, + "baselineCompassExactContacts": 0, + "frozenGraphifyExactContacts": 0, + "candidateNodes": 3801, + "oldNodeIdsRemoved": 0, + "newNodeIds": 0, + "candidateLinks": 15471, + "oldLinksRemovedOrChanged": 0, + "newMemberAccessReferenceLinks": 4650, + "newMemberAccessNonFieldTargets": 0, + "newAccessLinksOutsideCreditedOracle": { + "total": 1908, + "otherReceiver": 719, + "nonIdentifierReceiver": 225, + "outsideOracleScope": 964, + "interpretation": "Retained for inspection; this direct self-field oracle cannot establish their precision." + }, + "repeatability": "Two probe runs were byte identical; cold extraction processed 199 files, warm extraction reused all 199 and produced byte-identical graph JSON.", + "publicMcpWitnesses": { + "Store": {"rank": 8, "directFields": 21, "ownFieldReferenceRecords": 113, "methodsTouchingOwnFields": 23}, + "HeartbeatClient": {"rank": 164, "directFields": 6, "ownFieldReferenceRecords": 13, "methodsTouchingOwnFields": 4} + }, + "limits": "One known Go repository and one direct receiver-field source oracle. Other added edges, broad graph precision, god-object diagnosis, community quality, and overall superiority remain unproven." +} diff --git a/benchmarks/agent_query/go_full_field_probe.py b/benchmarks/agent_query/go_full_field_probe.py new file mode 100644 index 000000000..aacad7872 --- /dev/null +++ b/benchmarks/agent_query/go_full_field_probe.py @@ -0,0 +1,144 @@ +"""Audit all pinned Litestream Go struct fields against three frozen graphs.""" + +from __future__ import annotations + +import argparse +from collections import Counter +import hashlib +import json +from pathlib import Path +import subprocess + +from benchmarks.agent_query.go_struct_field_probe import compare, sha256 + + +def source_key(row: dict) -> tuple[str, str, int, str, int]: + return (row["file"], row["struct"], row["structLine"], row["field"], row["fieldLine"]) + + +def canonical(item: dict, *, omit_community: bool = False) -> str: + return json.dumps({key: value for key, value in item.items() if not (omit_community and key == "community")}, sort_keys=True) + + +def run(args: argparse.Namespace) -> None: + registration = json.loads(args.registration.read_text()) + if registration["schema"] != "compass.go-full-field-registration/1": + raise ValueError("unsupported full-field registration") + if sha256(args.selected_registration) != registration["priorSelectedRegistrationSha256"]: + raise ValueError("selected registration changed") + root = args.source + commit = subprocess.run(["git", "-C", str(root), "rev-parse", "HEAD"], check=True, capture_output=True, text=True).stdout.strip() + dirty = subprocess.run(["git", "-C", str(root), "status", "--porcelain=v1"], check=True, capture_output=True, text=True).stdout.strip() + if commit != registration["sourceCommit"] or dirty: + raise ValueError("source checkout changed") + listing = subprocess.run(["git", "ls-files", "*.go"], cwd=root, check=True, capture_output=True).stdout + paths = listing.decode().splitlines() + if (len(paths) != registration["sourcePathCount"] or len(paths) > registration["bounds"]["maxSourcePaths"] + or hashlib.sha256(listing).hexdigest() != registration["sourcePathListSha256"]): + raise ValueError("tracked Go path list changed") + if any((root / path).stat().st_size > registration["bounds"]["maxSourceBytesPerFile"] for path in paths): + raise ValueError("source file size bound exceeded") + oracle = json.loads(args.oracle.read_text()) + if oracle["schema"] != "compass.go-struct-field-oracle/1": + raise ValueError("unsupported source oracle") + fields = oracle["declarations"] + structs = {(row["file"], row["struct"], row["structLine"]) for row in fields + oracle["embedded"] + oracle["blank"]} + if (len(fields) > registration["bounds"]["maxNamedFields"] or len(structs) > registration["bounds"]["maxStructs"] + or len({source_key(row) for row in fields}) != len(fields)): + raise ValueError("source oracle exceeds bound or repeats identities") + graph_paths = {"compass-baseline": args.baseline, "graphify": args.graphify, "compass-candidate": args.candidate} + candidate_record = next(item for item in registration["graphs"] if item["tool"] == "compass-candidate") + if sha256(args.candidate_binary) != candidate_record["binarySha256"]: + raise ValueError("candidate binary differs from registration") + graphs = {} + results = [] + for record in registration["graphs"]: + tool = record["tool"] + path = graph_paths[tool] + if (path.stat().st_size != record["bytes"] or path.stat().st_size > registration["bounds"]["maxGraphBytes"] + or sha256(path) != record["sha256"]): + raise ValueError(f"{tool} graph differs from registration") + graph = json.loads(path.read_text()) + if len(graph["nodes"]) > registration["bounds"]["maxGraphNodes"] or len(graph["links"]) > registration["bounds"]["maxGraphEdges"]: + raise ValueError(f"{tool} graph item bound exceeded") + graphs[tool] = graph + projection = compare(graph, "graphify" if tool == "graphify" else "compass", fields) + projection["tool"] = tool + projection["graphSha256"] = record["sha256"] + results.append(projection) + baseline = graphs["compass-baseline"] + candidate = graphs["compass-candidate"] + old_nodes = {node["id"]: node for node in baseline["nodes"]} + new_nodes = {node["id"]: node for node in candidate["nodes"]} + if len(old_nodes) != len(baseline["nodes"]) or len(new_nodes) != len(candidate["nodes"]): + raise ValueError("duplicate Compass node ID") + removed_ids = sorted(old_nodes.keys() - new_nodes.keys()) + changed_old = sorted(identifier for identifier in old_nodes.keys() & new_nodes.keys() + if canonical(old_nodes[identifier], omit_community=True) + != canonical(new_nodes[identifier], omit_community=True)) + old_edges = Counter(canonical(edge) for edge in baseline["links"]) + new_edges = Counter(canonical(edge) for edge in candidate["links"]) + removed_edges = sum((old_edges - new_edges).values()) + added_edges = sum((new_edges - old_edges).values()) + added_ids = sorted(new_nodes.keys() - old_nodes.keys()) + candidate_rows = next(item["rows"] for item in results if item["tool"] == "compass-candidate") + matched_ids = {row["fieldIds"][0] for row in candidate_rows if row["status"] == "matched"} + unexpected_additions = [new_nodes[identifier] for identifier in added_ids if identifier not in matched_ids] + old_omissions = sorted(item.get("relatedIds", [""])[0] for item in baseline["graph"]["diagnostics"] + if item["code"] == "publication_omitted_node") + new_omissions = sorted(item.get("relatedIds", [""])[0] for item in candidate["graph"]["diagnostics"] + if item["code"] == "publication_omitted_node") + delta = {"removedNodeIds": removed_ids, + "changedOldNodeIdsIgnoringCommunity": changed_old, + "removedEdgeRecords": removed_edges, + "addedEdgeRecords": added_edges, + "addedNodeCount": len(added_ids), + "addedNodeKinds": dict(sorted(Counter(new_nodes[identifier]["kind"] for identifier in added_ids).items())), + "unexpectedAddedNodes": unexpected_additions, + "publicationOmissionsUnchanged": old_omissions == new_omissions, + "baselinePublicationOmittedNodes": len(old_omissions), + "candidatePublicationOmittedNodes": len(new_omissions)} + raw = {"schema": "compass.go-full-field-raw/1", "registrationSha256": sha256(args.registration), + "oracleSha256": sha256(args.oracle), "sourceCommit": commit, + "trackedGoPaths": paths, "sourceNamedFields": fields, + "sourceEmbeddedFields": oracle["embedded"], "sourceBlankFields": oracle["blank"], + "results": results, "delta": delta} + args.raw.write_text(json.dumps(raw, indent=2, sort_keys=True) + "\n") + compact = {"schema": "compass.go-full-field-review/1", "registrationSha256": sha256(args.registration), + "oracleSha256": sha256(args.oracle), "rawSha256": sha256(args.raw), + "sourceCommit": commit, "trackedGoFileCount": len(paths), + "sourceStructCount": len(structs), "sourceNamedFieldCount": len(fields), + "sourceEmbeddedFieldCount": len(oracle["embedded"]), + "sourceBlankFieldCount": len(oracle["blank"]), + "graphs": [{"tool": item["tool"], "sha256": item["graphSha256"], + "nodeCount": item["nodeCount"], "edgeRecordCount": item["edgeRecordCount"], + "directed": item["directed"], "statusCounts": item["statusCounts"], + "fieldTypeContextRecords": item["fieldTypeContextRecords"], + "nonmatchedCount": sum(row["status"] != "matched" for row in item["rows"]), + "nonmatchedExamples": [{"source": source_key(row), "status": row["status"]} + for row in item["rows"] if row["status"] != "matched"][:10]} + for item in results], + "delta": {key: value for key, value in delta.items() if key != "unexpectedAddedNodes"}, + "unexpectedAddedNodes": [{"id": node["id"], "name": node.get("name"), "source": node.get("source")} + for node in unexpected_additions], + "limitations": registration["limitations"]} + args.summary.write_text(json.dumps(compact, indent=2, sort_keys=True) + "\n") + print("source", len(fields), "fields in", len(structs), "structs", flush=True) + for item in compact["graphs"]: + print(item["tool"], item["statusCounts"], flush=True) + print("candidate unexpected additions", len(unexpected_additions), "removed edges", removed_edges, flush=True) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--selected-registration", type=Path, required=True) + parser.add_argument("--source", type=Path, required=True) + parser.add_argument("--oracle", type=Path, required=True) + parser.add_argument("--baseline", type=Path, required=True) + parser.add_argument("--graphify", type=Path, required=True) + parser.add_argument("--candidate", type=Path, required=True) + parser.add_argument("--candidate-binary", type=Path, required=True) + parser.add_argument("--raw", type=Path, required=True) + parser.add_argument("--summary", type=Path, required=True) + run(parser.parse_args()) diff --git a/benchmarks/agent_query/go_full_field_registration.json b/benchmarks/agent_query/go_full_field_registration.json new file mode 100644 index 000000000..80ef4e0c1 --- /dev/null +++ b/benchmarks/agent_query/go_full_field_registration.json @@ -0,0 +1,48 @@ +{ + "schema": "compass.go-full-field-registration/1", + "purpose": "Evaluate source-backed named Go struct-field declaration coverage and unexpected additions across every tracked Go file in the pinned Litestream repository, using one Go standard-library parser oracle and the frozen graphs.", + "declaredBeforeCapture": true, + "developmentStatus": "The selected two-file 33-field result and candidate graph were inspected before this full-repository registration. This is broader development qualification, not an unseen holdout.", + "sourceRepository": "litestream", + "sourceCommit": "6a71ccd9ad2bea0c4dc19bc274a8dc64c9b0fafa", + "sourceFiles": "All tracked paths ending in .go from git ls-files, including tests and generated files; no post-hoc file exclusions.", + "sourcePathCount": 146, + "sourcePathListSha256": "f6b7d8c500a270ef83e87ce48d4108293eb1505ea0ae7abde85d450800f1d0be", + "sourceOracle": "Go standard-library go/parser and go/ast; include top-level named StructType TypeSpecs and each explicit Field.Names identifier except the blank identifier. Keep embedded and blank fields separate. Exclude anonymous nested struct fields from the outer direct-member denominator. Preserve full repository-relative file path and exact 1-based identifier line.", + "join": "Use the same exact source file, owner name/start line, field name/identifier line and source-owner-to-target-field contains/defines record rule as go_struct_field_registration.json. Require a distinct field declaration node for each source identifier. Do not credit field-type context references as declarations. Report missing or ambiguous owner and field identities separately. Candidate graph additions require a matching source field under this rule; inspect every added field node and its owner.", + "priorSelectedRegistrationSha256": "3166a00fa59fa1cd40bb4584cdda1f62576f933304d94cdb763cccc6e4fb4f05", + "graphs": [ + { + "tool": "compass-baseline", + "bytes": 11490932, + "sha256": "8dd89c5a60e004c098104ee644b02ddb2d6a64698956ac7f25cdce7c1871a2db" + }, + { + "tool": "graphify", + "bytes": 5333935, + "sha256": "9cb6df8dcc053cea5b395292a7f460eaaeb2afc566acddb021ae003e51862b0e" + }, + { + "tool": "compass-candidate", + "bytes": 12971447, + "sha256": "3aed3fe0dab1fec6e1a9e197474ae3727f4c74dd6f3b68ff7cd91462cb4d29e4", + "binarySha256": "bf376d60745175e5ac91851ce45d9fd9ace287e9093de21be7c5068c9e4e12c9" + } + ], + "bounds": { + "maxSourcePaths": 200, + "maxSourceBytesPerFile": 1048576, + "maxGraphBytes": 16777216, + "maxGraphNodes": 100000, + "maxGraphEdges": 100000, + "maxStructs": 5000, + "maxNamedFields": 10000, + "maxSecondsForOracle": 60 + }, + "report": "Retain all source declarations and per-graph exact/ambiguous/missing statuses, every unexpected candidate field node, unchanged baseline node/edge checks, source/graph/binary hashes, diagnostics and unavailable outcomes. Separate declaration coverage from field-access correctness and god-object diagnosis.", + "limitations": [ + "One known Go development repository cannot establish cross-language extraction quality or broad superiority.", + "Publication exclusions and parser recovery remain visible; source fields in excluded files count as unavailable or missing rather than disappearing from the denominator.", + "A matching declaration identity does not prove field-access target precision, cohesion, responsibility count or user-facing explanation quality." + ] +} diff --git a/benchmarks/agent_query/go_full_field_review.json b/benchmarks/agent_query/go_full_field_review.json new file mode 100644 index 000000000..7086a1de5 --- /dev/null +++ b/benchmarks/agent_query/go_full_field_review.json @@ -0,0 +1,274 @@ +{ + "delta": { + "addedEdgeRecords": 993, + "addedNodeCount": 993, + "addedNodeKinds": { + "field": 993 + }, + "baselinePublicationOmittedNodes": 59, + "candidatePublicationOmittedNodes": 59, + "changedOldNodeIdsIgnoringCommunity": [], + "publicationOmissionsUnchanged": true, + "removedEdgeRecords": 0, + "removedNodeIds": [] + }, + "graphs": [ + { + "directed": true, + "edgeRecordCount": 9828, + "fieldTypeContextRecords": 0, + "nodeCount": 2808, + "nonmatchedCount": 993, + "nonmatchedExamples": [ + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "mu", + 47 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "client", + 48 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "logger", + 49 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "AccountName", + 52 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "AccountKey", + 53 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "SASToken", + 54 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "Endpoint", + 55 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "Bucket", + 58 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "Path", + 59 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ltxFileIterator", + 356, + "ctx", + 357 + ], + "status": "missing-field" + } + ], + "sha256": "8dd89c5a60e004c098104ee644b02ddb2d6a64698956ac7f25cdce7c1871a2db", + "statusCounts": { + "missing-field": 993 + }, + "tool": "compass-baseline" + }, + { + "directed": false, + "edgeRecordCount": 12518, + "fieldTypeContextRecords": 323, + "nodeCount": 2853, + "nonmatchedCount": 993, + "nonmatchedExamples": [ + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "mu", + 47 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "client", + 48 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "logger", + 49 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "AccountName", + 52 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "AccountKey", + 53 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "SASToken", + 54 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "Endpoint", + 55 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "Bucket", + 58 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ReplicaClient", + 46, + "Path", + 59 + ], + "status": "missing-field" + }, + { + "source": [ + "abs/replica_client.go", + "ltxFileIterator", + 356, + "ctx", + 357 + ], + "status": "missing-field" + } + ], + "sha256": "9cb6df8dcc053cea5b395292a7f460eaaeb2afc566acddb021ae003e51862b0e", + "statusCounts": { + "missing-field": 993 + }, + "tool": "graphify" + }, + { + "directed": true, + "edgeRecordCount": 10821, + "fieldTypeContextRecords": 0, + "nodeCount": 3801, + "nonmatchedCount": 0, + "nonmatchedExamples": [], + "sha256": "3aed3fe0dab1fec6e1a9e197474ae3727f4c74dd6f3b68ff7cd91462cb4d29e4", + "statusCounts": { + "matched": 993 + }, + "tool": "compass-candidate" + } + ], + "limitations": [ + "One known Go development repository cannot establish cross-language extraction quality or broad superiority.", + "Publication exclusions and parser recovery remain visible; source fields in excluded files count as unavailable or missing rather than disappearing from the denominator.", + "A matching declaration identity does not prove field-access target precision, cohesion, responsibility count or user-facing explanation quality." + ], + "oracleSha256": "4955dd2800824f99da91bfd5bcd03df3aaba011e101ce3f03993426068f984e6", + "rawSha256": "4833f22adf492490e3d3ae33884bf81b7ef3a73e50ed0a3f829ce8b40acdb6df", + "registrationSha256": "3beb1693382f278730f083a43bc8e6444f893ae12967ee0339d3139a3ce4c84d", + "schema": "compass.go-full-field-review/1", + "sourceBlankFieldCount": 0, + "sourceCommit": "6a71ccd9ad2bea0c4dc19bc274a8dc64c9b0fafa", + "sourceEmbeddedFieldCount": 27, + "sourceNamedFieldCount": 993, + "sourceStructCount": 167, + "trackedGoFileCount": 146, + "unexpectedAddedNodes": [] +} diff --git a/benchmarks/agent_query/go_parameter_field_oracle.go b/benchmarks/agent_query/go_parameter_field_oracle.go new file mode 100644 index 000000000..72a9545a9 --- /dev/null +++ b/benchmarks/agent_query/go_parameter_field_oracle.go @@ -0,0 +1,307 @@ +// Enumerate selectors on explicitly typed ordinary method parameters. +// This source oracle uses only Go's parser object bindings, not graph output. +package main + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "go/ast" + "go/parser" + "go/token" + "os" + "path/filepath" + "sort" + "strings" +) + +const maxPaths = 200 +const maxFileBytes = 1 << 20 +const maxSelectors = 100000 + +type sourceFile struct { + Path string `json:"path"` + Package string `json:"package"` + Bytes int `json:"bytes"` + SHA256 string `json:"sha256"` + Tree *ast.File `json:"-"` +} + +type field struct { + Name string `json:"name"` + File string `json:"file"` + Line int `json:"line"` +} + +type structure struct { + Name string `json:"name"` + File string `json:"file"` + Line int `json:"line"` + Fields map[string][]field `json:"-"` + Decl *ast.TypeSpec `json:"-"` +} + +type parameter struct { + Name string + TypeName string + Line int + TypeIdent *ast.Ident +} + +type contact struct { + File string `json:"file"` + Package string `json:"package"` + Method string `json:"method"` + MethodLine int `json:"methodLine"` + Parameter string `json:"parameter"` + ParameterLine int `json:"parameterLine"` + Struct string `json:"struct"` + StructFile string `json:"structFile"` + StructLine int `json:"structLine"` + Field string `json:"field"` + FieldFile string `json:"fieldFile"` + FieldLine int `json:"fieldLine"` + Line int `json:"line"` + ByteOffset int `json:"byteOffset"` +} + +type exclusion struct { + File string `json:"file"` + Method string `json:"method"` + MethodLine int `json:"methodLine"` + Line int `json:"line"` + ByteOffset int `json:"byteOffset"` + Receiver string `json:"receiver"` + Field string `json:"field"` + Category string `json:"category"` +} + +type output struct { + Schema string `json:"schema"` + Files []sourceFile `json:"files"` + Contacts []contact `json:"contacts"` + Exclusions []exclusion `json:"exclusions"` + SelectorCount int `json:"selectorCount"` + Categories map[string]int `json:"categories"` +} + +func packageTypeKey(path, pkg, name string) string { + return filepath.ToSlash(filepath.Dir(path)) + "\x00" + pkg + "\x00" + name +} + +func baseTypeIdent(expr ast.Expr) *ast.Ident { + switch value := expr.(type) { + case *ast.Ident: + return value + case *ast.StarExpr: + return baseTypeIdent(value.X) + case *ast.IndexExpr: + return baseTypeIdent(value.X) + case *ast.IndexListExpr: + return baseTypeIdent(value.X) + default: + return nil + } +} + +func sourcePaths() ([]string, error) { + paths := os.Args[1:] + if len(paths) == 0 || len(paths) > maxPaths { + return nil, fmt.Errorf("expected 1..%d registered relative Go paths", maxPaths) + } + seen := make(map[string]bool, len(paths)) + for _, path := range paths { + if filepath.IsAbs(path) || filepath.Clean(path) != path || !strings.HasSuffix(path, ".go") { + return nil, fmt.Errorf("invalid relative Go path: %q", path) + } + for _, part := range strings.Split(filepath.ToSlash(path), "/") { + if part == ".." || part == "." || part == "" { + return nil, fmt.Errorf("unsafe source path: %q", path) + } + } + if seen[path] { + return nil, fmt.Errorf("duplicate source path: %q", path) + } + seen[path] = true + } + sort.Strings(paths) + return paths, nil +} + +func run() (output, error) { + paths, err := sourcePaths() + if err != nil { + return output{}, err + } + result := output{ + Schema: "compass.go-parameter-field-oracle/1", + Files: []sourceFile{}, Contacts: []contact{}, Exclusions: []exclusion{}, + Categories: make(map[string]int), + } + positions := token.NewFileSet() + structs := make(map[string][]structure) + for _, path := range paths { + data, err := os.ReadFile(path) + if err != nil { + return output{}, err + } + if len(data) > maxFileBytes { + return output{}, fmt.Errorf("source byte bound exceeded: %s", path) + } + tree, err := parser.ParseFile(positions, path, data, parser.AllErrors) + if err != nil { + return output{}, fmt.Errorf("parse %s: %w", path, err) + } + sum := sha256.Sum256(data) + result.Files = append(result.Files, sourceFile{path, tree.Name.Name, len(data), hex.EncodeToString(sum[:]), tree}) + for _, declaration := range tree.Decls { + general, ok := declaration.(*ast.GenDecl) + if !ok || general.Tok != token.TYPE { + continue + } + for _, spec := range general.Specs { + named, ok := spec.(*ast.TypeSpec) + if !ok { + continue + } + body, ok := named.Type.(*ast.StructType) + if !ok { + continue + } + item := structure{named.Name.Name, path, positions.Position(named.Name.Pos()).Line, make(map[string][]field), named} + for _, declarationField := range body.Fields.List { + for _, name := range declarationField.Names { + if name.Name != "_" { + item.Fields[name.Name] = append(item.Fields[name.Name], field{name.Name, path, positions.Position(name.Pos()).Line}) + } + } + } + key := packageTypeKey(path, tree.Name.Name, item.Name) + structs[key] = append(structs[key], item) + } + } + } + for _, file := range result.Files { + for _, declaration := range file.Tree.Decls { + method, ok := declaration.(*ast.FuncDecl) + if !ok || method.Recv == nil || method.Body == nil || method.Type.Params == nil { + continue + } + parameters := make(map[*ast.Object]parameter) + for _, declarationField := range method.Type.Params.List { + typeIdent := baseTypeIdent(declarationField.Type) + typeName := "" + if typeIdent != nil { + typeName = typeIdent.Name + } + for _, name := range declarationField.Names { + if name.Obj != nil && name.Name != "_" { + parameters[name.Obj] = parameter{name.Name, typeName, positions.Position(name.Pos()).Line, typeIdent} + } + } + } + called := make(map[*ast.SelectorExpr]bool) + ast.Inspect(method.Body, func(node ast.Node) bool { + if call, ok := node.(*ast.CallExpr); ok { + if selector, ok := call.Fun.(*ast.SelectorExpr); ok { + called[selector] = true + } + } + return true + }) + var walkError error + ast.Inspect(method.Body, func(node ast.Node) bool { + selector, ok := node.(*ast.SelectorExpr) + if !ok || walkError != nil { + return walkError == nil + } + result.SelectorCount++ + if result.SelectorCount > maxSelectors { + walkError = fmt.Errorf("selector bound exceeded") + return false + } + position := positions.Position(selector.Sel.Pos()) + operand, direct := selector.X.(*ast.Ident) + category := "" + var param parameter + var owner []structure + var fields []field + switch { + case !direct: + category = "non_identifier_receiver" + case operand.Obj == nil: + category = "unbound_identifier" + default: + var found bool + param, found = parameters[operand.Obj] + if !found { + category = "not_ordinary_parameter" + } else if called[selector] { + category = "called_selector" + } else if param.TypeName == "" { + category = "unsupported_parameter_type" + } else { + owner = structs[packageTypeKey(file.Path, file.Package, param.TypeName)] + if len(owner) == 0 { + category = "unavailable_struct" + } else if len(owner) > 1 { + category = "ambiguous_struct" + } else if param.TypeIdent.Obj != nil && param.TypeIdent.Obj.Decl != owner[0].Decl { + category = "shadowed_nominal_type" + } else { + fields = owner[0].Fields[selector.Sel.Name] + if len(fields) == 0 { + category = "not_direct_named_field" + } else if len(fields) > 1 { + category = "ambiguous_field" + } + } + } + } + if category == "" { + result.Contacts = append(result.Contacts, contact{ + File: file.Path, Package: file.Package, + Method: method.Name.Name, MethodLine: positions.Position(method.Name.Pos()).Line, + Parameter: param.Name, ParameterLine: param.Line, + Struct: owner[0].Name, StructFile: owner[0].File, StructLine: owner[0].Line, + Field: fields[0].Name, FieldFile: fields[0].File, FieldLine: fields[0].Line, + Line: position.Line, ByteOffset: position.Offset, + }) + result.Categories["accepted_direct_field"]++ + } else { + receiver := "" + if direct { + receiver = operand.Name + } + result.Exclusions = append(result.Exclusions, exclusion{ + File: file.Path, Method: method.Name.Name, + MethodLine: positions.Position(method.Name.Pos()).Line, + Line: position.Line, ByteOffset: position.Offset, + Receiver: receiver, Field: selector.Sel.Name, Category: category, + }) + result.Categories[category]++ + } + return true + }) + if walkError != nil { + return output{}, walkError + } + } + } + return result, nil +} + +func main() { + result, err := run() + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + encoder := json.NewEncoder(os.Stdout) + encoder.SetEscapeHTML(false) + if err := encoder.Encode(result); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/benchmarks/agent_query/go_parameter_field_probe.py b/benchmarks/agent_query/go_parameter_field_probe.py new file mode 100644 index 000000000..365aef6c9 --- /dev/null +++ b/benchmarks/agent_query/go_parameter_field_probe.py @@ -0,0 +1,154 @@ +"""Join the registered typed Go parameter-field source oracle to frozen graphs.""" + +from __future__ import annotations + +import argparse +from collections import Counter, defaultdict +import json +from pathlib import Path +import subprocess + +from benchmarks.agent_query.go_struct_field_probe import compare, sha256 + + +def read_bounded(path: Path, max_bytes: int) -> dict: + if path.stat().st_size > max_bytes: + raise ValueError(f"input byte bound exceeded: {path}") + return json.loads(path.read_text()) + + +def anchor(item: dict) -> dict: + return item.get("source") or {} + + +def index_compass(graph: dict) -> dict: + owners = defaultdict(list) + fields = defaultdict(list) + methods = defaultdict(list) + containment = set() + accesses = defaultdict(list) + for node in graph["nodes"]: + source = anchor(node) + if node.get("kind") == "struct": + owners[(node.get("name"), source.get("file"), source.get("startLine"))].append(node) + if node.get("kind") == "field": + fields[(node.get("qualifiedName"), source.get("file"), source.get("startLine"))].append(node) + if node.get("kind") == "method": + methods[(source.get("file"), source.get("startLine"))].append(node) + for link in graph["links"]: + if link.get("kind") == "contains": + containment.add((link["source"], link["target"])) + if link.get("kind") == "references" and str(link.get("occurrenceRule", "")).startswith( + "universal-member-access" + ): + site = link.get("relationshipSite") or {} + accesses[(link["source"], link["target"], site.get("file"), + site.get("startLine"), site.get("startByte"))].append(link) + return {"owners": owners, "fields": fields, "methods": methods, + "containment": containment, "accesses": accesses} + + +def join(index: dict, contact: dict) -> dict: + owner = index["owners"][(contact["struct"], contact["structFile"], contact["structLine"])] + if len(owner) != 1: + return {"status": "missing_or_ambiguous_owner", "ownerCount": len(owner)} + qualified = owner[0]["qualifiedName"] + "::" + contact["field"] + field = index["fields"][(qualified, contact["fieldFile"], contact["fieldLine"])] + method = [node for node in index["methods"][(contact["file"], contact["methodLine"])] + if node.get("qualifiedName", "").endswith("::" + contact["method"])] + if len(field) != 1 or len(method) != 1: + return {"status": "missing_or_ambiguous_declaration", "fieldCount": len(field), + "methodCount": len(method)} + if (owner[0]["id"], field[0]["id"]) not in index["containment"]: + return {"status": "missing_direct_ownership"} + links = index["accesses"][(method[0]["id"], field[0]["id"], contact["file"], + contact["line"], contact["byteOffset"])] + return {"status": "exact" if len(links) == 1 else "missing_or_ambiguous_edge", + "edgeIds": [link["id"] for link in links]} + + +def run(args: argparse.Namespace) -> None: + registration = read_bounded(args.registration, 64 * 1024) + if registration["schema"] != "compass.go-parameter-field-registration/1": + raise ValueError("unexpected registration schema") + bounds = registration["bounds"] + commit = subprocess.run(["git", "-C", str(args.source), "rev-parse", "HEAD"], + check=True, capture_output=True, text=True).stdout.strip() + dirty = subprocess.run(["git", "-C", str(args.source), "status", "--porcelain=v1"], + check=True, capture_output=True, text=True).stdout.strip() + if commit != registration["sourceCommit"] or dirty: + raise ValueError("source checkout changed") + paths = subprocess.run(["git", "ls-files", "*.go"], cwd=args.source, + check=True, capture_output=True, text=True).stdout.splitlines() + oracle = read_bounded(args.oracle, 8 * 1024 * 1024) + if oracle["schema"] != "compass.go-parameter-field-oracle/1" or len(paths) != 146: + raise ValueError("oracle schema or selected path count changed") + if len(paths) > bounds["maxSourcePaths"] or paths != [item["path"] for item in oracle["files"]]: + raise ValueError("oracle source paths differ from tracked source") + for record in oracle["files"]: + path = args.source / record["path"] + if (path.stat().st_size != record["bytes"] or record["bytes"] > bounds["maxSourceBytesPerFile"] + or sha256(path) != record["sha256"]): + raise ValueError(f"source changed: {record['path']}") + if oracle["selectorCount"] > bounds["maxSelectors"]: + raise ValueError("oracle selector bound exceeded") + + graphs = {} + paths_by_tool = {"compass-before-access": args.baseline, + "compass-after-access": args.candidate, "graphify": args.graphify} + for record in registration["frozenGraphs"]: + path = paths_by_tool[record["tool"]] + if (path.stat().st_size != record["bytes"] or record["bytes"] > bounds["maxGraphBytes"] + or sha256(path) != record["sha256"]): + raise ValueError(f"frozen graph changed: {record['tool']}") + graph = read_bounded(path, bounds["maxGraphBytes"]) + if len(graph["nodes"]) > bounds["maxGraphNodes"] or len(graph["links"]) > bounds["maxGraphEdges"]: + raise ValueError("graph item bound exceeded") + graphs[record["tool"]] = graph + + unique_fields = sorted({(item["structFile"], item["struct"], item["structLine"], + item["field"], item["fieldLine"]) for item in oracle["contacts"]}) + declarations = [{"file": item[0], "struct": item[1], "structLine": item[2], + "field": item[3], "fieldLine": item[4]} for item in unique_fields] + graphify_fields = compare(graphs["graphify"], "graphify", declarations) + graphify_status = {(item["file"], item["struct"], item["structLine"], + item["field"], item["fieldLine"]): item["status"] + for item in graphify_fields["rows"]} + before = index_compass(graphs["compass-before-access"]) + after = index_compass(graphs["compass-after-access"]) + rows = [] + for contact in oracle["contacts"]: + field_key = (contact["structFile"], contact["struct"], contact["structLine"], + contact["field"], contact["fieldLine"]) + rows.append({"contact": contact, "before": join(before, contact), + "after": join(after, contact), + "graphifyFieldStatus": graphify_status[field_key]}) + counts = {tool: dict(sorted(Counter(row[tool]["status"] for row in rows).items())) + for tool in ("before", "after")} + counts["graphifyFieldStatus"] = dict(sorted(Counter( + row["graphifyFieldStatus"] for row in rows).items())) + credited = {edge_id for row in rows for edge_id in row["after"].get("edgeIds", []) + if row["after"]["status"] == "exact"} + other_edges = sorted(link["id"] for links in after["accesses"].values() + for link in links if link["id"] not in credited) + raw = {"schema": "compass.go-parameter-field-probe/1", + "registrationSha256": sha256(args.registration), "oracleSha256": sha256(args.oracle), + "sourceCommit": commit, "trackedGoPaths": paths, "counts": counts, + "uniqueFieldTargets": len(unique_fields), + "graphifyDirected": graphs["graphify"]["directed"], + "rows": rows, "uncreditedCandidateAccessEdgeIds": other_edges} + args.output.write_text(json.dumps(raw, indent=2, sort_keys=True) + "\n") + print(json.dumps({"contacts": len(rows), "uniqueFields": len(unique_fields), + "counts": counts, "uncreditedCandidateEdges": len(other_edges)}, sort_keys=True)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--source", type=Path, required=True) + parser.add_argument("--oracle", type=Path, required=True) + parser.add_argument("--baseline", type=Path, required=True) + parser.add_argument("--candidate", type=Path, required=True) + parser.add_argument("--graphify", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + run(parser.parse_args()) diff --git a/benchmarks/agent_query/go_parameter_field_registration.json b/benchmarks/agent_query/go_parameter_field_registration.json new file mode 100644 index 000000000..99fc3b767 --- /dev/null +++ b/benchmarks/agent_query/go_parameter_field_registration.json @@ -0,0 +1,17 @@ +{ + "schema": "compass.go-parameter-field-registration/1", + "declaredBeforeSourceCapture": true, + "status": "Development follow-up after the direct-receiver field audit; the 1908 uncredited edge count and examples were inspected. This is not a held-out sample.", + "sourceRepository": "benbjohnson/litestream", + "sourceCommit": "6a71ccd9ad2bea0c4dc19bc274a8dc64c9b0fafa", + "sourceSelection": "All 146 tracked Go paths from go_full_field_registration.json, including tests and generated files, with no post-hoc file exclusions.", + "frozenGraphs": [ + {"tool": "compass-before-access", "sha256": "3aed3fe0dab1fec6e1a9e197474ae3727f4c74dd6f3b68ff7cd91462cb4d29e4", "bytes": 12971447}, + {"tool": "compass-after-access", "sha256": "d6bbc036d3cf6d294995ba734be7e70f02763fe273aa87597f40d3113f82e732", "bytes": 16902487}, + {"tool": "graphify", "sha256": "9cb6df8dcc053cea5b395292a7f460eaaeb2afc566acddb021ae003e51862b0e", "bytes": 5333935} + ], + "sourceOracle": "Parse every selected file with Go's standard go/parser and default identifier-object resolution. For each method body selector with an identifier operand, accept only a non-call selector whose operand object's declaration is one of that method's named ordinary parameters with an explicit unqualified nominal struct type (optionally pointer or generic instantiation). Require one unique top-level struct declaration in the same directory and parsed package, and one unique named direct field declaration of that struct. Record exact selector identifier byte/line, method and parameter declarations, owner and field declaration source file/line, and all exclusions. A shadowed spelling, result/receiver variable, other local, imported/qualified or unknown type, ambiguous struct or field, promoted/embedded-only field, or called selector is not credited.", + "graphJoin": "Require a unique source-located owner struct, method and field, direct owner-to-field containment, and a directed method-to-field references link with universal-member-access provenance at the exact selector identifier byte. Report missing and ambiguous outcomes as well as all graph edges outside the credited cohort. Compare the same exact join on each frozen graph; field-type context does not count as a declaration target.", + "bounds": {"maxSourcePaths": 200, "maxSourceBytesPerFile": 1048576, "maxSelectors": 100000, "maxGraphBytes": 25165824, "maxGraphNodes": 100000, "maxGraphEdges": 100000, "maxOracleSeconds": 60}, + "outputs": "Retain raw source oracle, exact per-contact graph outcomes, negative categories, source and graph hashes, repeated deterministic runs, and a compact review. Do not claim precision for unrelated edges, broad Go completeness, god-object diagnosis or overall superiority." +} diff --git a/benchmarks/agent_query/go_parameter_field_review.json b/benchmarks/agent_query/go_parameter_field_review.json new file mode 100644 index 000000000..d942313d7 --- /dev/null +++ b/benchmarks/agent_query/go_parameter_field_review.json @@ -0,0 +1,27 @@ +{ + "schema": "compass.go-parameter-field-development-review/1", + "scope": "Pinned Litestream 6a71ccd9ad2bea0c4dc19bc274a8dc64c9b0fafa, all 146 tracked Go files; known development repository, not held-out", + "registrationCommit": "d82d94b9", + "registrationSha256": "d197a66d02a26e967505ba38cfe76544aaac94c4e9edea2f2ac0293b348a5088", + "oracleSourceSha256": "8fba86e8cb96623a90778c5b3cbe95dd4642627900dd60748dda8e837839afb7", + "oracleBinarySha256": "5a544db0aeeec403b2a4bebca9320386c767f623b3b5b220849a0276401e28ed", + "oracleOutputSha256": "1fae7219be73ef2fa142a6581153a5b91cfa47cb93a07c29c61bcfdf80fc92a4", + "probeSourceSha256": "eadc176b7f841ee6e980ac07c694a1c6ba8938329ba7404d7f2319fa9fa4605e", + "rawProbeSha256": "5292c80955aeda23cc97378d5ad6fd04a3bc17898fc1c1b59a6310a57de5be9f", + "rawRun": "go-parameter-field-01 in the external code-graph audit runs directory", + "sourceSelectorCount": 10586, + "sourceExplicitParameterDirectFieldContacts": 276, + "uniqueFieldTargets": 98, + "candidateExactContacts": 276, + "baselineCompassExactContacts": 0, + "frozenGraphifyExactContacts": 0, + "graphifyFieldTypeContextRecordsOnTheseFields": 19, + "priorReceiverOracleCategory": "All 276 contacts were previously categorized as other_receiver, with no overlap in credited sites or edges.", + "combinedDirectReceiverAndParameterOracle": { + "exactDistinctCandidateLinks": 3018, + "candidateMemberAccessLinks": 4650, + "remainingUncreditedLinks": 1632 + }, + "repeatability": "Two full source-oracle outputs and two full graph-probe outputs were byte identical. A synthetic fixture confirmed typed parameter binding, shadowed parameter exclusion and called-selector exclusion.", + "limits": "The source oracle covers only explicitly typed ordinary method parameters whose unqualified nominal type has one direct source struct and one direct named field. The remaining 1632 links have no precision credit. This does not establish whole-Go graph precision, other languages, god-object diagnosis or overall superiority." +} diff --git a/benchmarks/agent_query/go_receiver_development_review.json b/benchmarks/agent_query/go_receiver_development_review.json new file mode 100644 index 000000000..45fd1d1a7 --- /dev/null +++ b/benchmarks/agent_query/go_receiver_development_review.json @@ -0,0 +1,544 @@ +{ + "artifactDigests": { + "go-callback-regression-after-01.log": "8f49025c2134d0a0b880b93d054fd27af10b56d0268dc16243685eeae0760d57", + "go-callback-regression-before-01.log": "4ecb63cc44c9397e0273a2f3fdc2ab1d14151d3bd16cd795938d52d91056cab2", + "go-initializer-build-02.log": "a8df3a82dbb578d6a6c88e7ac7090dc61cf40e2797616e259e019dfc06605872", + "go-initializer-chi-diagnostic-edge-audit-01.json": "35b94fe0687072106320ebfde1b4b712fd891742ddb5f1a7b0bc6eb2d93eb79c", + "go-initializer-chi-diagnostic-edge-audit-02.json": "2f8963363b492572d9af86929786ef8391d35a388d6fd170804021a77a111af6", + "go-initializer-clippy-02.log": "d423b7f39f17cadab6fc174d5e9b69412b0dec968efb6d2a8847f8a7d9045911", + "go-initializer-final-delta-01.json": "9ee59cbc29c017e28a1d2f3cd8524afdf5fe004d8756ac179535d3a8c2d782c2", + "go-initializer-native-03.log": "dcb437d6aa7fdadd3e7377d481532181a6634ecbc990b8940210e9cca468e360", + "go-initializer-python-02.log": "c8d67e5826b21f7eef14a1c4f2199f6031e77a8ddb61861be33cf790942a5037", + "go-initializer-qualification-01.log": "c17480a3ce59427432fba08c7368951a8cc284a65a0d44a24fd410e037f7048e", + "go-initializer-qualification-02.log": "632995fdcff528cef061312067b2e7cf3f344dedd2b95b771559404648c44887", + "go_initializer_delta.py": "6f1642fafa950051375382d86615b620c23e582cf9d8b70c8a8e33197e54d164" + }, + "diagnosticResult": { + "compressionInterfacePair": { + "compass": true, + "graphify": false + }, + "registeredFourPairs": { + "compass": 4, + "graphify": 4 + }, + "scope": "Post-output diagnostic; exact unique endpoints on both tools; Graphify lacks this selected call. Not a population precision/recall score." + }, + "finalBinarySha256": "bb09a5335c80fd7dd710e008b4a2f30f9403108e4883ed74e7d7c0de1b0aaca9", + "finalComparisons": [ + { + "captures": { + "baseline": { + "calls": 916, + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "graphDigests": { + "compass": "e7a5dcb40973eadb8281416e125ef0b78a6330b74e0361ac52dcb083ba77204a", + "graphify": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + "nodes": 729, + "questionsPerTool": 11, + "relationships": 2000, + "run": "heldout-a-01", + "runSha256": "6412df38bbde56a1ec89974ac8d0a11162592bae90c403ed7b7f745acb6384bd", + "textPasses": { + "compass": 11, + "graphify": 10 + } + }, + "final": { + "calls": 918, + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "graphDigests": { + "compass": "13a565a61fea5cf259e2e898e0f62a5d48e6d491f60f1ea862f1560065fdd16e", + "graphify": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + "nodes": 729, + "questionsPerTool": 11, + "relationships": 2002, + "run": "go-initializer-chi-02", + "runSha256": "d1e04cc7bdf0e09588ec9a3fbda96ee67102387358cb18ae5d974486f46f416c", + "textPasses": { + "compass": 11, + "graphify": 10 + } + }, + "intermediate": { + "calls": 918, + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "graphDigests": { + "compass": "13a565a61fea5cf259e2e898e0f62a5d48e6d491f60f1ea862f1560065fdd16e", + "graphify": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + "nodes": 729, + "questionsPerTool": 11, + "relationships": 2002, + "run": "go-initializer-chi-01", + "runSha256": "6aca80be34b6a893052302e20ce31ef11b4b88b272712e25e6b8ccea76efeb36", + "textPasses": { + "compass": 11, + "graphify": 10 + } + } + }, + "finalDeltaFrom": { + "baseline": [ + { + "multiplicity": 1, + "relation": "calls", + "site": { + "endByte": 436, + "endColumn": 22, + "endLine": 18, + "file": "context.go", + "startByte": 423, + "startColumn": 9, + "startLine": 18 + }, + "siteText": "rctx.URLParam", + "source": [ + "chi.URLParamFromCtx", + "context.go", + 16 + ], + "sourceLine": "\t\treturn rctx.URLParam(key)", + "sourceSha256": "b19edcca252e2fe74e82802c4c7ce1a1c0855728f9ede1288f0224283dfc7e53", + "status": "added", + "target": [ + "chi.Context::URLParam", + "context.go", + 124 + ] + }, + { + "multiplicity": 1, + "relation": "calls", + "site": { + "endByte": 10958, + "endColumn": 9, + "endLine": 364, + "file": "middleware/compress.go", + "startByte": 10951, + "startColumn": 2, + "startLine": 364 + }, + "siteText": "f.Flush", + "source": [ + "middleware.compressResponseWriter::Flush", + "middleware/compress.go", + 357 + ], + "sourceLine": "\t\tf.Flush()", + "sourceSha256": "1a54e1cd05a913dd26bc00faab499cddc58a00646a92af5051961100d1532698", + "status": "added", + "target": [ + "middleware.compressFlusher::Flush", + "middleware/compress.go", + 354 + ] + } + ], + "intermediate": [] + }, + "repository": "chi" + }, + { + "captures": { + "baseline": { + "calls": 2101, + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "graphDigests": { + "compass": "6f862024bd68b88b734a43421a21cc2074a94ab7d68cc8857d59609112c9c7db", + "graphify": "218aa21e02fad4506206c34acfc6d9ff58a2a0052615d92e4377c74bf977a937" + }, + "nodes": 656, + "questionsPerTool": 10, + "relationships": 3369, + "run": "v2-shadow-05", + "runSha256": "1b05861d3f1b2d2deaba0b13cb3b9712ded14afa69a52fe1ca61df6cda2b67b6", + "textPasses": { + "compass": 10, + "graphify": 9 + } + }, + "final": { + "calls": 2101, + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "graphDigests": { + "compass": "6f862024bd68b88b734a43421a21cc2074a94ab7d68cc8857d59609112c9c7db", + "graphify": "218aa21e02fad4506206c34acfc6d9ff58a2a0052615d92e4377c74bf977a937" + }, + "nodes": 656, + "questionsPerTool": 10, + "relationships": 3369, + "run": "go-initializer-cobra-02", + "runSha256": "92604fa3ef8bc964a9e581e0894e1abbd39d98ecaafead7d10b6a17919db2855", + "textPasses": { + "compass": 10, + "graphify": 9 + } + }, + "intermediate": { + "calls": 2101, + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "graphDigests": { + "compass": "c97352cfbf1b52b9b42af34108729b91e46113a2846ae49b4d39fc9c1336667b", + "graphify": "218aa21e02fad4506206c34acfc6d9ff58a2a0052615d92e4377c74bf977a937" + }, + "nodes": 656, + "questionsPerTool": 10, + "relationships": 3373, + "run": "go-initializer-cobra-01", + "runSha256": "b78c625258ba48c32cbf41758ad505bd62e2ba966ab8017726c20992abb06d60", + "textPasses": { + "compass": 10, + "graphify": 9 + } + } + }, + "finalDeltaFrom": { + "baseline": [], + "intermediate": [ + { + "multiplicity": 1, + "relation": "references", + "site": { + "endByte": 33122, + "endColumn": 17, + "endLine": 1153, + "file": "command.go", + "startByte": 33108, + "startColumn": 3, + "startLine": 1153 + }, + "siteText": "cmd.HelpFunc()", + "source": [ + "cobra.Command::ExecuteC", + "command.go", + 1084 + ], + "sourceLine": "\t\t\tcmd.HelpFunc()(cmd, args)", + "sourceSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90", + "status": "removed", + "target": [ + "cobra.Command", + "command.go", + 54 + ] + }, + { + "multiplicity": 1, + "relation": "references", + "site": { + "endByte": 17064, + "endColumn": 13, + "endLine": 521, + "file": "command.go", + "startByte": 17052, + "startColumn": 1, + "startLine": 521 + }, + "siteText": "c.HelpFunc()", + "source": [ + "cobra.Command::Help", + "command.go", + 520 + ], + "sourceLine": "\tc.HelpFunc()(c, []string{})", + "sourceSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90", + "status": "removed", + "target": [ + "cobra.Command", + "command.go", + 54 + ] + }, + { + "multiplicity": 1, + "relation": "references", + "site": { + "endByte": 15953, + "endColumn": 21, + "endLine": 479, + "file": "command.go", + "startByte": 15940, + "startColumn": 8, + "startLine": 479 + }, + "siteText": "c.UsageFunc()", + "source": [ + "cobra.Command::Usage", + "command.go", + 478 + ], + "sourceLine": "\treturn c.UsageFunc()(c)", + "sourceSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90", + "status": "removed", + "target": [ + "cobra.Command", + "command.go", + 54 + ] + }, + { + "multiplicity": 1, + "relation": "references", + "site": { + "endByte": 27634, + "endColumn": 26, + "endLine": 921, + "file": "command.go", + "startByte": 27617, + "startColumn": 9, + "startLine": 921 + }, + "siteText": "c.FlagErrorFunc()", + "source": [ + "cobra.Command::execute", + "command.go", + 905 + ], + "sourceLine": "\t\treturn c.FlagErrorFunc()(c, err)", + "sourceSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90", + "status": "removed", + "target": [ + "cobra.Command", + "command.go", + 54 + ] + } + ] + }, + "repository": "cobra" + } + ], + "intermediateBinarySha256": "bd0168b9d1258199a23820c1888aba577a41869fec820baeb5d9a54db2a4087d", + "intermediateRuns": [ + { + "added": 2, + "baselineRun": "heldout-a-01", + "baselineRunSha256": "6412df38bbde56a1ec89974ac8d0a11162592bae90c403ed7b7f745acb6384bd", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "delta": [ + { + "multiplicity": 1, + "relation": "calls", + "site": { + "endByte": 436, + "endColumn": 22, + "endLine": 18, + "file": "context.go", + "startByte": 423, + "startColumn": 9, + "startLine": 18 + }, + "siteText": "rctx.URLParam", + "source": [ + "chi.URLParamFromCtx", + "context.go", + 16 + ], + "sourceLine": "\t\treturn rctx.URLParam(key)", + "status": "added", + "target": [ + "chi.Context::URLParam", + "context.go", + 124 + ] + }, + { + "multiplicity": 1, + "relation": "calls", + "site": { + "endByte": 10958, + "endColumn": 9, + "endLine": 364, + "file": "middleware/compress.go", + "startByte": 10951, + "startColumn": 2, + "startLine": 364 + }, + "siteText": "f.Flush", + "source": [ + "middleware.compressResponseWriter::Flush", + "middleware/compress.go", + 357 + ], + "sourceLine": "\t\tf.Flush()", + "status": "added", + "target": [ + "middleware.compressFlusher::Flush", + "middleware/compress.go", + 354 + ] + } + ], + "questionsPerTool": 11, + "removed": 0, + "repository": "chi", + "run": "go-initializer-chi-01", + "runSha256": "6aca80be34b6a893052302e20ce31ef11b4b88b272712e25e6b8ccea76efeb36", + "textPasses": { + "compass": 11, + "graphify": 10 + } + }, + { + "added": 4, + "baselineRun": "v2-shadow-05", + "baselineRunSha256": "1b05861d3f1b2d2deaba0b13cb3b9712ded14afa69a52fe1ca61df6cda2b67b6", + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "delta": [ + { + "multiplicity": 1, + "relation": "references", + "site": { + "endByte": 33122, + "endColumn": 17, + "endLine": 1153, + "file": "command.go", + "startByte": 33108, + "startColumn": 3, + "startLine": 1153 + }, + "siteText": "cmd.HelpFunc()", + "source": [ + "cobra.Command::ExecuteC", + "command.go", + 1084 + ], + "sourceLine": "\t\t\tcmd.HelpFunc()(cmd, args)", + "status": "added", + "target": [ + "cobra.Command", + "command.go", + 54 + ] + }, + { + "multiplicity": 1, + "relation": "references", + "site": { + "endByte": 17064, + "endColumn": 13, + "endLine": 521, + "file": "command.go", + "startByte": 17052, + "startColumn": 1, + "startLine": 521 + }, + "siteText": "c.HelpFunc()", + "source": [ + "cobra.Command::Help", + "command.go", + 520 + ], + "sourceLine": "\tc.HelpFunc()(c, []string{})", + "status": "added", + "target": [ + "cobra.Command", + "command.go", + 54 + ] + }, + { + "multiplicity": 1, + "relation": "references", + "site": { + "endByte": 15953, + "endColumn": 21, + "endLine": 479, + "file": "command.go", + "startByte": 15940, + "startColumn": 8, + "startLine": 479 + }, + "siteText": "c.UsageFunc()", + "source": [ + "cobra.Command::Usage", + "command.go", + 478 + ], + "sourceLine": "\treturn c.UsageFunc()(c)", + "status": "added", + "target": [ + "cobra.Command", + "command.go", + 54 + ] + }, + { + "multiplicity": 1, + "relation": "references", + "site": { + "endByte": 27634, + "endColumn": 26, + "endLine": 921, + "file": "command.go", + "startByte": 27617, + "startColumn": 9, + "startLine": 921 + }, + "siteText": "c.FlagErrorFunc()", + "source": [ + "cobra.Command::execute", + "command.go", + 905 + ], + "sourceLine": "\t\treturn c.FlagErrorFunc()(c, err)", + "status": "added", + "target": [ + "cobra.Command", + "command.go", + 54 + ] + } + ], + "questionsPerTool": 10, + "removed": 0, + "repository": "cobra", + "run": "go-initializer-cobra-01", + "runSha256": "b78c625258ba48c32cbf41758ad505bd62e2ba966ab8017726c20992abb06d60", + "textPasses": { + "compass": 10, + "graphify": 9 + } + } + ], + "reviews": [ + { + "judgment": "Supported call: the if initializer calls RouteContext, whose declared result is *Context; the selected URLParam method belongs to Context.", + "repository": "chi", + "site": "context.go:18" + }, + { + "judgment": "Supported interface-method call: comma-ok assertion at line 363 gives f the compressFlusher interface type. This does not establish the concrete runtime implementation. Other f bindings at 358 and 367 use http.Flusher.", + "repository": "chi", + "site": "middleware/compress.go:364" + }, + { + "judgment": "Regression: returned callbacks were projected as references to the factory receiver type Command. The outer invocation has no proven named target; retain the inner named factory call and omit the unsupported outer candidate. These four additions are not recall gains.", + "repository": "cobra", + "sites": [ + "command.go:479", + "command.go:521", + "command.go:921", + "command.go:1153" + ] + } + ], + "schema": "compass.go-receiver-development-review/1", + "scope": "Post-output development diagnostics on Chi and Cobra; not independent confirmation, population precision, or performance evidence.", + "verification": { + "clippy": "workspace lib/bin and same integration selection passed with warnings denied", + "native": { + "failed": 0, + "ignored": 2, + "passed": 1410, + "selection": "workspace lib/bin plus universal_evidence, universal_resolution, contracts, compass_product" + }, + "python": { + "passed": 95 + }, + "qualification": "Both fixtures-only invocations completed with exit 0; qualification-02 started after the final Go production edit. Includes semantic/topology/Markdown and React fixture qualification. These gates do not cover the subsequently discovered programmatic route-hierarchy false positive." + } +} diff --git a/benchmarks/agent_query/go_struct_field_oracle.go b/benchmarks/agent_query/go_struct_field_oracle.go new file mode 100644 index 000000000..4c3e01a17 --- /dev/null +++ b/benchmarks/agent_query/go_struct_field_oracle.go @@ -0,0 +1,128 @@ +// Go standard-library source oracle for the registered named struct fields. +// Build this standalone file with `go build`, then pass the registered paths. +package main + +import ( + "encoding/json" + "fmt" + "go/ast" + "go/parser" + "go/token" + "os" + "path/filepath" + "sort" +) + +type declaration struct { + File string `json:"file"` + Struct string `json:"struct"` + StructLine int `json:"structLine"` + Field string `json:"field"` + FieldLine int `json:"fieldLine"` +} + +type embedded struct { + File string `json:"file"` + Struct string `json:"struct"` + StructLine int `json:"structLine"` + Line int `json:"line"` +} + +type result struct { + Schema string `json:"schema"` + Declarations []declaration `json:"declarations"` + Embedded []embedded `json:"embedded"` + Blank []embedded `json:"blank"` +} + +func main() { + paths := os.Args[1:] + relative := len(paths) > 0 && paths[0] == "--relative" + if relative { + paths = paths[1:] + } + if len(paths) == 0 { + fmt.Fprintln(os.Stderr, "expected registered source paths") + os.Exit(2) + } + output := result{Schema: "compass.go-struct-field-oracle/1", Declarations: []declaration{}, Embedded: []embedded{}, Blank: []embedded{}} + for _, path := range paths { + set := token.NewFileSet() + file, err := parser.ParseFile(set, path, nil, parser.AllErrors) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + name := filepath.Base(path) + if relative { + name = filepath.ToSlash(path) + } + for _, top := range file.Decls { + general, ok := top.(*ast.GenDecl) + if !ok || general.Tok != token.TYPE { + continue + } + for _, spec := range general.Specs { + typeSpec, ok := spec.(*ast.TypeSpec) + if !ok { + continue + } + structure, ok := typeSpec.Type.(*ast.StructType) + if !ok { + continue + } + structLine := set.Position(typeSpec.Pos()).Line + for _, field := range structure.Fields.List { + if len(field.Names) == 0 { + output.Embedded = append(output.Embedded, embedded{name, typeSpec.Name.Name, structLine, set.Position(field.Pos()).Line}) + continue + } + for _, identifier := range field.Names { + if identifier.Name == "_" { + output.Blank = append(output.Blank, embedded{name, typeSpec.Name.Name, structLine, set.Position(identifier.Pos()).Line}) + continue + } + output.Declarations = append(output.Declarations, declaration{name, typeSpec.Name.Name, structLine, identifier.Name, set.Position(identifier.Pos()).Line}) + } + } + } + } + } + sort.Slice(output.Declarations, func(i, j int) bool { + a, b := output.Declarations[i], output.Declarations[j] + if a.File != b.File { + return a.File < b.File + } + if a.StructLine != b.StructLine { + return a.StructLine < b.StructLine + } + if a.FieldLine != b.FieldLine { + return a.FieldLine < b.FieldLine + } + return a.Field < b.Field + }) + sort.Slice(output.Embedded, func(i, j int) bool { + a, b := output.Embedded[i], output.Embedded[j] + if a.File != b.File { + return a.File < b.File + } + if a.StructLine != b.StructLine { + return a.StructLine < b.StructLine + } + return a.Line < b.Line + }) + sort.Slice(output.Blank, func(i, j int) bool { + a, b := output.Blank[i], output.Blank[j] + if a.File != b.File { + return a.File < b.File + } + if a.StructLine != b.StructLine { + return a.StructLine < b.StructLine + } + return a.Line < b.Line + }) + if err := json.NewEncoder(os.Stdout).Encode(output); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/benchmarks/agent_query/go_struct_field_probe.py b/benchmarks/agent_query/go_struct_field_probe.py new file mode 100644 index 000000000..2e39947d4 --- /dev/null +++ b/benchmarks/agent_query/go_struct_field_probe.py @@ -0,0 +1,145 @@ +"""Compare frozen graph declaration identities with registered Go source fields.""" + +from __future__ import annotations + +import argparse +from collections import Counter +import hashlib +import json +from pathlib import Path +import subprocess + + +def sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as stream: + for block in iter(lambda: stream.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def source_location(node: dict, tool: str) -> tuple[str | None, int | None]: + if tool == "compass": + source = node.get("source", {}) + return source.get("file"), source.get("startLine") + location = node.get("source_location") + line = int(location[1:]) if isinstance(location, str) and location.startswith("L") and location[1:].isdigit() else None + return node.get("source_file"), line + + +def compare(graph: dict, tool: str, declarations: list[dict]) -> dict: + if not isinstance(graph.get("directed"), bool): + raise ValueError(f"{tool} graph lacks directedness") + nodes = graph["nodes"] + links = graph["links"] + by_id = {node["id"]: node for node in nodes} + if len(by_id) != len(nodes): + raise ValueError(f"{tool} duplicate node IDs") + outgoing = {} + containment_owners = {} + contexts = Counter() + for link in links: + outgoing.setdefault(link["source"], []).append(link) + if link.get("relation", link.get("kind")) in ("contains", "defines"): + containment_owners.setdefault(link["target"], set()).add(link["source"]) + if link.get("relation", link.get("kind")) == "references" and link.get("context") == "field": + contexts[(link.get("source"), link.get("source_file"), link.get("source_location"))] += 1 + rows = [] + for item in declarations: + file, owner_name, owner_line = item["file"], item["struct"], item["structLine"] + owner_candidates = [node for node in nodes + if node.get("name", node.get("label")) == owner_name + and source_location(node, tool) == (file, owner_line) + and (tool != "compass" or node.get("kind") == "struct")] + owner_ids = sorted(node["id"] for node in owner_candidates) + field_ids = set() + if len(owner_ids) == 1: + for link in outgoing.get(owner_ids[0], []): + if link.get("relation", link.get("kind")) not in ("contains", "defines"): + continue + member = by_id.get(link["target"]) + if (member is not None and member.get("name", member.get("label")) == item["field"] + and source_location(member, tool) == (file, item["fieldLine"]) + and (tool != "compass" or member.get("kind") == "field")): + field_ids.add(member["id"]) + ambiguous_field_owner = any(len(containment_owners.get(identifier, set())) != 1 for identifier in field_ids) + status = ("unavailable-owner" if not owner_ids else "ambiguous-owner" if len(owner_ids) > 1 + else "matched" if len(field_ids) == 1 and not ambiguous_field_owner + else "ambiguous-field" if field_ids + else "missing-field") + rows.append({**item, "status": status, "ownerIds": owner_ids, + "fieldIds": sorted(field_ids), + "fieldTypeContextRecords": contexts[(owner_ids[0], file, f"L{item['fieldLine']}")] if len(owner_ids) == 1 else 0}) + context_sites = {(row["ownerIds"][0], row["file"], f"L{row['fieldLine']}") + for row in rows if len(row["ownerIds"]) == 1} + return {"tool": tool, "directed": graph["directed"], + "nodeCount": len(nodes), "edgeRecordCount": len(links), + "statusCounts": dict(sorted(Counter(row["status"] for row in rows).items())), + "fieldTypeContextRecords": sum(contexts[site] for site in context_sites), + "rows": rows} + + +def run(args: argparse.Namespace) -> None: + registration = json.loads(args.registration.read_text()) + if registration["schema"] != "compass.go-struct-field-registration/1": + raise ValueError("unsupported registration") + if sha256(args.source_run) != registration["priorSourceRunSha256"]: + raise ValueError("prior source run changed") + if sha256(args.prior_hub_registration) != registration["priorHubRegistrationSha256"]: + raise ValueError("prior hub registration changed") + source_run = json.loads(args.source_run.read_text()) + source_record = next(item for item in source_run["repositories"] if item["repository"] == registration["sourceRepository"]) + root = Path(source_record["source"]) + commit = subprocess.run(["git", "-C", str(root), "rev-parse", "HEAD"], check=True, capture_output=True, text=True).stdout.strip() + dirty = subprocess.run(["git", "-C", str(root), "status", "--porcelain=v1"], check=True, capture_output=True, text=True).stdout.strip() + if commit != registration["sourceCommit"] or dirty: + raise ValueError("source checkout changed") + for record in registration["sourceFiles"]: + path = root / record["path"] + if path.stat().st_size != record["bytes"] or path.stat().st_size > registration["bounds"]["maxSourceBytesPerFile"] or sha256(path) != record["sha256"]: + raise ValueError(f"source file changed: {record['path']}") + oracle = json.loads(args.oracle.read_text()) + if oracle["schema"] != "compass.go-struct-field-oracle/1": + raise ValueError("unsupported Go oracle") + declarations = oracle["declarations"] + if len(declarations) > registration["bounds"]["maxNamedFields"] or len(oracle["embedded"]) > registration["bounds"]["maxNamedFields"]: + raise ValueError("source declaration bound exceeded") + structs = {(item["file"], item["struct"], item["structLine"]) for item in declarations + oracle["embedded"]} + if len(structs) > registration["bounds"]["maxStructs"]: + raise ValueError("struct bound exceeded") + results = [] + for record in registration["frozenGraphs"]: + tool = record["tool"] + path = Path(source_record[f"{tool}Graph"]) + if path.stat().st_size != record["bytes"] or path.stat().st_size > registration["bounds"]["maxGraphBytes"] or sha256(path) != record["sha256"]: + raise ValueError(f"frozen {tool} graph changed") + graph = json.loads(path.read_text()) + if len(graph["nodes"]) > registration["bounds"]["maxGraphNodes"] or len(graph["links"]) > registration["bounds"]["maxGraphEdges"]: + raise ValueError(f"{tool} graph item bound exceeded") + result = compare(graph, tool, declarations) + result["graphSha256"] = record["sha256"] + results.append(result) + report = {"schema": "compass.go-struct-field-review/1", + "registrationSha256": sha256(args.registration), + "oracleSha256": sha256(args.oracle), + "sourceRunSha256": sha256(args.source_run), + "sourceCommit": commit, + "sourceStructCount": len(structs), + "sourceNamedFieldCount": len(declarations), + "sourceEmbeddedFieldCount": len(oracle["embedded"]), + "embedded": oracle["embedded"], + "results": results, + "limitations": registration["limitations"]} + args.output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n") + for result in results: + print(result["tool"], result["statusCounts"], flush=True) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--prior-hub-registration", type=Path, required=True) + parser.add_argument("--source-run", type=Path, required=True) + parser.add_argument("--oracle", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + run(parser.parse_args()) diff --git a/benchmarks/agent_query/go_struct_field_registration.json b/benchmarks/agent_query/go_struct_field_registration.json new file mode 100644 index 000000000..617bb0d21 --- /dev/null +++ b/benchmarks/agent_query/go_struct_field_registration.json @@ -0,0 +1,52 @@ +{ + "schema": "compass.go-struct-field-registration/1", + "purpose": "Source-first census of every top-level named struct and every explicitly named direct field in two frozen Litestream Go files. Compare frozen Compass and Graphify declaration identities before a Compass producer change.", + "declaredBeforeCapture": true, + "knownDevelopmentGap": "The previous hub replay showed zero direct fields for Store and HeartbeatClient; this is a known development sample, not a held-out or random sample.", + "sourceRepository": "litestream", + "sourceCommit": "6a71ccd9ad2bea0c4dc19bc274a8dc64c9b0fafa", + "sourceFiles": [ + { + "path": "store.go", + "bytes": 24903, + "sha256": "56b3da1cdd69e7a3e30b4982f93fcfc4377f7572497c60ac3371cf4b867f7a17" + }, + { + "path": "heartbeat.go", + "bytes": 1575, + "sha256": "ef90f2e79f1a8f89bd34a9cada9e3c399a410cf774b5c2b3233863dc7cbf2581" + } + ], + "frozenGraphs": [ + { + "tool": "compass", + "bytes": 11490932, + "sha256": "8dd89c5a60e004c098104ee644b02ddb2d6a64698956ac7f25cdce7c1871a2db" + }, + { + "tool": "graphify", + "bytes": 5333935, + "sha256": "9cb6df8dcc053cea5b395292a7f460eaaeb2afc566acddb021ae003e51862b0e" + } + ], + "priorSourceRunSha256": "f28a92dd08363607f534632471e15f61e7f3d6cd3ce34e479ab04ff09ebdba4c", + "priorHubRegistrationSha256": "da554737c494f51eb15f4b7a8cce8a455382df2c228b97754a88dc46105fb586", + "sourceOracle": "Use Go standard-library go/parser and go/ast. Include every top-level TypeSpec whose type is StructType in the two files. For every Field with one or more Names, emit one declaration per name at that identifier's exact 1-based line. Keep embedded fields in a separate unavailable category; never infer a name from the type. Preserve same-line multiple names as separate declarations.", + "graphJoin": "Resolve each struct by exact file, case-sensitive name and declaration start line, with no fallback identity. A direct field declaration match needs an exact case-sensitive field label, exact file and identifier line, a distinct field-compatible node identity, and a stored source-owner-to-target-field contains/defines record. This record-orientation rule also applies to Graphify's undirected graph and does not imply directed traversal. Multiple matching identities or owners are ambiguous. Graphify field-context type-reference edges are recorded separately and cannot substitute for named field declarations. Neither graph receives source-assisted output credit.", + "bounds": { + "maxSourceBytesPerFile": 1048576, + "maxGraphBytes": 16777216, + "maxGraphNodes": 100000, + "maxGraphEdges": 100000, + "maxStructs": 100, + "maxNamedFields": 1000, + "maxSecondsPerTool": 60 + }, + "report": "Retain every source declaration and per-tool exact/ambiguous/missing result, both graph identities and hashes, field-context counts, all unavailable outcomes and limits. Compare both frozen graphs under the same rule. A subsequent Compass candidate must be evaluated separately without changing the frozen denominator.", + "limitations": [ + "The first probe stopped before scoring because it incorrectly required both frozen graphs to have directed=true. Graphify's graph is undirected. The amended join uses stored source/target ownership records only; no candidate outcomes were inspected before this correction.", + "This is a selected Go development slice from one repository and does not establish general extraction precision or recall.", + "Declaration coverage does not validate field-access targets, responsibility cohesion, god-object classification, query explanation quality or broad superiority.", + "The frozen graph producers differ; this comparison does not isolate parser and graph schema effects." + ] +} diff --git a/benchmarks/agent_query/graph_cache_coherence_registration.json b/benchmarks/agent_query/graph_cache_coherence_registration.json new file mode 100644 index 000000000..fc8ba25cc --- /dev/null +++ b/benchmarks/agent_query/graph_cache_coherence_registration.json @@ -0,0 +1,141 @@ +{ + "schema": "compass.graph-cache-coherence-registration/1", + "scope": "Correctness and query-cost development follow-up on standalone JSON graph paths after reproduced metadata-only cache failures. This does not score Graphify superiority, authored explanations, functional communities or god-object diagnosis.", + "baseline": { + "productionCommit": "be2fb542", + "binary": "java-dotted-owner-01/compass-candidate-release", + "sha256": "39919a9b5e0fe99f642d03423a91b8eb05b42b1c95e78d84bcc8f285bf473f61" + }, + "candidate": "Freeze source, native qualification and release binary before public query collection. Version remains 0.3.30.", + "synthetic": { + "sourceArtifacts": "mcp-snapshot-coherence-typed-01/extractions.json", + "sourceArtifactsSha256": "1394f8f880c6427046cbe45d2e3a8d682b81ea85c20b1efc17e786989f99dbe3", + "legacyReproductionSha256": "e0f820a8abb69e3ed11e26ca5fe317e97c4b2b597e89ca3c750173de8368c739", + "typedReproductionSha256": "67ae663b4b1cf1936589e7120d1a5ad4cc5ec5791541de0d22594ff8da6b0006", + "policy": "Replay all changed-mtime, preserved-mtime in-place and atomic replacement modes for legacy and native-produced typed graphs; precreated disk-cache directory both absent and present. Run both frozen binaries twice, retain all raw RPCs, and check communities/hubs/exact-search identities before, after and in a fresh server. Corrupt/missing replacements and immutable already-loaded contexts also have native regression coverage." + }, + "realSourceGraphs": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "graphPath": "java-dotted-owner-01/controls/chi/candidate/artifact/compass-out/snapshots/snapshot-1790543165935883000-80658-0/graph.json", + "graphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphBytes": 2488750, + "sourceSeed": { + "name": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "file": "context.go", + "line": 16, + "symbol": "URLParamFromCtx", + "sourceText": "func URLParamFromCtx(ctx context.Context, key string) string {", + "sourceFileSha256": "b19edcca252e2fe74e82802c4c7ce1a1c0855728f9ede1288f0224283dfc7e53", + "ambiguousLabel": "URLParam" + } + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "graphPath": "java-dotted-owner-01/controls/click/candidate/artifact/compass-out/snapshots/snapshot-1790543171176890000-80747-0/graph.json", + "graphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphBytes": 9607995, + "sourceSeed": { + "name": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "file": "src/click/_compat.py", + "line": 374, + "symbol": "open_stream", + "sourceText": "def open_stream(", + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "ambiguousLabel": "close" + } + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "graphPath": "java-dotted-owner-01/evaluation/candidate/artifact/compass-out/snapshots/snapshot-1790543171203895000-80748-0/graph.json", + "graphSha256": "04fc11f8d2c30f663c694451cc2c2957c94536a3658e4d0eeb5584fa38b6a2d8", + "graphBytes": 30296084, + "sourceSeed": { + "name": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "symbol": "isValidBodyHtml", + "sourceText": "public boolean isValidBodyHtml(String bodyHtml) {", + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "ambiguousLabel": "isValid" + } + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "graphPath": "java-dotted-owner-01/controls/redux/candidate/artifact/compass-out/snapshots/snapshot-1790543178528549000-80777-0/graph.json", + "graphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphBytes": 8047006, + "sourceSeed": { + "name": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "file": "src/createStore.ts", + "line": 201, + "symbol": "subscribe", + "sourceText": "function subscribe(listener: () => void) {", + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "ambiguousLabel": "subscribe" + } + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "graphPath": "java-dotted-owner-01/controls/walkdir/candidate/artifact/compass-out/snapshots/snapshot-1790543182470054000-81022-0/graph.json", + "graphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "graphBytes": 1463032, + "sourceSeed": { + "name": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "file": "src/lib.rs", + "line": 456, + "symbol": "sort_by_file_name", + "sourceText": "pub fn sort_by_file_name(self) -> Self {", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "ambiguousLabel": "sort_by" + } + } + ], + "sourceWitnesses": { + "path": "benchmarks/agent_query/longer_path_witnesses.json", + "sha256": "33d1cdccc5cfb6f4225674c36ee7616b6dc21e0a51c2c5bbedc8fa1e44ae8718" + }, + "queryPolicy": [ + "Use a fresh copy of each complete frozen graph, never modify the preserved extraction or external source checkout. Precreate an empty cache directory for each server session. Source-seed identity and path endpoints are prepared by exact file/line/name joins; ambiguous or missing preparation is an explicit unavailable outcome, never a convenient substitute.", + "For every graph run graph_stats, god_nodes(top_n=10), get_community(largest stored community, numeric-ID tie break), get_community(max stored ID+1), get_neighbors(exact prepared source seed ID, calls filter), search_symbols(exact source seed name), get_callers(seed ID), get_callees(seed ID), and shortest_path(prepared first/last witness IDs, max_hops=8). These are unchanged known source questions; IDs are preparation, not retrieval credit.", + "Within each session run the entire fixed query list three times in order, retaining the first cold round and both warm rounds separately. Use six fresh sessions per repository in binary order baseline,candidate,candidate,baseline,baseline,candidate. Keep every output, failure, RPC duration and session peak RSS when available.", + "Compare complete tool result values and text for both binaries, excluding only outer JSON-RPC request IDs. Do not remove timing or path fields silently; retain and classify any differences before interpreting a semantic change. Check graph bytes remain unchanged after each session.", + "Durations include the public RPC and differ in cache strategy by design. Flag every per-query warm median ratio above 1.10 and every unavailable task. Retain host load and no competing owned builds/qualification jobs during timing. OS page cache and unrelated host work remain uncontrolled; these are local diagnostics, not a CI performance promotion.", + "A separate complete CloudStack diagnostic uses the preserved 671502979-byte graph and the same three-round/six-session protocol for graph_stats and god_nodes(top_n=10) only. Preserve partial-graph warnings and every resource/timeout failure. Do not blend its different question set with the five-language panel." + ], + "bounds": { + "graphBytes": 1073741824, + "rpcTimeoutSeconds": 120, + "responseBytes": 16777216, + "sessionBytes": 67108864 + }, + "preservation": [ + "Original frozen Graphify graphs/environments/results and all known competitor wins remain unchanged.", + "No source/extraction rerun is required for this cache correction; this panel evaluates unchanged graph query results and costs.", + "All previous failures, the native cache-format expectation correction and the restored missing-file message remain recorded.", + "The complete CloudStack graph is pinned below; preserve every unavailable outcome and do not choose an easier substitute." + ], + "largeGraphDiagnostic": { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "graphPath": "sql-regex-cache-01/whole-repeat/runs/0-candidate/artifact/compass-out/snapshots/snapshot-1790536681187299000-26799-0/graph.json", + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "graphBytes": 671502979, + "publishedOmissions": { + "nodes": 1, + "edges": 45, + "identityCollisions": 0 + }, + "producerNote": "Preserved SQL regex-cache release candidate graph; independent of server binary used for this cache diagnostic." + } +} diff --git a/benchmarks/agent_query/graph_cache_coherence_review.json b/benchmarks/agent_query/graph_cache_coherence_review.json new file mode 100644 index 000000000..ada6ee3b1 --- /dev/null +++ b/benchmarks/agent_query/graph_cache_coherence_review.json @@ -0,0 +1,2006 @@ +{ + "baselineBinarySha256": "39919a9b5e0fe99f642d03423a91b8eb05b42b1c95e78d84bcc8f285bf473f61", + "candidateBinarySha256": "03403b96658900adad039db08b5814a5b5d090075fe2a31dc8bebbe7c012aa1b", + "knownUnrelatedCoreIntegrationFailures": [ + "incremental_ast_endpoint_remap_retains_exact_typed_rewrite_evidence", + "incremental_deleted_mixed_occurrence_keeps_only_revalidated_semantic_evidence", + "incremental_deleted_remapped_mixed_occurrence_rebinds_trusted_semantic_residue", + "incremental_mixed_occurrence_cardinality_matches_exact_sites_and_preserves_residue", + "incremental_mixed_origin_alias_edges_use_canonical_fresh_relationship_sites", + "incremental_mixed_origin_edges_use_fresh_ast_relationship_sites", + "refreshed_mixed_edge_drops_stale_incremental_endpoint_remap_evidence" + ], + "limitations": [ + "All queries use preexisting frozen graphs. Equal responses prove preservation on these questions, not source-truth or improved graph quality.", + "The query controls compare two Compass binaries. They do not execute Graphify or show broad superiority.", + "The missing Redux path identity remains unavailable, with no substitute endpoint.", + "Thirty-one warm queries regress by more than ten percent: all six lightweight questions on each of five language graphs and CloudStack graph_stats. All per-query cold and warm durations are retained.", + "Large-graph memory is incomplete because the timing wrapper was terminated during five CloudStack session teardowns. No paired CloudStack peak-memory conclusion is supported.", + "Five-language mixed-query sessions show higher candidate peak RSS. This is a real local cost for the tested workload.", + "The default-low core integration failures reproduce on the unchanged committed baseline; their proposed inference-level explanation is unverified in this review.", + "Known development repositories and changed-cache fixtures do not provide an independent final quality holdout." + ], + "nativeQualification": [ + { + "exitCode": 0, + "name": "fmt", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "wallMs": 4097 + }, + { + "exitCode": 0, + "name": "focused-clippy", + "stderrSha256": "a507b604629e2e51a6632be43cf578452798fd80bca9979850b91677c45ddaba", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "wallMs": 145899 + }, + { + "exitCode": 0, + "name": "workspace-clippy", + "stderrSha256": "b7ebe120c528b271ccaf3e73d2eaf7302adac76711bc8de57d68d6af77d4e692", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "wallMs": 92290 + }, + { + "exitCode": 0, + "name": "workspace-tests", + "stderrSha256": "a0e041c17467e38858f9a62cdae0ae95b411e98b840dd0a3940b4c91ed94f7ab", + "stdoutSha256": "83b8099250459b07071ff823218399744f9e65fc0eaa7558519adb7ee26475ef", + "wallMs": 212258 + }, + { + "exitCode": 0, + "name": "product", + "stderrSha256": "689b3f5a86b89954f745bc7209ffcf5d13a7efef947f13bfcfae8a51639eafc4", + "stdoutSha256": "3e77fb9e9bfdb2b833461c1a1dd35ebd838abd336e5bfab32ffafbbf42d05e7e", + "wallMs": 87151 + }, + { + "exitCode": 0, + "name": "fixtures", + "stderrSha256": "c9a3577800b6356c7792d2967df86e4ccca2535755dfdae125f3e6119e6d9a61", + "stdoutSha256": "940ee145c94fe5463824164f622dbe43559d0c3800fb6165a59afbdd58bff9c8", + "wallMs": 972534 + }, + { + "exitCode": 0, + "name": "benchmark-tests", + "stderrSha256": "946407b3d3b76e63e7a5e40a016ade2e004de3c97edfdae1a1c624c5d9a21867", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "wallMs": 4017 + }, + { + "exitCode": 0, + "name": "boundary", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "wallMs": 52 + }, + { + "exitCode": 0, + "name": "release-build", + "stderrSha256": "b14ef0f9151372c1971e24aa2cca8935d9328c7e97462a8fc112d8ec05d152bf", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "wallMs": 12149 + } + ], + "qualificationReportSha256": "14250b55c069e69bd107bf0a1f6aac61fe95498c0ea7ecfa761cfd0592b20d43", + "qualifiedPatchSha256": "a93d9c28326ad16ea929b275fbf248eb680498cc7a853dd4e065f6ff6ec524d2", + "qualifiedSourceFiles": 749, + "qualifiedSourceManifestSha256": "34a2cc0d653118764f4a7475d14525e853eddf85edb753eb90a0703f0f20668b", + "rawCaptureManifestSha256": "5f2e9b69b1f3c7938294fd27554259e77658ede33499d3803e1c23dbb8dbfd3b", + "realSource": { + "additionalWholeGraphDiagnostic": "cloudstack", + "completeEqualResponseComparisons": 46, + "missingMemorySessions": [ + { + "order": 0, + "repository": "cloudstack", + "tool": "baseline", + "wrapperReturnCode": -15 + }, + { + "order": 1, + "repository": "cloudstack", + "tool": "candidate", + "wrapperReturnCode": -15 + }, + { + "order": 2, + "repository": "cloudstack", + "tool": "candidate", + "wrapperReturnCode": -15 + }, + { + "order": 3, + "repository": "cloudstack", + "tool": "baseline", + "wrapperReturnCode": -15 + }, + { + "order": 5, + "repository": "cloudstack", + "tool": "candidate", + "wrapperReturnCode": -15 + } + ], + "queries": [ + { + "baselineColdMs": [ + 0.6742920959368348, + 0.7295419927686453, + 0.6424169987440109 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.5937084788456559, + "baselineWarmMs": [ + 0.5693749990314245, + 0.605541979894042, + 0.5818749777972698, + 0.7492080330848694, + 0.5720419576391578, + 0.6105840438976884 + ], + "candidateColdMs": [ + 2.289709053002298, + 2.1364589920267463, + 2.4427910102531314 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 2.2185000707395375, + "candidateWarmMs": [ + 2.247875090688467, + 2.0994589431211352, + 2.300166990607977, + 2.189125050790608, + 2.118250005878508, + 2.2987499833106995 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callees", + "repository": "chi", + "warmRatio": 3.736682479342311, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 5.329041974619031, + 0.9003330487757921, + 0.9237080812454224 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.8210829691961408, + "baselineWarmMs": [ + 0.8698749588802457, + 0.8290829136967659, + 0.7428330136463046, + 0.8882919792085886, + 0.8130830246955156, + 0.7553750183433294 + ], + "candidateColdMs": [ + 3.0789999291300774, + 2.7653330471366644, + 2.902833977714181 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 2.283187466673553, + "candidateWarmMs": [ + 2.1367090521380305, + 2.2679580142721534, + 2.3441669763997197, + 2.19924992416054, + 2.306459005922079, + 2.2984169190749526 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callers", + "repository": "chi", + "warmRatio": 2.7807025018541625, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 0.5134170642122626, + 0.4163340199738741, + 0.45558298006653786 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.4681039717979729, + "baselineWarmMs": [ + 0.5347080295905471, + 0.44575007632374763, + 0.46433298848569393, + 0.4718749551102519, + 0.43720798566937447, + 0.502290902659297 + ], + "candidateColdMs": [ + 2.475624904036522, + 2.1392079070210457, + 2.279958105646074 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 1.9156465423293412, + "candidateWarmMs": [ + 1.9536670297384262, + 1.8361670663580298, + 2.157583017833531, + 1.8516660202294588, + 1.9090840360149741, + 1.9222090486437082 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "community", + "repository": "chi", + "warmRatio": 4.092352677486161, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 19.69608396757394, + 20.170000032521784, + 21.051542018540204 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 14.038604567758739, + "baselineWarmMs": [ + 14.319792040623724, + 13.783124973997474, + 13.823625049553812, + 14.253584085963666, + 16.143625020049512, + 13.699916889891028 + ], + "candidateColdMs": [ + 3.6511669168248773, + 3.6118749994784594, + 3.6307499976828694 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 3.207270463462919, + "candidateWarmMs": [ + 3.4260411048308015, + 3.2060829689726233, + 3.5013749729841948, + 3.137625055387616, + 3.071832936257124, + 3.2084579579532146 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "hubs", + "repository": "chi", + "warmRatio": 0.22846077385987368, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 0.3915419802069664, + 0.29408407863229513, + 0.3155419835820794 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.3315830253995955, + "baselineWarmMs": [ + 0.3131250850856304, + 0.27658301405608654, + 0.2980409190058708, + 0.3500409657135606, + 0.38362492341548204, + 0.4300830187276006 + ], + "candidateColdMs": [ + 1.97704101447016, + 1.8132920376956463, + 2.0483749685809016 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 1.9068539841100574, + "candidateWarmMs": [ + 2.0461250096559525, + 1.947290962561965, + 1.9313329830765724, + 1.8265830585733056, + 1.8823749851435423, + 1.8031669314950705 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "missing-community", + "repository": "chi", + "warmRatio": 5.750758748316745, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 14.270792016759515, + 13.016332988627255, + 13.265083078294992 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 13.294917065650225, + "baselineWarmMs": [ + 13.103208038955927, + 13.340875040739775, + 13.120000017806888, + 14.181417063809931, + 13.248959090560675, + 13.427291996777058 + ], + "candidateColdMs": [ + 6.046249996870756, + 6.066416040994227, + 6.434125010855496 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 5.768583505414426, + "candidateWarmMs": [ + 6.010166020132601, + 5.667707999236882, + 5.869459011591971, + 5.267333006486297, + 5.497292033396661, + 5.882250028662384 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "neighbors", + "repository": "chi", + "warmRatio": 0.43389390674113976, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 14.323750045150518, + 14.313749969005585, + 14.675209065899253 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 14.341104542836547, + "baselineWarmMs": [ + 14.697374892421067, + 13.597041950561106, + 14.465167070738971, + 14.777000062167645, + 13.384583056904376, + 14.217042014934123 + ], + "candidateColdMs": [ + 6.595707964152098, + 6.34162500500679, + 6.485874997451901 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 6.1686664703302085, + "candidateWarmMs": [ + 6.315500009804964, + 6.372208008542657, + 6.036957958713174, + 5.634166998788714, + 5.876834038645029, + 6.300374981947243 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "path", + "repository": "chi", + "warmRatio": 0.4301388677493107, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 350.33341706730425, + 200.8812080603093, + 193.8718749443069 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.6223964737728238, + "baselineWarmMs": [ + 0.608749920502305, + 0.6451669614762068, + 0.5289999535307288, + 0.7292079972103238, + 0.6349589675664902, + 0.6098339799791574 + ], + "candidateColdMs": [ + 191.3696670671925, + 186.85920792631805, + 195.11199998669326 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 2.1206039818935096, + "candidateWarmMs": [ + 2.076583099551499, + 2.097249962389469, + 2.3735830327495933, + 2.14395800139755, + 2.0779999904334545, + 2.2234159987419844 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "search", + "repository": "chi", + "warmRatio": 3.4071593771071638, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 40.22133396938443, + 40.43054103385657, + 41.03974997997284 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.4789169761352241, + "baselineWarmMs": [ + 0.46016694977879524, + 0.4903749795630574, + 0.6129170069471002, + 0.7373330881819129, + 0.46095799189060926, + 0.4674589727073908 + ], + "candidateColdMs": [ + 38.23608299717307, + 36.83341690339148, + 36.85383405536413 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 2.2760415449738503, + "candidateWarmMs": [ + 2.3202080046758056, + 2.2529580164700747, + 2.4390420876443386, + 2.0349579863250256, + 2.299125073477626, + 2.122665988281369 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "stats", + "repository": "chi", + "warmRatio": 4.7524762294732295, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 0.8753750007599592, + 1.0595829226076603, + 0.9902910096570849 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 1.1904165148735046, + "baselineWarmMs": [ + 1.112291938625276, + 1.1528750183060765, + 1.2708330759778619, + 1.154624973423779, + 1.2262080563232303, + 2.490999992005527 + ], + "candidateColdMs": [ + 7.360749994404614, + 7.693291991017759, + 7.620542077347636 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 7.309770444408059, + "candidateWarmMs": [ + 7.412542006932199, + 7.1472079725936055, + 7.257499964907765, + 7.614457979798317, + 7.362040923908353, + 6.9731660187244415 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callees", + "repository": "click", + "warmRatio": 6.1405149820059455, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 1.4186670305207372, + 1.3901250204071403, + 1.3028749963268638 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 1.414416532497853, + "baselineWarmMs": [ + 1.2853749794885516, + 3.0492920195683837, + 1.403625006787479, + 1.2358330423012376, + 1.4252080582082272, + 1.4705830253660679 + ], + "candidateColdMs": [ + 8.629582938738167, + 8.203207980841398, + 10.011957958340645 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 7.533853990025818, + "candidateWarmMs": [ + 7.70987500436604, + 7.5558749958872795, + 7.600500015541911, + 7.511832984164357, + 7.270792033523321, + 7.198916980996728 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callers", + "repository": "click", + "warmRatio": 5.326474780891501, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 0.8535410743206739, + 1.0995829943567514, + 1.0376670397818089 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.9578334866091609, + "baselineWarmMs": [ + 0.8580000139772892, + 0.8315839804708958, + 0.9722920367494226, + 1.0374169796705246, + 1.07216602191329, + 0.9433749364688993 + ], + "candidateColdMs": [ + 7.228542002849281, + 7.442832924425602, + 7.115958025678992 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 7.249917020089924, + "candidateWarmMs": [ + 6.854583043605089, + 7.342625060118735, + 7.157208980061114, + 9.208125062286854, + 7.424167008139193, + 7.0697080809623 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "community", + "repository": "click", + "warmRatio": 7.569078677501088, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 93.67845801170915, + 126.05699989944696, + 146.08924998901784 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 53.303021006286144, + "baselineWarmMs": [ + 53.419875097461045, + 52.70641704555601, + 53.451791987754405, + 53.32837498281151, + 53.27766702976078, + 52.43058304768056 + ], + "candidateColdMs": [ + 13.904916006140411, + 12.99770805053413, + 12.494083028286695 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 12.111520511098206, + "candidateWarmMs": [ + 11.470249970443547, + 12.095625046640635, + 12.598666013218462, + 12.032542028464377, + 12.127415975555778, + 12.149207992479205 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "hubs", + "repository": "click", + "warmRatio": 0.22722015154956915, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 0.3672500606626272, + 0.5369159625843167, + 0.596167054027319 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.5659585585817695, + "baselineWarmMs": [ + 0.3402500879019499, + 0.5640420131385326, + 0.6181669887155294, + 0.48179097939282656, + 0.610582996159792, + 0.5678751040250063 + ], + "candidateColdMs": [ + 7.4708330212160945, + 7.466541952453554, + 6.696249940432608 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 7.035146001726389, + "candidateWarmMs": [ + 6.874041981063783, + 7.1554589085280895, + 9.15066699963063, + 6.6477920627221465, + 7.497624959796667, + 6.914833094924688 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "missing-community", + "repository": "click", + "warmRatio": 12.43049671226052, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 50.23670906666666, + 51.29212490282953, + 49.349250039085746 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 50.05147948395461, + "baselineWarmMs": [ + 50.233084009960294, + 50.46062497422099, + 51.204249961301684, + 48.726500011980534, + 49.249666975811124, + 49.86987495794892 + ], + "candidateColdMs": [ + 23.183375014923513, + 24.95679201092571, + 26.08854102436453 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 21.867291477974504, + "candidateWarmMs": [ + 21.760832984000444, + 21.36441704351455, + 22.859083022922277, + 21.973749971948564, + 22.91670802515, + 19.15683294646442 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "neighbors", + "repository": "click", + "warmRatio": 0.4368960059409367, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 53.54308302048594, + 52.92254197411239, + 53.91937494277954 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 51.67010455625132, + "baselineWarmMs": [ + 50.57041603140533, + 55.255791055969894, + 51.037500030361116, + 52.171834046021104, + 51.16837506648153, + 53.54774999432266 + ], + "candidateColdMs": [ + 24.022749974392354, + 24.83587502501905, + 23.425124934874475 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 21.02872944669798, + "candidateWarmMs": [ + 19.97741695959121, + 20.41366696357727, + 21.64379192981869, + 20.048542064614594, + 24.862625054083765, + 23.057582904584706 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "path", + "repository": "click", + "warmRatio": 0.406980586304113, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 1064.1600410453975, + 1076.5998749993742, + 1101.464374922216 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.7519170176237822, + "baselineWarmMs": [ + 1.0305000469088554, + 0.7810840616002679, + 0.8023339323699474, + 0.7227499736472964, + 0.7113749161362648, + 0.7036249153316021 + ], + "candidateColdMs": [ + 1034.9968749796972, + 1028.3892910229042, + 1176.6507499851286 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 7.0676045143045485, + "candidateWarmMs": [ + 6.942625041119754, + 7.071041967719793, + 7.447540992870927, + 7.064167060889304, + 6.647208007052541, + 10.70524996612221 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "search", + "repository": "click", + "warmRatio": 9.399447477116135, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 155.4462080821395, + 161.10633395146579, + 158.09216699562967 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.9440624853596091, + "baselineWarmMs": [ + 0.8287921082228422, + 0.9884999599307775, + 1.1128330370411277, + 0.8544160518795252, + 1.401207991875708, + 0.8996250107884407 + ], + "candidateColdMs": [ + 326.4925420517102, + 321.14833302330226, + 362.0397080667317 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 7.368375547230244, + "candidateWarmMs": [ + 6.652499898336828, + 7.443042006343603, + 7.594124996103346, + 6.514957989566028, + 9.985542041249573, + 7.293709088116884 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "stats", + "repository": "click", + "warmRatio": 7.804965943989933, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 17309.999208082445, + 15567.048458033241, + 14644.47270904202 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 4320.252625504509, + "baselineWarmMs": [ + 6374.616041895933, + 4568.7548340065405, + 3937.8078329609707, + 4870.4767499584705, + 4071.7504170024768, + 3790.3934579808265 + ], + "candidateColdMs": [ + 4294.217540998943, + 3356.1707499902695, + 3044.7245000395924 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 1252.602353983093, + "candidateWarmMs": [ + 1096.213832963258, + 2482.934125000611, + 963.4912909241393, + 1408.990875002928, + 2239.804666955024, + 807.8230409882963 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "hubs", + "repository": "cloudstack", + "warmRatio": 0.2899372936175965, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 15930.288375006057, + 13735.646957997233, + 13795.34654202871 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 130.17022894928232, + "baselineWarmMs": [ + 141.29666599910706, + 119.04379189945757, + 143.53941706940532, + 181.68070795945823, + 29.873833060264587, + 35.67491704598069 + ], + "candidateColdMs": [ + 30454.189792042598, + 34665.94429197721, + 32043.60433295369 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 747.9464585194364, + "candidateWarmMs": [ + 777.1909170551226, + 927.3269589757547, + 557.9583749640733, + 718.7019999837503, + 1425.6535000167787, + 478.2267500413582 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "stats", + "repository": "cloudstack", + "warmRatio": 5.745910294210635, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 1.3577910140156746, + 1.1576670221984386, + 1.2907920172438025 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 1.560457982122898, + "baselineWarmMs": [ + 1.4377499464899302, + 1.1333749862387776, + 4.719541990198195, + 1.683166017755866, + 1.2544580968096852, + 33.19908306002617 + ], + "candidateColdMs": [ + 20.63783397898078, + 20.062875002622604, + 19.47012508753687 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 19.72062501590699, + "candidateWarmMs": [ + 21.687707980163395, + 20.277290954254568, + 19.078458892181516, + 19.21333302743733, + 20.22791700437665, + 19.091667025350034 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callees", + "repository": "jsoup", + "warmRatio": 12.637716133233146, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 1.3818340376019478, + 1.2229999992996454, + 1.2957080034539104 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 1.3383125187829137, + "baselineWarmMs": [ + 1.476458040997386, + 1.065333024598658, + 1.421040971763432, + 1.4899999368935823, + 1.106083975173533, + 1.2555840658023953 + ], + "candidateColdMs": [ + 23.474458954297006, + 23.103000014089048, + 21.463958080857992 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 19.883062515873462, + "candidateWarmMs": [ + 24.230874958448112, + 19.9872920056805, + 18.729457980953157, + 18.645540927536786, + 19.778833026066422, + 20.904790959320962 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callers", + "repository": "jsoup", + "warmRatio": 14.856815756274543, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 1.3858330203220248, + 1.3477089814841747, + 1.4023749390617013 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 1.327062549535185, + "baselineWarmMs": [ + 1.4234579866752028, + 1.3275000965222716, + 1.3266250025480986, + 1.6075409948825836, + 1.3015000149607658, + 1.3007500674575567 + ], + "candidateColdMs": [ + 20.395625033415854, + 19.663124927319586, + 39.002542034722865 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 19.78691649856046, + "candidateWarmMs": [ + 19.479415961541235, + 18.43312510754913, + 20.34554211422801, + 19.681249978020787, + 19.89258301910013, + 20.07004211191088 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "community", + "repository": "jsoup", + "warmRatio": 14.910311880544736, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 660.274124937132, + 609.1222079703584, + 725.3861660137773 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 152.72445848677307, + "baselineWarmMs": [ + 157.77120797429234, + 150.1067909412086, + 163.70845795609057, + 144.5050420006737, + 152.28887496050447, + 153.16004201304168 + ], + "candidateColdMs": [ + 37.59775008074939, + 32.49912499450147, + 35.898958100005984 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 31.73902101116255, + "candidateWarmMs": [ + 31.25383402220905, + 32.22420800011605, + 29.50050006620586, + 33.0385830020532, + 30.26074997615069, + 35.56687501259148 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "hubs", + "repository": "jsoup", + "warmRatio": 0.20781884791499428, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 0.5636659916490316, + 0.5441249813884497, + 0.6697500357404351 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.5526875029318035, + "baselineWarmMs": [ + 0.5337500479072332, + 0.5242920015007257, + 0.7765410700812936, + 0.5716249579563737, + 0.5217499565333128, + 0.5758340703323483 + ], + "candidateColdMs": [ + 18.93304195255041, + 18.382082926109433, + 19.472124986350536 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 19.12199956132099, + "candidateWarmMs": [ + 18.300124909728765, + 19.510625046677887, + 22.526791086420417, + 18.744458095170557, + 19.499541027471423, + 18.498250050470233 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "missing-community", + "repository": "jsoup", + "warmRatio": 34.59821229878698, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 149.47591698728502, + 145.71941702160984, + 141.2610000697896 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 154.69770843628794, + "baselineWarmMs": [ + 158.91429199837148, + 154.96649988926947, + 146.1804589489475, + 143.11491698026657, + 154.4289169833064, + 155.90620797593147 + ], + "candidateColdMs": [ + 62.52720800694078, + 65.4467080021277, + 69.95549995917827 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 60.909666994120926, + "candidateWarmMs": [ + 58.69716696906835, + 68.37954092770815, + 59.234166983515024, + 56.27170903608203, + 69.04162501450628, + 62.58516700472683 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "neighbors", + "repository": "jsoup", + "warmRatio": 0.3937334793760471, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 185.04324997775257, + 167.5461670383811, + 180.13437499757856 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 168.76587498700246, + "baselineWarmMs": [ + 170.39083410054445, + 168.15087501890957, + 169.46408397052437, + 158.29595900140703, + 169.38087495509535, + 162.709916010499 + ], + "candidateColdMs": [ + 82.00245804619044, + 83.07058410719037, + 85.97474999260157 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 79.48743749875575, + "candidateWarmMs": [ + 75.41983400005847, + 82.86391699220985, + 71.39754097443074, + 81.3145829597488, + 77.6602920377627, + 87.30583300348371 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "path", + "repository": "jsoup", + "warmRatio": 0.4709923585255461, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 3463.924083043821, + 3238.779375096783, + 3915.4238749761134 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.819437496829778, + "baselineWarmMs": [ + 0.9723330149427056, + 0.6451250519603491, + 0.8723749779164791, + 0.82633295096457, + 0.7012500427663326, + 0.8125420426949859 + ], + "candidateColdMs": [ + 4176.61187495105, + 3268.171582953073, + 2961.275166948326 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 19.606896035838872, + "candidateWarmMs": [ + 21.00408310070634, + 20.890749990940094, + 18.533833092078567, + 18.810000037774444, + 19.285709015093744, + 19.928083056584 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "search", + "repository": "jsoup", + "warmRatio": 23.92726243513826, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 493.30462503712624, + 508.75070900656283, + 570.4177499283105 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 2.022083499468863, + "baselineWarmMs": [ + 1.8806250300258398, + 1.8348749727010727, + 2.0834170281887054, + 1.9607499707490206, + 2.4326659040525556, + 2.5605419650673866 + ], + "candidateColdMs": [ + 1490.7830000156537, + 1132.5827909167856, + 1181.9991249358281 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 19.955583498813212, + "candidateWarmMs": [ + 19.630374968983233, + 21.574665908701718, + 19.563374924473464, + 19.671584013849497, + 21.201291936449707, + 20.239582983776927 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "stats", + "repository": "jsoup", + "warmRatio": 9.868822679209295, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 1.6566670965403318, + 1.1086250888183713, + 1.1606250191107392 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.9618334588594735, + "baselineWarmMs": [ + 0.9004579624161124, + 1.2173750437796116, + 0.9238329948857427, + 0.9644170058891177, + 0.9592499118298292, + 1.0022500064224005 + ], + "candidateColdMs": [ + 5.736500024795532, + 6.205375073477626, + 35.29870801139623 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 5.862167046871036, + "candidateWarmMs": [ + 5.653416039422154, + 5.524250096641481, + 5.9868330135941505, + 5.975959007628262, + 5.7483750861138105, + 6.549459067173302 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callees", + "repository": "redux", + "warmRatio": 6.094783866036745, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 0.9757910156622529, + 1.0802079923450947, + 1.1517500970512629 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 1.0884585208259523, + "baselineWarmMs": [ + 2.050915965810418, + 0.938915996812284, + 0.9938750881701708, + 1.0732500813901424, + 1.7903749831020832, + 1.1036669602617621 + ], + "candidateColdMs": [ + 6.491416948847473, + 7.1750839706510305, + 34.92245799861848 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 6.214271008502692, + "candidateWarmMs": [ + 5.7171660009771585, + 5.762499989941716, + 6.666042027063668, + 5.6469159899279475, + 6.846250034868717, + 7.899624994024634 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callers", + "repository": "redux", + "warmRatio": 5.709240076311895, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 1.3574579497799277, + 0.8905410068109632, + 0.753625063225627 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.9173749131150544, + "baselineWarmMs": [ + 0.8059580577537417, + 0.8924161083996296, + 0.8983329171314836, + 0.9364169090986252, + 0.976832932792604, + 1.842042081989348 + ], + "candidateColdMs": [ + 5.788667011074722, + 5.7977919932454824, + 6.332249962724745 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 5.6689794873818755, + "candidateWarmMs": [ + 5.710166995413601, + 6.719500059261918, + 5.604750011116266, + 5.624709068797529, + 5.874083028174937, + 5.62779197935015 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "community", + "repository": "redux", + "warmRatio": 6.179566724941485, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 163.4339999873191, + 178.84545808192343, + 103.07241603732109 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 48.21154149249196, + "baselineWarmMs": [ + 48.27366606332362, + 50.097708008252084, + 48.201165976934135, + 48.1246670242399, + 48.221917008049786, + 44.719833065755665 + ], + "candidateColdMs": [ + 10.05716691724956, + 11.484583024866879, + 66.13483291584998 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 11.109437560662627, + "candidateWarmMs": [ + 9.493708028458059, + 11.642917059361935, + 11.113875079900026, + 9.71345801372081, + 11.197375017218292, + 11.105000041425228 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "hubs", + "repository": "redux", + "warmRatio": 0.23043107971133245, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 0.6608749972656369, + 0.5068338941782713, + 0.5930410698056221 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.5893330089747906, + "baselineWarmMs": [ + 0.5368749843910336, + 17.11645897012204, + 1.48974999319762, + 0.567540992051363, + 0.5395000334829092, + 0.6111250258982182 + ], + "candidateColdMs": [ + 5.097207962535322, + 5.3827500669285655, + 5.5405000457540154 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 5.720167013350874, + "candidateWarmMs": [ + 5.217208992689848, + 6.034041987732053, + 6.192917004227638, + 5.406292038969696, + 5.168625037185848, + 6.336124963127077 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "missing-community", + "repository": "redux", + "warmRatio": 9.70617108873934, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 45.29270902276039, + 46.00337508600205, + 42.59954090230167 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 44.12999999476597, + "baselineWarmMs": [ + 43.32737496588379, + 42.948540998622775, + 45.30258406884968, + 44.20229198876768, + 44.86804094631225, + 44.05770800076425 + ], + "candidateColdMs": [ + 19.77962499950081, + 25.176832918077707, + 55.14408403541893 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 18.72227102285251, + "candidateWarmMs": [ + 18.70716700796038, + 21.5747500769794, + 18.54499999899417, + 19.72829201258719, + 18.170166993513703, + 18.73737503774464 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "neighbors", + "repository": "redux", + "warmRatio": 0.4242526858162942, + "warmRegressionAboveTenPercent": false + }, + { + "baselineObservations": 0, + "candidateObservations": 0, + "completeComparison": false, + "fullResponsesEqual": false, + "question": "path", + "repository": "redux" + }, + { + "baselineColdMs": [ + 1000.3046669298783, + 1376.034083077684, + 1494.4214170100167 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.9694579639472067, + "baselineWarmMs": [ + 1.0686249006539583, + 0.8805419784039259, + 1.1517500970512629, + 0.9379999246448278, + 1.0009160032495856, + 0.9361249394714832 + ], + "candidateColdMs": [ + 615.1817080099136, + 1129.892790922895, + 957.6458330266178 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 5.893250461667776, + "candidateWarmMs": [ + 6.0380419017747045, + 5.748459021560848, + 6.219916976988316, + 5.523041938431561, + 5.540375015698373, + 6.550125079229474 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "search", + "repository": "redux", + "warmRatio": 6.078912836687679, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 128.26945900451392, + 134.36945795547217, + 136.57366705592722 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 1.2442079605534673, + "baselineWarmMs": [ + 1.2344579445198178, + 1.3640830293297768, + 1.2539579765871167, + 0.865040929056704, + 2.0788749679923058, + 0.8692500414326787 + ], + "candidateColdMs": [ + 240.26458396110684, + 272.1560000209138, + 325.9279999183491 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 5.888292042072862, + "candidateWarmMs": [ + 5.696624983102083, + 6.061959080398083, + 6.993249990046024, + 5.696667009033263, + 44.337333063595, + 5.714625003747642 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "stats", + "repository": "redux", + "warmRatio": 4.732562584998687, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 0.8613329846411943, + 0.8984169689938426, + 0.8248339872807264 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.8595204562880099, + "baselineWarmMs": [ + 0.8540829876437783, + 0.8649579249322414, + 0.8778329938650131, + 0.7802499458193779, + 0.8773329900577664, + 0.8403329411521554 + ], + "candidateColdMs": [ + 2.1077499259263277, + 2.106958068907261, + 2.139875083230436 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 2.1026244503445923, + "candidateWarmMs": [ + 2.0984580041840672, + 1.9117919728159904, + 2.1067908965051174, + 2.5197500362992287, + 2.1762079559266567, + 1.819874974898994 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callees", + "repository": "walkdir", + "warmRatio": 2.4462762171189567, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 1.0927909752354026, + 1.04891590308398, + 1.0595419444143772 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.9976045112125576, + "baselineWarmMs": [ + 0.9625420207157731, + 1.032667001709342, + 1.1227090144529939, + 0.9277500212192535, + 0.9405419696122408, + 1.1153749655932188 + ], + "candidateColdMs": [ + 2.007832983508706, + 2.153957961127162, + 34.011124982498586 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 2.486896002665162, + "candidateWarmMs": [ + 2.879790961742401, + 2.4352920008823276, + 3.22508392855525, + 2.1760419476777315, + 2.1526250056922436, + 2.5385000044479966 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "callers", + "repository": "walkdir", + "warmRatio": 2.492867639143308, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 0.7045000093057752, + 0.7676250534132123, + 0.6809579208493233 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.6942084874026477, + "baselineWarmMs": [ + 0.7478749612346292, + 0.8099169936031103, + 0.632417039014399, + 0.6192090222612023, + 0.6405420135706663, + 0.7850830443203449 + ], + "candidateColdMs": [ + 1.9716669339686632, + 1.924125012010336, + 1.708792056888342 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 1.6550629516132176, + "candidateWarmMs": [ + 1.60287506878376, + 1.6474169678986073, + 1.5680419746786356, + 1.7254590056836605, + 1.85720797162503, + 1.662708935327828 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "community", + "repository": "walkdir", + "warmRatio": 2.3841007156302094, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 12.522750068455935, + 12.6545000821352, + 12.751374975778162 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 8.956916455645114, + "baselineWarmMs": [ + 8.959500002674758, + 8.95433290861547, + 9.677666937932372, + 8.540790993720293, + 9.22012492083013, + 8.382166968658566 + ], + "candidateColdMs": [ + 3.209875081665814, + 3.0491669895127416, + 67.95649998821318 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 2.991916553582996, + "candidateWarmMs": [ + 3.1953330617398024, + 2.78850004542619, + 3.6088329507037997, + 2.735750051215291, + 2.771708997897804, + 3.4134999150410295 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "hubs", + "repository": "walkdir", + "warmRatio": 0.33403421460935195, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 0.5350420251488686, + 0.844458001665771, + 0.5372909363359213 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.5767499678768218, + "baselineWarmMs": [ + 0.5669579841196537, + 0.567166949622333, + 0.6714590126648545, + 0.5863329861313105, + 0.5225000204518437, + 0.6302909459918737 + ], + "candidateColdMs": [ + 1.7937079537659883, + 1.5208330005407333, + 1.5858339611440897 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 1.6522080404683948, + "candidateWarmMs": [ + 2.3474169429391623, + 1.728458097204566, + 1.6407910734415054, + 1.51329196523875, + 1.663625007495284, + 1.5173329738900065 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "missing-community", + "repository": "walkdir", + "warmRatio": 2.8646868357021944, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 8.260417031124234, + 9.12429194431752, + 8.269374957308173 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 8.01029201829806, + "baselineWarmMs": [ + 8.015792001970112, + 8.93329200334847, + 7.878958014771342, + 8.004792034626007, + 7.993333972990513, + 8.57904099393636 + ], + "candidateColdMs": [ + 4.435000009834766, + 4.303624969907105, + 59.39162499271333 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 4.390999500174075, + "candidateWarmMs": [ + 5.538208992220461, + 5.272165988571942, + 4.562707967124879, + 3.9991249796003103, + 4.111999995075166, + 4.219291033223271 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "neighbors", + "repository": "walkdir", + "warmRatio": 0.5481697159284122, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 8.63212498370558, + 9.234374971129, + 8.768790983594954 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 8.655271027237177, + "baselineWarmMs": [ + 8.700459031388164, + 8.61008302308619, + 9.089625091291964, + 8.605708018876612, + 9.091915911994874, + 8.208832936361432 + ], + "candidateColdMs": [ + 66.00912497378886, + 4.852334037423134, + 144.34954104945064 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 4.191478947177529, + "candidateWarmMs": [ + 4.249209072440863, + 4.178375005722046, + 4.107541986741126, + 3.9187499787658453, + 4.529041005298495, + 4.204582888633013 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "path", + "repository": "walkdir", + "warmRatio": 0.48426894247302144, + "warmRegressionAboveTenPercent": false + }, + { + "baselineColdMs": [ + 400.5023749778047, + 631.1396670062095, + 433.2924580667168 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.8307709940709174, + "baselineWarmMs": [ + 0.7873749127611518, + 0.8581250440329313, + 0.9764999849721789, + 0.8113749790936708, + 0.808333046734333, + 0.8501670090481639 + ], + "candidateColdMs": [ + 559.7664159722626, + 557.6302920235321, + 734.0885000303388 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 2.0030204905197024, + "candidateWarmMs": [ + 2.0078750094398856, + 1.8135829595848918, + 2.2071669809520245, + 1.8410410266369581, + 2.3210840299725533, + 1.9981659715995193 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "search", + "repository": "walkdir", + "warmRatio": 2.4110380656221104, + "warmRegressionAboveTenPercent": true + }, + { + "baselineColdMs": [ + 25.043249945156276, + 25.018915999680758, + 49.77399995550513 + ], + "baselineObservations": 9, + "baselineWarmMedianMs": 0.6663745152764022, + "baselineWarmMs": [ + 0.8779159979894757, + 0.6949160015210509, + 0.5795840406790376, + 0.6287499563768506, + 0.89216697961092, + 0.6378330290317535 + ], + "candidateColdMs": [ + 21.133334026671946, + 21.19004202540964, + 108.70708397123963 + ], + "candidateObservations": 9, + "candidateWarmMedianMs": 1.883353979792446, + "candidateWarmMs": [ + 1.9882500637322664, + 1.9115000031888485, + 1.8552079563960433, + 1.6996250487864017, + 2.342000021599233, + 1.627666992135346 + ], + "completeComparison": true, + "fullResponsesEqual": true, + "question": "stats", + "repository": "walkdir", + "warmRatio": 2.8262695175418866, + "warmRegressionAboveTenPercent": true + } + ], + "rawToolCalls": 828, + "registeredQuestions": 47, + "repeatedVerificationByteEqual": true, + "repositories": [ + "chi", + "click", + "jsoup", + "redux", + "walkdir" + ], + "sessionPeakMemory": { + "chi": { + "baselineMedianPeakRssBytes": 78675968, + "baselinePeakRssBytes": [ + 76234752, + 78675968, + 79757312 + ], + "candidateMedianPeakRssBytes": 120602624, + "candidatePeakRssBytes": [ + 120602624, + 118669312, + 123518976 + ], + "unavailableBaselineSessions": 0, + "unavailableCandidateSessions": 0 + }, + "click": { + "baselineMedianPeakRssBytes": 205881344, + "baselinePeakRssBytes": [ + 208142336, + 205881344, + 202620928 + ], + "candidateMedianPeakRssBytes": 305659904, + "candidatePeakRssBytes": [ + 305807360, + 305659904, + 303923200 + ], + "unavailableBaselineSessions": 0, + "unavailableCandidateSessions": 0 + }, + "cloudstack": { + "baselineMedianPeakRssBytes": 7127367680, + "baselinePeakRssBytes": [ + 7127367680 + ], + "candidateMedianPeakRssBytes": null, + "candidatePeakRssBytes": [], + "unavailableBaselineSessions": 2, + "unavailableCandidateSessions": 3 + }, + "jsoup": { + "baselineMedianPeakRssBytes": 527728640, + "baselinePeakRssBytes": [ + 533184512, + 501301248, + 527728640 + ], + "candidateMedianPeakRssBytes": 730284032, + "candidatePeakRssBytes": [ + 730284032, + 737361920, + 693370880 + ], + "unavailableBaselineSessions": 0, + "unavailableCandidateSessions": 0 + }, + "redux": { + "baselineMedianPeakRssBytes": 188661760, + "baselinePeakRssBytes": [ + 193773568, + 186564608, + 188661760 + ], + "candidateMedianPeakRssBytes": 261701632, + "candidatePeakRssBytes": [ + 261701632, + 254148608, + 287064064 + ], + "unavailableBaselineSessions": 0, + "unavailableCandidateSessions": 0 + }, + "walkdir": { + "baselineMedianPeakRssBytes": 58212352, + "baselinePeakRssBytes": [ + 58212352, + 60342272, + 57638912 + ], + "candidateMedianPeakRssBytes": 80347136, + "candidatePeakRssBytes": [ + 77824000, + 80347136, + 84082688 + ], + "unavailableBaselineSessions": 0, + "unavailableCandidateSessions": 0 + } + }, + "sessions": 36, + "toolOrTransportFailures": 0, + "unavailableReduxPathObservations": 18, + "verificationSha256": "f8eb35b4335cf2efbc1bd66edcd896c2384fd9459104a28c41b83f9540618852", + "warmRegressionsAboveTenPercent": 31 + }, + "registrationSha256": "f2dd475492c99c16771a5001201c1c62269b1e4a6072d30efd3dce126024711e", + "schema": "compass.graph-cache-coherence-review/1", + "scope": "Standalone JSON graph freshness and fixed source-query preservation/cost controls, not a Graphify superiority score.", + "synthetic": { + "candidateAfterObservations": 72, + "candidateAfterUsesReplacedGraph": true, + "expectationMismatches": 0, + "rawToolCalls": 432, + "repeatedVerificationByteEqual": true, + "rows": 48, + "verificationSha256": "1a132d00dd6b2f8b05c12c05620579bdc519a6a3cf7058de34f05fab62585add" + } +} diff --git a/benchmarks/agent_query/heldout_panel_a.json b/benchmarks/agent_query/heldout_panel_a.json new file mode 100644 index 000000000..5403ef703 --- /dev/null +++ b/benchmarks/agent_query/heldout_panel_a.json @@ -0,0 +1,117 @@ +{ + "schema": "compass.heldout-panel/1", + "scope": "Purposive confirmation panel, not a representative population sample. No outputs from either tool on these repositories informed question selection. After results are inspected, any tuning on this panel is development and needs another holdout.", + "repositories": [ + { + "name": "chi", + "language": "Go", + "url": "https://github.com/go-chi/chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "reviewedFiles": [ + { + "file": "chi.go", + "sha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678" + }, + { + "file": "context.go", + "sha256": "b19edcca252e2fe74e82802c4c7ce1a1c0855728f9ede1288f0224283dfc7e53" + }, + { + "file": "mux.go", + "sha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + ] + }, + { + "name": "click", + "language": "Python", + "url": "https://github.com/pallets/click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "reviewedFiles": [ + { + "file": "src/click/_compat.py", + "sha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/utils.py", + "sha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + ] + }, + { + "name": "jsoup", + "language": "Java", + "url": "https://github.com/jhy/jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "reviewedFiles": [ + { + "file": "src/main/java/org/jsoup/Jsoup.java", + "sha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "sha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + }, + { + "file": "src/main/java/org/jsoup/parser/Parser.java", + "sha256": "2b8baa95140fbf12fad9c874b42d8d31e24b186fd7c665c1708395e6d852ba98" + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "sha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + } + ] + }, + { + "name": "redux", + "language": "TypeScript", + "url": "https://github.com/reduxjs/redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "reviewedFiles": [ + { + "file": "src/createStore.ts", + "sha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695" + }, + { + "file": "src/utils/isAction.ts", + "sha256": "2cf7a3b535cb14b9bb2ac7648b5f103f2a80427d96c7eb391fd11f617944a8a2" + }, + { + "file": "src/utils/isPlainObject.ts", + "sha256": "30153dae9fd245b8574f96cf9c08cf33e7d12881b0ad4e4e458646bef5b32793" + }, + { + "file": "src/utils/kindOf.ts", + "sha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + } + ] + }, + { + "name": "walkdir", + "language": "Rust", + "url": "https://github.com/BurntSushi/walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "reviewedFiles": [ + { + "file": "src/dent.rs", + "sha256": "ca573f4533370a09851579f5940f7cd9bd121b2f30ec51d29a40afdce984683b" + }, + { + "file": "src/error.rs", + "sha256": "ba58bf6f59d196567435d4b66699a928cc237fc7c8df01dc37ab822509905b7c" + }, + { + "file": "src/lib.rs", + "sha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a" + } + ] + } + ], + "productBinarySha256": "5382b51b86ab76032173a17e638a3ad525600ec1726364d3244edddb7abd2c19", + "productSourceCommit": "30a55707ef651e2018cda159bc47669fa3c3896f", + "surfacesPending": [ + "Held-out MCP hubs and community workflows", + "Directed path and long-walk tasks", + "Independent functional cohesion and god-object judgments" + ] +} diff --git a/benchmarks/agent_query/heldout_panel_a_path_diagnostics.json b/benchmarks/agent_query/heldout_panel_a_path_diagnostics.json new file mode 100644 index 000000000..0edd4e3d7 --- /dev/null +++ b/benchmarks/agent_query/heldout_panel_a_path_diagnostics.json @@ -0,0 +1,170 @@ +{ + "schema": "compass.heldout-path-diagnostics/1", + "scope": "Post-output diagnostics on the original frozen binaries and graphs. Prepared endpoints do not measure node retrieval or establish an end-to-end workflow cost advantage. Neither arm replaces the original confirmation score. Graphify path help does not promise exact-ID semantics.", + "arms": [ + { + "arm": "stored_ids", + "artifact": "heldout-a-explicit-path-diagnostic-01", + "auditDigest": "a955696961842c00576155bb8d6cc1ed970f6667e974a30e45933f9b913318f9", + "inputDigest": "d5bdd613377644feac078827f7cc5a5b43ce36309579be721b3e706a0933feb3", + "results": [ + { + "repository": "redux", + "question": "redux-holdout-path-forward", + "tool": "compass", + "matched": true, + "failures": [], + "stdoutSha256": "a2d25eba2c1848d27c99659d3c66c690a14f57eb95872097ca2612ec123d3a0b" + }, + { + "repository": "redux", + "question": "redux-holdout-path-forward", + "tool": "graphify", + "matched": true, + "failures": [], + "stdoutSha256": "317bc379d4a10fe6b621471754b2619265f392bfa85f4343075925022dc4dbc6" + }, + { + "repository": "redux", + "question": "redux-holdout-path-reverse", + "tool": "compass", + "matched": true, + "failures": [], + "stdoutSha256": "114e4cd102e00074a384f50f792981bdeb6578f6dedc24d85a4bbf9799ad8930" + }, + { + "repository": "redux", + "question": "redux-holdout-path-reverse", + "tool": "graphify", + "matched": true, + "failures": [], + "stdoutSha256": "74baa786104a9342fa52e86a0ca550920bb0f29a380237c0b40ebf1ee25e2c6d" + }, + { + "repository": "walkdir", + "question": "walkdir-holdout-path-forward", + "tool": "compass", + "matched": true, + "failures": [], + "stdoutSha256": "fa9d7fd0d98551e1bf1c73dd520f9cea07d6c5205e8052ec7aa617a9427568e2" + }, + { + "repository": "walkdir", + "question": "walkdir-holdout-path-forward", + "tool": "graphify", + "matched": false, + "failures": [ + "route length differs from reviewed witness" + ], + "stdoutSha256": "dceff48f7dcf0eb1aebcd94c482f629e7ad35c1095f395a693cca52bc532cea5" + }, + { + "repository": "walkdir", + "question": "walkdir-holdout-path-reverse", + "tool": "compass", + "matched": true, + "failures": [], + "stdoutSha256": "a4a1b0b112b9d1761590ae71752d69b4b1f3807e04097ea74054a9ba53a27043" + }, + { + "repository": "walkdir", + "question": "walkdir-holdout-path-reverse", + "tool": "graphify", + "matched": false, + "failures": [ + "route length differs from reviewed witness" + ], + "stdoutSha256": "1daec3b41504b36036dbf6a8338a05d9d4d53a837a863ead7302f96f042baeee" + } + ] + }, + { + "arm": "display_labels", + "artifact": "heldout-a-label-path-diagnostic-01", + "auditDigest": "33197715aa55be793ae3612af827dd7cb2d1729a3bc31b81c0a2753e4d918628", + "inputDigest": "6f95aefaf813919be5baef2e4ae97c91e5bc7eafd839eecd65c4c1b3803e65f6", + "results": [ + { + "repository": "redux", + "question": "redux-holdout-path-forward", + "tool": "compass", + "matched": false, + "failures": [ + "expected exactly one rendered path header", + "command exited 1" + ], + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "repository": "redux", + "question": "redux-holdout-path-forward", + "tool": "graphify", + "matched": true, + "failures": [], + "stdoutSha256": "317bc379d4a10fe6b621471754b2619265f392bfa85f4343075925022dc4dbc6" + }, + { + "repository": "redux", + "question": "redux-holdout-path-reverse", + "tool": "compass", + "matched": false, + "failures": [ + "expected exactly one rendered path header", + "command exited 1" + ], + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "repository": "redux", + "question": "redux-holdout-path-reverse", + "tool": "graphify", + "matched": true, + "failures": [], + "stdoutSha256": "74baa786104a9342fa52e86a0ca550920bb0f29a380237c0b40ebf1ee25e2c6d" + }, + { + "repository": "walkdir", + "question": "walkdir-holdout-path-forward", + "tool": "compass", + "matched": false, + "failures": [ + "expected exactly one rendered path header", + "command exited 1" + ], + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "repository": "walkdir", + "question": "walkdir-holdout-path-forward", + "tool": "graphify", + "matched": false, + "failures": [ + "route length differs from reviewed witness" + ], + "stdoutSha256": "2ffc33bac6667a18b7979e75b064ca2730fd19a7e93e977b28bc31382cea35f6" + }, + { + "repository": "walkdir", + "question": "walkdir-holdout-path-reverse", + "tool": "compass", + "matched": false, + "failures": [ + "expected exactly one rendered path header", + "command exited 1" + ], + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "repository": "walkdir", + "question": "walkdir-holdout-path-reverse", + "tool": "graphify", + "matched": false, + "failures": [ + "route length differs from reviewed witness" + ], + "stdoutSha256": "736636244cca57cf06ce86a293a15b530c3c610b889eb1b14ff694458ae47ac7" + } + ] + } + ] +} diff --git a/benchmarks/agent_query/heldout_panel_a_review.json b/benchmarks/agent_query/heldout_panel_a_review.json new file mode 100644 index 000000000..833e499d0 --- /dev/null +++ b/benchmarks/agent_query/heldout_panel_a_review.json @@ -0,0 +1,118 @@ +{ + "askReview": "Compass uniquely targets the requested callee and prints incoming relationship direction on Chi, Click, jsoup, and Redux; WalkDir remains ambiguous. Incoming usages include references/imports where shown. Graphify prints broader neighborhoods containing the requested incoming call on these tasks; WalkDir combines test and library seeds. This is selected-fact recall, not whole-answer precision.", + "auditDigests": { + "heldout-a-chi-edge-audit-01.json": "fc4bac5f24224eb2f8308f3fcd1ad3ab0d5f3bfd5503916a73681d2a4c5eaadc", + "heldout-a-click-edge-audit-01.json": "4c81cb59f7a0d51caa7acc4bd692a0ae92dd976405fa9465924259767caace0c", + "heldout-a-click-edge-audit-corrected-01.json": "2cf35f85a402d5cdcbb88820409d0f3dee1ae41d2dc05951ded74d59d7fc6865", + "heldout-a-jsoup-edge-audit-01.json": "f6c1fff6a8763e01651cf600674f3a2abbc5172d460d58eff6ca4bc7683e1838", + "heldout-a-path-audit-01.json": "4b4e19d5ac3a977cbb2ce4f27ef4e72ec4c6e9f3f8c890de5ada7998d69f25a0", + "heldout-a-redux-edge-audit-01.json": "504f66e12c798cde7bc1010f1476678dc7e447f42da20b13a7d0d20fdb4382af", + "heldout-a-walkdir-edge-audit-01.json": "f611d41d07752835ecac23080974c5d4b0ef3ddcf8b73ffe6a9335777b8bce9b" + }, + "buildsSucceeded": 10, + "edgeSummary": { + "corrected": { + "compass": { + "fullOccurrenceMatches": 15, + "pairs": 21, + "positiveOccurrencesExpected": 19, + "positiveOccurrencesMatched": 14, + "relationshipMatches": 15, + "uniqueEndpointPairs": 17 + }, + "graphify": { + "fullOccurrenceMatches": 17, + "pairs": 21, + "positiveOccurrencesExpected": 19, + "positiveOccurrencesMatched": 15, + "relationshipMatches": 20, + "uniqueEndpointPairs": 21 + } + }, + "registered": { + "compass": { + "fullOccurrenceMatches": 14, + "pairs": 21, + "positiveOccurrencesExpected": 18, + "positiveOccurrencesMatched": 13, + "relationshipMatches": 15, + "uniqueEndpointPairs": 17 + }, + "graphify": { + "fullOccurrenceMatches": 18, + "pairs": 21, + "positiveOccurrencesExpected": 18, + "positiveOccurrencesMatched": 15, + "relationshipMatches": 20, + "uniqueEndpointPairs": 21 + } + } + }, + "inputDigests": { + "edge_witnesses_heldout_chi.json": "198b3982981429b4f96366685c1a32c5fdff295441da8a452cd351b620e779b4", + "edge_witnesses_heldout_click.json": "84657bfad12322347e0c7af4642897acbf572fe20d16f20fbcba489e958a22f6", + "edge_witnesses_heldout_jsoup.json": "e8bf60d682228a7115603049177349b399eed055b41743c35c6a638aaf24fc38", + "edge_witnesses_heldout_redux.json": "f0a361aa2a3492b8c816bd6351a4160ecd197348b474498683932e800ac7a7d2", + "edge_witnesses_heldout_walkdir.json": "1e203696db152499f7b08bfea40aa089d4b235ee744e76c2421f8c617f23b58a", + "heldout_panel_a.json": "e6d341f45f93a47ea297cd0f732d8a527e1d8de2f2ca1a0149760024d5c06c5c", + "path_witnesses_heldout_a.json": "fb7fcc2cfa698a0d64b1a0929a1a9a0f5c97e973deb05e303d798f0d0c033f6e", + "suite_heldout_a.toml": "820a5c29f59e68b4ee8493e153c806b23e458a396431f3cf381660e469391237" + }, + "observations": 110, + "oracleCorrection": "Registered Click open_stream -> _wrap_io_open omitted the call at _compat.py:450. Corrected diagnostic adds it without replacing original witness or results.", + "pending": [ + "Whole-answer/source-edge precision", + "MCP hubs and community workflows on this panel", + "Functional cohesion and god-object judgments", + "Directed and long paths", + "Representative independent confirmation after further tuning" + ], + "provenanceLimit": "CLI run records executable hashes and reported versions; the Graphify launcher hash does not pin all Python package/dependency bytes during execution. The separate MCP package manifest must not be presented as a CLI pre/post package check.", + "registrationCommit": "7c70fbeaf78818f1b5055b3a852c0f6350728e2f", + "responseReviews": [ + { + "judgment": "Text pass is an ambiguity list for export and function nodes at the same declaration, not an explanation of one resolved node.", + "response": "raw/redux/redux-holdout-explain-primary.compass.0.stdout", + "sha256": "57be3b5fa8c5e038bdcabed6e39e1ae177223fc2801df76d902b86a086771e74" + }, + { + "judgment": "Text pass is an ambiguity list for library and test declarations, not a resolved explanation.", + "response": "raw/walkdir/walkdir-holdout-explain-primary.compass.0.stdout", + "sha256": "fa3577f28fdb9303d10f80f1e1107369975646a4315220857241acb002ade4e3" + }, + { + "judgment": "Text pass is an ambiguity list for library and test declarations, not a resolved explanation.", + "response": "raw/walkdir/walkdir-holdout-explain-target.compass.0.stdout", + "sha256": "06e2c99993e809ce65a0292c9f3c03f30ae19efd2a37da466deacea4bdf5534e" + }, + { + "judgment": "Text pass comes from candidate names. Response is needs_resolution and contains no direct callee answer.", + "response": "raw/walkdir/walkdir-holdout-callees.compass.0.stdout", + "sha256": "2187b9b854e9ccd9851bbc469e127dddfe79d0641340552d070871e69fd7522c" + }, + { + "judgment": "Text pass is a containment route between same-named test functions, not the registered library declarations or call.", + "response": "raw/walkdir/walkdir-holdout-path-forward.graphify.0.stdout", + "sha256": "2ffc33bac6667a18b7979e75b064ca2730fd19a7e93e977b28bc31382cea35f6" + }, + { + "judgment": "Text pass is a reversed containment route between same-named test functions, not the registered library declarations or call.", + "response": "raw/walkdir/walkdir-holdout-path-reverse.graphify.0.stdout", + "sha256": "736636244cca57cf06ce86a293a15b530c3c610b889eb1b14ff694458ae47ac7" + } + ], + "runDigest": "6412df38bbde56a1ec89974ac8d0a11162592bae90c403ed7b7f745acb6384bd", + "runId": "heldout-a-01", + "schema": "compass.heldout-panel-review/1", + "scope": "Post-output audit of the frozen, purposively selected confirmation panel A. Text matches do not establish source precision or successful resolution. No population-wide superiority claim. Later tuning is development.", + "sourcePathMatches": { + "compass": 6, + "graphify": 8 + }, + "sourcePathQuestionsPerTool": 10, + "textPasses": { + "compass": 46, + "graphify": 46 + }, + "textQuestionsPerTool": 55 +} diff --git a/benchmarks/agent_query/heldout_three_language_edge_review.py b/benchmarks/agent_query/heldout_three_language_edge_review.py new file mode 100644 index 000000000..aecc2ac54 --- /dev/null +++ b/benchmarks/agent_query/heldout_three_language_edge_review.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +"""Source-site call-edge review for the registered three-language panel. + +This reviewer was written after the first capture. Its 13 expected call sites +are the source facts named in heldout_three_language_suite.toml. Keep that +provenance separate from the suite's before-graph registration. +""" + +from __future__ import annotations + +import argparse +from collections import Counter +import hashlib +import json +from pathlib import Path +import subprocess + + +# repository, call file, call line, source declaration file/line, target file/line +CALLS = ( + ("anyhow-heldout", "src/error.rs", 453, "src/error.rs", 452, "src/error.rs", 441), + ("anyhow-heldout", "src/error.rs", 985, "src/error.rs", 984, "src/chain.rs", 28), + ("markitdown-heldout", "packages/markitdown/src/markitdown/_markitdown.py", 347, "packages/markitdown/src/markitdown/_markitdown.py", 322, "packages/markitdown/src/markitdown/_markitdown.py", 471), + ("markitdown-heldout", "packages/markitdown/src/markitdown/_markitdown.py", 349, "packages/markitdown/src/markitdown/_markitdown.py", 322, "packages/markitdown/src/markitdown/_markitdown.py", 368), + ("markitdown-heldout", "packages/markitdown/src/markitdown/_markitdown.py", 352, "packages/markitdown/src/markitdown/_markitdown.py", 322, "packages/markitdown/src/markitdown/_markitdown.py", 368), + ("markitdown-heldout", "packages/markitdown/src/markitdown/_markitdown.py", 355, "packages/markitdown/src/markitdown/_markitdown.py", 322, "packages/markitdown/src/markitdown/_markitdown.py", 533), + ("markitdown-heldout", "packages/markitdown/src/markitdown/_markitdown.py", 362, "packages/markitdown/src/markitdown/_markitdown.py", 322, "packages/markitdown/src/markitdown/_markitdown.py", 405), + ("markitdown-heldout", "packages/markitdown/src/markitdown/_markitdown.py", 403, "packages/markitdown/src/markitdown/_markitdown.py", 368, "packages/markitdown/src/markitdown/_markitdown.py", 606), + ("markitdown-heldout", "packages/markitdown/src/markitdown/_markitdown.py", 450, "packages/markitdown/src/markitdown/_markitdown.py", 405, "packages/markitdown/src/markitdown/_markitdown.py", 606), + ("markitdown-heldout", "packages/markitdown/src/markitdown/_markitdown.py", 604, "packages/markitdown/src/markitdown/_markitdown.py", 533, "packages/markitdown/src/markitdown/_markitdown.py", 606), + ("vue-heldout", "src/compiler/index.ts", 14, "src/compiler/index.ts", 10, "src/compiler/parser/index.ts", 86), + ("vue-heldout", "src/compiler/index.ts", 16, "src/compiler/index.ts", 10, "src/compiler/optimizer.ts", 20), + ("vue-heldout", "src/compiler/index.ts", 18, "src/compiler/index.ts", 10, "src/compiler/codegen/index.ts", 57), +) + +MAX_GRAPH_BYTES = 128 * 1024 * 1024 +MAX_NODES = 300_000 +MAX_EDGES = 500_000 + + +def digest(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def graph_path(run: Path, repository: str, tool: str) -> Path: + root = run / "artifacts" / repository / tool + if tool == "graphify": + return root / "graphify-out" / "graph.json" + output = root / "compass-out" + snapshot = (output / "current-snapshot").read_text().strip() + if not snapshot.startswith("snapshot-") or Path(snapshot).name != snapshot: + raise ValueError(f"invalid active Compass snapshot: {snapshot!r}") + return output / "snapshots" / snapshot / "graph.json" + + +def read_graph(path: Path) -> dict: + if path.stat().st_size > MAX_GRAPH_BYTES: + raise ValueError(f"graph byte bound exceeded: {path}") + graph = json.loads(path.read_text()) + if len(graph["nodes"]) > MAX_NODES or len(graph["links"]) > MAX_EDGES: + raise ValueError(f"graph item bound exceeded: {path}") + return graph + + +def node_site(node: dict, tool: str) -> tuple[str | None, int | None]: + if tool == "compass": + source = node.get("source") or {} + return source.get("file"), source.get("startLine") + location = node.get("source_location", "") + if isinstance(location, str) and location.startswith("L") and location[1:].isdigit(): + return node.get("source_file"), int(location[1:]) + return node.get("source_file"), None + + +def edge_site(edge: dict, tool: str) -> tuple[str | None, int | None]: + if tool == "compass": + site = edge.get("relationshipSite") or {} + return site.get("file"), site.get("startLine") + location = edge.get("source_location", "") + if isinstance(location, str) and location.startswith("L") and location[1:].isdigit(): + return edge.get("source_file"), int(location[1:]) + return edge.get("source_file"), None + + +def audit(graph: dict, tool: str, fact: tuple) -> dict: + repository, call_file, call_line, source_file, source_line, target_file, target_line = fact + nodes = graph["nodes"] + sources = [node for node in nodes if node_site(node, tool) == (source_file, source_line)] + targets = [node for node in nodes if node_site(node, tool) == (target_file, target_line)] + if repository == "vue-heldout": + # The callback's declaration shares a line with the assigned variable + # and an export. Require its actual name, not just a matching line. + sources = [node for node in sources + if (node.get("name") or node.get("label") or "").strip(".()") == "baseCompile"] + targets = [node for node in targets + if (node.get("kind") or node.get("type")) != "export"] + if len(sources) != 1 or len(targets) != 1: + return {"status": "declaration_missing_or_ambiguous", "sourceCount": len(sources), "targetCount": len(targets)} + source_id, target_id = sources[0]["id"], targets[0]["id"] + call_edges = [edge for edge in graph["links"] + if (edge.get("kind") or edge.get("relation")) == "calls" + and edge.get("source") == source_id + and edge_site(edge, tool) == (call_file, call_line)] + matches = [edge for edge in call_edges if edge.get("target") == target_id] + return { + "status": "exact" if len(matches) == 1 else "missing_or_ambiguous_edge", + "sourceId": source_id, + "targetId": target_id, + "exactEdgeCount": len(matches), + "otherCallTargetsAtSite": sorted({edge["target"] for edge in call_edges if edge["target"] != target_id}), + } + + +def source_paths(values: list[str]) -> dict[str, Path]: + result = {} + for value in values: + name, delimiter, path = value.partition("=") + if not delimiter or not name or not path or name in result: + raise ValueError(f"invalid --source {value!r}") + result[name] = Path(path) + return result + + +def run(args: argparse.Namespace) -> None: + registration = json.loads(args.registration.read_text()) + if registration["schema"] != "compass.heldout-three-language-registration/1": + raise ValueError("unexpected registration schema") + if digest(args.suite) != registration["suiteSha256"]: + raise ValueError("registered suite changed") + sources = source_paths(args.source) + runs = source_paths(args.run) + rows = [] + graphs = {} + for record in registration["repositories"]: + name = record["name"] + root = sources[name] + commit = subprocess.run(["git", "-C", str(root), "rev-parse", "HEAD"], + check=True, capture_output=True, text=True).stdout.strip() + dirty = subprocess.run(["git", "-C", str(root), "status", "--porcelain=v1"], + check=True, capture_output=True, text=True).stdout.strip() + if commit != record["sourceCommit"] or dirty: + raise ValueError(f"source checkout changed: {name}") + for relative, expected in record["reviewedSourceSha256"].items(): + if digest(root / relative) != expected: + raise ValueError(f"reviewed source changed: {name}/{relative}") + for tool in ("compass", "graphify"): + path = graph_path(runs[name], name, tool) + graphs[(name, tool)] = read_graph(path) + for index, fact in enumerate(CALLS, 1): + name, call_file, call_line, source_file, source_line, target_file, target_line = fact + rows.append({"id": index, "repository": name, "callFile": call_file, + "callLine": call_line, "sourceDeclaration": [source_file, source_line], + "targetDeclaration": [target_file, target_line], + "compass": audit(graphs[(name, "compass")], "compass", fact), + "graphify": audit(graphs[(name, "graphify")], "graphify", fact)}) + counts = {tool: dict(sorted(Counter(row[tool]["status"] for row in rows).items())) + for tool in ("compass", "graphify")} + hashes = {name: {tool: digest(graph_path(runs[name], name, tool)) for tool in ("compass", "graphify")} + for name in sources} + report = {"schema": "compass.heldout-three-language-edge-review/1", + "registrationSha256": digest(args.registration), "suiteSha256": digest(args.suite), + "runs": {name: str(path) for name, path in sorted(runs.items())}, + "graphSha256": hashes, "counts": counts, "rows": rows, + "limits": "Thirteen source-selected direct call occurrences only; no whole-graph precision or runtime call claim."} + args.output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n") + print(json.dumps({"counts": counts, "facts": len(rows)}, sort_keys=True)) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--suite", type=Path, required=True) + parser.add_argument("--run", action="append", required=True, + help="repository=run directory; repeat for each registered repository") + parser.add_argument("--source", action="append", required=True) + parser.add_argument("--output", type=Path, required=True) + run(parser.parse_args()) + + +if __name__ == "__main__": + main() diff --git a/benchmarks/agent_query/heldout_three_language_registration.json b/benchmarks/agent_query/heldout_three_language_registration.json new file mode 100644 index 000000000..f4d9edd8c --- /dev/null +++ b/benchmarks/agent_query/heldout_three_language_registration.json @@ -0,0 +1,21 @@ +{ + "schema": "compass.heldout-three-language-registration/1", + "registeredBeforeToolGraphBuilds": true, + "selection": "Twelve source-first declaration, direct-callee, direct-caller, and one-hop-path questions in three repositories absent from the prior Compass/Graphify audit. The repositories and facts were selected by an investigator from source, not randomly sampled or blinded from source; no claim of population accuracy follows.", + "suite": "benchmarks/agent_query/heldout_three_language_suite.toml", + "suiteSha256": "8e661da8cd6ebe12bfdb76dc182f417275a1f62803d70cf585f5b714e7c42c5b", + "runner": "benchmarks/agent_query/runner.py", + "runnerSha256": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "tools": { + "compass": {"version": "0.3.30", "sourceRevision": "bfe9068cfb9fd03cf40e402f6de685ab204c2ab8", "debugBinarySha256": "31deec65b70a815a8c1b9a65161c515f6295f3b9bc23fa4ee1f5217d48414638"}, + "graphify": {"package": "graphifyy", "version": "0.9.67", "launcherSha256": "a7fdb4ac8985755be15f10f89a2d17ee517130b3ac90c28c91644ae351881da3", "installedRecordSha256": "862db9249ac0cfcbb947dff9391854bde191c86d0250de87739902906731ba4e"} + }, + "repositories": [ + {"name": "anyhow-heldout", "sourceCommit": "c63b279f3f4af2b02ca6267d9eb47d6d10497f69", "trackedFiles": 54, "reviewedSourceSha256": {"src/error.rs": "2a78ee4e5f8d6b4476c761f77473362b9ed12f5402e4701001e7d04d628ba030", "src/chain.rs": "85af447405f075633fab186b7f1c94d7f33a36474f239c50a961b2d6197d5426"}}, + {"name": "markitdown-heldout", "sourceCommit": "945314a45ddbe02935f2fd287b797dc0ba4a01e4", "trackedFiles": 200, "reviewedSourceSha256": {"packages/markitdown/src/markitdown/_markitdown.py": "11f251f2a3bb67d9d4be55d12970c6c8438112a6a2f841f3e94bcac74001afb0"}}, + {"name": "vue-heldout", "sourceCommit": "9e88707940088cb1f4cd7dd210c9168a50dc347c", "trackedFiles": 508, "reviewedSourceSha256": {"src/compiler/index.ts": "5ed6a2ec2b8544f2a28b30c8a3b7871d2adc8324b3fc07101b6abc5362cef0cb", "src/compiler/create-compiler.ts": "099d4dc2ab5c2bee55ab06591c104dc29c3190bd57d63ef9f270b091cd127509", "src/compiler/parser/index.ts": "beb950459eb34bd85eec37a7922d5a39f6d4dae8bd63e7c8a3910cd6fb100cb8", "src/compiler/optimizer.ts": "d07689d98ad9b24e1d9b4708dbfa07e9bbca93f866b3d67c86e499f5f10b95df", "src/compiler/codegen/index.ts": "56e3739c7de441ef3c0a3a9edca3acac51b272a32a878300715264630ff4ec9d"}} + ], + "capture": "Use fresh output roots under /Volumes/Workspace/CrabData/compass-evaluations and the pinned runner. Both tools receive the same clean source commit. Retain complete argv, stdout, stderr, timing, graph SHA-256, tool identities, and all failures. Never edit an input checkout. Bound build to 1800 seconds and each query to 60 seconds. Keep the fixed source facts and failed questions in the denominator.", + "review": "The runner's text-required verdict is a preliminary recall proxy only. Independently inspect each answer and graph path against the pinned source call sites, exact owner/declaration identity, direction and one-hop requirement; an indirect structural route, coincidental name, source excerpt without the requested relationship, or ambiguous selection does not receive direct-call credit. Report tool-specific graph omissions, token/response bytes, and competitor advantages. Do not tune questions after seeing outputs or pool this selected panel with earlier development scores.", + "limits": "This source-first held-out-from-development panel covers three languages and four task kinds, not community quality, god-object diagnosis, all programming languages, whole-graph precision, or broad superiority. Those remain separate open requirements." +} diff --git a/benchmarks/agent_query/heldout_three_language_review.md b/benchmarks/agent_query/heldout_three_language_review.md new file mode 100644 index 000000000..45eefaa00 --- /dev/null +++ b/benchmarks/agent_query/heldout_three_language_review.md @@ -0,0 +1,67 @@ +# Three-language held-out code-graph review + +This is a focused source-selected comparison registered before building either +tool's graphs in `heldout_three_language_registration.json`. It covers Anyhow +(Rust), MarkItDown (Python), and Vue (TypeScript), at pinned source commits. The +suite has twelve explain, caller, callee, and path questions. It does not +measure population accuracy, community quality, god-node diagnosis, or broad +language superiority. + +## Capture and correction + +- The first paired capture completed Anyhow and MarkItDown. Compass's Vue + extraction exceeded the registered 1,800-second build limit, so the capture + has no complete twelve-question verdict. Preserve that timeout as a failure. +- A TypeScript receiver-resolution change moves a repeated receiver lookup to + the only return-type branch that uses it. A subsequent Vue-only replay + completed Compass extraction in 75.996 seconds; Graphify took 4.246 seconds. + This is one post-development observation, not a representative speed result + or a paired twelve-question rerun of one frozen Compass revision. +- Both tools failed all four registered Vue text questions in the replay. The + `baseCompile` named function expression at `src/compiler/index.ts:10` is + absent as a declaration in both graphs. Compass assigns the source calls at + lines 14, 16, and 18 to the module; Graphify assigns them to the + `createCompiler` variable. Neither is the source-proven owner. +- A separate Compass query correction makes a unique `Owner::member` suffix + resolve in the same bounded manner as `Owner.member`. On the captured Anyhow + graph, `callers Chain::new` now returns `answered` and includes the direct + `ErrorImpl::chain` call at `src/error.rs:985`. This query was a `no_match` in + the original capture. The correction was made after registration and is not + retroactively counted as a held-out result. + +## Independent source-site review + +`heldout_three_language_edge_review.py` checks thirteen registered direct +call occurrences against exact source owner and target declarations, direction, +and call-site line. Its JSON output retains graph hashes and row-level evidence +outside the repository. The first two repositories use the original paired +graphs; Vue uses the post-change replay. + +| Source | Reviewed calls | Compass exact | Graphify exact | Finding | +| --- | ---: | ---: | ---: | --- | +| Anyhow | 2 | 2 | 0 | Graphify links the same-named `chain` and `new` calls to wrong declarations. | +| MarkItDown | 8 | 8 | 7 | Graphify omits one repeated `convert_local` call occurrence. | +| Vue | 3 | 0 | 0 | Both omit the `baseCompile` source declaration. | +| Total | 13 | 10 | 7 | Selected sites only; no whole-graph precision estimate. | + +Graphify's MarkItDown graph still contains the direct relationships for the +other seven occurrences. Its short-name CLI queries collided on several +methods, while exact-ID controls recovered some answers. Exact-ID controls +also showed that its path command did not recover the direct `convert_stream` +to `_convert` route despite the graph edge. These are distinct graph and query +findings. The runner's text-required verdict is only a recall proxy and is not +used as the final source-supported score. + +## Remaining work + +1. Publish named function expressions and their calls under the correct + lexical owner, with ambiguity and shadowing regression cases; replay Vue. +2. Run a fresh full twelve-question panel with one frozen Compass revision, + independently grade every answer, and retain complete raw artifacts. +3. Extend source-site and navigation review across more languages and assess + community and god-node tasks before claiming overall superiority. + +The earlier audit's raw external captures are not present on the currently +mounted volume. Its committed summaries remain, but those original outputs +cannot currently be replayed from retained artifacts. This new panel's raw +captures and review JSON are retained on the mounted workspace volume. diff --git a/benchmarks/agent_query/heldout_three_language_suite.toml b/benchmarks/agent_query/heldout_three_language_suite.toml new file mode 100644 index 000000000..ccf8fc366 --- /dev/null +++ b/benchmarks/agent_query/heldout_three_language_suite.toml @@ -0,0 +1,187 @@ +# Source-first development panel registered before either tool builds these graphs. +# The repositories were absent from the existing Compass/Graphify audit. These +# selected facts are not a random sample or a population accuracy estimate. +schema = "compass.agent-query-suite/1" + +[[repository]] +name = "anyhow-heldout" +language = "Rust" +url = "https://github.com/dtolnay/anyhow.git" +commit = "c63b279f3f4af2b02ca6267d9eb47d6d10497f69" + +[[repository.anchor]] +file = "src/error.rs" +line = 452 +symbol = "root_cause" +judgment = "Error::root_cause starts at src/error.rs:452." + +[[repository.anchor]] +file = "src/chain.rs" +line = 28 +symbol = "new" +judgment = "Chain::new starts at src/chain.rs:28." + +[[repository.question]] +id = "anyhow-explain-root-cause" +kind = "explain" +subject = "Error::root_cause declaration" +compass = ["explain", "root_cause"] +graphify = ["explain", ".root_cause()"] +expect = "answer" +required = ["error.rs", "452"] +judgment = "Error::root_cause starts at src/error.rs:452." + +[[repository.question]] +id = "anyhow-callees-root-cause" +kind = "callees" +subject = "direct internal call of Error::root_cause" +compass = ["callees", "root_cause"] +graphify = ["explain", ".root_cause()"] +expect = "answer" +required = ["chain"] +judgment = "Error::root_cause calls self.chain at src/error.rs:453; iterator last and unwrap are separate library calls." + +[[repository.question]] +id = "anyhow-callers-chain-new" +kind = "callers" +subject = "direct local caller of Chain::new" +compass = ["callers", "Chain::new"] +graphify = ["affected", "Chain.new()", "--depth", "1"] +expect = "answer" +required = ["chain"] +judgment = "ErrorImpl::chain calls Chain::new at src/error.rs:985; other same-named chain methods do not substitute for this caller." + +[[repository.question]] +id = "anyhow-path-impl-chain-new" +kind = "path" +subject = "ErrorImpl::chain to Chain::new" +compass = ["path", "ErrorImpl::chain", "Chain::new"] +graphify = ["path", "ErrorImpl.chain()", "Chain.new()", "--undirected"] +expect = "answer" +required = ["chain", "new"] +forbidden = ["NO PATH FOUND", "No path found"] +judgment = "A direct source call from ErrorImpl::chain to Chain::new occurs at src/error.rs:985; indirect or unrelated-name paths receive no source-supported credit." + +[[repository]] +name = "markitdown-heldout" +language = "Python" +url = "https://github.com/microsoft/markitdown.git" +commit = "945314a45ddbe02935f2fd287b797dc0ba4a01e4" + +[[repository.anchor]] +file = "packages/markitdown/src/markitdown/_markitdown.py" +line = 141 +symbol = "MarkItDown" +judgment = "MarkItDown starts at _markitdown.py:141." + +[[repository.anchor]] +file = "packages/markitdown/src/markitdown/_markitdown.py" +line = 322 +symbol = "convert" +judgment = "MarkItDown.convert starts at _markitdown.py:322." + +[[repository.anchor]] +file = "packages/markitdown/src/markitdown/_markitdown.py" +line = 606 +symbol = "_convert" +judgment = "MarkItDown._convert starts at _markitdown.py:606." + +[[repository.question]] +id = "markitdown-explain-convert" +kind = "explain" +subject = "MarkItDown.convert declaration" +compass = ["explain", "MarkItDown.convert"] +graphify = ["explain", ".convert()"] +expect = "answer" +required = ["_markitdown.py", "322"] +judgment = "The requested convert is MarkItDown.convert at _markitdown.py:322, not a converter subclass method." + +[[repository.question]] +id = "markitdown-callees-convert" +kind = "callees" +subject = "direct local dispatch callees of MarkItDown.convert" +compass = ["callees", "MarkItDown.convert"] +graphify = ["explain", ".convert()"] +expect = "answer" +required = ["convert_uri", "convert_local", "convert_response", "convert_stream"] +judgment = "MarkItDown.convert directly calls the four named dispatch methods at lines 347, 349/352, 355 and 362." + +[[repository.question]] +id = "markitdown-callers-private-convert" +kind = "callers" +subject = "direct MarkItDown callers of _convert" +compass = ["callers", "MarkItDown._convert"] +graphify = ["affected", "._convert()", "--depth", "1"] +expect = "answer" +required = ["convert_local", "convert_stream", "convert_response"] +judgment = "MarkItDown.convert_local, convert_stream and convert_response call self._convert at lines 403, 450 and 604." + +[[repository.question]] +id = "markitdown-path-local-private" +kind = "path" +subject = "MarkItDown.convert_local to MarkItDown._convert" +compass = ["path", "MarkItDown.convert_local", "MarkItDown._convert"] +graphify = ["path", ".convert_local()", "._convert()", "--undirected"] +expect = "answer" +required = ["convert_local", "_convert"] +forbidden = ["NO PATH FOUND", "No path found"] +judgment = "A direct source call occurs at _markitdown.py:403; an indirect container route is not a direct-call answer." + +[[repository]] +name = "vue-heldout" +language = "TypeScript" +url = "https://github.com/vuejs/vue.git" +commit = "9e88707940088cb1f4cd7dd210c9168a50dc347c" + +[[repository.anchor]] +file = "src/compiler/index.ts" +line = 10 +symbol = "baseCompile" +judgment = "The default compiler's baseCompile callback starts at src/compiler/index.ts:10." + +[[repository.anchor]] +file = "src/compiler/codegen/index.ts" +line = 57 +symbol = "generate" +judgment = "The compiler code generator starts at src/compiler/codegen/index.ts:57." + +[[repository.question]] +id = "vue-explain-base-compile" +kind = "explain" +subject = "default baseCompile callback declaration" +compass = ["explain", "baseCompile"] +graphify = ["explain", "baseCompile()"] +expect = "answer" +required = ["compiler/index.ts", "10"] +judgment = "The callback passed to createCompilerCreator starts at src/compiler/index.ts:10." + +[[repository.question]] +id = "vue-callees-base-compile" +kind = "callees" +subject = "direct compiler-stage calls of baseCompile" +compass = ["callees", "baseCompile"] +graphify = ["explain", "baseCompile()"] +expect = "answer" +required = ["parse", "optimize", "generate"] +judgment = "baseCompile calls parse at line 14, optimize at 16 and generate at 18; optimize is conditional." + +[[repository.question]] +id = "vue-callers-generate" +kind = "callers" +subject = "direct default compiler caller of generate" +compass = ["callers", "generate"] +graphify = ["affected", "generate()", "--depth", "1"] +expect = "answer" +required = ["baseCompile"] +judgment = "baseCompile calls the imported codegen generate at src/compiler/index.ts:18. Other generate functions are not a substitute." + +[[repository.question]] +id = "vue-path-base-generate" +kind = "path" +subject = "baseCompile to codegen generate" +compass = ["path", "baseCompile", "generate"] +graphify = ["path", "baseCompile()", "generate()", "--undirected"] +expect = "answer" +required = ["baseCompile", "generate"] +forbidden = ["NO PATH FOUND", "No path found"] +judgment = "A direct source call occurs at src/compiler/index.ts:18; a different generate name or indirect route is not a supported answer." diff --git a/benchmarks/agent_query/hub_evidence_audit.py b/benchmarks/agent_query/hub_evidence_audit.py new file mode 100644 index 000000000..6481cbca1 --- /dev/null +++ b/benchmarks/agent_query/hub_evidence_audit.py @@ -0,0 +1,175 @@ +"""Audit hub connectivity summaries and optional post-output source-role reviews. + +Counts describe each tool's own stored graph. Missing summaries are unavailable, +not incorrect answers; follow-up/CLI workflows are not scored by this diagnostic. +Source roles do not establish cohesion, responsibility count, or god-object defects. +""" +import argparse +from collections import Counter +import json +from pathlib import Path +import re +from types import SimpleNamespace + +from benchmarks.agent_query.mcp_audit import audit, main as verify_capture +from benchmarks.agent_query.path_audit import read_bounded, MAX_GRAPH_BYTES +from benchmarks.agent_query.runner import _node_anchor, _sha256_file, _verify_source, load_suite + + +def connectivity(graph, tool, identifier): + nodes = {n['id'] for n in graph['nodes']} + if identifier not in nodes: + raise ValueError('unknown hub identity') + directed = graph.get('directed', False) + relations = {} + loops = 0 + for edge in graph['links']: + source, target = edge['source'], edge['target'] + if source not in nodes or target not in nodes or identifier not in (source, target): + continue + relation = edge.get('kind' if tool == 'compass' else 'relation', '') + row = relations.setdefault(relation, dict(relation=relation, edgeRecords=0, + incomingRecords=0, outgoingRecords=0, undirectedRecords=0)) + row['edgeRecords'] += 1 + loops += source == target + if directed: + row['incomingRecords'] += target == identifier + row['outgoingRecords'] += source == identifier + else: + row['undirectedRecords'] += 1 + ordered = sorted(relations.values(), key=lambda row: (-row['edgeRecords'], row['relation'])) + return dict(schema='compass.hub-connectivity/1', directed=directed, + edgeRecords=sum(row['edgeRecords'] for row in ordered), selfLoopRecords=loops, + relations=ordered[:16], omittedRelationKinds=max(0, len(ordered)-16), + omittedRelationRecords=sum(row['edgeRecords'] for row in ordered[16:])) + + +def check_summary(actual, expected): + # Canonical JSON distinguishes boolean counters from integers, unlike ==. + return json.dumps(actual, sort_keys=True) == json.dumps(expected, sort_keys=True) + + +def check_request(request, row): + expected = dict(jsonrpc='2.0', method='tools/call', id=row['response']['id'], + params=dict(name='god_nodes', arguments=row['arguments'])) + if not check_summary(request, expected): + raise ValueError('hub request differs from raw transcript') + + +def check_text_rows(text, rank, expected): + headers = list(re.finditer(r'^ (\d+)\. .* - \d+ edges$', text, re.M)) + matches = [i for i, header in enumerate(headers) if int(header[1]) == rank] + if len(matches) != 1: + return False + position = matches[0] + end = headers[position+1].start() if position+1 < len(headers) else len(text) + block = text[headers[position].end():end].splitlines() + wanted = [f" relation {json.dumps(r['relation'], ensure_ascii=False)}: incoming {r['incomingRecords']}, outgoing {r['outgoingRecords']}, undirected {r['undirectedRecords']}" for r in expected['relations']] + actual = [line for line in block if line.startswith(' relation ')] + totals = f" | incident records: {expected['edgeRecords']} | self-loops: {expected['selfLoopRecords']}" + omitted = [line for line in block if ' additional relation kinds (' in line] + omissions = ([f" {expected['omittedRelationKinds']} additional relation kinds ({expected['omittedRelationRecords']} records) omitted"] + if expected['omittedRelationKinds'] else []) + return actual == wanted and omitted == omissions and any(line.startswith(' kind: ') and line.endswith(totals) for line in block) + + +def check_review(review, node, tool, root): + file, line, _ = _node_anchor(node, tool) + if (review['id'], review['file'], review['line']) != (node['id'], file, line): + raise ValueError('review identity/source differs from captured graph') + path = (root/file).resolve() + path.relative_to(root.resolve()) + data = read_bounded(path, 4 * 1024 * 1024) + if _sha256_file(path) != review['sourceFileSha256']: + raise ValueError('reviewed source file changed') + lines = data.decode().splitlines() + if type(line) is not int or not 1 <= line <= len(lines): + raise ValueError('invalid review source line') + if '\n'.join(lines[line-1:line+3]) != review['sourceText']: + raise ValueError('review excerpt differs from source') + + +def main(args): + verify_capture(SimpleNamespace(run=args.run, output=args.output.with_suffix('.capture.json'))) + run = json.loads(read_bounded(args.run/'run.json')) + source_run = Path(run['sourceRun']) + source = json.loads(read_bounded(source_run/'run.json')) + suite = load_suite(source_run/'suite.toml') + if suite.digest != source['suiteDigest']: + raise ValueError('source suite changed') + reviews = None + if args.reviews: + manifest = json.loads(read_bounded(args.reviews)) + if manifest['schema'] != 'compass.hub-source-review/1' or manifest['inputRunSha256'] != _sha256_file(args.run/'run.json'): + raise ValueError('reviews do not identify this source capture') + reviews = {(r['repository'], r['tool'], r['rank']): r for r in manifest['reviews']} + if len(reviews) != len(manifest['reviews']) or len(reviews) != 100: + raise ValueError('review denominator must contain 100 unique hub entries') + results = [] + for row in run['results']: + if row['question'] != 'hubs': + continue + name, tool = row['repository'], row['tool'] + if row['executionSucceeded']: + identity = row['response']['id'] + request = json.loads(read_bounded(args.run/'raw'/name/tool/f'{identity:02}.request.json')) + check_request(request, row) + repo = next(r for r in source['repositories'] if r['repository'] == name) + graph = json.loads(read_bounded(Path(repo[tool+'Graph']), MAX_GRAPH_BYTES)) + nodes = {n['id']: n for n in graph['nodes']} + if reviews is not None: + pinned = next(r for r in suite.repositories if r.name == name) + _verify_source(pinned, Path(repo['source'])) + expected_source = next(r for r in manifest['sources'] if r['repository'] == name) + if any(repo[k] != expected_source[k] for k in ['commit', 'compassGraphSha256', 'graphifyGraphSha256']): + raise ValueError('review source provenance differs') + checked = audit(row, graph) + entries = row.get('response', {}).get('result', {}).get('structuredContent', {}).get('result', {}).get('nodes', []) + by_rank = {r['rank']: r for r in entries} + hubs = checked.get('hubs', []) + if not row['executionSucceeded'] or len(hubs) != 10: + raise ValueError('capture does not supply the full ten-hub denominator') + for hub in hubs: + result = dict(repository=name, tool=tool, rank=hub['rank'], + label=hub['label'], identityKnown='id' in hub, summaryAvailable=False) + if 'id' in hub: + expected = connectivity(graph, tool, hub['id']) + result.update(id=hub['id'], expected=expected) + actual = by_rank.get(hub['rank'], {}).get('connectivity') + if actual is not None: + result.update(summaryAvailable=True, summaryMatches=check_summary(actual, expected)) + result['textRowsMatch'] = check_text_rows(row['text'], hub['rank'], expected) + if reviews is not None: + review = reviews[name, tool, hub['rank']] + if 'id' in hub: + if review['role'] not in manifest['roles']: + raise ValueError('missing reviewed source role') + check_review(review, nodes[hub['id']], tool, Path(repo['source'])) + result.update(reviewedRole=review['role'], sourceVerified=True) + elif review['role'] is not None: + raise ValueError('ambiguous hub cannot borrow an oracle identity') + else: + result['reviewedRole'] = 'unverified-identity' + results.append(result) + if len(results) != 100: + raise ValueError('expected fifty returned hubs per tool') + report = dict(scope=__doc__, runSha256=_sha256_file(args.run/'run.json'), + auditorSha256=_sha256_file(Path(__file__)), results=results) + if reviews is not None: + report['reviewsSha256'] = _sha256_file(args.reviews) + with args.output.open('x') as stream: + json.dump(report, stream, indent=2) + for tool in ['compass', 'graphify']: + rows = [r for r in results if r['tool'] == tool] + print(tool, dict(total=len(rows), identityKnown=sum(r['identityKnown'] for r in rows), + summaryAvailable=sum(r['summaryAvailable'] for r in rows), + summaryMatches=sum(r.get('summaryMatches', False) for r in rows), + roles=dict(Counter(r.get('reviewedRole', 'not-reviewed') for r in rows)))) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--run', type=Path, required=True) + parser.add_argument('--output', type=Path, required=True) + parser.add_argument('--reviews', type=Path) + main(parser.parse_args()) diff --git a/benchmarks/agent_query/hub_members_eclipse_replay.json b/benchmarks/agent_query/hub_members_eclipse_replay.json new file mode 100644 index 000000000..43d86b845 --- /dev/null +++ b/benchmarks/agent_query/hub_members_eclipse_replay.json @@ -0,0 +1,121 @@ +{ + "binarySha256": "668fd1c8c145241387d04a35eb319eec09825e3d5bd9c031c2cc6863a45c1d04", + "compilerFieldReviewSha256": "0072926565aa09100246f47722d009082d4c5d646d92e5f3dcdb55a7892a8f24", + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "independentSourceChecks": [ + { + "compilerBoundOwnFieldSites": 0, + "graphRank": 599, + "matchesSelectedSourceCounts": true, + "sampleId": 6391534, + "sourceFields": 0, + "sourceMethodsAndConstructors": 7, + "storedMemberEvidence": { + "ambiguousDirectMembers": 0, + "directFields": 0, + "directMethods": 7, + "distinctOwnFieldPairs": 0, + "methodsTouchingOwnFields": 0, + "ownFieldReferenceRecords": 0, + "schema": "compass.hub-members/1", + "sourceCoverage": "unverified" + } + }, + { + "compilerBoundOwnFieldSites": 55, + "graphRank": 1173, + "matchesSelectedSourceCounts": true, + "sampleId": 6374724, + "sourceFields": 11, + "sourceMethodsAndConstructors": 15, + "storedMemberEvidence": { + "ambiguousDirectMembers": 0, + "directFields": 11, + "directMethods": 15, + "distinctOwnFieldPairs": 31, + "methodsTouchingOwnFields": 11, + "ownFieldReferenceRecords": 55, + "schema": "compass.hub-members/1", + "sourceCoverage": "unverified" + } + }, + { + "compilerBoundOwnFieldSites": 15, + "graphRank": 2641, + "matchesSelectedSourceCounts": true, + "sampleId": 6413795, + "sourceFields": 5, + "sourceMethodsAndConstructors": 15, + "storedMemberEvidence": { + "ambiguousDirectMembers": 0, + "directFields": 5, + "directMethods": 15, + "distinctOwnFieldPairs": 13, + "methodsTouchingOwnFields": 7, + "ownFieldReferenceRecords": 15, + "schema": "compass.hub-members/1", + "sourceCoverage": "unverified" + } + } + ], + "isError": false, + "limitations": [ + "Only three of four rated Eclipse classes occur in the requested top 5,000; no alternative identity or rank was assigned to the fourth.", + "The compiler-own-field census is selected and incomplete under missing project dependencies. Equality of selected counts does not validate all source field accesses.", + "This is a post-change development replay, not a preregistered god-object classifier or a new Graphify comparison." + ], + "memberSourceReviewSha256": "edff7c60649a6d85389d94b04bfe805f0b046d0667603135e00b56b61c001756", + "ratedClassesFound": [ + { + "class": "SimpleValueProperty", + "memberEvidence": { + "ambiguousDirectMembers": 0, + "directFields": 0, + "directMethods": 7, + "distinctOwnFieldPairs": 0, + "methodsTouchingOwnFields": 0, + "ownFieldReferenceRecords": 0, + "schema": "compass.hub-members/1", + "sourceCoverage": "unverified" + }, + "rank": 599, + "sampleId": 6391534 + }, + { + "class": "BindingModel", + "memberEvidence": { + "ambiguousDirectMembers": 0, + "directFields": 11, + "directMethods": 15, + "distinctOwnFieldPairs": 31, + "methodsTouchingOwnFields": 11, + "ownFieldReferenceRecords": 55, + "schema": "compass.hub-members/1", + "sourceCoverage": "unverified" + }, + "rank": 1173, + "sampleId": 6374724 + }, + { + "class": "DeprecatedUIWizardsAuto", + "memberEvidence": { + "ambiguousDirectMembers": 0, + "directFields": 5, + "directMethods": 15, + "distinctOwnFieldPairs": 13, + "methodsTouchingOwnFields": 7, + "ownFieldReferenceRecords": 15, + "schema": "compass.hub-members/1", + "sourceCoverage": "unverified" + }, + "rank": 2641, + "sampleId": 6413795 + } + ], + "rawHubResponseSha256": "8637abebcf32f760450d9aff5b5f7d2f39699e4d58502043307f4cad51747c60", + "requested": 5000, + "responseError": null, + "returned": 5000, + "schema": "compass.hub-members-eclipse-diagnostic/1", + "scope": "Post-change public MCP read on frozen Eclipse graph; no classifier or comparison score." +} diff --git a/benchmarks/agent_query/hub_members_replay.py b/benchmarks/agent_query/hub_members_replay.py new file mode 100644 index 000000000..34bd74e02 --- /dev/null +++ b/benchmarks/agent_query/hub_members_replay.py @@ -0,0 +1,107 @@ +"""Replay additive hub-member evidence on frozen three-language MCP graphs.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +from pathlib import Path +import subprocess + +from benchmarks.agent_query.mcp_transport import StdioMcp + + +def sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as stream: + for block in iter(lambda: stream.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def capture(args: argparse.Namespace) -> None: + registration = json.loads(args.registration.read_text()) + source_run = json.loads((args.source_run / "run.json").read_text()) + prior_run = json.loads((args.prior_hubs / "run.json").read_text()) + if registration["schema"] != "compass.source-first-hub-three-language-registration/1": + raise ValueError("unsupported registration") + if source_run["suiteDigest"] != registration["sourceSuiteSha256"] or not prior_run["complete"]: + raise ValueError("source or prior hub run changed") + prepared = [] + for registered in registration["repositories"]: + name = registered["name"] + source = next(item for item in source_run["repositories"] if item["repository"] == name) + prior = next(item for item in prior_run["results"] if item["repository"] == name and item["tool"] == "compass") + root = Path(source["source"]) + head = subprocess.run(["git", "-C", str(root), "rev-parse", "HEAD"], + check=True, capture_output=True, text=True).stdout.strip() + dirty = subprocess.run(["git", "-C", str(root), "status", "--porcelain=v1"], + check=True, capture_output=True, text=True).stdout.strip() + graph = Path(source["compassGraph"]) + if head != registered["commit"] or dirty or sha256(graph) != registered["graphSha256"]["compass"]: + raise ValueError(f"{name} source or graph changed") + if not prior["executionSucceeded"] or prior["arguments"] != {"top_n": 100}: + raise ValueError(f"{name} prior public hub response unavailable") + prepared.append((registered, root, graph, prior)) + args.output_dir.mkdir(parents=True, exist_ok=False) + report = {"schema": "compass.hub-members-three-language-replay/1", + "scope": "Post-change public MCP development replay. Prior identities, ranks, degrees, anchors and connectivity must remain identical. Source roles are not defect labels.", + "registrationSha256": sha256(args.registration), + "sourceRunSha256": sha256(args.source_run / "run.json"), + "priorHubRunSha256": sha256(args.prior_hubs / "run.json"), + "binarySha256": sha256(args.candidate), + "repetitions": 2, "repositories": []} + for registered, root, graph, prior in prepared: + name = registered["name"] + old = prior["response"]["result"]["structuredContent"]["result"]["nodes"] + observed = [] + for repetition in (1, 2): + directory = args.output_dir / "raw" / name / str(repetition) + with StdioMcp([str(args.candidate), "serve", "--graph", str(graph), + "--transport", "stdio"], root, directory, + timeout=registration["toolRequest"]["timeoutSeconds"], + max_bytes=registration["toolRequest"]["maxResponseBytes"]) as session: + session.initialize() + listing = session.send("tools/list", {}) + if "god_nodes" not in {tool["name"] for tool in listing["result"]["tools"]}: + raise ValueError("candidate did not advertise god_nodes") + response = session.send("tools/call", {"name": "god_nodes", "arguments": {"top_n": 100}}) + if "error" in response or response["result"].get("isError", False): + raise ValueError(f"{name} hub call failed") + rows = response["result"]["structuredContent"]["result"]["nodes"] + if len(rows) != len(old) or [{key: value for key, value in row.items() + if key != "memberEvidence"} for row in rows] != old: + raise ValueError(f"{name} legacy hub projection changed") + for row in rows: + members = row["memberEvidence"] + if members is not None and (members["schema"] != "compass.hub-members/1" + or members["sourceCoverage"] != "unverified"): + raise ValueError("unsupported member evidence") + observed.append(rows) + if observed[0] != observed[1]: + raise ValueError(f"{name} repeated hub output differs") + rows = observed[0] + witnesses = [] + for witness in registered["witnesses"]: + matches = [row for row in rows if row["label"] == witness["symbol"]] + witnesses.append({"symbol": witness["symbol"], "returnedLabelMatches": len(matches), + "rank": matches[0]["rank"] if len(matches) == 1 else None, + "memberEvidence": matches[0]["memberEvidence"] if len(matches) == 1 else None}) + report["repositories"].append({"repository": name, "graphSha256": sha256(graph), + "unchangedLegacyRows": len(rows), + "memberEvidenceRows": sum(row["memberEvidence"] is not None for row in rows), + "witnesses": witnesses}) + print(name, "unchanged rows", len(rows), "member evidence rows", + report["repositories"][-1]["memberEvidenceRows"], flush=True) + args.report.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--source-run", type=Path, required=True) + parser.add_argument("--prior-hubs", type=Path, required=True) + parser.add_argument("--candidate", type=Path, required=True) + parser.add_argument("--output-dir", type=Path, required=True) + parser.add_argument("--report", type=Path, required=True) + capture(parser.parse_args()) diff --git a/benchmarks/agent_query/hub_members_three_language_replay.json b/benchmarks/agent_query/hub_members_three_language_replay.json new file mode 100644 index 000000000..5693ab54c --- /dev/null +++ b/benchmarks/agent_query/hub_members_three_language_replay.json @@ -0,0 +1,98 @@ +{ + "binarySha256": "668fd1c8c145241387d04a35eb319eec09825e3d5bd9c031c2cc6863a45c1d04", + "priorHubRunSha256": "4ce35f4a7dbd7218cfc6ee9e6120b5f75e712bd920d29501c70c5ed5bc6c7a0b", + "registrationSha256": "da554737c494f51eb15f4b7a8cce8a455382df2c228b97754a88dc46105fb586", + "repetitions": 2, + "repositories": [ + { + "graphSha256": "8dd89c5a60e004c098104ee644b02ddb2d6a64698956ac7f25cdce7c1871a2db", + "memberEvidenceRows": 33, + "repository": "litestream", + "unchangedLegacyRows": 100, + "witnesses": [ + { + "memberEvidence": { + "ambiguousDirectMembers": 0, + "directFields": 0, + "directMethods": 27, + "distinctOwnFieldPairs": 0, + "methodsTouchingOwnFields": 0, + "ownFieldReferenceRecords": 0, + "schema": "compass.hub-members/1", + "sourceCoverage": "unverified" + }, + "rank": 10, + "returnedLabelMatches": 1, + "symbol": "Store" + }, + { + "memberEvidence": null, + "rank": null, + "returnedLabelMatches": 0, + "symbol": "HeartbeatClient" + } + ] + }, + { + "graphSha256": "1dc5712533cce50634e91994fb6bf888ea35eb0b6b3818432da69518652ac09a", + "memberEvidenceRows": 34, + "repository": "fastapi", + "unchangedLegacyRows": 100, + "witnesses": [ + { + "memberEvidence": { + "ambiguousDirectMembers": 0, + "directFields": 0, + "directMethods": 23, + "distinctOwnFieldPairs": 0, + "methodsTouchingOwnFields": 0, + "ownFieldReferenceRecords": 0, + "schema": "compass.hub-members/1", + "sourceCoverage": "unverified" + }, + "rank": 1, + "returnedLabelMatches": 1, + "symbol": "FastAPI" + }, + { + "memberEvidence": { + "ambiguousDirectMembers": 0, + "directFields": 0, + "directMethods": 3, + "distinctOwnFieldPairs": 0, + "methodsTouchingOwnFields": 0, + "ownFieldReferenceRecords": 0, + "schema": "compass.hub-members/1", + "sourceCoverage": "unverified" + }, + "rank": 31, + "returnedLabelMatches": 1, + "symbol": "DefaultPlaceholder" + } + ] + }, + { + "graphSha256": "6db996ad031824f7b476c16145cc94287738eaba1e63f1802011f70559cfd1d6", + "memberEvidenceRows": 26, + "repository": "celld", + "unchangedLegacyRows": 100, + "witnesses": [ + { + "memberEvidence": null, + "rank": null, + "returnedLabelMatches": 0, + "symbol": "PeerAuth" + }, + { + "memberEvidence": null, + "rank": null, + "returnedLabelMatches": 0, + "symbol": "CellActivityGuard" + } + ] + } + ], + "schema": "compass.hub-members-three-language-replay/1", + "scope": "Post-change public MCP development replay. Prior identities, ranks, degrees, anchors and connectivity must remain identical. Source roles are not defect labels.", + "sourceRunSha256": "f28a92dd08363607f534632471e15f61e7f3d6cd3ce34e479ab04ff09ebdba4c" +} diff --git a/benchmarks/agent_query/hub_navigation.py b/benchmarks/agent_query/hub_navigation.py new file mode 100644 index 000000000..4cdfd6804 --- /dev/null +++ b/benchmarks/agent_query/hub_navigation.py @@ -0,0 +1,169 @@ +"""One-follow-up hub navigation diagnostic; selectors come only from tool output. + +This development diagnostic checks displayed adjacency against stored graphs, +not source precision or god-object design quality. See COVERAGE_PLAN.md. +""" +import argparse +from collections import Counter +import json +from pathlib import Path +import re +import shutil +import time +from types import SimpleNamespace + +from benchmarks.agent_query.mcp_audit import audit, label, main as audit_capture +from benchmarks.agent_query.mcp_compare import verify_environment +from benchmarks.agent_query.mcp_transport import StdioMcp +from benchmarks.agent_query.path_audit import read_bounded, MAX_GRAPH_BYTES +from benchmarks.agent_query.runner import _sha256_file, _verify_source, load_suite + + +def selectors(row): + """Never consult a graph or inferred degree to choose a selector.""" + structured = row['response'].get('result', {}).get('structuredContent') + if structured is not None: + if structured.get('schema') != 'compass.mcp.tool-result/1' or structured.get('result', {}).get('schema') != 'compass.mcp.hubs/1': + raise ValueError('unsupported structured hub response') + return [(n['rank'], n['id'], 'explicit-id') for n in structured['result']['nodes']] + return [(int(rank), name, 'display-label') for rank, name in + re.findall(r'^ (\d+)\. (.*) - \d+ edges$', row['text'], re.M)] + + +def server_paths(run): + # A venv's Python symlink must not be replaced with its resolved interpreter: + # doing so discards that environment's site-packages. + paths = {} + for tool in ['compass', 'graphify']: + choices = {r['argv'][0] for r in run['results'] if r['tool'] == tool} + if len(choices) != 1: + raise ValueError('capture uses inconsistent server launch paths') + paths[tool] = next(iter(choices)) + return paths + + +def check_navigation(text, graph, tool, seed): + """Seed is oracle identity, never a substituted request selector.""" + nodes = {n['id']: n for n in graph['nodes']} + if seed not in nodes: + return {'identityKnown': False, 'navigationResolved': False, + 'ambiguityReported': 'ambig' in text.lower()} + expected = set() + for edge in graph['links']: + a, b = edge['source'], edge['target'] + if a == seed: + expected.add(('-->', b)) + if b == seed: + expected.add(('<--', a)) + expected_labels = Counter((direction, label(nodes[n], tool)) for direction, n in expected) + actual = Counter(re.findall(r'^ (-->|<--) (.*?) \[[^\]]*\] \[[^\]]*\]', text, re.M)) + header = text.splitlines()[0] if text else '' + header_matches = header == f'Neighbors of {label(nodes[seed], tool)}:' + return {'identityKnown': True, 'seed': seed, + 'expectedDisplayedNeighbors': sum(expected_labels.values()), + 'returnedDisplayedNeighbors': sum(actual.values()), + 'displayedAdjacencyMatches': expected_labels == actual, + 'navigationResolved': header_matches and expected_labels == actual} + + +def main(args): + args.output.mkdir(parents=True, exist_ok=False) + # Verify the source capture, graphs, and complete raw RPC transcripts first. + audit_capture(SimpleNamespace(run=args.run, output=args.output/'input-audit.json')) + run = json.loads(read_bounded(args.run/'run.json')) + binaries = server_paths(run) + source_run = Path(run['sourceRun']) + source = json.loads(read_bounded(source_run/'run.json')) + suite = load_suite(source_run/'suite.toml') + if suite.digest != source['suiteDigest']: + raise ValueError('source suite changed') + environment = SimpleNamespace( + graphify_python=Path(binaries['graphify']), + graphify_environment=args.run/'graphify-environment.json') + verify_environment(environment) + for record in run['servers'].values(): + if _sha256_file(Path(record['executable'])) != record['executableSha256']: + raise ValueError('captured server executable changed') + shutil.copy2(__file__, args.output/'hub_navigation.py') + report = {'scope': __doc__, 'inputRun': str(args.run.resolve()), + 'inputRunSha256': _sha256_file(args.run/'run.json'), + 'collectorSha256': _sha256_file(Path(__file__)), 'results': [], 'complete': False} + report['supportFiles'] = {} + for name in ['mcp_audit.py', 'mcp_transport.py', 'mcp_compare.py', 'runner.py', 'path_audit.py', 'COVERAGE_PLAN.md']: + path = Path(__file__).with_name(name) + shutil.copy2(path, args.output/name) + report['supportFiles'][name] = _sha256_file(path) + def save(): + (args.output/'run.json').write_text(json.dumps(report, indent=2)+'\n') + save() + for row in run['results']: + if row['question'] != 'hubs': + continue + if not row['executionSucceeded']: + raise ValueError('hub question failed; retain it as an incomplete input workflow') + name, tool = row['repository'], row['tool'] + repo = next(r for r in source['repositories'] if r['repository'] == name) + pinned = next(r for r in suite.repositories if r.name == name) + root, graph_path = Path(repo['source']), Path(repo[tool+'Graph']) + _verify_source(pinned, root) + digest = _sha256_file(graph_path) + if digest != repo[tool+'GraphSha256']: + raise ValueError('input graph changed') + graph = json.loads(read_bounded(graph_path, MAX_GRAPH_BYTES)) + checked = audit(row, graph) + choices = selectors(row) + if len(choices) != 10 or len(checked['hubs']) != 10: + raise ValueError('expected ten captured hubs; input workflow incomplete') + binary = binaries[tool] + argv = [binary, 'serve'] if tool == 'compass' else [binary, '-m', 'graphify.serve'] + argv += ['--graph', str(graph_path), '--transport', 'stdio'] + failure = None + with StdioMcp(argv, root, args.output/'raw'/name/tool) as session: + try: + session.initialize() + except (OSError, RuntimeError, ValueError, TimeoutError) as error: + failure = str(error) + for (rank, selector, mode), oracle in zip(choices, checked['hubs']): + params = {'label': selector} + if tool == 'graphify': + params['token_budget'] = 262144 + result = {'repository': name, 'tool': tool, 'rank': rank, 'selectorMode': mode, + 'arguments': params, 'argv': argv, 'graphSha256': digest, + 'executionSucceeded': False, 'navigationResolved': False} + if failure is not None: + result['captureError'] = f'connection unavailable: {failure}' + else: + started = time.monotonic() + try: + packet = session.send('tools/call', {'name': 'get_neighbors', 'arguments': params}) + answer = packet.get('result', {}) + text = '\n'.join(c['text'] for c in answer.get('content', []) if c.get('type') == 'text') + result.update(response=packet, text=text, textBytes=len(text.encode()), + executionSucceeded='error' not in packet and not answer.get('isError', False)) + raw = session.directory/f'{packet["id"]:02}.response.jsonl' + result['wireResponseBytes'] = raw.stat().st_size + if result['executionSucceeded']: + result.update(check_navigation(text, graph, tool, oracle.get('id'))) + except (OSError, RuntimeError, ValueError, TimeoutError) as error: + failure = str(error) + result['captureError'] = failure + result['elapsedSeconds'] = time.monotonic() - started + report['results'].append(result) + save() + print(name, tool, rank, result['navigationResolved'], flush=True) + _verify_source(pinned, root) + if _sha256_file(graph_path) != digest: + raise ValueError('graph changed during navigation') + verify_environment(environment) + for record in run['servers'].values(): + if _sha256_file(Path(record['executable'])) != record['executableSha256']: + raise ValueError('server executable changed during navigation') + report['complete'] = True + save() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--run', type=Path, required=True) + parser.add_argument('--output', type=Path, required=True) + main(parser.parse_args()) diff --git a/benchmarks/agent_query/hub_role_reviews.json b/benchmarks/agent_query/hub_role_reviews.json new file mode 100644 index 000000000..f3a7f5096 --- /dev/null +++ b/benchmarks/agent_query/hub_role_reviews.json @@ -0,0 +1,1099 @@ +{ + "schema": "compass.hub-source-review/1", + "scope": "Post-output source-role census of the original fifty returned MCP hubs per tool. Manually reviewed roles describe declarations/containers, not cohesion or god-object defects; unresolved display identities stay unknown. Different returned sets prohibit a shared precision score.", + "roles": { + "type": "Production type declaration, including class, struct, alias, interface, and public testing API types.", + "callable": "Production function or method.", + "test-helper": "Callable used by repository tests.", + "test-type": "Test suite class.", + "source-module": "Whole source-file module container.", + "test-module": "Whole test-file module container.", + "example-callable": "Function in an example application.", + "benchmark-callable": "Benchmark support function.", + "generic-implementation": "Implementation block whose target is its own generic parameter.", + "trait-implementation": "Trait implementation block, not a new type declaration." + }, + "inputRunSha256": "b92037e13a0e4300e7981e71e31cb34c109cf6318c9ca33ef74c6eeb7f046889", + "sources": [ + { + "repository": "cobra", + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "compassGraphSha256": "6f862024bd68b88b734a43421a21cc2074a94ab7d68cc8857d59609112c9c7db", + "graphifyGraphSha256": "218aa21e02fad4506206c34acfc6d9ff58a2a0052615d92e4377c74bf977a937" + }, + { + "repository": "flask", + "commit": "d73fa1cdcbd8b1465c151db8924ba58b1dd14e35", + "compassGraphSha256": "227fe2d1f74cf835caa3ec15897f05544832fbf7f394e1c02e5134101a07c3ad", + "graphifyGraphSha256": "ca35435af286c5c565fc66f55de569c2e3235f75c902182290ee15603ff103cc" + }, + { + "repository": "gson", + "commit": "15ca7360379cf3c1502b59981569050489f2d73e", + "compassGraphSha256": "5856ddc99ec4025c9e36d128783e6e7393f45af76f617caa38fd6938aca23ea7", + "graphifyGraphSha256": "92471ab8f5bb5d34aedddd2263fa24a43ae4ed31b34d06c8d433fe0f0dada447" + }, + { + "repository": "zod", + "commit": "d2b135cfb7a3582b9eb515756b9166bcb9521f4a", + "compassGraphSha256": "e33192de01f403cfde6c0030ba219c8e24fd26b561b984b6b710a46b3cc981e8", + "graphifyGraphSha256": "c0f6d021616326da6b7daf5105b3b996c0bb4ba17c0bf54a062f2e692147b01a" + }, + { + "repository": "axum", + "commit": "af1345b53a259b0990be1ff853f9b56c05040ef7", + "compassGraphSha256": "2cc12d5060c83389c077e4eade892991fa8f7021b59d8f6f1dc98c14c2109812", + "graphifyGraphSha256": "6ed791a771190e98ba2905e08480a9fa6ed733f46d56212ae3a4c90018d79b52" + } + ], + "reviews": [ + { + "repository": "cobra", + "tool": "compass", + "rank": 1, + "role": "type", + "id": "sha256:697caebc2e9b08da3f310e1054e66318c27899d93c59f22ceb9c3eafe56e6bf1", + "file": "command.go", + "line": 54, + "sourceText": "type Command struct {\n\t// Use is the one-line usage message.\n\t// Recommended syntax is as follows:\n\t// [ ] identifies an optional argument. Arguments that are not enclosed in brackets are required.", + "sourceFileSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90" + }, + { + "repository": "cobra", + "tool": "compass", + "rank": 2, + "role": "test-helper", + "id": "sha256:65d81c33651a9df51b41c907a161e2657c76cb30b22149638c54940353e420df", + "file": "command_test.go", + "line": 32, + "sourceText": "func executeCommand(root *Command, args ...string) (output string, err error) {\n\t_, output, err = executeCommandC(root, args...)\n\treturn output, err\n}", + "sourceFileSha256": "710a689a1512af3ca376a0aaaa2c0b77d10ea174f7e27db85c2f2316a087d0f3" + }, + { + "repository": "cobra", + "tool": "compass", + "rank": 3, + "role": "callable", + "id": "sha256:158d70a6b4febb5205ba5b2a13ee8f6f421942b66caa59ab479bf5b648f87819", + "file": "command.go", + "line": 1342, + "sourceText": "func (c *Command) AddCommand(cmds ...*Command) {\n\tfor i, x := range cmds {\n\t\tif cmds[i] == c {\n\t\t\tpanic(\"Command can't be a child of itself\")", + "sourceFileSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90" + }, + { + "repository": "cobra", + "tool": "compass", + "rank": 4, + "role": "callable", + "id": "sha256:63fbc5cb0c7c405f776df1f05df085d1ab154255d84d03445818b33850cb2477", + "file": "command.go", + "line": 1688, + "sourceText": "func (c *Command) Flags() *flag.FlagSet {\n\tif c.flags == nil {\n\t\tc.flags = flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\t\tif c.flagErrorBuf == nil {", + "sourceFileSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90" + }, + { + "repository": "cobra", + "tool": "compass", + "rank": 5, + "role": "test-helper", + "id": "sha256:0dd5fd58be0e00f763db58bd16189e0f9624ced373517133c92e04876c19642b", + "file": "args_test.go", + "line": 23, + "sourceText": "func getCommand(args PositionalArgs, withValid bool) *Command {\n\tc := &Command{\n\t\tUse: \"c\",\n\t\tArgs: args,", + "sourceFileSha256": "37058f718eb5ffc7d70f917d694c04aa11fc39ba32ad8d1db9766e9d8eb009ae" + }, + { + "repository": "cobra", + "tool": "compass", + "rank": 6, + "role": "test-helper", + "id": "sha256:acfa353e8d2a1aa41d298243a03683ef41d5b8dfb2a38ff65b0b0d3b29ea6656", + "file": "command_test.go", + "line": 74, + "sourceText": "func checkStringContains(t *testing.T, got, expected string) {\n\tif !strings.Contains(got, expected) {\n\t\tt.Errorf(\"Expected to contain: \\n %v\\nGot:\\n %v\\n\", expected, got)\n\t}", + "sourceFileSha256": "710a689a1512af3ca376a0aaaa2c0b77d10ea174f7e27db85c2f2316a087d0f3" + }, + { + "repository": "cobra", + "tool": "compass", + "rank": 7, + "role": "callable", + "id": "sha256:992b92738e6eb358b0541f388d99cae179b9ad61118a3cb07ef768e10fe82084", + "file": "command.go", + "line": 1541, + "sourceText": "func (c *Command) Name() string {\n\tname := c.Use\n\ti := strings.Index(name, \" \")\n\tif i >= 0 {", + "sourceFileSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90" + }, + { + "repository": "cobra", + "tool": "compass", + "rank": 8, + "role": "callable", + "id": "sha256:3de7fbfb848d67edf0c0628b363cd3f581648e801a6fa3145fba80f7e6ee086c", + "file": "command.go", + "line": 1775, + "sourceText": "func (c *Command) PersistentFlags() *flag.FlagSet {\n\tif c.pflags == nil {\n\t\tc.pflags = flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\t\tif c.flagErrorBuf == nil {", + "sourceFileSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90" + }, + { + "repository": "cobra", + "tool": "compass", + "rank": 9, + "role": "type", + "id": "sha256:6432407b3f9310e3adc201a8d8f3fae8aac5b8e20100a2dc20ed7d60178aad93", + "file": "completions.go", + "line": 45, + "sourceText": "type ShellCompDirective int\n\ntype flagCompError struct {\n\tsubCommand string", + "sourceFileSha256": "b28a4f6c509acde7367323e835cfb4f4939fe656dd3214320d76f53e91743c89" + }, + { + "repository": "cobra", + "tool": "compass", + "rank": 10, + "role": "test-helper", + "id": "sha256:e8ccb6d6f925b6b6b7d4c2e695e22c4347403a5aab92d20cc6ae14b57e8457fd", + "file": "cobra_test.go", + "line": 27, + "sourceText": "func assertNoErr(t *testing.T, e error) {\n\tif e != nil {\n\t\tt.Error(e)\n\t}", + "sourceFileSha256": "bb9a5a989701f8df0d8797ceb0365ce3076052fcaa190aa8989b3b479bff6e09" + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 1, + "role": "test-helper", + "id": "command_test_executecommand", + "file": "command_test.go", + "line": 32, + "sourceText": "func executeCommand(root *Command, args ...string) (output string, err error) {\n\t_, output, err = executeCommandC(root, args...)\n\treturn output, err\n}", + "sourceFileSha256": "710a689a1512af3ca376a0aaaa2c0b77d10ea174f7e27db85c2f2316a087d0f3" + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 2, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 3, + "role": "test-helper", + "id": "args_test_getcommand", + "file": "args_test.go", + "line": 23, + "sourceText": "func getCommand(args PositionalArgs, withValid bool) *Command {\n\tc := &Command{\n\t\tUse: \"c\",\n\t\tArgs: args,", + "sourceFileSha256": "37058f718eb5ffc7d70f917d694c04aa11fc39ba32ad8d1db9766e9d8eb009ae" + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 4, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 5, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 6, + "role": "callable", + "id": "cobra_writestringandcheck", + "file": "cobra.go", + "line": 243, + "sourceText": "func WriteStringAndCheck(b io.StringWriter, s string) {\n\t_, err := b.WriteString(s)\n\tCheckErr(err)\n}", + "sourceFileSha256": "aae7502e789e42469bcb2fc110af87fd02451d3b509c5b0bed782ada17338c5f" + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 7, + "role": "callable", + "id": "command_defaultusagefunc", + "file": "command.go", + "line": 1974, + "sourceText": "func defaultUsageFunc(w io.Writer, in interface{}) error {\n\tc := in.(*Command)\n\tfmt.Fprint(w, \"Usage:\")\n\tif c.Runnable() {", + "sourceFileSha256": "f79613721ad04c9b438dfb30fe0ac3deca85c487658b0aa04a1ae6e4395bfd90" + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 8, + "role": "test-helper", + "id": "args_test_expectsuccess", + "file": "args_test.go", + "line": 35, + "sourceText": "func expectSuccess(output string, err error, t *testing.T) {\n\tif output != \"\" {\n\t\tt.Errorf(\"Unexpected output: %v\", output)\n\t}", + "sourceFileSha256": "37058f718eb5ffc7d70f917d694c04aa11fc39ba32ad8d1db9766e9d8eb009ae" + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 9, + "role": "callable", + "id": "args_exactargs", + "file": "args.go", + "line": 107, + "sourceText": "func ExactArgs(n int) PositionalArgs {\n\treturn func(cmd *Command, args []string) error {\n\t\tif len(args) != n {\n\t\t\treturn fmt.Errorf(\"accepts %d arg(s), received %d\", n, len(args))", + "sourceFileSha256": "15b870d1e8a0a10341675ddee8e20bef92a21883257b6b3b11110944a573a2e7" + }, + { + "repository": "cobra", + "tool": "graphify", + "rank": 10, + "role": "test-helper", + "id": "bash_completions_test_check", + "file": "bash_completions_test.go", + "line": 33, + "sourceText": "func check(t *testing.T, found, expected string) {\n\tif !strings.Contains(found, expected) {\n\t\tt.Errorf(\"Expecting to contain: \\n %q\\nGot:\\n %q\\n\", expected, found)\n\t}", + "sourceFileSha256": "7bb8b9de6c45ba25595ca21feadea339be1851734ad26c750d3beaf715451e20" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 1, + "role": "type", + "id": "sha256:b9fa348bcd3398661d65066e09c6d664db2f69dabf5c8bb7c9f2db7e7d91f837", + "file": "src/flask/app.py", + "line": 110, + "sourceText": "class Flask(App):\n \"\"\"The flask object implements a WSGI application and acts as the central\n object. It is passed the name of the module or package of the\n application. Once it is created it will act as a central registry for", + "sourceFileSha256": "975de70f74626460f7afd2f16e3a513cbc2fe65cbd961f95c2f92eec4f7ecff8" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 2, + "role": "type", + "id": "sha256:de408b7ede5843f7c05d6218976c13afb68070dd25dfb892ec92a058e3f49903", + "file": "src/flask/sansio/app.py", + "line": 59, + "sourceText": "class App(Scaffold):\n \"\"\"The flask object implements a WSGI application and acts as the central\n object. It is passed the name of the module or package of the\n application. Once it is created it will act as a central registry for", + "sourceFileSha256": "410e21f53b5da3f5b73918733160dccfc22c17b0b48fe101dea56bad001c03f3" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 3, + "role": "type", + "id": "sha256:ddea8a25218008cb45a975a1c215a0f3c3a35afa7f05e66b3b3a34cbebb68040", + "file": "src/flask/ctx.py", + "line": 260, + "sourceText": "class AppContext:\n \"\"\"An app context contains information about an app, and about the request\n when handling a request. A context is pushed at the beginning of each\n request and CLI command, and popped at the end. The context is referred to", + "sourceFileSha256": "e21952d044159438765eb27848b0fe4c75f83faee8645181a09a1eccb1d5cab7" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 4, + "role": "callable", + "id": "sha256:25951e78e81c124582497db358d2bc38dccac1b4a26e9bd11d3f0202ed1b80fc", + "file": "src/flask/sansio/scaffold.py", + "line": 42, + "sourceText": "def setupmethod(f: F) -> F:\n f_name = f.__name__\n\n def wrapper_func(self: Scaffold, *args: t.Any, **kwargs: t.Any) -> t.Any:", + "sourceFileSha256": "d6578d2b5f06d227482e4110f8b750d04c8d94c9525c8857f9183f727ee2858b" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 5, + "role": "type", + "id": "sha256:8dab899b8b812824c068b665ff78e63daa313a7c3a7365a98cfcbd5c295aba01", + "file": "src/flask/wrappers.py", + "line": 18, + "sourceText": "class Request(RequestBase):\n \"\"\"The request object used by default in Flask. Remembers the\n matched endpoint and view arguments.\n", + "sourceFileSha256": "8d492fe2655e93622ae21c3177846faab20c6faf41bf43c49438162e6779391a" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 6, + "role": "type", + "id": "sha256:b4696651e154855b4bce7a5e85d74be3985bcf1f7cf3bfd0ee8ee47eb6bb568f", + "file": "src/flask/sansio/scaffold.py", + "line": 52, + "sourceText": "class Scaffold:\n \"\"\"Common behavior shared between :class:`~flask.Flask` and\n :class:`~flask.blueprints.Blueprint`.\n", + "sourceFileSha256": "d6578d2b5f06d227482e4110f8b750d04c8d94c9525c8857f9183f727ee2858b" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 7, + "role": "type", + "id": "sha256:2ab354fa1c81ea0fdfcbb560699e389ab06daa6fc67ac4dfdcb7cf9cc3f230ca", + "file": "src/flask/sansio/blueprints.py", + "line": 119, + "sourceText": "class Blueprint(Scaffold):\n \"\"\"Represents a blueprint, a collection of routes and other\n app-related functions that can be registered on a real application\n later.", + "sourceFileSha256": "da960c5792daf2f1cef8c14113d9c95c8ce389a9689abb395fe867f4054d0ba1" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 8, + "role": "type", + "id": "sha256:41a3a9d39eb3e0c632b3e7e75c872902d3e08e27e2162027f88668fe839ef569", + "file": "src/flask/wrappers.py", + "line": 222, + "sourceText": "class Response(ResponseBase):\n \"\"\"The response object that is used by default in Flask. Works like the\n response object from Werkzeug but is set to have an HTML mimetype by\n default. Quite often you don't have to create this object yourself because", + "sourceFileSha256": "8d492fe2655e93622ae21c3177846faab20c6faf41bf43c49438162e6779391a" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 9, + "role": "example-callable", + "id": "sha256:4833138a290c37135cf24616ad4c7b33cbf3027d1ecb2559d63562afad079006", + "file": "examples/tutorial/flaskr/db.py", + "line": 9, + "sourceText": "def get_db():\n \"\"\"Connect to the application's configured database. The connection\n is unique for each request and will be reused if this is called\n again.", + "sourceFileSha256": "700f9d0a455bf79c9bf6de4f2784f13b96256faea19c15ddee71fb7957e14c31" + }, + { + "repository": "flask", + "tool": "compass", + "rank": 10, + "role": "type", + "id": "sha256:9eddf1514cd1c841f0010176c064ce5ab91686f8b66a0adf8946e553606c6d8d", + "file": "src/flask/sessions.py", + "line": 24, + "sourceText": "class SessionMixin(MutableMapping[str, t.Any]):\n \"\"\"Expands a basic dictionary with session attributes.\"\"\"\n\n @property", + "sourceFileSha256": "7b2c11aa6cad4e66275ff102efcf980462684dce570ff951a61406e4b6cdd5dd" + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 1, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 2, + "role": "type", + "id": "src_flask_sansio_app_app", + "file": "src/flask/sansio/app.py", + "line": 59, + "sourceText": "class App(Scaffold):\n \"\"\"The flask object implements a WSGI application and acts as the central\n object. It is passed the name of the module or package of the\n application. Once it is created it will act as a central registry for", + "sourceFileSha256": "410e21f53b5da3f5b73918733160dccfc22c17b0b48fe101dea56bad001c03f3" + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 3, + "role": "callable", + "id": "src_flask_sansio_scaffold_setupmethod", + "file": "src/flask/sansio/scaffold.py", + "line": 42, + "sourceText": "def setupmethod(f: F) -> F:\n f_name = f.__name__\n\n def wrapper_func(self: Scaffold, *args: t.Any, **kwargs: t.Any) -> t.Any:", + "sourceFileSha256": "d6578d2b5f06d227482e4110f8b750d04c8d94c9525c8857f9183f727ee2858b" + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 4, + "role": "type", + "id": "src_flask_ctx_appcontext", + "file": "src/flask/ctx.py", + "line": 260, + "sourceText": "class AppContext:\n \"\"\"An app context contains information about an app, and about the request\n when handling a request. A context is pushed at the beginning of each\n request and CLI command, and popped at the end. The context is referred to", + "sourceFileSha256": "e21952d044159438765eb27848b0fe4c75f83faee8645181a09a1eccb1d5cab7" + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 5, + "role": "type", + "id": "src_flask_sansio_scaffold_scaffold", + "file": "src/flask/sansio/scaffold.py", + "line": 52, + "sourceText": "class Scaffold:\n \"\"\"Common behavior shared between :class:`~flask.Flask` and\n :class:`~flask.blueprints.Blueprint`.\n", + "sourceFileSha256": "d6578d2b5f06d227482e4110f8b750d04c8d94c9525c8857f9183f727ee2858b" + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 6, + "role": "type", + "id": "src_flask_wrappers_response", + "file": "src/flask/wrappers.py", + "line": 222, + "sourceText": "class Response(ResponseBase):\n \"\"\"The response object that is used by default in Flask. Works like the\n response object from Werkzeug but is set to have an HTML mimetype by\n default. Quite often you don't have to create this object yourself because", + "sourceFileSha256": "8d492fe2655e93622ae21c3177846faab20c6faf41bf43c49438162e6779391a" + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 7, + "role": "type", + "id": "src_flask_wrappers_request", + "file": "src/flask/wrappers.py", + "line": 18, + "sourceText": "class Request(RequestBase):\n \"\"\"The request object used by default in Flask. Remembers the\n matched endpoint and view arguments.\n", + "sourceFileSha256": "8d492fe2655e93622ae21c3177846faab20c6faf41bf43c49438162e6779391a" + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 8, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 9, + "role": "type", + "id": "src_flask_testing_flaskclient", + "file": "src/flask/testing.py", + "line": 109, + "sourceText": "class FlaskClient(Client):\n \"\"\"Works like a regular Werkzeug test client, with additional behavior for\n Flask. Can defer the cleanup of the request context until the end of a\n ``with`` block. For general information about how to use this class refer to", + "sourceFileSha256": "629d481658aaec7076a55913eda38c270ec45d430b34b2f9d38b2eec2b0ad3da" + }, + { + "repository": "flask", + "tool": "graphify", + "rank": 10, + "role": "example-callable", + "id": "examples_tutorial_flaskr_db_get_db", + "file": "examples/tutorial/flaskr/db.py", + "line": 9, + "sourceText": "def get_db():\n \"\"\"Connect to the application's configured database. The connection\n is unique for each request and will be reused if this is called\n again.", + "sourceFileSha256": "700f9d0a455bf79c9bf6de4f2784f13b96256faea19c15ddee71fb7957e14c31" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 1, + "role": "type", + "id": "sha256:537e981221a007ba87ff810461ae985b77fe37f06c53093ab92814e0c635f262", + "file": "gson/src/main/java/com/google/gson/stream/JsonReader.java", + "line": 211, + "sourceText": "public class JsonReader implements Closeable {\n private static final long MIN_INCOMPLETE_INTEGER = Long.MIN_VALUE / 10;\n\n private static final int PEEKED_NONE = 0;", + "sourceFileSha256": "46321d93477d0ca372aea8d8f62431ea44b7ca8947afea2f474bdebc2ff1e589" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 2, + "role": "type", + "id": "sha256:8747e09a8e903568e8a964201f3cc56893d5a0943cb2d4d51d2692ae357c0645", + "file": "gson/src/main/java/com/google/gson/GsonBuilder.java", + "line": 93, + "sourceText": "public final class GsonBuilder {\n private static final boolean DEFAULT_JSON_NON_EXECUTABLE = false;\n // Strictness of `null` is the legacy mode where some Gson APIs are always lenient\n private static final Strictness DEFAULT_STRICTNESS = null;", + "sourceFileSha256": "31a5577eee8ab35fa2fab617741d5c02067b7cab6f7db4a64c78544a05ea1d13" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 3, + "role": "type", + "id": "sha256:4fd7c5d5c89427e0b28b94c6c2de683a6533fd6ea6170d6e9c567fe4da76ac56", + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 156, + "sourceText": "public final class Gson {\n\n private static final String JSON_NON_EXECUTABLE_PREFIX = \")]}'\\n\";\n", + "sourceFileSha256": "1a33f3eb5ddc01f0a33bbe2b43dc26f8474fc8d5b80876ad9a2f33056224fc94" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 4, + "role": "callable", + "id": "sha256:9bdfcab0686beea84640af610c6c6889a412345b01c262629f143664459c4897", + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 850, + "sourceText": " public T fromJson(String json, Class classOfT) throws JsonSyntaxException {\n return fromJson(json, TypeToken.get(classOfT));\n }\n", + "sourceFileSha256": "1a33f3eb5ddc01f0a33bbe2b43dc26f8474fc8d5b80876ad9a2f33056224fc94" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 5, + "role": "type", + "id": "sha256:62389b55bcef34c86223c0c60d5f6840b5b5dc284c00baadcf2f77583be99484", + "file": "gson/src/main/java/com/google/gson/reflect/TypeToken.java", + "line": 54, + "sourceText": "public class TypeToken {\n private final Class rawType;\n private final Type type;\n private final int hashCode;", + "sourceFileSha256": "f182b1fe6d242196dd846617bf594ce45741103d17bbc3f148219bfeb23db8bd" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 6, + "role": "type", + "id": "sha256:2222e85b9b69a13e38de1c9654b1ce8a86e75815310c570ee793038eab5017b8", + "file": "gson/src/main/java/com/google/gson/stream/JsonWriter.java", + "line": 162, + "sourceText": "public class JsonWriter implements Closeable, Flushable {\n\n // Syntax as defined by https://datatracker.ietf.org/doc/html/rfc8259#section-6\n private static final Pattern VALID_JSON_NUMBER_PATTERN =", + "sourceFileSha256": "6b739b0ba2cc5a8e6809f1bdd31244c12e4f9a7145f6e93cd8f39ea193bf0e5b" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 7, + "role": "type", + "id": "sha256:f89ff78bd1ce026094d6afc709732ceda3547d33e541b4e12b9314a967e70894", + "file": "gson/src/main/java/com/google/gson/TypeAdapter.java", + "line": 122, + "sourceText": "public abstract class TypeAdapter {\n\n public TypeAdapter() {}\n", + "sourceFileSha256": "3b13e9c2a9337369e61fa32c493a6fbb80b011b0876c779c2f95ab1464c9e57c" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 8, + "role": "type", + "id": "sha256:03843efb2824f56acf2de39a4ad7a5467887e8c106f526a1a38837407c8dd1d2", + "file": "gson/src/main/java/com/google/gson/JsonPrimitive.java", + "line": 35, + "sourceText": "public final class JsonPrimitive extends JsonElement {\n\n private final Object value;\n", + "sourceFileSha256": "5b466c1eee42aa86fd7106469858f121d1a062b1c6c4b48269afd96e78c051e4" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 9, + "role": "callable", + "id": "sha256:e64ab7001f5ee8b0275e8c1b857280a9c621d38902a4ae0ac9754ed0f27aa075", + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 565, + "sourceText": " public String toJson(Object src) {\n if (src == null) {\n return toJson(JsonNull.INSTANCE);\n }", + "sourceFileSha256": "1a33f3eb5ddc01f0a33bbe2b43dc26f8474fc8d5b80876ad9a2f33056224fc94" + }, + { + "repository": "gson", + "tool": "compass", + "rank": 10, + "role": "type", + "id": "sha256:da1b62e1a2d2be089320afcf1143b2e9e5915a28cfeda233929ca6c962c6797b", + "file": "gson/src/main/java/com/google/gson/JsonElement.java", + "line": 96, + "sourceText": "public abstract class JsonElement {\n /**\n * @deprecated Creating custom {@code JsonElement} subclasses is highly discouraged and can lead\n * to undefined behavior.
", + "sourceFileSha256": "3215d81cdf2b213c7250cbb7703c793595819b9bac4ffd246034d4eb9fdf5e19" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 1, + "role": "type", + "id": "gson_src_main_java_com_google_gson_reflect_typetoken_typetoken", + "file": "gson/src/main/java/com/google/gson/reflect/TypeToken.java", + "line": 54, + "sourceText": "public class TypeToken {\n private final Class rawType;\n private final Type type;\n private final int hashCode;", + "sourceFileSha256": "f182b1fe6d242196dd846617bf594ce45741103d17bbc3f148219bfeb23db8bd" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 2, + "role": "type", + "id": "gson_src_main_java_com_google_gson_gson_gson", + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 156, + "sourceText": "public final class Gson {\n\n private static final String JSON_NON_EXECUTABLE_PREFIX = \")]}'\\n\";\n", + "sourceFileSha256": "1a33f3eb5ddc01f0a33bbe2b43dc26f8474fc8d5b80876ad9a2f33056224fc94" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 3, + "role": "type", + "id": "gson_src_main_java_com_google_gson_stream_jsonreader_jsonreader", + "file": "gson/src/main/java/com/google/gson/stream/JsonReader.java", + "line": 211, + "sourceText": "public class JsonReader implements Closeable {\n private static final long MIN_INCOMPLETE_INTEGER = Long.MIN_VALUE / 10;\n\n private static final int PEEKED_NONE = 0;", + "sourceFileSha256": "46321d93477d0ca372aea8d8f62431ea44b7ca8947afea2f474bdebc2ff1e589" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 4, + "role": "type", + "id": "gson_src_main_java_com_google_gson_jsonelement_jsonelement", + "file": "gson/src/main/java/com/google/gson/JsonElement.java", + "line": 96, + "sourceText": "public abstract class JsonElement {\n /**\n * @deprecated Creating custom {@code JsonElement} subclasses is highly discouraged and can lead\n * to undefined behavior.
", + "sourceFileSha256": "3215d81cdf2b213c7250cbb7703c793595819b9bac4ffd246034d4eb9fdf5e19" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 5, + "role": "type", + "id": "gson_src_main_java_com_google_gson_typeadapter_typeadapter", + "file": "gson/src/main/java/com/google/gson/TypeAdapter.java", + "line": 122, + "sourceText": "public abstract class TypeAdapter {\n\n public TypeAdapter() {}\n", + "sourceFileSha256": "3b13e9c2a9337369e61fa32c493a6fbb80b011b0876c779c2f95ab1464c9e57c" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 6, + "role": "type", + "id": "gson_src_main_java_com_google_gson_stream_jsonwriter_jsonwriter", + "file": "gson/src/main/java/com/google/gson/stream/JsonWriter.java", + "line": 162, + "sourceText": "public class JsonWriter implements Closeable, Flushable {\n\n // Syntax as defined by https://datatracker.ietf.org/doc/html/rfc8259#section-6\n private static final Pattern VALID_JSON_NUMBER_PATTERN =", + "sourceFileSha256": "6b739b0ba2cc5a8e6809f1bdd31244c12e4f9a7145f6e93cd8f39ea193bf0e5b" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 7, + "role": "test-type", + "id": "gson_src_test_java_com_google_gson_stream_jsonreadertest_jsonreadertest", + "file": "gson/src/test/java/com/google/gson/stream/JsonReaderTest.java", + "line": 40, + "sourceText": "@SuppressWarnings(\"resource\")\npublic final class JsonReaderTest {\n\n @Test", + "sourceFileSha256": "7fb35a955e2f46fc9aed9176a3f3301dc59d198419d57e22f300d14f615f94c4" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 8, + "role": "type", + "id": "gson_src_main_java_com_google_gson_gsonbuilder_gsonbuilder", + "file": "gson/src/main/java/com/google/gson/GsonBuilder.java", + "line": 93, + "sourceText": "public final class GsonBuilder {\n private static final boolean DEFAULT_JSON_NON_EXECUTABLE = false;\n // Strictness of `null` is the legacy mode where some Gson APIs are always lenient\n private static final Strictness DEFAULT_STRICTNESS = null;", + "sourceFileSha256": "31a5577eee8ab35fa2fab617741d5c02067b7cab6f7db4a64c78544a05ea1d13" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 9, + "role": "test-type", + "id": "gson_src_test_java_com_google_gson_functional_primitivetest_primitivetest", + "file": "gson/src/test/java/com/google/gson/functional/PrimitiveTest.java", + "line": 44, + "sourceText": "public class PrimitiveTest {\n private Gson gson;\n\n @Before", + "sourceFileSha256": "5cc2e522e5babdceef8192e6cb5cca13cae1c26eb63da0ed53a0ea80bb7bbe7b" + }, + { + "repository": "gson", + "tool": "graphify", + "rank": 10, + "role": "test-type", + "id": "gson_src_test_java_com_google_gson_functional_defaulttypeadapterstest_defaulttypeadapterstest", + "file": "gson/src/test/java/com/google/gson/functional/DefaultTypeAdaptersTest.java", + "line": 89, + "sourceText": "@SuppressWarnings(\"JavaUtilDate\")\npublic class DefaultTypeAdaptersTest {\n private Gson gson;\n private TimeZone oldTimeZone;", + "sourceFileSha256": "7cd95d5cd7271ec27c264f36cc017f8980feb346efce5a6caa430b2d9a706952" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 1, + "role": "source-module", + "id": "sha256:f738b0c1f5d24863d64fab8475d14c9450aa31631743cbe083f335844f05c195", + "file": "packages/zod/src/v4/core/schemas.ts", + "line": 1, + "sourceText": "import * as checks from \"./checks.js\";\nimport type { $ZodNumberFormats } from \"./checks.js\";\nimport type { $ZodBigIntFormats } from \"./checks.js\";\nimport * as core from \"./core.js\";", + "sourceFileSha256": "12372f51ba3e437cca064a5c743bea11bb49fc1616e3dc084dac83cc67a91f72" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 2, + "role": "source-module", + "id": "sha256:4839121225cd7b794e6b3003ae6353a387711a2ec314fae03fb27d5119abe6b0", + "file": "packages/zod/src/v4/classic/schemas.ts", + "line": 1, + "sourceText": "import type { $ZodBigIntFormats } from \"../core/checks.js\";\nimport * as core from \"../core/index.js\";\nimport { util, type $ZodNumberFormats } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";", + "sourceFileSha256": "c79403c4f5da6b480779d9ec65601f3fd883e99397322203f0c9b1d00ea106d4" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 3, + "role": "test-module", + "id": "sha256:f0d18b0eb1634122c407fca91d24171580b6dd9bf5b6a1be3ed08b6b57b47fa0", + "file": "packages/zod/src/v4/classic/tests/to-json-schema.test.ts", + "line": 1, + "sourceText": "import { Validator } from \"@seriousme/openapi-schema-validator\";\nimport { describe, expect, test, vi } from \"vitest\";\nimport * as z from \"zod\";\n// import * as zCore from \"zod/v4/core\";", + "sourceFileSha256": "a26ba5e1f1e8be31fdd65b1d2ca6e481832faa2f16ea58f231d616dc8eb4120a" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 4, + "role": "source-module", + "id": "sha256:c68b9b53580cb6a30f1f21ef0a236d04446328a1ef59a5242163bf6653fced15", + "file": "packages/zod/src/v4/mini/schemas.ts", + "line": 1, + "sourceText": "import * as core from \"../core/index.js\";\nimport type { $ZodBigIntFormats } from \"../core/index.js\";\nimport * as regexes from \"../core/regexes.js\";\nimport * as util from \"../core/util.js\";", + "sourceFileSha256": "0564e616637aa02917854cb0ee22bbc64172c78a111cb422ba1f577d556432ee" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 5, + "role": "test-module", + "id": "sha256:3fd0d3d2d6c99eff1c0f1d98e063e987dd6d4bab820f8b1d5fda0894bfb18eb0", + "file": "packages/zod/src/v4/core/tests/compile.test.ts", + "line": 1, + "sourceText": "import { expect, expectTypeOf, test } from \"vitest\";\n\nimport * as z from \"../../index.js\";\nimport {", + "sourceFileSha256": "82a20ec964e4a1c40514055e5113e52a29ac02aa75dbb8398cd8cf390cfdd5ea" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 6, + "role": "test-module", + "id": "sha256:9e42231af1aec41da50582f84615e89e93bc93aebbd72800c33f46cf00469f1d", + "file": "packages/zod/src/v4/classic/tests/from-json-schema.test.ts", + "line": 1, + "sourceText": "import { expect, test } from \"vitest\";\nimport { fromJSONSchema } from \"../from-json-schema.js\";\nimport * as z from \"../index.js\";\n", + "sourceFileSha256": "5ea2b7bf02920a7bb8709f1d2db0bb4d304e40bbc4927b2d6ca40f488c79ec31" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 7, + "role": "source-module", + "id": "sha256:4924f2b319a8a0fc43829d7d85e3eb5240b79b441beeaf23a23c8ff1712fa2bd", + "file": "packages/zod/src/v4/core/api.ts", + "line": 1, + "sourceText": "import * as checks from \"./checks.js\";\nimport type * as core from \"./core.js\";\nimport type * as errors from \"./errors.js\";\nimport * as registries from \"./registries.js\";", + "sourceFileSha256": "9ad4da853ced907f2e5764e5a390f087c0bc8633638a993c50699f0827a5bf5d" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 8, + "role": "source-module", + "id": "sha256:cf3531eed1cc580ec1bcff5aff8ce38c3b3442878d76b09b0e64e855870aaa79", + "file": "packages/zod/src/v3/types.ts", + "line": 1, + "sourceText": "import {\n type IssueData,\n type StringValidation,\n type ZodCustomIssue,", + "sourceFileSha256": "73b9529564a34fc028a5a62c17e09148747b737039b78b124e84254cb886411a" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 9, + "role": "test-module", + "id": "sha256:e6e4c6559c1e502bcf9b32525880968d86c52d1461aee09cc3777f9620c58300", + "file": "packages/zod/src/v4/classic/tests/cyclic-data.test.ts", + "line": 1, + "sourceText": "import v8 from \"node:v8\";\nimport vm from \"node:vm\";\nimport { expect, test } from \"vitest\";\nimport * as z from \"zod/v4\";", + "sourceFileSha256": "8dc2d5bc6bb9d3a0ad40491eaffa903e837a3fe92666c067c4d428b09583786a" + }, + { + "repository": "zod", + "tool": "compass", + "rank": 10, + "role": "source-module", + "id": "sha256:d430dadbdc4d952986b7cb934947a122a86298bf0be5a798b3117d105fede928", + "file": "packages/zod/src/v4/core/checks.ts", + "line": 1, + "sourceText": "// import { $ZodType } from \"./schemas.js\";\n\nimport * as core from \"./core.js\";\nimport type * as errors from \"./errors.js\";", + "sourceFileSha256": "d813140472a55ab36e845f4eaadbb3deae6d0597f90bef6c3f51366ac8dbfd4c" + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 1, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 2, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 3, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 4, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 5, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 6, + "role": "type", + "id": "packages_zod_src_v4_core_checks_zodstringformats", + "file": "packages/zod/src/v4/core/checks.ts", + "line": 689, + "sourceText": "export type $ZodStringFormats =\n | \"email\"\n | \"url\"\n | \"emoji\"", + "sourceFileSha256": "d813140472a55ab36e845f4eaadbb3deae6d0597f90bef6c3f51366ac8dbfd4c" + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 7, + "role": "benchmark-callable", + "id": "packages_bench_metabench_metabench", + "file": "packages/bench/metabench.ts", + "line": 14, + "sourceText": "export function metabench(name: string, benchmarks?: Benchmarks): Metabench {\n let bench: Metabench;\n if (BENCH === \"tinybench\") {\n bench = new Tinybench(name, benchmarks || {});", + "sourceFileSha256": "0db1b192313b80aa3b8502f912542a0bcf8ec919f035ca6bfc54ceb29db406af" + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 8, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 9, + "role": "type", + "id": "packages_zod_src_v4_core_schemas_zodtypeinternals", + "file": "packages/zod/src/v4/core/schemas.ts", + "line": 181, + "sourceText": "export interface $ZodTypeInternals extends _$ZodTypeInternals {\n /** @internal The inferred output type */\n output: O; //extends { $out: infer O } ? O : Out;\n /** @internal The inferred input type */", + "sourceFileSha256": "12372f51ba3e437cca064a5c743bea11bb49fc1616e3dc084dac83cc67a91f72" + }, + { + "repository": "zod", + "tool": "graphify", + "rank": 10, + "role": "type", + "id": "packages_zod_src_v3_helpers_parseutil_parseinput", + "file": "packages/zod/src/v3/helpers/parseUtil.ts", + "line": 66, + "sourceText": "export type ParseInput = {\n data: any;\n path: (string | number)[];\n parent: ParseContext;", + "sourceFileSha256": "cb94690c02dce392b98ca364de0d4b24f42db715fbb1759a08bcfb7fa6674645" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 1, + "role": "callable", + "id": "sha256:60aab06ff57a8c85fab4715992128370838e5d03eed5a9e58d82bb510287ac28", + "file": "src/routing/mod.rs", + "line": 192, + "sourceText": " pub fn route(self, path: &str, method_router: MethodRouter) -> Self {\n tap_inner!(self, mut this => {\n panic_on_err!(this.path_router.route(path, method_router));\n })", + "sourceFileSha256": "7ecd918b9285812f0edfad5cc48d9ad6268c2dae9cc497089fbec6cc2eb08b7d" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 2, + "role": "test-helper", + "id": "sha256:68b2857794e763372a7a332a2565d51e0307a3e72c89b04f9df4a18fa960bb9a", + "file": "src/test_helpers/test_client.rs", + "line": 36, + "sourceText": " pub fn new(svc: S) -> Self\n where\n S: Service + Clone + Send + 'static,\n S::Future: Send,", + "sourceFileSha256": "08539b094aa868bb9be422a5dae0437a29dbf30a036df6431efed99ce2a582b6" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 3, + "role": "type", + "id": "sha256:45fdb21dd68855366f06d2399063b23ebd4754d6bd0fd99e8802b6833e18af6d", + "file": "src/routing/mod.rs", + "line": 86, + "sourceText": "pub struct Router {\n inner: Arc>,\n}\n", + "sourceFileSha256": "7ecd918b9285812f0edfad5cc48d9ad6268c2dae9cc497089fbec6cc2eb08b7d" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 4, + "role": "type", + "id": "sha256:04b0b1fb883d743b22d88f96cacd55215dbcb66091ef10bff4b784aa2cbb7e1d", + "file": "src/routing/method_routing.rs", + "line": 549, + "sourceText": "pub struct MethodRouter {\n get: MethodEndpoint,\n head: MethodEndpoint,\n delete: MethodEndpoint,", + "sourceFileSha256": "d91b8dc73b3a584c57055a6fcf2aa88241c0ee7875663e6c103844741c4c9119" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 5, + "role": "callable", + "id": "sha256:ba87bdef07c319f041356e21239bc5984549ccefecd247c4ab6cf2ab00d1299b", + "file": "src/routing/mod.rs", + "line": 162, + "sourceText": " pub fn new() -> Self {\n Self {\n inner: Arc::new(RouterInner {\n path_router: Default::default(),", + "sourceFileSha256": "7ecd918b9285812f0edfad5cc48d9ad6268c2dae9cc497089fbec6cc2eb08b7d" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 6, + "role": "callable", + "id": "sha256:a0f57e92389119330fd13358ce5f0589d5360eac2d34869176cf7a6b6813526b", + "file": "src/routing/mod.rs", + "line": 220, + "sourceText": " pub fn nest(self, path: &str, router: Self) -> Self {\n if path.is_empty() || path == \"/\" {\n panic!(\"Nesting at the root is no longer supported. Use merge instead.\");\n }", + "sourceFileSha256": "7ecd918b9285812f0edfad5cc48d9ad6268c2dae9cc497089fbec6cc2eb08b7d" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 7, + "role": "type", + "id": "sha256:831ff61676cca7793933839f665e492e2451afbe00ab9ba8b0375e2fc4115d99", + "file": "src/routing/route.rs", + "line": 31, + "sourceText": "pub struct Route(BoxCloneSyncService);\n\nimpl Route {\n pub(crate) fn new(svc: T) -> Self", + "sourceFileSha256": "4ce2ea4d6623d1a29e156d83f93bcb9f69aa969471f0a8083a19bb320964541d" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 8, + "role": "test-helper", + "id": "sha256:90ddb5e4cc5b746f56570b98d4b7c32f333a8cc8dd9ea8c740669432186a4601", + "file": "src/test_helpers/test_client.rs", + "line": 51, + "sourceText": " pub fn get(&self, url: &str) -> RequestBuilder {\n RequestBuilder {\n builder: self.client.get(format!(\"http://{}{url}\", self.addr)),\n }", + "sourceFileSha256": "08539b094aa868bb9be422a5dae0437a29dbf30a036df6431efed99ce2a582b6" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 9, + "role": "callable", + "id": "sha256:d42797d051fe003ed59e07df110a2c316fdfe6d7be5741344cb3946dd798321f", + "file": "src/routing/mod.rs", + "line": 336, + "sourceText": " pub fn fallback(self, handler: H) -> Self\n where\n H: Handler,\n T: 'static,", + "sourceFileSha256": "7ecd918b9285812f0edfad5cc48d9ad6268c2dae9cc497089fbec6cc2eb08b7d" + }, + { + "repository": "axum", + "tool": "compass", + "rank": 10, + "role": "callable", + "id": "sha256:dc9b52391b0c9fcd4b93234ce6294eb8f8cc7d85f3f317f2c49f2703c5fa7073", + "file": "src/routing/mod.rs", + "line": 296, + "sourceText": " pub fn layer(self, layer: L) -> Self\n where\n L: Layer + Clone + Send + Sync + 'static,\n L::Service: Service + Clone + Send + Sync + 'static,", + "sourceFileSha256": "7ecd918b9285812f0edfad5cc48d9ad6268c2dae9cc497089fbec6cc2eb08b7d" + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 1, + "role": "generic-implementation", + "id": "src_service_ext_s", + "file": "src/service_ext.rs", + "line": 47, + "sourceText": "impl ServiceExt for S\nwhere\n S: Service + Sized,\n{", + "sourceFileSha256": "e212b899108791b586d442e9c0a294ef908cfa97652b68c8770c782d1efd07cb" + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 2, + "role": "generic-implementation", + "id": "src_handler_mod_t", + "file": "src/handler/mod.rs", + "line": 272, + "sourceText": "impl Handler for T\nwhere\n T: IntoResponse + Clone + Send + Sync + 'static,\n{", + "sourceFileSha256": "db398d9a153d8e9fbff07fc328d3805713171c7f378938edb78c426483c701ba" + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 3, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 4, + "role": "test-helper", + "id": "src_routing_method_routing_call", + "file": "src/routing/method_routing.rs", + "line": 1739, + "sourceText": " async fn call(method: Method, svc: &mut S) -> (StatusCode, HeaderMap, String)\n where\n S: Service,\n S::Response: IntoResponse,", + "sourceFileSha256": "d91b8dc73b3a584c57055a6fcf2aa88241c0ee7875663e6c103844741c4c9119" + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 5, + "role": "trait-implementation", + "id": "src_routing_mod_router_s", + "file": "src/routing/mod.rs", + "line": 90, + "sourceText": "impl Clone for Router {\n fn clone(&self) -> Self {\n Self {\n inner: Arc::clone(&self.inner),", + "sourceFileSha256": "7ecd918b9285812f0edfad5cc48d9ad6268c2dae9cc497089fbec6cc2eb08b7d" + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 6, + "role": null, + "reason": "Returned label does not uniquely identify a stored node; no oracle ID substitution." + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 7, + "role": "type", + "id": "src_routing_route_route", + "file": "src/routing/route.rs", + "line": 31, + "sourceText": "pub struct Route(BoxCloneSyncService);\n\nimpl Route {\n pub(crate) fn new(svc: T) -> Self", + "sourceFileSha256": "4ce2ea4d6623d1a29e156d83f93bcb9f69aa969471f0a8083a19bb320964541d" + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 8, + "role": "type", + "id": "src_routing_method_filter_methodfilter", + "file": "src/routing/method_filter.rs", + "line": 9, + "sourceText": "pub struct MethodFilter(u16);\n\nimpl MethodFilter {\n /// Match `CONNECT` requests.", + "sourceFileSha256": "d1c354426afb62a22f4cd518b676e2c5e0f419f7c056c59380e4aa51dd2469b1" + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 9, + "role": "trait-implementation", + "id": "src_extract_ws_bytes", + "file": "src/extract/ws.rs", + "line": 769, + "sourceText": "impl From for Bytes {\n #[inline]\n fn from(Utf8Bytes(bytes): Utf8Bytes) -> Self {\n bytes.into()", + "sourceFileSha256": "88dd9b63ef3ea7d4ed2d37bc83a0278898c48255bcd9032f386bcc7c7f376a04" + }, + { + "repository": "axum", + "tool": "graphify", + "rank": 10, + "role": "type", + "id": "src_extract_ws_utf8bytes", + "file": "src/extract/ws.rs", + "line": 681, + "sourceText": "pub struct Utf8Bytes(ts::Utf8Bytes);\n\nimpl Utf8Bytes {\n /// Creates from a static str.", + "sourceFileSha256": "88dd9b63ef3ea7d4ed2d37bc83a0278898c48255bcd9032f386bcc7c7f376a04" + } + ] +} diff --git a/benchmarks/agent_query/hub_role_reviews_panel_a.json b/benchmarks/agent_query/hub_role_reviews_panel_a.json new file mode 100644 index 000000000..e694c854a --- /dev/null +++ b/benchmarks/agent_query/hub_role_reviews_panel_a.json @@ -0,0 +1,1310 @@ +{ + "schema": "compass.hub-source-review/1", + "scope": "Post-output manual declaration-role census of all fifty returned MCP hubs per tool on panel A. Unique graph identities and source anchors are checked, but roles do not establish responsibility count, source-edge precision, or god-object defects. Ambiguous display identities stay unknown. Different returned sets are not a shared precision denominator.", + "roles": { + "type": "Production type declaration, including class, struct, alias, interface, and public testing API types.", + "callable": "Production function or method.", + "test-helper": "Callable used by repository tests.", + "test-type": "Class or structured helper type in repository tests.", + "source-module": "Whole source-file module container.", + "test-module": "Whole test-file module container.", + "example-callable": "Function in an example application.", + "benchmark-callable": "Benchmark support function.", + "generic-implementation": "Implementation block whose target is its own generic parameter.", + "trait-implementation": "Trait implementation block, not a new type declaration.", + "test-route": "Framework route registration in a repository test; not a callable/type declaration.", + "example-route": "Framework route registration in an example application; not a callable/type declaration.", + "example-type": "Type in a demonstration CLI/application.", + "documentation-tooling": "Callable used to build or transform repository documentation." + }, + "inputRunSha256": "af1f84bee444ea3ab05e2db839562e7e4b392f5f1b1da8cba7e91fca5aa5dd28", + "sources": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "compassGraphSha256": "e7a5dcb40973eadb8281416e125ef0b78a6330b74e0361ac52dcb083ba77204a", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "compassGraphSha256": "8035487618e4e96af8b7cc668d92eaea9ee3ec2a831c486d20055bc808fa23f6", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "compassGraphSha256": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ], + "reviews": [ + { + "repository": "chi", + "tool": "compass", + "rank": 1, + "label": "Mux", + "degree": 71, + "role": "type", + "id": "sha256:d003705234e34bbb357969b1c76ccd4cd1adadcf314b380d8ed89255dd633335", + "file": "mux.go", + "line": 21, + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "sourceText": "type Mux struct {\n\t// The computed mux handler made of the chained middleware stack and\n\t// the tree router\n\thandler http.Handler" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 2, + "label": "GET /users/1", + "degree": 59, + "role": "test-route", + "id": "sha256:0cf4d5e0e8701ef22a2d876c9698ded7531243a31cd62fe774ec18d23a5d0971", + "file": "middleware/clean_path_test.go", + "line": 14, + "sourceFileSha256": "81b6a3dff384a06104eefc1a9f5aea74394d36745ef78c4460cc80b56151bb00", + "sourceText": "\tr.Get(\"/users/1\", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }))\n\n\tw := httptest.NewRecorder()\n\treq, _ := http.NewRequest(\"GET\", \"/users////1\", nil)" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 3, + "label": "NewRouter()", + "degree": 51, + "role": "callable", + "id": "sha256:1928266631ebdc4651cac18aa5abc7ab261abc74a669ec9071a53d68b1f30699", + "file": "chi.go", + "line": 62, + "sourceFileSha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678", + "sourceText": "func NewRouter() *Mux {\n\treturn NewMux()\n}\n" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 4, + "label": "Router", + "degree": 49, + "role": "type", + "id": "sha256:8ab5bf62c8dcdea65c3d185e73de6efa0660677862d5b997ed6086d6b3571fae", + "file": "chi.go", + "line": 68, + "sourceFileSha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678", + "sourceText": "type Router interface {\n\thttp.Handler\n\tRoutes\n" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 5, + "label": "node", + "degree": 34, + "role": "type", + "id": "sha256:a5f10ee47ecf99eb3039567ca90b2070ee96c4e323ea1c7baf0f3b91b5febaf9", + "file": "tree.go", + "line": 97, + "sourceFileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "sourceText": "type node struct {\n\t// subroutes on the leaf node\n\tsubroutes Routes\n" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 6, + "label": "testRequest()", + "degree": 31, + "role": "test-helper", + "id": "sha256:affecca8ae0fa3330373f2b674191af88d18c533d78f967e8dc4e7158a2a5f13", + "file": "mux_test.go", + "line": 2075, + "sourceFileSha256": "162d82fa10418b99baf750e3fbcb1fee018bfd654850a9f01382a175390dc965", + "sourceText": "func testRequest(t *testing.T, ts *httptest.Server, method, path string, body io.Reader) (*http.Response, string) {\n\treq, err := http.NewRequest(method, ts.URL+path, body)\n\tif err != nil {\n\t\tt.Fatal(err)" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 7, + "label": "basicWriter", + "degree": 24, + "role": "type", + "id": "sha256:93b2e10be45a493f2b1da664d2d0e221b054df3bf9b5165f30bf13d402e37716", + "file": "middleware/wrap_writer.go", + "line": 74, + "sourceFileSha256": "7b6ed24d3d5bfd362e00851d117e74273b02597a1d9e9eb243cbf7aae22597c8", + "sourceText": "type basicWriter struct {\n\thttp.ResponseWriter\n\ttee io.Writer\n\tcode int" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 8, + "label": ".handle()", + "degree": 22, + "role": "callable", + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "file": "mux.go", + "line": 430, + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "sourceText": "func (mx *Mux) handle(method methodTyp, pattern string, handler http.Handler) *node {\n\tif len(pattern) == 0 || pattern[0] != '/' {\n\t\tpanic(fmt.Sprintf(\"chi: routing pattern must begin with '/' in '%s'\", pattern))\n\t}" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 9, + "label": "Context", + "degree": 21, + "role": "type", + "id": "sha256:3c0e2dbc07035a3a8f70ae8bae0699c3db0914711df3e9c57fbe21b7bc4ea06b", + "file": "context.go", + "line": 45, + "sourceFileSha256": "b19edcca252e2fe74e82802c4c7ce1a1c0855728f9ede1288f0224283dfc7e53", + "sourceText": "type Context struct {\n\tRoutes Routes\n\n\t// parentCtx is the parent of this one, for using Context as a" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 10, + "label": "GET /", + "degree": 20, + "role": "example-route", + "id": "sha256:6f74f6829c1ece47600b30691db107ba606954626ded041cc3e331aa1786f96e", + "file": "_examples/todos-resource/main.go", + "line": 22, + "sourceFileSha256": "a0a551b6d6ca81210b129cd2a70d76e38370b2461be78813e6f117cfef6da020", + "sourceText": "\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\".\"))\n\t})\n" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 1, + "label": "NewRouter()", + "degree": 51, + "role": "callable", + "id": "chi_newrouter", + "file": "chi.go", + "line": 62, + "sourceFileSha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678", + "sourceText": "func NewRouter() *Mux {\n\treturn NewMux()\n}\n" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 2, + "label": "Mux", + "degree": 40, + "role": "type", + "id": "mux_go_chi_mux", + "file": "mux.go", + "line": 21, + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "sourceText": "type Mux struct {\n\t// The computed mux handler made of the chained middleware stack and\n\t// the tree router\n\thandler http.Handler" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 3, + "label": "testRequest()", + "degree": 35, + "role": null + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 4, + "label": "Context", + "degree": 30, + "role": "type", + "id": "chi_context", + "file": "context.go", + "line": 45, + "sourceFileSha256": "b19edcca252e2fe74e82802c4c7ce1a1c0855728f9ede1288f0224283dfc7e53", + "sourceText": "type Context struct {\n\tRoutes Routes\n\n\t// parentCtx is the parent of this one, for using Context as a" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 5, + "label": "Router", + "degree": 28, + "role": "type", + "id": "chi_go_chi_router", + "file": "chi.go", + "line": 68, + "sourceFileSha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678", + "sourceText": "type Router interface {\n\thttp.Handler\n\tRoutes\n" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 6, + "label": "node", + "degree": 22, + "role": "type", + "id": "chi_node", + "file": "tree.go", + "line": 97, + "sourceFileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "sourceText": "type node struct {\n\t// subroutes on the leaf node\n\tsubroutes Routes\n" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 7, + "label": "run()", + "degree": 18, + "role": "test-helper", + "id": "middleware_client_ip_test_run", + "file": "middleware/client_ip_test.go", + "line": 706, + "sourceFileSha256": "bfc0d690534b833f73117d8a4c25aaedef6923c3145b6aadd3a0c149e2a427de", + "sourceText": "func run(t *testing.T, mw func(http.Handler) http.Handler, buildReq func(*http.Request)) string {\n\tt.Helper()\n\treq := httptest.NewRequest(\"GET\", \"/\", nil)\n\tbuildReq(req)" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 8, + "label": "basicWriter", + "degree": 17, + "role": "type", + "id": "middleware_basicwriter", + "file": "middleware/wrap_writer.go", + "line": 74, + "sourceFileSha256": "7b6ed24d3d5bfd362e00851d117e74273b02597a1d9e9eb243cbf7aae22597c8", + "sourceText": "type basicWriter struct {\n\thttp.ResponseWriter\n\ttee io.Writer\n\tcode int" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 9, + "label": "ClientIPFromXFF()", + "degree": 16, + "role": "callable", + "id": "middleware_client_ip_clientipfromxff", + "file": "middleware/client_ip.go", + "line": 93, + "sourceFileSha256": "fc4eef97991796067607038437bd3b23e04337ba9b07ed3c4147d8b49ecf5e9e", + "sourceText": "func ClientIPFromXFF(trustedIPPrefixes ...string) func(http.Handler) http.Handler {\n\tprefixes := make([]netip.Prefix, len(trustedIPPrefixes))\n\tfor i, p := range trustedIPPrefixes {\n\t\tprefixes[i] = netip.MustParsePrefix(p)" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 10, + "label": "assertEqual()", + "degree": 15, + "role": "test-helper", + "id": "middleware_middleware_test_assertequal", + "file": "middleware/middleware_test.go", + "line": 208, + "sourceFileSha256": "f93aec66e191433ab67ea727d45dc6cbdb4184d874132339c2715431c41e3eba", + "sourceText": "func assertEqual(t *testing.T, a, b any) {\n\tt.Helper()\n\tif !reflect.DeepEqual(a, b) {\n\t\tt.Fatalf(\"expecting values to be equal but got: '%v' and '%v'\", a, b)" + }, + { + "repository": "click", + "tool": "compass", + "rank": 1, + "label": "Context", + "degree": 303, + "role": "type", + "id": "sha256:04db8174ad36dd65699520c296fd738ff4258d7e4c6ac31d8c5c48d084032ded", + "file": "src/click/core.py", + "line": 234, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Context:\n \"\"\"The context is a special internal object that holds state relevant\n for the script execution at every single level. It's normally invisible\n to commands unless they opt-in to getting access to it." + }, + { + "repository": "click", + "tool": "compass", + "rank": 2, + "label": "Parameter", + "degree": 129, + "role": "type", + "id": "sha256:ae1ae71b96a9620030b4830d9f4e3159e6de8089f940e0d4bd1f04e740d93062", + "file": "src/click/core.py", + "line": 2237, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Parameter(ABC):\n r\"\"\"A parameter to a command comes in two versions: they are either\n :class:`Option`\\s or :class:`Argument`\\s. Other subclasses are currently\n not supported by design as some of the internals for parsing are" + }, + { + "repository": "click", + "tool": "compass", + "rank": 3, + "label": "Command", + "degree": 85, + "role": "type", + "id": "sha256:e822a51cf5afc73cfb7f3fccc077fd04bcb61da80b77998f22fb4b663ac4ea66", + "file": "src/click/core.py", + "line": 985, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Command:\n \"\"\"Commands are the basic building block of command line interfaces in\n Click. A basic command handles command line parsing and might dispatch\n more parsing to commands nested below it." + }, + { + "repository": "click", + "tool": "compass", + "rank": 4, + "label": "Option", + "degree": 51, + "role": "type", + "id": "sha256:6157d30f9a6fd24baf7d621b601792eb67eb2d7b9d3e185f7a44d30dee887d5b", + "file": "src/click/core.py", + "line": 2963, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Option(Parameter):\n \"\"\"Options are usually optional values on the command line and\n have some extra features that arguments don't have.\n" + }, + { + "repository": "click", + "tool": "compass", + "rank": 5, + "label": "Group", + "degree": 49, + "role": "type", + "id": "sha256:15b0848405f27a8502a9efc8d6139bf542482cedc1eacb6becaddfe554f3df0f", + "file": "src/click/core.py", + "line": 1699, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Group(Command):\n \"\"\"A group is a command that nests other commands (or more groups).\n\n :param name: The name of the group command." + }, + { + "repository": "click", + "tool": "compass", + "rank": 6, + "label": "ParamType", + "degree": 40, + "role": "type", + "id": "sha256:1f00115a5f86bc3b6514dbac1daa253d8cfaafa43b58b4f6cea5ccac733d678b", + "file": "src/click/types.py", + "line": 65, + "sourceFileSha256": "30a39185da37bbd98ef47153f7bfd310b04eac44bd9b9b2fe15998406337757e", + "sourceText": "class ParamType(t.Generic[_ValueT_co, _InputT_contra], abc.ABC):\n \"\"\"Represents the type of a parameter. Validates and converts values\n from the command line or Python into the correct type.\n" + }, + { + "repository": "click", + "tool": "compass", + "rank": 7, + "label": "HelpFormatter", + "degree": 37, + "role": "type", + "id": "sha256:a2a7bb3dd442be664b82216a6b3acd8a1e8079c2abb02f67fc7455da68e72648", + "file": "src/click/formatting.py", + "line": 110, + "sourceFileSha256": "f125b628692f8dfcfd43535b7a88cc1ee64137471f9d0243b389aa0cfea85e6b", + "sourceText": "class HelpFormatter:\n \"\"\"This class helps with formatting text-based help pages. It's\n usually just needed for very special internal cases, but it's also\n exposed so that developers can write their own fancy outputs." + }, + { + "repository": "click", + "tool": "compass", + "rank": 8, + "label": "echo()", + "degree": 36, + "role": "callable", + "id": "sha256:abda0c42f0c49427afee855d0256edc7b5b579da8e43dbcf33162ee7992d3c8a", + "file": "src/click/utils.py", + "line": 240, + "sourceFileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17", + "sourceText": "def echo(\n message: object = None,\n file: t.IO[t.Any] | None = None,\n nl: bool = True," + }, + { + "repository": "click", + "tool": "compass", + "rank": 9, + "label": "_get_words()", + "degree": 26, + "role": "test-helper", + "id": "sha256:dee697366b1c46d71686a3eccb36489b42833ef72a15c620ad3f874059c3e733", + "file": "tests/test_shell_completion.py", + "line": 29, + "sourceFileSha256": "d45f0b1b42850463a3a07273989518d477f8b19c4ca0d8ef74dc29c309276bd8", + "sourceText": "def _get_words(cli, args, incomplete):\n return [c.value for c in _get_completions(cli, args, incomplete)]\n\n" + }, + { + "repository": "click", + "tool": "compass", + "rank": 10, + "label": "Argument", + "degree": 25, + "role": "type", + "id": "sha256:23ddee6a475e892ac17dd6dee048b0da67616a649067b5918fab30b499796578", + "file": "src/click/core.py", + "line": 3800, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Argument(Parameter):\n \"\"\"Arguments are positional parameters to a command. They generally\n provide fewer features than options but can have infinite ``nargs``\n and are required by default." + }, + { + "repository": "click", + "tool": "graphify", + "rank": 1, + "label": "Context", + "degree": 174, + "role": "type", + "id": "src_click_core_context", + "file": "src/click/core.py", + "line": 234, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Context:\n \"\"\"The context is a special internal object that holds state relevant\n for the script execution at every single level. It's normally invisible\n to commands unless they opt-in to getting access to it." + }, + { + "repository": "click", + "tool": "graphify", + "rank": 2, + "label": "Command", + "degree": 100, + "role": "type", + "id": "src_click_core_command", + "file": "src/click/core.py", + "line": 985, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Command:\n \"\"\"Commands are the basic building block of command line interfaces in\n Click. A basic command handles command line parsing and might dispatch\n more parsing to commands nested below it." + }, + { + "repository": "click", + "tool": "graphify", + "rank": 3, + "label": "Parameter", + "degree": 91, + "role": "type", + "id": "src_click_core_parameter", + "file": "src/click/core.py", + "line": 2237, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Parameter(ABC):\n r\"\"\"A parameter to a command comes in two versions: they are either\n :class:`Option`\\s or :class:`Argument`\\s. Other subclasses are currently\n not supported by design as some of the internals for parsing are" + }, + { + "repository": "click", + "tool": "graphify", + "rank": 4, + "label": "CliRunner", + "degree": 65, + "role": "type", + "id": "src_click_testing_clirunner", + "file": "src/click/testing.py", + "line": 317, + "sourceFileSha256": "76f4e649bc53000d667c8c0deff1591970fa034b0f085a207165839b2301019a", + "sourceText": "class CliRunner:\n \"\"\"The CLI runner provides functionality to invoke a Click command line\n script for unittesting purposes in a isolated environment. This only\n works in single-threaded systems without any concurrency as it changes the" + }, + { + "repository": "click", + "tool": "graphify", + "rank": 5, + "label": "Option", + "degree": 55, + "role": null + }, + { + "repository": "click", + "tool": "graphify", + "rank": 6, + "label": "cmd()", + "degree": 45, + "role": null + }, + { + "repository": "click", + "tool": "graphify", + "rank": 7, + "label": "Group", + "degree": 44, + "role": "type", + "id": "src_click_core_group", + "file": "src/click/core.py", + "line": 1699, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Group(Command):\n \"\"\"A group is a command that nests other commands (or more groups).\n\n :param name: The name of the group command." + }, + { + "repository": "click", + "tool": "graphify", + "rank": 8, + "label": "option()", + "degree": 37, + "role": "callable", + "id": "src_click_decorators_option", + "file": "src/click/decorators.py", + "line": 352, + "sourceFileSha256": "16069357615691fcdfc9c794bb515f6009eb35aad6f7a76c017bdce06dae8d55", + "sourceText": "def option(\n *param_decls: str, cls: type[Option] | None = None, **attrs: t.Any\n) -> t.Callable[[FC], FC]:\n \"\"\"Attaches an option to the command. All positional arguments are" + }, + { + "repository": "click", + "tool": "graphify", + "rank": 9, + "label": "echo()", + "degree": 37, + "role": null + }, + { + "repository": "click", + "tool": "graphify", + "rank": 10, + "label": "Choice", + "degree": 31, + "role": "type", + "id": "src_click_types_choice", + "file": "src/click/types.py", + "line": 342, + "sourceFileSha256": "30a39185da37bbd98ef47153f7bfd310b04eac44bd9b9b2fe15998406337757e", + "sourceText": "class Choice(ParamType[_ValueT_co], t.Generic[_ValueT_co]):\n \"\"\"The choice type allows a value to be checked against a fixed set\n of supported values.\n" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 1, + "label": ".parse()", + "degree": 798, + "role": "callable", + "id": "sha256:f7d4781fbbe1422803605dbf458fa8a1db80c4d645eb71314550f10d633b9866", + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 77, + "sourceFileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7", + "sourceText": " public static Document parse(String html) {\n return Parser.parse(html, \"\");\n }\n" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 2, + "label": "Element", + "degree": 635, + "role": "type", + "id": "sha256:95c73544da32be6d2e83b3eebff33a5c4e0119744fa6da3e4957a661dfa20956", + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 50, + "sourceFileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "sourceText": "public class Element extends Node implements Iterable {\n private static final List EmptyChildren = Collections.emptyList();\n private static final NodeList EmptyNodeList = new NodeList(0);\n static final String BaseUriKey = Attributes.internalKey(\"baseUri\");" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 3, + "label": "Node", + "degree": 295, + "role": "type", + "id": "sha256:cb5d1a2ae3e71d4c6956fc589767e1bfc7f1b6a9d47417ca5acf37308c46bd2c", + "file": "src/main/java/org/jsoup/nodes/Node.java", + "line": 26, + "sourceFileSha256": "5a8e21930be1a65ae41055a09ba3400dd8a134ad3e693cea61f41cc4242d27ec", + "sourceText": "public abstract class Node implements Cloneable {\n static final List EmptyNodes = Collections.emptyList();\n static final String EmptyString = \"\";\n @Nullable Element parentNode; // Nodes don't always have parents" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 4, + "label": "HtmlParserTest", + "degree": 284, + "role": "test-type", + "id": "sha256:de2de457e5558493b588e65ee2aa2d3cb6ffbce7cefe413a70ad228e62f72f85", + "file": "src/test/java/org/jsoup/parser/HtmlParserTest.java", + "line": 32, + "sourceFileSha256": "859f7ccb7c09558e54328e0eb6001f8fcc5b84e67c71b0bd2533ffe070495719", + "sourceText": "public class HtmlParserTest {\n\n @Test public void parsesSimpleDocument() {\n String html = \"First!

First post!

\";" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 5, + "label": "ElementTest", + "degree": 261, + "role": "test-type", + "id": "sha256:41d1bdb7999a0b8d28dde83783ce8473f14b015b88cdebaf451f2d965f60b9c9", + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 46, + "sourceFileSha256": "f3d201c08a41ee429f5fe9fb72a12bbb6a620592d1276e66d876022fb5ef39bc", + "sourceText": "public class ElementTest {\n private final String reference = \"

Hello

Another element

\";\n\n private static void validateScriptContents(String src, Element el) {" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 6, + "label": "CharacterReader", + "degree": 206, + "role": "type", + "id": "sha256:8dbd9566f2d7185705a924a0e685666f5b58349f89d04c2d7f7c1f2ade5250f1", + "file": "src/main/java/org/jsoup/parser/CharacterReader.java", + "line": 22, + "sourceFileSha256": "f93452a6022d438df7ce17f00dabd9d32589815b30ee4f5e6d1bd1208e36274c", + "sourceText": "public final class CharacterReader implements AutoCloseable {\n static final char EOF = (char) -1;\n private static final int MaxStringCacheLen = 12;\n private static final int StringCacheSize = 512;" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 7, + "label": "HtmlTreeBuilder", + "degree": 203, + "role": "type", + "id": "sha256:448d5953d9c1e7f7d0129715551893b4a930bca8a120832d6895ab762e0f9337", + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilder.java", + "line": 33, + "sourceFileSha256": "c7fff264056bc226eb6065efd407cbf990722c739afc00ebcde1ffef6ca7b72f", + "sourceText": "public class HtmlTreeBuilder extends TreeBuilder {\n static final String[] TagMathMlTextIntegration = new String[]{\"mi\", \"mn\", \"mo\", \"ms\", \"mtext\"};\n static final String[] TagSvgHtmlIntegration = new String[]{\"desc\", \"foreignObject\", \"title\"};\n static final String[] TagFormListed = {" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 8, + "label": ".body()", + "degree": 187, + "role": "callable", + "id": "sha256:f4f51f52089ad7a2a597230a89bbae7dd488d3e3a2f4d872df44b6325e6aa1d8", + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 155, + "sourceFileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "sourceText": " public Element body() {\n final Element html = htmlEl();\n Element el = html.firstElementChild();\n while (el != null) {" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 9, + "label": "Document", + "degree": 182, + "role": "type", + "id": "sha256:f947ec4bb8822b5d9607c6786bb89ebe182f9c5d31ccf7b829fa583f5fa9bd82", + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 26, + "sourceFileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "sourceText": "public class Document extends Element {\n private @Nullable Connection connection; // the connection this doc was fetched from, if any\n private OutputSettings outputSettings = new OutputSettings();\n private Parser parser; // the parser used to parse this document" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 10, + "label": ".stripNewlines()", + "degree": 177, + "role": "test-helper", + "id": "sha256:5517e1de0e519d02805292870167f5e1176438f58f9336b90139ee55cf9c59f4", + "file": "src/test/java/org/jsoup/TextUtil.java", + "line": 16, + "sourceFileSha256": "48216be48aa35dae2459fc3f2ea487abda9e3a6924dae3c0b661a4fd6cc684d2", + "sourceText": " public static String stripNewlines(String text) {\n return stripper.matcher(text).replaceAll(\"\");\n }\n" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 1, + "label": "Element", + "degree": 415, + "role": "type", + "id": "src_main_java_org_jsoup_nodes_element_element", + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 50, + "sourceFileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "sourceText": "public class Element extends Node implements Iterable {\n private static final List EmptyChildren = Collections.emptyList();\n private static final NodeList EmptyNodeList = new NodeList(0);\n static final String BaseUriKey = Attributes.internalKey(\"baseUri\");" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 2, + "label": "HtmlParserTest", + "degree": 284, + "role": "test-type", + "id": "src_test_java_org_jsoup_parser_htmlparsertest_htmlparsertest", + "file": "src/test/java/org/jsoup/parser/HtmlParserTest.java", + "line": 32, + "sourceFileSha256": "859f7ccb7c09558e54328e0eb6001f8fcc5b84e67c71b0bd2533ffe070495719", + "sourceText": "public class HtmlParserTest {\n\n @Test public void parsesSimpleDocument() {\n String html = \"First!

First post!

\";" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 3, + "label": "ElementTest", + "degree": 260, + "role": "test-type", + "id": "src_test_java_org_jsoup_nodes_elementtest_elementtest", + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 46, + "sourceFileSha256": "f3d201c08a41ee429f5fe9fb72a12bbb6a620592d1276e66d876022fb5ef39bc", + "sourceText": "public class ElementTest {\n private final String reference = \"

Hello

Another element

\";\n\n private static void validateScriptContents(String src, Element el) {" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 4, + "label": "Node", + "degree": 234, + "role": "type", + "id": "src_main_java_org_jsoup_nodes_node_node", + "file": "src/main/java/org/jsoup/nodes/Node.java", + "line": 26, + "sourceFileSha256": "5a8e21930be1a65ae41055a09ba3400dd8a134ad3e693cea61f41cc4242d27ec", + "sourceText": "public abstract class Node implements Cloneable {\n static final List EmptyNodes = Collections.emptyList();\n static final String EmptyString = \"\";\n @Nullable Element parentNode; // Nodes don't always have parents" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 5, + "label": "HtmlTreeBuilder", + "degree": 162, + "role": "type", + "id": "src_main_java_org_jsoup_parser_htmltreebuilder_htmltreebuilder", + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilder.java", + "line": 33, + "sourceFileSha256": "c7fff264056bc226eb6065efd407cbf990722c739afc00ebcde1ffef6ca7b72f", + "sourceText": "public class HtmlTreeBuilder extends TreeBuilder {\n static final String[] TagMathMlTextIntegration = new String[]{\"mi\", \"mn\", \"mo\", \"ms\", \"mtext\"};\n static final String[] TagSvgHtmlIntegration = new String[]{\"desc\", \"foreignObject\", \"title\"};\n static final String[] TagFormListed = {" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 6, + "label": "SelectorTest", + "degree": 160, + "role": "test-type", + "id": "src_test_java_org_jsoup_select_selectortest_selectortest", + "file": "src/test/java/org/jsoup/select/SelectorTest.java", + "line": 31, + "sourceFileSha256": "0560f38b89cb82e8f7e12386d468b43bd069874941be5fa85ad3227363e18d66", + "sourceText": "public class SelectorTest {\n\n /** Test that the selected elements match exactly the specified IDs. */\n public static void assertSelectedIds(Elements els, String... ids) {" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 7, + "label": "CharacterReader", + "degree": 139, + "role": "type", + "id": "src_main_java_org_jsoup_parser_characterreader_characterreader", + "file": "src/main/java/org/jsoup/parser/CharacterReader.java", + "line": 22, + "sourceFileSha256": "f93452a6022d438df7ce17f00dabd9d32589815b30ee4f5e6d1bd1208e36274c", + "sourceText": "public final class CharacterReader implements AutoCloseable {\n static final char EOF = (char) -1;\n private static final int MaxStringCacheLen = 12;\n private static final int StringCacheSize = 512;" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 8, + "label": "Evaluator", + "degree": 134, + "role": "type", + "id": "src_main_java_org_jsoup_select_evaluator_evaluator", + "file": "src/main/java/org/jsoup/select/Evaluator.java", + "line": 31, + "sourceFileSha256": "5a3ce0742ddf5d5bb647e8627735c47c656f5642361f41fbb30f26fa7b6f7e8d", + "sourceText": "public abstract class Evaluator {\n protected Evaluator() {\n }\n" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 9, + "label": "Tokeniser", + "degree": 122, + "role": "type", + "id": "src_main_java_org_jsoup_parser_tokeniser_tokeniser", + "file": "src/main/java/org/jsoup/parser/Tokeniser.java", + "line": 16, + "sourceFileSha256": "16250f9ef5cf94e3fc7100a8356e466ef1c4273d84c455d64ace82a29b35a09f", + "sourceText": "final class Tokeniser {\n static final char replacementChar = '\\uFFFD'; // replaces null character\n private static final char[] notCharRefCharsSorted = new char[]{'\\t', '\\n', '\\r', '\\f', ' ', '<', '&'};\n" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 10, + "label": "Document", + "degree": 121, + "role": "type", + "id": "src_main_java_org_jsoup_nodes_document_document", + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 26, + "sourceFileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "sourceText": "public class Document extends Element {\n private @Nullable Connection connection; // the connection this doc was fetched from, if any\n private OutputSettings outputSettings = new OutputSettings();\n private Parser parser; // the parser used to parse this document" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 1, + "label": "createStore.spec", + "degree": 159, + "role": "test-module", + "id": "sha256:74fe6fa433c85236a87bda7c1d2beb4256849ee0e3e4c16dac078f89c8d7251d", + "file": "test/createStore.spec.ts", + "line": 1, + "sourceFileSha256": "28b82562daeb4dbbce155397db1825c1b47e28cdac317033bd1655619b5eadb6", + "sourceText": "import type { StoreEnhancer, Action, Store, Reducer } from 'redux'\nimport { createStore, combineReducers } from 'redux'\nimport { vi } from 'vitest'\nimport {" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 2, + "label": "combineReducers.spec", + "degree": 84, + "role": "test-module", + "id": "sha256:10a60eda4e3187f3fc3119318562b3e286b7a8903bd64be8946ec37494becf44", + "file": "test/combineReducers.spec.ts", + "line": 1, + "sourceFileSha256": "4dc22297b4938fa7278dde5350870e2fa31c8ff87a7d48b943a3b8fc64ddfb84", + "sourceText": "/* oxlint-disable no-console */\nimport type { Reducer, Action } from 'redux'\nimport {\n createStore," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 3, + "label": "defaultAssembleReplacementNodes()", + "degree": 74, + "role": "documentation-tooling", + "id": "sha256:9695b4120077fb0d683e8f491bae870400b249ec2652a51e73203216ba7b5f60", + "file": "website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts", + "line": 215, + "sourceFileSha256": "dd7cbd61846175fcad25c515ffa2c4c95d44ec7b739dd3dcc11e181c59d3c3f7", + "sourceText": "export function defaultAssembleReplacementNodes(\n node: CodeNode,\n file: VFile,\n virtualFolder: string," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 4, + "label": "index", + "degree": 70, + "role": "source-module", + "id": "sha256:dce3d43d2e05a1e2cff376a47a40c65b4c8879f6e24b0f34fb2bc0dd19d219fa", + "file": "src/index.ts", + "line": 1, + "sourceFileSha256": "8bb0a6852611119382cae7dc89ab600d43701c87644e518042ab23134a4c16a9", + "sourceText": "// functions\nimport { createStore, legacy_createStore } from './createStore'\nimport combineReducers from './combineReducers'\nimport bindActionCreators from './bindActionCreators'" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 5, + "label": "reducers.test-d", + "degree": 68, + "role": "test-module", + "id": "sha256:f1fdcad28d45e9456b801123f7cb03ae12f0875f58aa73a52e3abd8a73e0b3f7", + "file": "test/typescript/reducers.test-d.ts", + "line": 1, + "sourceFileSha256": "6e9d92a666fef0546948aa96d7e7d14b96f31c3f660074039d8cc0bb8a1e5d0e", + "sourceText": "import type {\n Action,\n AnyAction,\n PreloadedStateShapeFromReducersMapObject," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 6, + "label": "transpileCodeblocks()", + "degree": 56, + "role": "documentation-tooling", + "id": "sha256:e1a2859c6983979bae899fd5f06a8e0d221aa1811cb1d42787ad0ac98e8067ea", + "file": "website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts", + "line": 46, + "sourceFileSha256": "dd7cbd61846175fcad25c515ffa2c4c95d44ec7b739dd3dcc11e181c59d3c3f7", + "sourceText": "export const transpileCodeblocks: Plugin<[TranspileCodeblocksSettings]> =\n function ({\n compilerSettings,\n postProcessTranspiledJs = defaultPostProcessTranspiledJs," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 7, + "label": "enhancers.test-d", + "degree": 47, + "role": "test-module", + "id": "sha256:70cc954750611610bf9773a8c59e07344ac1f8fafc7107565c5c9e346dccbf5b", + "file": "test/typescript/enhancers.test-d.ts", + "line": 1, + "sourceFileSha256": "12fea8393645a50c8be7ee2b1b81839bcb903e80c7394361ba60268e80ad4313", + "sourceText": "import type { Action, Reducer, StoreEnhancer } from 'redux'\nimport { createStore } from 'redux'\n\ninterface State {" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 8, + "label": "store.test-d", + "degree": 35, + "role": "test-module", + "id": "sha256:9bf18a6ffd0f35c3ce4b2e33d8ef1bcd285fc930e09955b98176f15289db3124", + "file": "test/typescript/store.test-d.ts", + "line": 1, + "sourceFileSha256": "ad0d2a2e2490699420a14afc689bd57d7967d5220e41f97c257b86c90098bd77", + "sourceText": "import type {\n Action,\n Observer,\n Reducer," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 9, + "label": "store", + "degree": 33, + "role": "source-module", + "id": "sha256:802d7602df7b8cac096452350c66b4dd52d05861d0dee4b3ba6f86421bdf2db4", + "file": "src/types/store.ts", + "line": 1, + "sourceFileSha256": "14d07fb4a3bd59122730edd9c5080fa051f3ae13df1095a767358ec69d67886b", + "sourceText": "import type { Action, UnknownAction } from './actions'\nimport type { Reducer } from './reducers'\n// oxlint-disable-next-line typescript/no-unused-vars\nimport _$$observable from '../utils/symbol-observable'" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 10, + "label": "createStore()", + "degree": 33, + "role": "callable", + "id": "sha256:ceae4b39dd8902b6888096a1827ee67422d04d3c19d527d674ec740c3e903785", + "file": "src/createStore.ts", + "line": 86, + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "sourceText": "export function createStore<\n S,\n A extends Action,\n Ext extends {} = {}," + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 1, + "label": "Action", + "degree": 23, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 2, + "label": "createStore()", + "degree": 22, + "role": "callable", + "id": "src_createstore_createstore", + "file": "src/createStore.ts", + "line": 86, + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "sourceText": "export function createStore<\n S,\n A extends Action,\n Ext extends {} = {}," + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 3, + "label": "compilerOptions", + "degree": 21, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 4, + "label": "compilerOptions", + "degree": 19, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 5, + "label": "compilerOptions", + "degree": 16, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 6, + "label": "scripts", + "degree": 14, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 7, + "label": "Dispatch", + "degree": 13, + "role": "type", + "id": "src_types_store_dispatch", + "file": "src/types/store.ts", + "line": 27, + "sourceFileSha256": "14d07fb4a3bd59122730edd9c5080fa051f3ae13df1095a767358ec69d67886b", + "sourceText": "export interface Dispatch
{\n (action: T, ...extraArgs: any[]): T\n}\n" + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 8, + "label": "Reducer", + "degree": 12, + "role": "type", + "id": "src_types_reducers_reducer", + "file": "src/types/reducers.ts", + "line": 30, + "sourceFileSha256": "f79a73490d143561e6071c03d852fc78fe057384a6a3e6ff81b81e887df76bc1", + "sourceText": "export type Reducer<\n S = any,\n A extends Action = UnknownAction,\n PreloadedState = S" + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 9, + "label": "combineReducers()", + "degree": 12, + "role": "callable", + "id": "src_combinereducers_combinereducers", + "file": "src/combineReducers.ts", + "line": 123, + "sourceFileSha256": "52f4a8c5561bd9ea2532edd31d3a8958dabb13fcc0d11140d158c84e454ce1dc", + "sourceText": "export default function combineReducers(reducers: {\n [key: string]: Reducer\n}) {\n const reducerKeys = Object.keys(reducers)" + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 10, + "label": "Store", + "degree": 11, + "role": "type", + "id": "src_types_store_store", + "file": "src/types/store.ts", + "line": 81, + "sourceFileSha256": "14d07fb4a3bd59122730edd9c5080fa051f3ae13df1095a767358ec69d67886b", + "sourceText": "export interface Store<\n S = any,\n A extends Action = UnknownAction,\n StateExt extends unknown = unknown" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 1, + "label": "DirEntry", + "degree": 67, + "role": "type", + "id": "sha256:9102d21ed875d3f823b6a2b6c19b5c9ec4ec6d5734b63c544d1ede2b4fb09374", + "file": "src/dent.rs", + "line": 35, + "sourceFileSha256": "ca573f4533370a09851579f5940f7cd9bd121b2f30ec51d29a40afdce984683b", + "sourceText": "pub struct DirEntry {\n /// The path as reported by the [`fs::ReadDir`] iterator (even if it's a\n /// symbolic link).\n ///" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 2, + "label": ".new()", + "degree": 51, + "role": "callable", + "id": "sha256:38839ab8bc007bfdd70a2ed3abfb3a77950fb3d008d621d9cf7c5c9bbc8f8d6a", + "file": "src/lib.rs", + "line": 289, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": " pub fn new>(root: P) -> Self {\n WalkDir {\n opts: WalkDirOptions {\n follow_links: false," + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 3, + "label": ".tmp()", + "degree": 50, + "role": "test-helper", + "id": "sha256:0dbcc8c36333b467c48ece7070677fe49f658cd8454b9fd76a40ed7303319fa4", + "file": "src/tests/util.rs", + "line": 84, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn tmp() -> Dir {\n let dir = TempDir::new().unwrap();\n Dir { dir }\n }" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 4, + "label": ".run_recursive()", + "degree": 50, + "role": "test-helper", + "id": "sha256:caafb698ff937854c3b5f77147d26689bf26777be7dca6bcee83d425593d53f8", + "file": "src/tests/util.rs", + "line": 101, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn run_recursive(&self, it: I) -> RecursiveResults\n where\n I: IntoIterator>,\n {" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 5, + "label": ".path()", + "degree": 42, + "role": "test-helper", + "id": "sha256:76ab83daadb4f80254042a7ee65d7cdda5f0c66fa708172245f102572ca08106", + "file": "src/tests/util.rs", + "line": 90, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn path(&self) -> &Path {\n self.dir.path()\n }\n" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 6, + "label": ".mkdirp()", + "degree": 34, + "role": "test-helper", + "id": "sha256:6984d05046d66fab178a4dcaf88c3814c5030b5bfa795fd5d68a3c14469cb71b", + "file": "src/tests/util.rs", + "line": 117, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn mkdirp>(&self, path: P) {\n let full = self.join(path);\n fs::create_dir_all(&full)\n .map_err(|e| {" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 7, + "label": "Error", + "degree": 31, + "role": "type", + "id": "sha256:a66dc1de7a258eafe92e616e5c94a0107fda891db6f9ca33ca1e10fbac5845c9", + "file": "src/error.rs", + "line": 28, + "sourceFileSha256": "ba58bf6f59d196567435d4b66699a928cc237fc7c8df01dc37ab822509905b7c", + "sourceText": "pub struct Error {\n depth: usize,\n inner: ErrorInner,\n}" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 8, + "label": "WalkDir", + "degree": 31, + "role": "type", + "id": "sha256:b647b5809af96e790d083521ec5b9ee189e2a2446b6a08294da8300d43fc420e", + "file": "src/lib.rs", + "line": 234, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "pub struct WalkDir {\n opts: WalkDirOptions,\n root: PathBuf,\n}" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 9, + "label": "Result", + "degree": 27, + "role": "type", + "id": "sha256:b0a84ceb03a1b40af4acbce9ba086ead4d7cfc8679eb1cda58f7024a9899c6be", + "file": "src/lib.rs", + "line": 157, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "pub type Result = ::std::result::Result;\n\n/// A builder to create an iterator for recursively walking a directory.\n///" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 10, + "label": ".touch()", + "degree": 22, + "role": "test-helper", + "id": "sha256:062bcfac2f5cea7a99a078422476e89eb7977023b3d5c265c534e7a2b0ca6c99", + "file": "src/tests/util.rs", + "line": 128, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn touch>(&self, path: P) {\n let full = self.join(path);\n File::create(&full)\n .map_err(|e| {" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 1, + "label": "DirEntry", + "degree": 39, + "role": "type", + "id": "src_dent_direntry", + "file": "src/dent.rs", + "line": 35, + "sourceFileSha256": "ca573f4533370a09851579f5940f7cd9bd121b2f30ec51d29a40afdce984683b", + "sourceText": "pub struct DirEntry {\n /// The path as reported by the [`fs::ReadDir`] iterator (even if it's a\n /// symbolic link).\n ///" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 2, + "label": "IntoIter", + "degree": 22, + "role": "type", + "id": "src_lib_intoiter", + "file": "src/lib.rs", + "line": 566, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "pub struct IntoIter {\n /// Options specified in the builder. Depths, max fds, etc.\n opts: WalkDirOptions,\n /// The start path." + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 3, + "label": "WalkDir", + "degree": 19, + "role": "type", + "id": "src_lib_walkdir", + "file": "src/lib.rs", + "line": 234, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "pub struct WalkDir {\n opts: WalkDirOptions,\n root: PathBuf,\n}" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 4, + "label": "WalkDirOptions", + "degree": 12, + "role": "type", + "id": "src_lib_walkdiroptions", + "file": "src/lib.rs", + "line": 239, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "struct WalkDirOptions {\n follow_links: bool,\n follow_root_links: bool,\n max_open: usize," + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 5, + "label": "Dir", + "degree": 11, + "role": "test-type", + "id": "src_tests_util_dir", + "file": "src/tests/util.rs", + "line": 78, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": "pub struct Dir {\n dir: TempDir,\n}\n" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 6, + "label": "RecursiveResults", + "degree": 11, + "role": "test-type", + "id": "src_tests_util_recursiveresults", + "file": "src/tests/util.rs", + "line": 23, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": "pub struct RecursiveResults {\n ents: Vec,\n errs: Vec,\n}" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 7, + "label": "DirList", + "degree": 10, + "role": "type", + "id": "src_lib_dirlist", + "file": "src/lib.rs", + "line": 661, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "enum DirList {\n /// An opened handle.\n ///\n /// This includes the depth of the handle itself." + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 8, + "label": "Args", + "degree": 10, + "role": "example-type", + "id": "walkdir_list_main_args", + "file": "walkdir-list/main.rs", + "line": 156, + "sourceFileSha256": "d87ed239df1f120d2dc8711e83f02d26785396b7bc15d6c865490cd9ab2d7886", + "sourceText": "struct Args {\n dirs: Vec,\n follow_links: bool,\n min_depth: Option," + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 9, + "label": "print_paths_flat()", + "degree": 9, + "role": "example-callable", + "id": "walkdir_list_main_print_paths_flat", + "file": "walkdir-list/main.rs", + "line": 102, + "sourceFileSha256": "d87ed239df1f120d2dc8711e83f02d26785396b7bc15d6c865490cd9ab2d7886", + "sourceText": "fn print_paths_flat(\n args: &Args,\n mut stdout: W1,\n mut stderr: W2," + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 10, + "label": "print_paths_tree()", + "degree": 9, + "role": "example-callable", + "id": "walkdir_list_main_print_paths_tree", + "file": "walkdir-list/main.rs", + "line": 128, + "sourceFileSha256": "d87ed239df1f120d2dc8711e83f02d26785396b7bc15d6c865490cd9ab2d7886", + "sourceText": "fn print_paths_tree(\n args: &Args,\n mut stdout: W1,\n mut stderr: W2," + } + ] +} diff --git a/benchmarks/agent_query/hub_role_reviews_panel_a_after_routes.json b/benchmarks/agent_query/hub_role_reviews_panel_a_after_routes.json new file mode 100644 index 000000000..a9b926d1b --- /dev/null +++ b/benchmarks/agent_query/hub_role_reviews_panel_a_after_routes.json @@ -0,0 +1,1310 @@ +{ + "schema": "compass.hub-source-review/1", + "scope": "Post-correction source-role census. Previously reviewed identities retain their roles only after exact source-anchor, excerpt, and whole-file digest equality. Two newly returned Chi hubs were inspected: compressResponseWriter is a production type and bigMux is a test helper. Different returned sets still do not establish source precision or god-object quality.", + "roles": { + "type": "Production type declaration, including class, struct, alias, interface, and public testing API types.", + "callable": "Production function or method.", + "test-helper": "Callable used by repository tests.", + "test-type": "Class or structured helper type in repository tests.", + "source-module": "Whole source-file module container.", + "test-module": "Whole test-file module container.", + "example-callable": "Function in an example application.", + "benchmark-callable": "Benchmark support function.", + "generic-implementation": "Implementation block whose target is its own generic parameter.", + "trait-implementation": "Trait implementation block, not a new type declaration.", + "test-route": "Framework route registration in a repository test; not a callable/type declaration.", + "example-route": "Framework route registration in an example application; not a callable/type declaration.", + "example-type": "Type in a demonstration CLI/application.", + "documentation-tooling": "Callable used to build or transform repository documentation." + }, + "inputRunSha256": "c001978913423a45102f74cd8f079cf78a12e1b425f40c9451ca8725b416ea91", + "sources": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "compassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "compassGraphSha256": "8035487618e4e96af8b7cc668d92eaea9ee3ec2a831c486d20055bc808fa23f6", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "compassGraphSha256": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ], + "reviews": [ + { + "repository": "chi", + "tool": "compass", + "rank": 1, + "label": "Mux", + "degree": 71, + "role": "type", + "id": "sha256:d003705234e34bbb357969b1c76ccd4cd1adadcf314b380d8ed89255dd633335", + "file": "mux.go", + "line": 21, + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "sourceText": "type Mux struct {\n\t// The computed mux handler made of the chained middleware stack and\n\t// the tree router\n\thandler http.Handler" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 2, + "label": "NewRouter()", + "degree": 51, + "role": "callable", + "id": "sha256:1928266631ebdc4651cac18aa5abc7ab261abc74a669ec9071a53d68b1f30699", + "file": "chi.go", + "line": 62, + "sourceFileSha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678", + "sourceText": "func NewRouter() *Mux {\n\treturn NewMux()\n}\n" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 3, + "label": "Router", + "degree": 49, + "role": "type", + "id": "sha256:8ab5bf62c8dcdea65c3d185e73de6efa0660677862d5b997ed6086d6b3571fae", + "file": "chi.go", + "line": 68, + "sourceFileSha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678", + "sourceText": "type Router interface {\n\thttp.Handler\n\tRoutes\n" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 4, + "label": "node", + "degree": 34, + "role": "type", + "id": "sha256:a5f10ee47ecf99eb3039567ca90b2070ee96c4e323ea1c7baf0f3b91b5febaf9", + "file": "tree.go", + "line": 97, + "sourceFileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "sourceText": "type node struct {\n\t// subroutes on the leaf node\n\tsubroutes Routes\n" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 5, + "label": "testRequest()", + "degree": 31, + "role": "test-helper", + "id": "sha256:affecca8ae0fa3330373f2b674191af88d18c533d78f967e8dc4e7158a2a5f13", + "file": "mux_test.go", + "line": 2075, + "sourceFileSha256": "162d82fa10418b99baf750e3fbcb1fee018bfd654850a9f01382a175390dc965", + "sourceText": "func testRequest(t *testing.T, ts *httptest.Server, method, path string, body io.Reader) (*http.Response, string) {\n\treq, err := http.NewRequest(method, ts.URL+path, body)\n\tif err != nil {\n\t\tt.Fatal(err)" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 6, + "label": "basicWriter", + "degree": 24, + "role": "type", + "id": "sha256:93b2e10be45a493f2b1da664d2d0e221b054df3bf9b5165f30bf13d402e37716", + "file": "middleware/wrap_writer.go", + "line": 74, + "sourceFileSha256": "7b6ed24d3d5bfd362e00851d117e74273b02597a1d9e9eb243cbf7aae22597c8", + "sourceText": "type basicWriter struct {\n\thttp.ResponseWriter\n\ttee io.Writer\n\tcode int" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 7, + "label": ".handle()", + "degree": 22, + "role": "callable", + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "file": "mux.go", + "line": 430, + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "sourceText": "func (mx *Mux) handle(method methodTyp, pattern string, handler http.Handler) *node {\n\tif len(pattern) == 0 || pattern[0] != '/' {\n\t\tpanic(fmt.Sprintf(\"chi: routing pattern must begin with '/' in '%s'\", pattern))\n\t}" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 8, + "label": "Context", + "degree": 21, + "role": "type", + "id": "sha256:3c0e2dbc07035a3a8f70ae8bae0699c3db0914711df3e9c57fbe21b7bc4ea06b", + "file": "context.go", + "line": 45, + "sourceFileSha256": "b19edcca252e2fe74e82802c4c7ce1a1c0855728f9ede1288f0224283dfc7e53", + "sourceText": "type Context struct {\n\tRoutes Routes\n\n\t// parentCtx is the parent of this one, for using Context as a" + }, + { + "repository": "chi", + "tool": "compass", + "rank": 9, + "label": "compressResponseWriter", + "degree": 19, + "role": "type", + "id": "sha256:6652f72be18cde87987c915525e5d29a01e939bbe4845b2bcf212846d4c15447", + "file": "middleware/compress.go", + "line": 281, + "sourceFileSha256": "1a54e1cd05a913dd26bc00faab499cddc58a00646a92af5051961100d1532698", + "sourceText": "type compressResponseWriter struct {\n\thttp.ResponseWriter\n\n\t// The streaming encoder writer to be used if there is one. Otherwise," + }, + { + "repository": "chi", + "tool": "compass", + "rank": 10, + "label": "bigMux()", + "degree": 18, + "role": "test-helper", + "id": "sha256:b52814396c5f93d2f2cf1bd9b4c224234fe1e7d72cb07ec893525963eb8a821b", + "file": "mux_test.go", + "line": 960, + "sourceFileSha256": "162d82fa10418b99baf750e3fbcb1fee018bfd654850a9f01382a175390dc965", + "sourceText": "func bigMux() Router {\n\tvar r *Mux\n\tvar sr3 *Mux\n\t// var sr1, sr2, sr3, sr4, sr5, sr6 *Mux" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 1, + "label": "NewRouter()", + "degree": 51, + "role": "callable", + "id": "chi_newrouter", + "file": "chi.go", + "line": 62, + "sourceFileSha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678", + "sourceText": "func NewRouter() *Mux {\n\treturn NewMux()\n}\n" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 2, + "label": "Mux", + "degree": 40, + "role": "type", + "id": "mux_go_chi_mux", + "file": "mux.go", + "line": 21, + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "sourceText": "type Mux struct {\n\t// The computed mux handler made of the chained middleware stack and\n\t// the tree router\n\thandler http.Handler" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 3, + "label": "testRequest()", + "degree": 35, + "role": null + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 4, + "label": "Context", + "degree": 30, + "role": "type", + "id": "chi_context", + "file": "context.go", + "line": 45, + "sourceFileSha256": "b19edcca252e2fe74e82802c4c7ce1a1c0855728f9ede1288f0224283dfc7e53", + "sourceText": "type Context struct {\n\tRoutes Routes\n\n\t// parentCtx is the parent of this one, for using Context as a" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 5, + "label": "Router", + "degree": 28, + "role": "type", + "id": "chi_go_chi_router", + "file": "chi.go", + "line": 68, + "sourceFileSha256": "47c70ececcbb9d71f973eda3cbadad0a46c8cc2261b285f7049b5261f337d678", + "sourceText": "type Router interface {\n\thttp.Handler\n\tRoutes\n" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 6, + "label": "node", + "degree": 22, + "role": "type", + "id": "chi_node", + "file": "tree.go", + "line": 97, + "sourceFileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "sourceText": "type node struct {\n\t// subroutes on the leaf node\n\tsubroutes Routes\n" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 7, + "label": "run()", + "degree": 18, + "role": "test-helper", + "id": "middleware_client_ip_test_run", + "file": "middleware/client_ip_test.go", + "line": 706, + "sourceFileSha256": "bfc0d690534b833f73117d8a4c25aaedef6923c3145b6aadd3a0c149e2a427de", + "sourceText": "func run(t *testing.T, mw func(http.Handler) http.Handler, buildReq func(*http.Request)) string {\n\tt.Helper()\n\treq := httptest.NewRequest(\"GET\", \"/\", nil)\n\tbuildReq(req)" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 8, + "label": "basicWriter", + "degree": 17, + "role": "type", + "id": "middleware_basicwriter", + "file": "middleware/wrap_writer.go", + "line": 74, + "sourceFileSha256": "7b6ed24d3d5bfd362e00851d117e74273b02597a1d9e9eb243cbf7aae22597c8", + "sourceText": "type basicWriter struct {\n\thttp.ResponseWriter\n\ttee io.Writer\n\tcode int" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 9, + "label": "ClientIPFromXFF()", + "degree": 16, + "role": "callable", + "id": "middleware_client_ip_clientipfromxff", + "file": "middleware/client_ip.go", + "line": 93, + "sourceFileSha256": "fc4eef97991796067607038437bd3b23e04337ba9b07ed3c4147d8b49ecf5e9e", + "sourceText": "func ClientIPFromXFF(trustedIPPrefixes ...string) func(http.Handler) http.Handler {\n\tprefixes := make([]netip.Prefix, len(trustedIPPrefixes))\n\tfor i, p := range trustedIPPrefixes {\n\t\tprefixes[i] = netip.MustParsePrefix(p)" + }, + { + "repository": "chi", + "tool": "graphify", + "rank": 10, + "label": "assertEqual()", + "degree": 15, + "role": "test-helper", + "id": "middleware_middleware_test_assertequal", + "file": "middleware/middleware_test.go", + "line": 208, + "sourceFileSha256": "f93aec66e191433ab67ea727d45dc6cbdb4184d874132339c2715431c41e3eba", + "sourceText": "func assertEqual(t *testing.T, a, b any) {\n\tt.Helper()\n\tif !reflect.DeepEqual(a, b) {\n\t\tt.Fatalf(\"expecting values to be equal but got: '%v' and '%v'\", a, b)" + }, + { + "repository": "click", + "tool": "compass", + "rank": 1, + "label": "Context", + "degree": 303, + "role": "type", + "id": "sha256:04db8174ad36dd65699520c296fd738ff4258d7e4c6ac31d8c5c48d084032ded", + "file": "src/click/core.py", + "line": 234, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Context:\n \"\"\"The context is a special internal object that holds state relevant\n for the script execution at every single level. It's normally invisible\n to commands unless they opt-in to getting access to it." + }, + { + "repository": "click", + "tool": "compass", + "rank": 2, + "label": "Parameter", + "degree": 129, + "role": "type", + "id": "sha256:ae1ae71b96a9620030b4830d9f4e3159e6de8089f940e0d4bd1f04e740d93062", + "file": "src/click/core.py", + "line": 2237, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Parameter(ABC):\n r\"\"\"A parameter to a command comes in two versions: they are either\n :class:`Option`\\s or :class:`Argument`\\s. Other subclasses are currently\n not supported by design as some of the internals for parsing are" + }, + { + "repository": "click", + "tool": "compass", + "rank": 3, + "label": "Command", + "degree": 85, + "role": "type", + "id": "sha256:e822a51cf5afc73cfb7f3fccc077fd04bcb61da80b77998f22fb4b663ac4ea66", + "file": "src/click/core.py", + "line": 985, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Command:\n \"\"\"Commands are the basic building block of command line interfaces in\n Click. A basic command handles command line parsing and might dispatch\n more parsing to commands nested below it." + }, + { + "repository": "click", + "tool": "compass", + "rank": 4, + "label": "Option", + "degree": 51, + "role": "type", + "id": "sha256:6157d30f9a6fd24baf7d621b601792eb67eb2d7b9d3e185f7a44d30dee887d5b", + "file": "src/click/core.py", + "line": 2963, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Option(Parameter):\n \"\"\"Options are usually optional values on the command line and\n have some extra features that arguments don't have.\n" + }, + { + "repository": "click", + "tool": "compass", + "rank": 5, + "label": "Group", + "degree": 49, + "role": "type", + "id": "sha256:15b0848405f27a8502a9efc8d6139bf542482cedc1eacb6becaddfe554f3df0f", + "file": "src/click/core.py", + "line": 1699, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Group(Command):\n \"\"\"A group is a command that nests other commands (or more groups).\n\n :param name: The name of the group command." + }, + { + "repository": "click", + "tool": "compass", + "rank": 6, + "label": "ParamType", + "degree": 40, + "role": "type", + "id": "sha256:1f00115a5f86bc3b6514dbac1daa253d8cfaafa43b58b4f6cea5ccac733d678b", + "file": "src/click/types.py", + "line": 65, + "sourceFileSha256": "30a39185da37bbd98ef47153f7bfd310b04eac44bd9b9b2fe15998406337757e", + "sourceText": "class ParamType(t.Generic[_ValueT_co, _InputT_contra], abc.ABC):\n \"\"\"Represents the type of a parameter. Validates and converts values\n from the command line or Python into the correct type.\n" + }, + { + "repository": "click", + "tool": "compass", + "rank": 7, + "label": "HelpFormatter", + "degree": 37, + "role": "type", + "id": "sha256:a2a7bb3dd442be664b82216a6b3acd8a1e8079c2abb02f67fc7455da68e72648", + "file": "src/click/formatting.py", + "line": 110, + "sourceFileSha256": "f125b628692f8dfcfd43535b7a88cc1ee64137471f9d0243b389aa0cfea85e6b", + "sourceText": "class HelpFormatter:\n \"\"\"This class helps with formatting text-based help pages. It's\n usually just needed for very special internal cases, but it's also\n exposed so that developers can write their own fancy outputs." + }, + { + "repository": "click", + "tool": "compass", + "rank": 8, + "label": "echo()", + "degree": 36, + "role": "callable", + "id": "sha256:abda0c42f0c49427afee855d0256edc7b5b579da8e43dbcf33162ee7992d3c8a", + "file": "src/click/utils.py", + "line": 240, + "sourceFileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17", + "sourceText": "def echo(\n message: object = None,\n file: t.IO[t.Any] | None = None,\n nl: bool = True," + }, + { + "repository": "click", + "tool": "compass", + "rank": 9, + "label": "_get_words()", + "degree": 26, + "role": "test-helper", + "id": "sha256:dee697366b1c46d71686a3eccb36489b42833ef72a15c620ad3f874059c3e733", + "file": "tests/test_shell_completion.py", + "line": 29, + "sourceFileSha256": "d45f0b1b42850463a3a07273989518d477f8b19c4ca0d8ef74dc29c309276bd8", + "sourceText": "def _get_words(cli, args, incomplete):\n return [c.value for c in _get_completions(cli, args, incomplete)]\n\n" + }, + { + "repository": "click", + "tool": "compass", + "rank": 10, + "label": "Argument", + "degree": 25, + "role": "type", + "id": "sha256:23ddee6a475e892ac17dd6dee048b0da67616a649067b5918fab30b499796578", + "file": "src/click/core.py", + "line": 3800, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Argument(Parameter):\n \"\"\"Arguments are positional parameters to a command. They generally\n provide fewer features than options but can have infinite ``nargs``\n and are required by default." + }, + { + "repository": "click", + "tool": "graphify", + "rank": 1, + "label": "Context", + "degree": 174, + "role": "type", + "id": "src_click_core_context", + "file": "src/click/core.py", + "line": 234, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Context:\n \"\"\"The context is a special internal object that holds state relevant\n for the script execution at every single level. It's normally invisible\n to commands unless they opt-in to getting access to it." + }, + { + "repository": "click", + "tool": "graphify", + "rank": 2, + "label": "Command", + "degree": 100, + "role": "type", + "id": "src_click_core_command", + "file": "src/click/core.py", + "line": 985, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Command:\n \"\"\"Commands are the basic building block of command line interfaces in\n Click. A basic command handles command line parsing and might dispatch\n more parsing to commands nested below it." + }, + { + "repository": "click", + "tool": "graphify", + "rank": 3, + "label": "Parameter", + "degree": 91, + "role": "type", + "id": "src_click_core_parameter", + "file": "src/click/core.py", + "line": 2237, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Parameter(ABC):\n r\"\"\"A parameter to a command comes in two versions: they are either\n :class:`Option`\\s or :class:`Argument`\\s. Other subclasses are currently\n not supported by design as some of the internals for parsing are" + }, + { + "repository": "click", + "tool": "graphify", + "rank": 4, + "label": "CliRunner", + "degree": 65, + "role": "type", + "id": "src_click_testing_clirunner", + "file": "src/click/testing.py", + "line": 317, + "sourceFileSha256": "76f4e649bc53000d667c8c0deff1591970fa034b0f085a207165839b2301019a", + "sourceText": "class CliRunner:\n \"\"\"The CLI runner provides functionality to invoke a Click command line\n script for unittesting purposes in a isolated environment. This only\n works in single-threaded systems without any concurrency as it changes the" + }, + { + "repository": "click", + "tool": "graphify", + "rank": 5, + "label": "Option", + "degree": 55, + "role": null + }, + { + "repository": "click", + "tool": "graphify", + "rank": 6, + "label": "cmd()", + "degree": 45, + "role": null + }, + { + "repository": "click", + "tool": "graphify", + "rank": 7, + "label": "Group", + "degree": 44, + "role": "type", + "id": "src_click_core_group", + "file": "src/click/core.py", + "line": 1699, + "sourceFileSha256": "53df54afb5deba7fd7c3a968a2a6284fc2d9dd3892e6939dfbb3092ca3fbca0f", + "sourceText": "class Group(Command):\n \"\"\"A group is a command that nests other commands (or more groups).\n\n :param name: The name of the group command." + }, + { + "repository": "click", + "tool": "graphify", + "rank": 8, + "label": "option()", + "degree": 37, + "role": "callable", + "id": "src_click_decorators_option", + "file": "src/click/decorators.py", + "line": 352, + "sourceFileSha256": "16069357615691fcdfc9c794bb515f6009eb35aad6f7a76c017bdce06dae8d55", + "sourceText": "def option(\n *param_decls: str, cls: type[Option] | None = None, **attrs: t.Any\n) -> t.Callable[[FC], FC]:\n \"\"\"Attaches an option to the command. All positional arguments are" + }, + { + "repository": "click", + "tool": "graphify", + "rank": 9, + "label": "echo()", + "degree": 37, + "role": null + }, + { + "repository": "click", + "tool": "graphify", + "rank": 10, + "label": "Choice", + "degree": 31, + "role": "type", + "id": "src_click_types_choice", + "file": "src/click/types.py", + "line": 342, + "sourceFileSha256": "30a39185da37bbd98ef47153f7bfd310b04eac44bd9b9b2fe15998406337757e", + "sourceText": "class Choice(ParamType[_ValueT_co], t.Generic[_ValueT_co]):\n \"\"\"The choice type allows a value to be checked against a fixed set\n of supported values.\n" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 1, + "label": ".parse()", + "degree": 798, + "role": "callable", + "id": "sha256:f7d4781fbbe1422803605dbf458fa8a1db80c4d645eb71314550f10d633b9866", + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 77, + "sourceFileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7", + "sourceText": " public static Document parse(String html) {\n return Parser.parse(html, \"\");\n }\n" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 2, + "label": "Element", + "degree": 635, + "role": "type", + "id": "sha256:95c73544da32be6d2e83b3eebff33a5c4e0119744fa6da3e4957a661dfa20956", + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 50, + "sourceFileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "sourceText": "public class Element extends Node implements Iterable {\n private static final List EmptyChildren = Collections.emptyList();\n private static final NodeList EmptyNodeList = new NodeList(0);\n static final String BaseUriKey = Attributes.internalKey(\"baseUri\");" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 3, + "label": "Node", + "degree": 295, + "role": "type", + "id": "sha256:cb5d1a2ae3e71d4c6956fc589767e1bfc7f1b6a9d47417ca5acf37308c46bd2c", + "file": "src/main/java/org/jsoup/nodes/Node.java", + "line": 26, + "sourceFileSha256": "5a8e21930be1a65ae41055a09ba3400dd8a134ad3e693cea61f41cc4242d27ec", + "sourceText": "public abstract class Node implements Cloneable {\n static final List EmptyNodes = Collections.emptyList();\n static final String EmptyString = \"\";\n @Nullable Element parentNode; // Nodes don't always have parents" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 4, + "label": "HtmlParserTest", + "degree": 284, + "role": "test-type", + "id": "sha256:de2de457e5558493b588e65ee2aa2d3cb6ffbce7cefe413a70ad228e62f72f85", + "file": "src/test/java/org/jsoup/parser/HtmlParserTest.java", + "line": 32, + "sourceFileSha256": "859f7ccb7c09558e54328e0eb6001f8fcc5b84e67c71b0bd2533ffe070495719", + "sourceText": "public class HtmlParserTest {\n\n @Test public void parsesSimpleDocument() {\n String html = \"First!

First post!

\";" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 5, + "label": "ElementTest", + "degree": 261, + "role": "test-type", + "id": "sha256:41d1bdb7999a0b8d28dde83783ce8473f14b015b88cdebaf451f2d965f60b9c9", + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 46, + "sourceFileSha256": "f3d201c08a41ee429f5fe9fb72a12bbb6a620592d1276e66d876022fb5ef39bc", + "sourceText": "public class ElementTest {\n private final String reference = \"

Hello

Another element

\";\n\n private static void validateScriptContents(String src, Element el) {" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 6, + "label": "CharacterReader", + "degree": 206, + "role": "type", + "id": "sha256:8dbd9566f2d7185705a924a0e685666f5b58349f89d04c2d7f7c1f2ade5250f1", + "file": "src/main/java/org/jsoup/parser/CharacterReader.java", + "line": 22, + "sourceFileSha256": "f93452a6022d438df7ce17f00dabd9d32589815b30ee4f5e6d1bd1208e36274c", + "sourceText": "public final class CharacterReader implements AutoCloseable {\n static final char EOF = (char) -1;\n private static final int MaxStringCacheLen = 12;\n private static final int StringCacheSize = 512;" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 7, + "label": "HtmlTreeBuilder", + "degree": 203, + "role": "type", + "id": "sha256:448d5953d9c1e7f7d0129715551893b4a930bca8a120832d6895ab762e0f9337", + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilder.java", + "line": 33, + "sourceFileSha256": "c7fff264056bc226eb6065efd407cbf990722c739afc00ebcde1ffef6ca7b72f", + "sourceText": "public class HtmlTreeBuilder extends TreeBuilder {\n static final String[] TagMathMlTextIntegration = new String[]{\"mi\", \"mn\", \"mo\", \"ms\", \"mtext\"};\n static final String[] TagSvgHtmlIntegration = new String[]{\"desc\", \"foreignObject\", \"title\"};\n static final String[] TagFormListed = {" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 8, + "label": ".body()", + "degree": 187, + "role": "callable", + "id": "sha256:f4f51f52089ad7a2a597230a89bbae7dd488d3e3a2f4d872df44b6325e6aa1d8", + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 155, + "sourceFileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "sourceText": " public Element body() {\n final Element html = htmlEl();\n Element el = html.firstElementChild();\n while (el != null) {" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 9, + "label": "Document", + "degree": 182, + "role": "type", + "id": "sha256:f947ec4bb8822b5d9607c6786bb89ebe182f9c5d31ccf7b829fa583f5fa9bd82", + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 26, + "sourceFileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "sourceText": "public class Document extends Element {\n private @Nullable Connection connection; // the connection this doc was fetched from, if any\n private OutputSettings outputSettings = new OutputSettings();\n private Parser parser; // the parser used to parse this document" + }, + { + "repository": "jsoup", + "tool": "compass", + "rank": 10, + "label": ".stripNewlines()", + "degree": 177, + "role": "test-helper", + "id": "sha256:5517e1de0e519d02805292870167f5e1176438f58f9336b90139ee55cf9c59f4", + "file": "src/test/java/org/jsoup/TextUtil.java", + "line": 16, + "sourceFileSha256": "48216be48aa35dae2459fc3f2ea487abda9e3a6924dae3c0b661a4fd6cc684d2", + "sourceText": " public static String stripNewlines(String text) {\n return stripper.matcher(text).replaceAll(\"\");\n }\n" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 1, + "label": "Element", + "degree": 415, + "role": "type", + "id": "src_main_java_org_jsoup_nodes_element_element", + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 50, + "sourceFileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "sourceText": "public class Element extends Node implements Iterable {\n private static final List EmptyChildren = Collections.emptyList();\n private static final NodeList EmptyNodeList = new NodeList(0);\n static final String BaseUriKey = Attributes.internalKey(\"baseUri\");" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 2, + "label": "HtmlParserTest", + "degree": 284, + "role": "test-type", + "id": "src_test_java_org_jsoup_parser_htmlparsertest_htmlparsertest", + "file": "src/test/java/org/jsoup/parser/HtmlParserTest.java", + "line": 32, + "sourceFileSha256": "859f7ccb7c09558e54328e0eb6001f8fcc5b84e67c71b0bd2533ffe070495719", + "sourceText": "public class HtmlParserTest {\n\n @Test public void parsesSimpleDocument() {\n String html = \"First!

First post!

\";" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 3, + "label": "ElementTest", + "degree": 260, + "role": "test-type", + "id": "src_test_java_org_jsoup_nodes_elementtest_elementtest", + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 46, + "sourceFileSha256": "f3d201c08a41ee429f5fe9fb72a12bbb6a620592d1276e66d876022fb5ef39bc", + "sourceText": "public class ElementTest {\n private final String reference = \"

Hello

Another element

\";\n\n private static void validateScriptContents(String src, Element el) {" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 4, + "label": "Node", + "degree": 234, + "role": "type", + "id": "src_main_java_org_jsoup_nodes_node_node", + "file": "src/main/java/org/jsoup/nodes/Node.java", + "line": 26, + "sourceFileSha256": "5a8e21930be1a65ae41055a09ba3400dd8a134ad3e693cea61f41cc4242d27ec", + "sourceText": "public abstract class Node implements Cloneable {\n static final List EmptyNodes = Collections.emptyList();\n static final String EmptyString = \"\";\n @Nullable Element parentNode; // Nodes don't always have parents" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 5, + "label": "HtmlTreeBuilder", + "degree": 162, + "role": "type", + "id": "src_main_java_org_jsoup_parser_htmltreebuilder_htmltreebuilder", + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilder.java", + "line": 33, + "sourceFileSha256": "c7fff264056bc226eb6065efd407cbf990722c739afc00ebcde1ffef6ca7b72f", + "sourceText": "public class HtmlTreeBuilder extends TreeBuilder {\n static final String[] TagMathMlTextIntegration = new String[]{\"mi\", \"mn\", \"mo\", \"ms\", \"mtext\"};\n static final String[] TagSvgHtmlIntegration = new String[]{\"desc\", \"foreignObject\", \"title\"};\n static final String[] TagFormListed = {" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 6, + "label": "SelectorTest", + "degree": 160, + "role": "test-type", + "id": "src_test_java_org_jsoup_select_selectortest_selectortest", + "file": "src/test/java/org/jsoup/select/SelectorTest.java", + "line": 31, + "sourceFileSha256": "0560f38b89cb82e8f7e12386d468b43bd069874941be5fa85ad3227363e18d66", + "sourceText": "public class SelectorTest {\n\n /** Test that the selected elements match exactly the specified IDs. */\n public static void assertSelectedIds(Elements els, String... ids) {" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 7, + "label": "CharacterReader", + "degree": 139, + "role": "type", + "id": "src_main_java_org_jsoup_parser_characterreader_characterreader", + "file": "src/main/java/org/jsoup/parser/CharacterReader.java", + "line": 22, + "sourceFileSha256": "f93452a6022d438df7ce17f00dabd9d32589815b30ee4f5e6d1bd1208e36274c", + "sourceText": "public final class CharacterReader implements AutoCloseable {\n static final char EOF = (char) -1;\n private static final int MaxStringCacheLen = 12;\n private static final int StringCacheSize = 512;" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 8, + "label": "Evaluator", + "degree": 134, + "role": "type", + "id": "src_main_java_org_jsoup_select_evaluator_evaluator", + "file": "src/main/java/org/jsoup/select/Evaluator.java", + "line": 31, + "sourceFileSha256": "5a3ce0742ddf5d5bb647e8627735c47c656f5642361f41fbb30f26fa7b6f7e8d", + "sourceText": "public abstract class Evaluator {\n protected Evaluator() {\n }\n" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 9, + "label": "Tokeniser", + "degree": 122, + "role": "type", + "id": "src_main_java_org_jsoup_parser_tokeniser_tokeniser", + "file": "src/main/java/org/jsoup/parser/Tokeniser.java", + "line": 16, + "sourceFileSha256": "16250f9ef5cf94e3fc7100a8356e466ef1c4273d84c455d64ace82a29b35a09f", + "sourceText": "final class Tokeniser {\n static final char replacementChar = '\\uFFFD'; // replaces null character\n private static final char[] notCharRefCharsSorted = new char[]{'\\t', '\\n', '\\r', '\\f', ' ', '<', '&'};\n" + }, + { + "repository": "jsoup", + "tool": "graphify", + "rank": 10, + "label": "Document", + "degree": 121, + "role": "type", + "id": "src_main_java_org_jsoup_nodes_document_document", + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 26, + "sourceFileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "sourceText": "public class Document extends Element {\n private @Nullable Connection connection; // the connection this doc was fetched from, if any\n private OutputSettings outputSettings = new OutputSettings();\n private Parser parser; // the parser used to parse this document" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 1, + "label": "createStore.spec", + "degree": 159, + "role": "test-module", + "id": "sha256:74fe6fa433c85236a87bda7c1d2beb4256849ee0e3e4c16dac078f89c8d7251d", + "file": "test/createStore.spec.ts", + "line": 1, + "sourceFileSha256": "28b82562daeb4dbbce155397db1825c1b47e28cdac317033bd1655619b5eadb6", + "sourceText": "import type { StoreEnhancer, Action, Store, Reducer } from 'redux'\nimport { createStore, combineReducers } from 'redux'\nimport { vi } from 'vitest'\nimport {" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 2, + "label": "combineReducers.spec", + "degree": 84, + "role": "test-module", + "id": "sha256:10a60eda4e3187f3fc3119318562b3e286b7a8903bd64be8946ec37494becf44", + "file": "test/combineReducers.spec.ts", + "line": 1, + "sourceFileSha256": "4dc22297b4938fa7278dde5350870e2fa31c8ff87a7d48b943a3b8fc64ddfb84", + "sourceText": "/* oxlint-disable no-console */\nimport type { Reducer, Action } from 'redux'\nimport {\n createStore," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 3, + "label": "defaultAssembleReplacementNodes()", + "degree": 74, + "role": "documentation-tooling", + "id": "sha256:9695b4120077fb0d683e8f491bae870400b249ec2652a51e73203216ba7b5f60", + "file": "website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts", + "line": 215, + "sourceFileSha256": "dd7cbd61846175fcad25c515ffa2c4c95d44ec7b739dd3dcc11e181c59d3c3f7", + "sourceText": "export function defaultAssembleReplacementNodes(\n node: CodeNode,\n file: VFile,\n virtualFolder: string," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 4, + "label": "index", + "degree": 70, + "role": "source-module", + "id": "sha256:dce3d43d2e05a1e2cff376a47a40c65b4c8879f6e24b0f34fb2bc0dd19d219fa", + "file": "src/index.ts", + "line": 1, + "sourceFileSha256": "8bb0a6852611119382cae7dc89ab600d43701c87644e518042ab23134a4c16a9", + "sourceText": "// functions\nimport { createStore, legacy_createStore } from './createStore'\nimport combineReducers from './combineReducers'\nimport bindActionCreators from './bindActionCreators'" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 5, + "label": "reducers.test-d", + "degree": 68, + "role": "test-module", + "id": "sha256:f1fdcad28d45e9456b801123f7cb03ae12f0875f58aa73a52e3abd8a73e0b3f7", + "file": "test/typescript/reducers.test-d.ts", + "line": 1, + "sourceFileSha256": "6e9d92a666fef0546948aa96d7e7d14b96f31c3f660074039d8cc0bb8a1e5d0e", + "sourceText": "import type {\n Action,\n AnyAction,\n PreloadedStateShapeFromReducersMapObject," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 6, + "label": "transpileCodeblocks()", + "degree": 56, + "role": "documentation-tooling", + "id": "sha256:e1a2859c6983979bae899fd5f06a8e0d221aa1811cb1d42787ad0ac98e8067ea", + "file": "website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts", + "line": 46, + "sourceFileSha256": "dd7cbd61846175fcad25c515ffa2c4c95d44ec7b739dd3dcc11e181c59d3c3f7", + "sourceText": "export const transpileCodeblocks: Plugin<[TranspileCodeblocksSettings]> =\n function ({\n compilerSettings,\n postProcessTranspiledJs = defaultPostProcessTranspiledJs," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 7, + "label": "enhancers.test-d", + "degree": 47, + "role": "test-module", + "id": "sha256:70cc954750611610bf9773a8c59e07344ac1f8fafc7107565c5c9e346dccbf5b", + "file": "test/typescript/enhancers.test-d.ts", + "line": 1, + "sourceFileSha256": "12fea8393645a50c8be7ee2b1b81839bcb903e80c7394361ba60268e80ad4313", + "sourceText": "import type { Action, Reducer, StoreEnhancer } from 'redux'\nimport { createStore } from 'redux'\n\ninterface State {" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 8, + "label": "store.test-d", + "degree": 35, + "role": "test-module", + "id": "sha256:9bf18a6ffd0f35c3ce4b2e33d8ef1bcd285fc930e09955b98176f15289db3124", + "file": "test/typescript/store.test-d.ts", + "line": 1, + "sourceFileSha256": "ad0d2a2e2490699420a14afc689bd57d7967d5220e41f97c257b86c90098bd77", + "sourceText": "import type {\n Action,\n Observer,\n Reducer," + }, + { + "repository": "redux", + "tool": "compass", + "rank": 9, + "label": "store", + "degree": 33, + "role": "source-module", + "id": "sha256:802d7602df7b8cac096452350c66b4dd52d05861d0dee4b3ba6f86421bdf2db4", + "file": "src/types/store.ts", + "line": 1, + "sourceFileSha256": "14d07fb4a3bd59122730edd9c5080fa051f3ae13df1095a767358ec69d67886b", + "sourceText": "import type { Action, UnknownAction } from './actions'\nimport type { Reducer } from './reducers'\n// oxlint-disable-next-line typescript/no-unused-vars\nimport _$$observable from '../utils/symbol-observable'" + }, + { + "repository": "redux", + "tool": "compass", + "rank": 10, + "label": "createStore()", + "degree": 33, + "role": "callable", + "id": "sha256:ceae4b39dd8902b6888096a1827ee67422d04d3c19d527d674ec740c3e903785", + "file": "src/createStore.ts", + "line": 86, + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "sourceText": "export function createStore<\n S,\n A extends Action,\n Ext extends {} = {}," + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 1, + "label": "Action", + "degree": 23, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 2, + "label": "createStore()", + "degree": 22, + "role": "callable", + "id": "src_createstore_createstore", + "file": "src/createStore.ts", + "line": 86, + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "sourceText": "export function createStore<\n S,\n A extends Action,\n Ext extends {} = {}," + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 3, + "label": "compilerOptions", + "degree": 21, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 4, + "label": "compilerOptions", + "degree": 19, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 5, + "label": "compilerOptions", + "degree": 16, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 6, + "label": "scripts", + "degree": 14, + "role": null + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 7, + "label": "Dispatch", + "degree": 13, + "role": "type", + "id": "src_types_store_dispatch", + "file": "src/types/store.ts", + "line": 27, + "sourceFileSha256": "14d07fb4a3bd59122730edd9c5080fa051f3ae13df1095a767358ec69d67886b", + "sourceText": "export interface Dispatch
{\n (action: T, ...extraArgs: any[]): T\n}\n" + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 8, + "label": "Reducer", + "degree": 12, + "role": "type", + "id": "src_types_reducers_reducer", + "file": "src/types/reducers.ts", + "line": 30, + "sourceFileSha256": "f79a73490d143561e6071c03d852fc78fe057384a6a3e6ff81b81e887df76bc1", + "sourceText": "export type Reducer<\n S = any,\n A extends Action = UnknownAction,\n PreloadedState = S" + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 9, + "label": "combineReducers()", + "degree": 12, + "role": "callable", + "id": "src_combinereducers_combinereducers", + "file": "src/combineReducers.ts", + "line": 123, + "sourceFileSha256": "52f4a8c5561bd9ea2532edd31d3a8958dabb13fcc0d11140d158c84e454ce1dc", + "sourceText": "export default function combineReducers(reducers: {\n [key: string]: Reducer\n}) {\n const reducerKeys = Object.keys(reducers)" + }, + { + "repository": "redux", + "tool": "graphify", + "rank": 10, + "label": "Store", + "degree": 11, + "role": "type", + "id": "src_types_store_store", + "file": "src/types/store.ts", + "line": 81, + "sourceFileSha256": "14d07fb4a3bd59122730edd9c5080fa051f3ae13df1095a767358ec69d67886b", + "sourceText": "export interface Store<\n S = any,\n A extends Action = UnknownAction,\n StateExt extends unknown = unknown" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 1, + "label": "DirEntry", + "degree": 67, + "role": "type", + "id": "sha256:9102d21ed875d3f823b6a2b6c19b5c9ec4ec6d5734b63c544d1ede2b4fb09374", + "file": "src/dent.rs", + "line": 35, + "sourceFileSha256": "ca573f4533370a09851579f5940f7cd9bd121b2f30ec51d29a40afdce984683b", + "sourceText": "pub struct DirEntry {\n /// The path as reported by the [`fs::ReadDir`] iterator (even if it's a\n /// symbolic link).\n ///" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 2, + "label": ".new()", + "degree": 51, + "role": "callable", + "id": "sha256:38839ab8bc007bfdd70a2ed3abfb3a77950fb3d008d621d9cf7c5c9bbc8f8d6a", + "file": "src/lib.rs", + "line": 289, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": " pub fn new>(root: P) -> Self {\n WalkDir {\n opts: WalkDirOptions {\n follow_links: false," + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 3, + "label": ".tmp()", + "degree": 50, + "role": "test-helper", + "id": "sha256:0dbcc8c36333b467c48ece7070677fe49f658cd8454b9fd76a40ed7303319fa4", + "file": "src/tests/util.rs", + "line": 84, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn tmp() -> Dir {\n let dir = TempDir::new().unwrap();\n Dir { dir }\n }" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 4, + "label": ".run_recursive()", + "degree": 50, + "role": "test-helper", + "id": "sha256:caafb698ff937854c3b5f77147d26689bf26777be7dca6bcee83d425593d53f8", + "file": "src/tests/util.rs", + "line": 101, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn run_recursive(&self, it: I) -> RecursiveResults\n where\n I: IntoIterator>,\n {" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 5, + "label": ".path()", + "degree": 42, + "role": "test-helper", + "id": "sha256:76ab83daadb4f80254042a7ee65d7cdda5f0c66fa708172245f102572ca08106", + "file": "src/tests/util.rs", + "line": 90, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn path(&self) -> &Path {\n self.dir.path()\n }\n" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 6, + "label": ".mkdirp()", + "degree": 34, + "role": "test-helper", + "id": "sha256:6984d05046d66fab178a4dcaf88c3814c5030b5bfa795fd5d68a3c14469cb71b", + "file": "src/tests/util.rs", + "line": 117, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn mkdirp>(&self, path: P) {\n let full = self.join(path);\n fs::create_dir_all(&full)\n .map_err(|e| {" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 7, + "label": "Error", + "degree": 31, + "role": "type", + "id": "sha256:a66dc1de7a258eafe92e616e5c94a0107fda891db6f9ca33ca1e10fbac5845c9", + "file": "src/error.rs", + "line": 28, + "sourceFileSha256": "ba58bf6f59d196567435d4b66699a928cc237fc7c8df01dc37ab822509905b7c", + "sourceText": "pub struct Error {\n depth: usize,\n inner: ErrorInner,\n}" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 8, + "label": "WalkDir", + "degree": 31, + "role": "type", + "id": "sha256:b647b5809af96e790d083521ec5b9ee189e2a2446b6a08294da8300d43fc420e", + "file": "src/lib.rs", + "line": 234, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "pub struct WalkDir {\n opts: WalkDirOptions,\n root: PathBuf,\n}" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 9, + "label": "Result", + "degree": 27, + "role": "type", + "id": "sha256:b0a84ceb03a1b40af4acbce9ba086ead4d7cfc8679eb1cda58f7024a9899c6be", + "file": "src/lib.rs", + "line": 157, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "pub type Result = ::std::result::Result;\n\n/// A builder to create an iterator for recursively walking a directory.\n///" + }, + { + "repository": "walkdir", + "tool": "compass", + "rank": 10, + "label": ".touch()", + "degree": 22, + "role": "test-helper", + "id": "sha256:062bcfac2f5cea7a99a078422476e89eb7977023b3d5c265c534e7a2b0ca6c99", + "file": "src/tests/util.rs", + "line": 128, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": " pub fn touch>(&self, path: P) {\n let full = self.join(path);\n File::create(&full)\n .map_err(|e| {" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 1, + "label": "DirEntry", + "degree": 39, + "role": "type", + "id": "src_dent_direntry", + "file": "src/dent.rs", + "line": 35, + "sourceFileSha256": "ca573f4533370a09851579f5940f7cd9bd121b2f30ec51d29a40afdce984683b", + "sourceText": "pub struct DirEntry {\n /// The path as reported by the [`fs::ReadDir`] iterator (even if it's a\n /// symbolic link).\n ///" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 2, + "label": "IntoIter", + "degree": 22, + "role": "type", + "id": "src_lib_intoiter", + "file": "src/lib.rs", + "line": 566, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "pub struct IntoIter {\n /// Options specified in the builder. Depths, max fds, etc.\n opts: WalkDirOptions,\n /// The start path." + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 3, + "label": "WalkDir", + "degree": 19, + "role": "type", + "id": "src_lib_walkdir", + "file": "src/lib.rs", + "line": 234, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "pub struct WalkDir {\n opts: WalkDirOptions,\n root: PathBuf,\n}" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 4, + "label": "WalkDirOptions", + "degree": 12, + "role": "type", + "id": "src_lib_walkdiroptions", + "file": "src/lib.rs", + "line": 239, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "struct WalkDirOptions {\n follow_links: bool,\n follow_root_links: bool,\n max_open: usize," + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 5, + "label": "Dir", + "degree": 11, + "role": "test-type", + "id": "src_tests_util_dir", + "file": "src/tests/util.rs", + "line": 78, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": "pub struct Dir {\n dir: TempDir,\n}\n" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 6, + "label": "RecursiveResults", + "degree": 11, + "role": "test-type", + "id": "src_tests_util_recursiveresults", + "file": "src/tests/util.rs", + "line": 23, + "sourceFileSha256": "ca72ef96f82bb87d8c93d13d581ebb65efcd53fffa87097a84437acecbc30faa", + "sourceText": "pub struct RecursiveResults {\n ents: Vec,\n errs: Vec,\n}" + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 7, + "label": "DirList", + "degree": 10, + "role": "type", + "id": "src_lib_dirlist", + "file": "src/lib.rs", + "line": 661, + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceText": "enum DirList {\n /// An opened handle.\n ///\n /// This includes the depth of the handle itself." + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 8, + "label": "Args", + "degree": 10, + "role": "example-type", + "id": "walkdir_list_main_args", + "file": "walkdir-list/main.rs", + "line": 156, + "sourceFileSha256": "d87ed239df1f120d2dc8711e83f02d26785396b7bc15d6c865490cd9ab2d7886", + "sourceText": "struct Args {\n dirs: Vec,\n follow_links: bool,\n min_depth: Option," + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 9, + "label": "print_paths_flat()", + "degree": 9, + "role": "example-callable", + "id": "walkdir_list_main_print_paths_flat", + "file": "walkdir-list/main.rs", + "line": 102, + "sourceFileSha256": "d87ed239df1f120d2dc8711e83f02d26785396b7bc15d6c865490cd9ab2d7886", + "sourceText": "fn print_paths_flat(\n args: &Args,\n mut stdout: W1,\n mut stderr: W2," + }, + { + "repository": "walkdir", + "tool": "graphify", + "rank": 10, + "label": "print_paths_tree()", + "degree": 9, + "role": "example-callable", + "id": "walkdir_list_main_print_paths_tree", + "file": "walkdir-list/main.rs", + "line": 128, + "sourceFileSha256": "d87ed239df1f120d2dc8711e83f02d26785396b7bc15d6c865490cd9ab2d7886", + "sourceText": "fn print_paths_tree(\n args: &Args,\n mut stdout: W1,\n mut stderr: W2," + } + ] +} diff --git a/benchmarks/agent_query/java_constructor_development_review.json b/benchmarks/agent_query/java_constructor_development_review.json new file mode 100644 index 000000000..e77e8e171 --- /dev/null +++ b/benchmarks/agent_query/java_constructor_development_review.json @@ -0,0 +1,1184 @@ +{ + "schema": "compass.java-constructor-development-review/1", + "scope": "Repeated five-language development comparison. These repositories/questions have already informed changes; neither fresh held-out evidence nor representative precision.", + "runId": "java-constructor-panel-a-01", + "suiteDigest": "820a5c29f59e68b4ee8493e153c806b23e458a396431f3cf381660e469391237", + "runnerDigest": "173242988699eb6fabd175c293634d3cf37c1394f76429540fd7af2a48ef7026", + "tools": [ + { + "binary": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-constructor-provenance/compass", + "binarySha256": "c2de3e3ae7b0a12ac14ef24757d63bc95f199a7e1b96b639f0cfa8f18e02422f", + "digestScope": "executable-file-only", + "name": "compass", + "version": "compass 0.3.30" + }, + { + "binary": "/Users/haipingfu/.local/bin/graphify", + "binarySha256": "a7fdb4ac8985755be15f10f89a2d17ee517130b3ac90c28c91644ae351881da3", + "digestScope": "executable-file-only", + "name": "graphify", + "version": "graphify 0.9.67" + } + ], + "productionSourceSha256": { + "crates/compass-files/src/cache.rs": "1526ae8a7d98feb92333464209cce81d5a720faee714483ffa4fbc63bde1e6ee", + "crates/compass-languages/src/evidence/build.rs": "70a4b9b648aa6dcedd5ebdcfc4abb4be024f2347b2f58e91f969d734dc1bbd49" + }, + "regressionSourceSha256": "1fd1b3a77f5ae2d1c7bf34f6d94e0aa513811c177c4452ef1e896f7102722a08", + "metrics": { + "compass": { + "text": { + "medianAnswerTokens": 148.0, + "medianFirstPageTokens": 148.0, + "medianWallMs": 919.0, + "passRate": 0.8364, + "passed": 46, + "questions": 55 + }, + "selectedSourceRelationships": { + "passed": 17, + "allOccurrencesPassed": 17, + "total": 21 + }, + "sourcePaths": { + "passed": 6, + "total": 10 + } + }, + "graphify": { + "text": { + "medianAnswerTokens": 104.0, + "medianFirstPageTokens": 75.0, + "medianWallMs": 162.0, + "passRate": 0.8364, + "passed": 46, + "questions": 55 + }, + "selectedSourceRelationships": { + "passed": 20, + "allOccurrencesPassed": 17, + "total": 21 + }, + "sourcePaths": { + "passed": 8, + "total": 10 + } + } + }, + "repositories": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "d69152cc8900afc3f11756b8ce841adbed98ae6663fee4ebc64957974c8f860c", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ], + "panelDelta": { + "comparisonRun": "semantic-route-parent-panel-a-01", + "byteIdenticalCompassGraphs": [ + "chi", + "click", + "redux", + "walkdir" + ], + "jsoup": { + "beforeGraphSha256": "8035487618e4e96af8b7cc668d92eaea9ee3ec2a831c486d20055bc808fa23f6", + "afterGraphSha256": "d69152cc8900afc3f11756b8ce841adbed98ae6663fee4ebc64957974c8f860c", + "nodesBefore": 6116, + "nodesAfter": 6116, + "edgesBefore": 20973, + "edgesAfter": 21095, + "addedCalls": 122, + "removedEdges": 0, + "changedCommonEdges": 0, + "changedNodesExceptCommunity": 0, + "productionOccurrences": 10, + "testOccurrences": 112, + "staticSourceReview": "All 122 added occurrences reviewed against receiver expressions, package/import context, target declarations, overload argument types, exact byte anchors, and source-to-target direction. This is a complete review of this delta, not an unbiased precision sample or runtime call coverage.", + "sourceFileSha256": { + "src/main/java/org/jsoup/Jsoup.java": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7", + "src/main/java/org/jsoup/helper/HttpConnection.java": "9f439dc7f7aa03d18a1fbff716cfb562f9e2667b249a60dfc329f5232b3c1145", + "src/main/java/org/jsoup/helper/W3CDom.java": "97221e9770c46f56ad4736fccc0ec5fd690f9708ded17537e59fcd9faf137725", + "src/main/java/org/jsoup/nodes/NodeUtils.java": "04dffffb32b1fa4bfeb237205faa6e37433cf773ecc57a9e89de3f9d1eb67bd9", + "src/main/java/org/jsoup/parser/TagSet.java": "26261d2c9ee3d2e978c184f15328022488af3264ae8b1c54b6bd8fcdd02a0dff", + "src/main/java/org/jsoup/safety/Safelist.java": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501", + "src/test/java/org/jsoup/helper/HttpConnectionTest.java": "62d806a0f78b538163554bd09e4cd9cdd58f5a5dbfcaf1addf600dd73a357355", + "src/test/java/org/jsoup/helper/W3CDomTest.java": "3def0f732425cf7a1808e2957363a41bdd55c85f56b54708874663911302d989", + "src/test/java/org/jsoup/internal/NamespaceBindingsTest.java": "b23cb0e3d78202179f166e4c6c14a13dc076ce2dd278d24b64edad7757b9fd28", + "src/test/java/org/jsoup/nodes/AttributesTest.java": "a92b281635b30dadee55ab7f7bd0aa04977209bb3209e7084607afbd08d44391", + "src/test/java/org/jsoup/nodes/ElementTest.java": "f3d201c08a41ee429f5fe9fb72a12bbb6a620592d1276e66d876022fb5ef39bc", + "src/test/java/org/jsoup/nodes/NodeIteratorTest.java": "149503af2e01faa6ea85c170da08435790458e603aaadb4bea15c93dc37e7681", + "src/test/java/org/jsoup/parser/HtmlTextHandlingTest.java": "ffd7a47666c8a822d56083ce9c6516f22c6414950a5e9e586b2f52cfb72b36fa", + "src/test/java/org/jsoup/parser/HtmlTreeBuilderTest.java": "d7bb5ef59792baa58e3455be6e28c90e81e0469ed33fec5746815c6aef505a2a", + "src/test/java/org/jsoup/parser/NameNormalizationTest.java": "bb07fcb09a43a595991b79d0ec46aabae04b2a27bb3c09101b5be8382d122429", + "src/test/java/org/jsoup/parser/StreamParserTest.java": "83588e6ebafd1c3f390e7deefcd0c00e3b9d48366d41680778a2c2a12e512677", + "src/test/java/org/jsoup/parser/TagTest.java": "c9eb06ac8011a92c4ed556a7fa82e6a66463d6be233e6fe8fad819bf66055026", + "src/test/java/org/jsoup/safety/CleanerTest.java": "8f4e9abb7574ab5552634f21f025e2c33c3df95d4622f3f05324c32734425bfc", + "src/test/java/org/jsoup/safety/SafelistTest.java": "af3b581643e773f14bc71c83abfbff499adf706c3d9f89e919a997c244329c4f", + "src/test/java/org/jsoup/select/ElementsTest.java": "31900b1bd82389ef2ad069c3b85a79145106cdc7e52fd9a6d1d63db001e4eb08", + "src/test/java/org/jsoup/select/SelectorTest.java": "0560f38b89cb82e8f7e12386d468b43bd069874941be5fa85ad3227363e18d66" + }, + "targetGroups": [ + { + "targetId": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "target": "org.jsoup.safety.Cleaner::isValidBodyHtml", + "graphSignature": "isValidBodyHtml(String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "sha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 435, + "edgeId": "sha256:38d6c354f2e4a136528e0f8d4261fc07f6a2c9e18886865384966819efd9e046" + } + ] + }, + { + "targetId": "sha256:3e848e37db6f32068eecbb3958e87a0a8e273408287bd872db4c47afc8b142ff", + "target": "org.jsoup.helper.UrlBuilder::build", + "graphSignature": "build()", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/helper/UrlBuilder.java", + "line": 33, + "sha256": "874ee79c27016735ff8a5141e1f09f76be40438e1f9bec99311b9a34a6e6f593" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/helper/HttpConnection.java", + "line": 451, + "edgeId": "sha256:c307893c6c762335b0dfe97bf7fd1bb0793e541bca05915361694c892bd3298d" + }, + { + "file": "src/test/java/org/jsoup/helper/HttpConnectionTest.java", + "line": 320, + "edgeId": "sha256:211bc74793ff58e4c3e6d57c96890cc992dd886fa3b60e63d70393b6bc652307" + }, + { + "file": "src/test/java/org/jsoup/helper/HttpConnectionTest.java", + "line": 326, + "edgeId": "sha256:22b88548293ed5c0fc25210fe78c12f4507294dea3445d7c88dc35e20afb9e3d" + }, + { + "file": "src/test/java/org/jsoup/helper/HttpConnectionTest.java", + "line": 332, + "edgeId": "sha256:6efb0e22cac18b5a087a24a78af6284b81a99033e62ba4eaf8382256f10d0847" + }, + { + "file": "src/test/java/org/jsoup/helper/HttpConnectionTest.java", + "line": 333, + "edgeId": "sha256:03799930f56f4189db68c10ddd5229b2d3cbdb1f61aad7c89360f920dddf90c8" + }, + { + "file": "src/test/java/org/jsoup/helper/HttpConnectionTest.java", + "line": 340, + "edgeId": "sha256:c02290532de01e39d64548000667f53312643dd9023dddfc0ff1bbae07826538" + }, + { + "file": "src/test/java/org/jsoup/helper/HttpConnectionTest.java", + "line": 341, + "edgeId": "sha256:e771a487eeb791ffbbedf9d9360a51820d057fb4fba2dc2d6502ab022be71e41" + } + ] + }, + { + "targetId": "sha256:803e6b1d2452eb819552278e067733e662e4da423240c9ccece097e43ad41c4e", + "target": "org.jsoup.helper.HttpConnection::KeyVal::inputStream", + "graphSignature": "inputStream(InputStream)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/helper/HttpConnection.java", + "line": 1439, + "sha256": "9f439dc7f7aa03d18a1fbff716cfb562f9e2667b249a60dfc329f5232b3c1145" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/helper/HttpConnection.java", + "line": 1405, + "edgeId": "sha256:91546594788d3055205782a62af9886f1e4e41c67ac4ce4fa2e0882eb67f0742" + } + ] + }, + { + "targetId": "sha256:eabdf2b85e2767153036daf99328b201e6da9977b01e4c7966e04e7f65958609", + "target": "org.jsoup.helper.W3CDom::fromJsoup", + "graphSignature": "fromJsoup(org.jsoup.nodes.Document)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/helper/W3CDom.java", + "line": 187, + "sha256": "97221e9770c46f56ad4736fccc0ec5fd690f9708ded17537e59fcd9faf137725" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/helper/W3CDom.java", + "line": 104, + "edgeId": "sha256:7658b11fc681e412ec9d0b0ab53fb5cd132dea77fa84312667a9f7c3d7601c00" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 157, + "edgeId": "sha256:eab007225198fba0bd108747e2f17a8da32b3f02abdf076892e3b23a286c4e6e" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 179, + "edgeId": "sha256:0b6af4a200b1f195f88adbbfbffbb5853de7bb19b7a2597caf0c8951eb565315" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 303, + "edgeId": "sha256:295da2a04c113b4b9e40d70e6316a7aec91197bf81c538902ce45594dc74cc4b" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 477, + "edgeId": "sha256:a08c78612e65a61069016b10ee7f9effbdbebfee45724ad6eea52b62852dc42c" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 615, + "edgeId": "sha256:a1bb0d3d5b740a1e80cfcb29fbc9ca3537d21b27329bf73dad037f13c29f6281" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 709, + "edgeId": "sha256:8da9adae5a529e5683c983b0a3b43e3ba52d2052eb38aa5fc9a713f4eaa766dd" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 727, + "edgeId": "sha256:169ae9ed688813179fbe467dedf42d2946b78ccd15e92cfa131f3a7ba1ac7138" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 745, + "edgeId": "sha256:819ab6171dbebf1cf63d80cd33cdd258c793a93b27109df76c4b3ccafbfbddfd" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 760, + "edgeId": "sha256:818842bbffa4daa16110f6aab76f7865bec8a91fe27898f52f93f61195478f0e" + } + ] + }, + { + "targetId": "sha256:4557280905e92abc42184d763fdd3e7a8355804c908e6cca2c861302affff47b", + "target": "org.jsoup.nodes.Document::outputSettings", + "graphSignature": "outputSettings()", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 535, + "sha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/nodes/NodeUtils.java", + "line": 27, + "edgeId": "sha256:d0e6b2e002f740de2475f737a90f907d0ed8dce13b7bfcf7881af43e74f8a66d" + } + ] + }, + { + "targetId": "sha256:8503365ca5c06c4e01990db283d7f7a0efe276cd602c8569aeabf17dbb83e8e9", + "target": "org.jsoup.helper.W3CDom::namespaceAware", + "graphSignature": "namespaceAware(boolean)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/helper/W3CDom.java", + "line": 91, + "sha256": "97221e9770c46f56ad4736fccc0ec5fd690f9708ded17537e59fcd9faf137725" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/nodes/NodeUtils.java", + "line": 49, + "edgeId": "sha256:c3b5fde74569579fdb5d8575f0300778ed8777fecdd6ca0c40173c35668d0df0" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 553, + "edgeId": "sha256:0cc78b3aa81570f43990747c6b2e727f79ed7b5b438096663ea09ebaadf1b1b8" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 566, + "edgeId": "sha256:a237cbca84c7e1a501d5eca4f275386f9ee30cb0503573252936a707116d5987" + }, + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 656, + "edgeId": "sha256:c37803f291a28171ddcf507a9650ae53eff99417e308471eee7c5a433ccf0299" + } + ] + }, + { + "targetId": "sha256:8a167c33bee793ed8684dae1261e55159066ea474e755ffb10273e8e93f789ee", + "target": "org.jsoup.parser.TagSet::setupTags", + "graphSignature": "setupTags(String,String[],Consumer)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/parser/TagSet.java", + "line": 301, + "sha256": "26261d2c9ee3d2e978c184f15328022488af3264ae8b1c54b6bd8fcdd02a0dff" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/parser/TagSet.java", + "line": 284, + "edgeId": "sha256:ad84fc261ef9822f0a777f7fb1745f4885ae19384af75e2f9fa3b14ef6260d48" + } + ] + }, + { + "targetId": "sha256:dd1ac0cfe47b9da2be7b8e1805783ac9a9ab19e1356d821cb8ca024a4a8abb07", + "target": "org.jsoup.safety.Safelist::addTags", + "graphSignature": "addTags()", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 254, + "sha256": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 115, + "edgeId": "sha256:59d63e0c68a5d32af6bebc86da0302d280336bb9f1234ce60c01a3dfe26ea8e3" + }, + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 136, + "edgeId": "sha256:9de30628de07ab75145f0cb02884eec179fe69ad5d2a31e6a26e469219bb9680" + }, + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 180, + "edgeId": "sha256:202fcdd6300a2c37b1326f7c85148e102be607e3b9c7aeb89643244903bcddda" + }, + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 309, + "edgeId": "sha256:ade3f925b021192773dc6b7f466a075711488ecbafca0152683d1176e99692fc" + }, + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 319, + "edgeId": "sha256:f3ab4e4bcc532b6b22a1c4ce47805371ccc552c1ad56b7294332ed17ac08d442" + } + ] + }, + { + "targetId": "sha256:e44f87b4c26d2d629d34105231dbfb7bade0144e66fb052ab7d0f4f96e61a849", + "target": "org.jsoup.helper.W3CDom::convert", + "graphSignature": "convert(org.jsoup.nodes.Element,Document)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/helper/W3CDom.java", + "line": 242, + "sha256": "97221e9770c46f56ad4736fccc0ec5fd690f9708ded17537e59fcd9faf137725" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 642, + "edgeId": "sha256:f4b9b33104469a14aec9eabf7c7387701a430e7bfc25f4140bcf48385535c8dc" + } + ] + }, + { + "targetId": "sha256:b74a4e8c8955717abc8c9572d049357040793a246cdd93434d49aa71b9d403ae", + "target": "org.jsoup.helper.W3CDom::asString", + "graphSignature": "asString(Document)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/helper/W3CDom.java", + "line": 335, + "sha256": "97221e9770c46f56ad4736fccc0ec5fd690f9708ded17537e59fcd9faf137725" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/helper/W3CDomTest.java", + "line": 647, + "edgeId": "sha256:676a951562396f7fa933de79b573bdf82b10039579a58bf850766b61bc5eea78" + } + ] + }, + { + "targetId": "sha256:fc7e5911b18d64599b5988e0f5031218d5440d0f8389d6e1bb07d903da205d4c", + "target": "org.jsoup.nodes.Attributes::put", + "graphSignature": "put(String,String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/nodes/Attributes.java", + "line": 189, + "sha256": "39551b1d008f2a77b212b5b16e09e257b0ec9d8f118a0b7131a1cfe11ac32875" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/internal/NamespaceBindingsTest.java", + "line": 19, + "edgeId": "sha256:72c39e37aa7abecd130988d1a516fd1a653ca16baddec7cd58c13e78afa4ff46" + }, + { + "file": "src/test/java/org/jsoup/internal/NamespaceBindingsTest.java", + "line": 23, + "edgeId": "sha256:342ff847a3194fc7f0018239e61eb5b23e8533ae8c489713bc956b1045b2530b" + }, + { + "file": "src/test/java/org/jsoup/safety/SafelistTest.java", + "line": 66, + "edgeId": "sha256:90dab3ce76ef9741048d7c6c71f49005b4d7482b6871e0ffabbbbb9113ff16ae" + } + ] + }, + { + "targetId": "sha256:b6e98a981b2f46c6c2e00cfb2e6eb873e089261fce4da60b0ef8ca90d57f7da4", + "target": "org.jsoup.nodes.Attributes::add", + "graphSignature": "add(String,String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/nodes/Attributes.java", + "line": 171, + "sha256": "39551b1d008f2a77b212b5b16e09e257b0ec9d8f118a0b7131a1cfe11ac32875" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/nodes/AttributesTest.java", + "line": 350, + "edgeId": "sha256:9f990a1f8fd86180b909f341ac214785b58cb90b48ef9eed4c939bebe4b79a17" + }, + { + "file": "src/test/java/org/jsoup/nodes/AttributesTest.java", + "line": 355, + "edgeId": "sha256:4388a9b379500e1a2060c709c152ac7f6e49b239a25b0d180e12dffc26aa73ce" + }, + { + "file": "src/test/java/org/jsoup/nodes/AttributesTest.java", + "line": 360, + "edgeId": "sha256:4fa2a6c511ca9fffb4bad2ab9a1ae10d724dfa7e8e2c6320f0db09fe754c7ae8" + }, + { + "file": "src/test/java/org/jsoup/nodes/AttributesTest.java", + "line": 365, + "edgeId": "sha256:d9ba883591f424748b543357baddb08fb16fb51742dc76d9c1ab4b4dcc92b36c" + }, + { + "file": "src/test/java/org/jsoup/nodes/AttributesTest.java", + "line": 384, + "edgeId": "sha256:338feb82f43baf2694142b46506caa0d744355567d9e0b98a715cfb80624d96d" + } + ] + }, + { + "targetId": "sha256:36d9c8676ae1a937613f565568e879b9b3fe720f7114d0d040fc5afd95b6f624", + "target": "org.jsoup.nodes.Element::text", + "graphSignature": "text(String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 1715, + "sha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 997, + "edgeId": "sha256:b9357c123b2b4ab1059c27b3e0dd4acde8eb885a30372a7b329b57c9445b0688" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 1390, + "edgeId": "sha256:8ded17ed38e3f5dabfb37fe8415cf9ec8a4b0e88b384cb58d595d666ef27d325" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 1391, + "edgeId": "sha256:a709d010ec9a4aadba966b43c869bac51a7b05cccfee3d2434d2c2f521298af9" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 1860, + "edgeId": "sha256:5d96f25272c6c1e365c3dccb9aea4dda9cd473b1764ed1e6d297e3d72f84a0c6" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 1861, + "edgeId": "sha256:f467d635895825d0037be9768a36f3439139ec2e2bbb332c0d152e7ec12e69ef" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 2324, + "edgeId": "sha256:caf870e03dce95bccdbe6a3152fe3a7a9902173731333a7a3f8a0ecf5f7c4741" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 2325, + "edgeId": "sha256:30be2c1559d683749d838858991d0f93ddb5e0537003dac291108bbb0c4758e3" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 2348, + "edgeId": "sha256:dba349b486b4367f18d17d27077b07bec02bfd972582e99db5f2be7a568ccce9" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 2349, + "edgeId": "sha256:ff57999c87c85b96609ad19c9a25fc875878f5d312b8e65d16ba830e5e5127fe" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 2355, + "edgeId": "sha256:f5b6d215f0289834e0a29cd7a11700aea3e139518684dcd18af5d71672bd8248" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 3399, + "edgeId": "sha256:bdab0e3f92ce6b126d96adddba7a9d4ec4e766277e6a9ebeddfb427bc0ce672d" + }, + { + "file": "src/test/java/org/jsoup/nodes/NodeIteratorTest.java", + "line": 152, + "edgeId": "sha256:7531e7cab4f54a9fafbb7cbe490c03413376852685c9ab63d0cc25479a2f81a8" + }, + { + "file": "src/test/java/org/jsoup/nodes/NodeIteratorTest.java", + "line": 165, + "edgeId": "sha256:62780a8f0bad7e4f9b0b7cf10b1a8fc4713594c5595df15a1a1f3fa83e6d6746" + }, + { + "file": "src/test/java/org/jsoup/select/ElementsTest.java", + "line": 174, + "edgeId": "sha256:2020c8cfb97651772ef792a417e8883a00de8e99b5d519fc5d9c1c9cab8d4c6a" + }, + { + "file": "src/test/java/org/jsoup/select/ElementsTest.java", + "line": 189, + "edgeId": "sha256:985ed65997afd6f3f68e7713e1279f5f8c13e97fcb319bf27bb9adf58fa1e78b" + }, + { + "file": "src/test/java/org/jsoup/select/ElementsTest.java", + "line": 198, + "edgeId": "sha256:e6174edc8761d9139db3c62c15e2576b2707465009888e10bede74a450dbaab3" + }, + { + "file": "src/test/java/org/jsoup/select/ElementsTest.java", + "line": 199, + "edgeId": "sha256:04a38567d231c68e7cc62f9e0dc0a9a5f465b6ea663ee792f54a6776f084e2b0" + }, + { + "file": "src/test/java/org/jsoup/select/SelectorTest.java", + "line": 1139, + "edgeId": "sha256:d6558681deb2cbd0a8272ba406b811d6a299ef500529b6bd5727e4f639ad5f97" + } + ] + }, + { + "targetId": "sha256:73af62fff71eae3c5a4f0926646fb36bf41f6c59df3fc1a93b9a4e5d8ee2433a", + "target": "org.jsoup.nodes.Element::id", + "graphSignature": "id(String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 267, + "sha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 1124, + "edgeId": "sha256:f1b0e58068c5c59dd15ba9acc6601602e8d2f714fee5294328edc77dcec6a090" + } + ] + }, + { + "targetId": "sha256:aa100e1e077020db7e859d39158a3b59b02317fdb601f1891e79e53770c9bb90", + "target": "org.jsoup.nodes.Element::attr", + "graphSignature": "attr(String,String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 279, + "sha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 1574, + "edgeId": "sha256:6fa6789dd67609942b8aca232fed9c80b63e3ecb5670a0e38f2b26e7b8408a37" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 1575, + "edgeId": "sha256:5280ff39aa117f5f1c6be1fa9b5413273222ceb205cde4a38c535bd41f2f8765" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 2190, + "edgeId": "sha256:a6b5d61c6c4bce57131d122647c272d4dd547f38eab53b8b4a5d6b3dfb3d308c" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 2200, + "edgeId": "sha256:4cbb6aa96e0d464ce7342500f7d4a356d6965446a6cb164e9006fe7e9523a546" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 686, + "edgeId": "sha256:be02dd1e264ab662d738702a3771fa66f3efcd30d0fb18b42de6545fa4f0a95d" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 714, + "edgeId": "sha256:5fa77ecab31944cbe2932ca85c0b6004acf7a6c85b99bf62c5dded19af4f9787" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 757, + "edgeId": "sha256:7a54c9e1c1ce38d4a2cbaaa5410449606c0cbf3f1e3c9332af7de7fbf6b3eceb" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 770, + "edgeId": "sha256:e7ae674d916e5c439f71a8d6de8dee54edc6c99c90cc385e6501a612708d0886" + } + ] + }, + { + "targetId": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "target": "org.jsoup.nodes.Element::appendChild", + "graphSignature": "appendChild(Node)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 813, + "sha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/parser/HtmlTextHandlingTest.java", + "line": 49, + "edgeId": "sha256:e313255c222afafa3060662482607d965731e1f8c22f033ffd07280342ab9ed3" + } + ] + }, + { + "targetId": "sha256:3d7ea7f7d6759755fb2ae6fff43c1865d390d23a825915ec256bf533b5fbf809", + "target": "org.jsoup.parser.CharacterReader::consumeToEnd", + "graphSignature": "consumeToEnd()", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/parser/CharacterReader.java", + "line": 528, + "sha256": "f93452a6022d438df7ce17f00dabd9d32589815b30ee4f5e6d1bd1208e36274c" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/parser/HtmlTextHandlingTest.java", + "line": 98, + "edgeId": "sha256:a243df929ac03cedbb5411fde9831c5e02d549d4f2c3140fcac5bb099429802f" + } + ] + }, + { + "targetId": "sha256:bd00aad5322991cb1b3e2c4fab7c006fdbd92ee355fe93d99d4329b752cfdb8d", + "target": "org.jsoup.parser.Parser::setTrackErrors", + "graphSignature": "setTrackErrors(int)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/parser/Parser.java", + "line": 168, + "sha256": "2b8baa95140fbf12fad9c874b42d8d31e24b186fd7c665c1708395e6d852ba98" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/parser/HtmlTreeBuilderTest.java", + "line": 133, + "edgeId": "sha256:9825327a9e69f1927bc04e954aaad6797110bf91f08bd47333bb508836301e32" + } + ] + }, + { + "targetId": "sha256:eece375f79deef58e8fba0f31ea7d0cdbf939b5f6de77b6b8cf4e191e4fb084f", + "target": "org.jsoup.parser.StreamParser::parseFragment", + "graphSignature": "parseFragment(String,Element,String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/parser/StreamParser.java", + "line": 122, + "sha256": "5a50cf810031c426623c68cc630218c3e6725e1519bb039143777f9f19637855" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/parser/HtmlTreeBuilderTest.java", + "line": 193, + "edgeId": "sha256:c588d389b1aa29f9abb1bcec259a23d22c5e678daabada7f7a5bf8fe64b4afb7" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 428, + "edgeId": "sha256:d253790571d6a390798874265f06f1dafc91aa830c0c0d0f9f8f42c0dfdafbf1" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 688, + "edgeId": "sha256:2a86fb403614f22a14b40fefe5cf3dbb7eb87a7bafa366ead3fdcf314c8e2883" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 716, + "edgeId": "sha256:0b8c9ee0f9b12db2fe5b95fc524905d02ffb3b321ace5d338e8c0eb3639baf61" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 744, + "edgeId": "sha256:e2cafe46a0451a1c57ced5880658f11017c0cd8a199e7007b94229ffbe9f350c" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 759, + "edgeId": "sha256:75be11b70e0cc8ad21b9f946cfed7b673f43e1c935fb5fb194745ada9d37a333" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 772, + "edgeId": "sha256:070b8bd73264d9ea54e859af555c177174c2ae16932086adabd93d9039070c8f" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 789, + "edgeId": "sha256:8788de3bc00e3f231011940878ef12d299a8aa15a8cad04d16e9f4bae49a3571" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 810, + "edgeId": "sha256:e36f8f2ad4cb8c2e4bcb8b8e15be382ef18f5796f04308c224a8d49a84975d97" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 840, + "edgeId": "sha256:885eb30ae1ffc5ffe07c7a61b4de5d6763c405573d9d4f3d7a74d94787b577bd" + } + ] + }, + { + "targetId": "sha256:aca06bc408bbbb11866b9230301285def8ea2119582345809e1037289746e512", + "target": "org.jsoup.parser.StreamParser::parse", + "graphSignature": "parse(String,String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/parser/StreamParser.java", + "line": 96, + "sha256": "5a50cf810031c426623c68cc630218c3e6725e1519bb039143777f9f19637855" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/parser/HtmlTreeBuilderTest.java", + "line": 287, + "edgeId": "sha256:99eba178a75287ea5a5e959d55f4b8e9bd641268024d2e2fb18ddab69b420240" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 42, + "edgeId": "sha256:4253dfe4636cc4314e22fce8bf3c18c4436e6e84e0e32ead16dacc85f4ef169b" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 54, + "edgeId": "sha256:8892009eb04ec4543004c662d1d857816ed4bf5865d74bb78b97830a93c6c132" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 66, + "edgeId": "sha256:fd963536635cdbe5d2e243f3f265253d06936f7d8e81cfdb910276ba4ffe7746" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 101, + "edgeId": "sha256:38d49a4f02cf42738fa52160dbf4b506db5947157d7c7e384b43bf85e9e466d2" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 117, + "edgeId": "sha256:1ee8819a2e460a3943c380e45bf7c94ba08570e731f9205f420b4d8a1db297cf" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 200, + "edgeId": "sha256:f2933f3d5c304214cbb6188548702ae35acf0de12f8cd4633c6fcd6e94a0ef9f" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 225, + "edgeId": "sha256:63131841eaa69d632971ded65f0bb68aac29d0713650116af4cdb0bfba3d0879" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 256, + "edgeId": "sha256:92782a68438ac00a3369ff21702a9ca27e277d6addc7ad86da7ac74739a81f04" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 270, + "edgeId": "sha256:3f355a2cbe86aa98faf3c5ee70a3c3f97634b79c1ea186f13ac3525abd5719db" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 278, + "edgeId": "sha256:227d186c073bcd5c850d9a8ef086a1d99700992d7d4e62cbd219418bb9a3861a" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 288, + "edgeId": "sha256:58059510b4d9ffa7e7128a6407cb9e9a07e99d2ee34e3632fdaaa1da83be905c" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 299, + "edgeId": "sha256:aa77fe1b304f940619707cdfa17f179d3f6aea0be6e66a544622455ba76bcdb3" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 310, + "edgeId": "sha256:06879e092386a18e818baf4ddd24e72406aa97b283d18ef365f62a6b829c9d48" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 323, + "edgeId": "sha256:9ee33739a02a3401cc7081896b5fdd52a89b681111e6919c9227583f692fa3d8" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 360, + "edgeId": "sha256:cc919422f4e2818356cd77ea8e9448141c787a4d0bf564c920386fc6f13cf52d" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 373, + "edgeId": "sha256:0c7f4dc9d98b131d46e7d301f3f19efe010295012a91f5d5079da2b04f6e4851" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 385, + "edgeId": "sha256:d632fd85a1efe5bf3e9ffbde6ba0b2fc97c60f60393f129e0ba875db3d9f43f1" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 397, + "edgeId": "sha256:0bf4c776a494bb0e0d0cb72f76f0198180509e91a0a32ece63fb13859133241d" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 415, + "edgeId": "sha256:41a2fa4bf181a1f2fbf9f295888919e67fff52eecfdff111c23f0214568b8678" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 466, + "edgeId": "sha256:f376db8110d2a3fab3c7601fa64041a2638ab135e53ed60ccb3624bbad92e59b" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 483, + "edgeId": "sha256:6dc3a987e5696da59bbdabb791dda53eeeff05f75f3ece4301adbe852b29b23f" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 517, + "edgeId": "sha256:ba1487b8ddaa9924849e6ce95aa33757d6824256d0db00cd40430a2b34277a6d" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 534, + "edgeId": "sha256:b83ad0eb132e489833fb7b1f0e7b347fbb9834d1b55504365e0aabfb48fd5ab6" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 589, + "edgeId": "sha256:316532aa320e906cbda33c6482b592de3b207a542375bf2e8545c1dedb7f56e0" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 865, + "edgeId": "sha256:145082ab4f1a07855506597d5c3dd8c9aafbf49b21235ae818306742ac533316" + }, + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 877, + "edgeId": "sha256:138e86a72a46bff127e6e2bf41fbaef2f58f4688210ad151b782454a161d665b" + } + ] + }, + { + "targetId": "sha256:cceba530371a95b96ccb0655acc673f295f0315c86366134b363441684be4d8c", + "target": "org.jsoup.parser.Tag::normalName", + "graphSignature": "normalName()", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/parser/Tag.java", + "line": 141, + "sha256": "98b0a56d5963298da2176eeb555ae1e66cf43ddd0df28a25ebec1fa8ed7bee5a" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/parser/NameNormalizationTest.java", + "line": 62, + "edgeId": "sha256:9cfa7861597d4bfff63490f1c4b070a3e2b57398afe1559b11853173756a23bb" + } + ] + }, + { + "targetId": "sha256:94c097129a2d269e39183f18de003e7ec747b587137da88fe81f810b2a3dc92a", + "target": "org.jsoup.parser.Tag::set", + "graphSignature": "set(int)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/parser/Tag.java", + "line": 173, + "sha256": "98b0a56d5963298da2176eeb555ae1e66cf43ddd0df28a25ebec1fa8ed7bee5a" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/parser/NameNormalizationTest.java", + "line": 116, + "edgeId": "sha256:ef192b2fe8cbb85f42c6c4c59ee317f2bd67bc62124e151543c2dc5232c1351f" + }, + { + "file": "src/test/java/org/jsoup/parser/TagTest.java", + "line": 200, + "edgeId": "sha256:0a264e80d6c41b356cc208871c47dee6814de06a0ec7d69195cbf4aedacee860" + }, + { + "file": "src/test/java/org/jsoup/parser/TagTest.java", + "line": 201, + "edgeId": "sha256:07b1d5cac48ec1436f36ecc59ad71b34caa84c04c7a42955d124e8edee254e15" + }, + { + "file": "src/test/java/org/jsoup/parser/TagTest.java", + "line": 213, + "edgeId": "sha256:9be8348f9788c2f426d1ecfb8e4125569ac6d66dfab924874921c65e04c93218" + } + ] + }, + { + "targetId": "sha256:8d496c43f132d5f71e97956bbdbc252f3ef26c6615a27f0440cf9b63c1d5ccf4", + "target": "org.jsoup.parser.StreamParser::parse", + "graphSignature": "parse(Reader,String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/parser/StreamParser.java", + "line": 82, + "sha256": "5a50cf810031c426623c68cc630218c3e6725e1519bb039143777f9f19637855" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/parser/StreamParserTest.java", + "line": 456, + "edgeId": "sha256:8785e80cc707d7ab1136876fd42f625164ce09654452177adc3b3003d93a3b06" + } + ] + }, + { + "targetId": "sha256:817144c6469132780623c859650f3dbb59eef49b75108e12e8fd2efe7763b330", + "target": "org.jsoup.safety.Cleaner::isValid", + "graphSignature": "isValid(Document)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 94, + "sha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 230, + "edgeId": "sha256:87c056c51b2d78c239f46136248cabd92a01c20a49c40de2c6b8524ce3385906" + } + ] + }, + { + "targetId": "sha256:d490451c6bf56501db666f0a6c3c143f1a6d8a90120632415cc739cbf1a8f034", + "target": "org.jsoup.safety.Cleaner::clean", + "graphSignature": "clean(Document)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 62, + "sha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 314, + "edgeId": "sha256:0fe7e24b0bb3f1209889771a740118cec26cdc2af0392852e6b4474a103729de" + }, + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 325, + "edgeId": "sha256:cf51e7a56e4b7a6d15e27bdfced0abe6aec269686eabf29e119835f908620d14" + }, + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 458, + "edgeId": "sha256:0eaa9ec56cee649aa02a7e908d111590a5a3f8843e64efcf165c36930b9793d3" + }, + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 551, + "edgeId": "sha256:d1fe493dfb12d292f0c85130c3dd6212bc7716e5b9b48e2a38187656a82ce810" + }, + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 567, + "edgeId": "sha256:f55de48143efe8d27f1357b935ee3dc2408d948ee86ed17cde3e6f57c83e1d47" + } + ] + }, + { + "targetId": "sha256:65e150539d6718f6f78d058c646a266201b50bc1719893aa35c7926097090d94", + "target": "org.jsoup.safety.Safelist::addAttributes", + "graphSignature": "addAttributes(String)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 303, + "sha256": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 412, + "edgeId": "sha256:059ef0d08b3f6b02cdf6a1f1629b1f61f83db12253a72d711917d34da201af8a" + }, + { + "file": "src/test/java/org/jsoup/safety/CleanerTest.java", + "line": 423, + "edgeId": "sha256:db8ba0c0c548d550b90c730ff00458173536b7ffe58d1dfcda725b3935b2bd1d" + } + ] + }, + { + "targetId": "sha256:012ffde384064b8f0d3f11ca77e7e74ddbcfe7342b24afeb79627a9b194e273f", + "target": "org.jsoup.nodes.Attributes::put", + "graphSignature": "put(Attribute)", + "sourceDeclaration": { + "file": "src/main/java/org/jsoup/nodes/Attributes.java", + "line": 322, + "sha256": "39551b1d008f2a77b212b5b16e09e257b0ec9d8f118a0b7131a1cfe11ac32875" + }, + "review": "Source supports the exact constructor receiver, selected method declaration, and method-name occurrence. Compared overloads where present. Static source review; no runtime execution claim.", + "occurrences": [ + { + "file": "src/test/java/org/jsoup/safety/SafelistTest.java", + "line": 79, + "edgeId": "sha256:d05163cf82bc8fae9df4666419def2381c1326cf4b38b10db0499fc104523677" + } + ] + } + ] + } + }, + "diagnostic": { + "before": { + "nodes": 30, + "edges": 45, + "methodCalls": 2, + "inventedExternalMethodCalls": 2 + }, + "after": { + "nodes": 28, + "edges": 51, + "sourceSupportedMethodCalls": 9 + }, + "removedFalseRelationships": 3, + "removedInventedExternalNodes": 2, + "cacheUpgradeMatchesClean": true, + "compiler": "javac 17.0.8.1 compiled the fixture; javap descriptors corroborate overload and anonymous/enclosing receiver distinctions. Classes were not executed.", + "depthLimit": "tooDeep compiles to a real Cleaner.check call but exceeds bounded inference; unresolved is not absence credit.", + "enclosingInstance": "outer.new Cleaner() cannot resolve to the unrelated imported lib.Cleaner; candidate and enclosing qualifier remain available as unresolved evidence." + }, + "verification": { + "native": { + "passed": 1439, + "failed": 0, + "ignored": 2, + "scope": "Workspace lib/bin plus selected Java, universal, contract, product, framework and frontend integration tests." + }, + "clippy": "First invocation failed on redundant Ok(...?) in new test. Corrected to direct serialization function; repeated workspace lib/bin and selected integration Clippy passed. Existing unrelated react_frontend test lint violations remain outside this invocation.", + "finalRegression": "One test passed after the test-only Clippy correction.", + "fixturePreflight": "Identical expanded fixed-corpus graphs have zero node/edge changes excluding communities; no topology bounds changed.", + "fullFixtureQualification": "Passed with exit 0: native scale ceilings, source semantics/topology, cold/warm/forced/alternate-checkout/delete/rename/restore determinism, Markdown checks, release build and frontend precedence/positive/negative qualification. Production commit 22814e59.", + "formatDiffProductBoundary": "cargo fmt --all -- --check, git diff --check, and scripts/check_product_boundary.sh passed.", + "releaseBinarySha256": "88f98577c865a92bf6eb9cb7dc506eb5c806a2a66909d68c5fa1d1db43ccfb8d" + }, + "limitations": [ + "Text scores stay 46/55 each; selected relationships are 17/21 Compass versus 20/21 Graphify; reviewed occurrences tie at 17/21; paths remain 6/10 versus 8/10.", + "Single shared-machine timing run overlaps verification; latency is descriptive and gives no controlled performance comparison. Graphify digest attests its launcher only.", + "Anonymous dispatch, enclosing-instance owner resolution, arrays/casts, chained returns, inherited methods and deeper parentheses are not established by this change.", + "Source review found existing incomplete varargs display signatures: addTags() represents addTags(String...), and addAttributes(String) omits its String... parameter. Exact target source declarations, rather than those incomplete signatures, justify these edges.", + "No new MCP, god-object responsibility, community cohesion or directed/long-path superiority evidence. Historical pinned hierarchy scorecards remain invalidated." + ], + "artifactBase": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926", + "artifacts": { + "java-constructor-jsoup-delta.json": "f147ad06393c3f5b1600a90131b910ca6bca2c75d821ef3c4cb1a5c8907502d7", + "java-constructor-jsoup-source-rows.json": "7f60a3b7f42d14a4958ba0a6b7b90c6df5d116baf557b2b9a5643a944fd8e33d", + "java-constructor-receiver-final/policy-with-enclosing-negative.json": "17aeb86caa602f7a73ec3ea8a70e01ea17bc82547b5c5d64ad63ae3c61e62378", + "java-constructor-receiver-final/compiler-review.json": "8241b055f2a52a80007924342dde93d766d97aff3a6a034fcf7c54e734c83e6a", + "java-constructor-receiver-final/javap.txt": "327ac29b9c1ef0358bfd6ddaa3e30ff1f2b4bb63698408c8bb6e1338018aa048", + "java-constructor-receiver-final/delta.json": "7ec95282d16ce034ee8530e799eb751030c2fe8bf883dda8209a59465f323c9c", + "java-constructor-receiver-final/cache-review.json": "c57a9206395804a8085e97613beac43c9c858513099df911f62e33fa15b1d6ad", + "java-constructor-fixture-delta.json": "4b5ee7e5b75c5a93507fb2b92a382fadae6130b45b5600a292c05fa56d6101a8", + "java-constructor-native-01.log": "6d158f4b63b730028bcf940249aa626e4bf00ae5171ec9d102eaee544df9063d", + "java-constructor-clippy-01.log": "6904caf5e5c2ea6afbfd54469a572420b53b53e2477d1ec91236c81984f1ab4a", + "java-constructor-clippy-02.log": "2d48f6b34ae40fdc9a8d76136f5bffa25d233826932b0cc7aed55fd5932a63d6", + "java-constructor-native-after-04.log": "9122a15b8123f1d82b9558cd539da9bfb72ee8ee533753516166bc0f3ab7a68f", + "java-constructor-build-01.log": "cca4bf37bd1942503d72f28a0145be1717ef6747222ab3a359daf1c6d7f1761f", + "runs/java-constructor-panel-a-01/run.json": "c900349960adfa6b488ce98397529b5e55accb85e0dbf5dd4713a5a8b1a0bbf5", + "java-constructor-panel-a-path-audit-01.json": "e598f0e63e29be41883a0702ae01f828e0d63849693262afaa73ce9e25b4ef7e", + "java-constructor-panel-a-chi-audit-01.json": "43343bf82615be5ab0d137b233aeddf1ede61960ce6607b6d1d9197af35840a5", + "java-constructor-panel-a-click-audit-01.json": "9ba5d437fa949e3fc12449b2eb451caa9c0490a797d25c6e58520c813d15b0fa", + "java-constructor-panel-a-jsoup-audit-01.json": "2727f4c114cbbecd6dc261a5b0d9aa84fa576d90e831522ebd95f3e5e79d0b71", + "java-constructor-panel-a-redux-audit-01.json": "3373cda48df45a5a422f5feb8afa1cdb80c461bd8f4b10b560303ba383d0c1ed", + "java-constructor-panel-a-walkdir-audit-01.json": "3709a54138a721680b999acafeb0c30204b9f16b1cd05fb5fd060f238e5c01f1", + "java-constructor-qualification-01.log": "611c2b5b4fcb60e372598a406810e4a43343af765234f04ab2d82156cf816b5d" + } +} diff --git a/benchmarks/agent_query/java_dotted_owner_registration.json b/benchmarks/agent_query/java_dotted_owner_registration.json new file mode 100644 index 000000000..d6c6d8854 --- /dev/null +++ b/benchmarks/agent_query/java_dotted_owner_registration.json @@ -0,0 +1,137 @@ +{ + "schema": "compass.java-dotted-owner-registration/1", + "scope": "Complete unchanged compiler-backed jsoup development census after Java nominal dotted-name resolution; paired preservation controls on all four other known cohort repositories. Not held-out or broad quality confirmation.", + "registrationPhase": "Before any candidate real-repository extraction; compiler regression and focused native tests have informed this implementation.", + "baselineBranchCommit": "1fc6225ccb63b976e22b25c1fc4cf3695959e78e", + "previousRegistrationSha256": "eaaa3c887089c339ba29d84cd5dab84a180a074b67e870bc2165667614623107", + "previousReviewSha256": "e37b6699464d57bb9f1f1a03bfd531a6c3b3c5a172a5a8648d50c41dbd8925a5", + "source": { + "repository": "jhy/jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "sourceRoot": "src/main/java", + "files": 88, + "sourceRegistrationSha256": "6088df9f4cf420437a71ca06324bbe80817ed73142eb61c5686d8d3da36180af" + }, + "oracle": { + "path": "jsoup-java-field-oracle-02/capture-final/bindings.stdout", + "sha256": "4596b24d67fab7f728bc5dfe54e9b381fc42d411b9cb9042646cffbed420e95c", + "manifestSha256": "6b9532e36846aa7c2df0ac799c1c9f01dbf8c5061dd3adfa5a0fbc8e8bb64d3a", + "auditorSha256": "2ced23208ab1171d33ec00a6385fce34367a87c67d2cadef249650a1b8264e9b", + "release": "8", + "internalOrdinaryFieldReferences": 3785, + "internalEnumReferences": 529, + "nonSourceCategories": "Retain external fields, array lengths and class literals separately, as in the unchanged oracle." + }, + "baselineBinary": { + "path": "java-enum-access-01/compass-candidate-release", + "sha256": "28ae29a3141164df250a237e88d8054af1bb00021b1dafd4387b674311b40889", + "productionCommit": "a8b4a490eddeccb210d1e3c4390979c80d1e678a" + }, + "candidate": "Freeze a release binary after native qualification; bind exact source/build/test inputs, commands, outcomes and binary hashes. Version remains 0.3.30.", + "comparison": { + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69", + "originalCompassGraphSha256": "300f9afd2bf1f3c04d11b7f4563e464fd85d4a95da6de68d940d42d9f99f6227", + "originalReviewSha256": "e37b6699464d57bb9f1f1a03bfd531a6c3b3c5a172a5a8648d50c41dbd8925a5", + "commandTemplate": [ + "", + "extract", + "", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "" + ], + "order": [ + "baseline", + "candidate" + ], + "graphBoundBytes": 268435456, + "streamBoundBytes": 16777216, + "timeoutSeconds": 1200, + "sourcePolicy": "Read-only pinned clean repository; entire original extraction scope, fresh outputs for each frozen release binary. The source oracle only scores its registered 88-file Java 8 cohort; retain other graph records separately. Preserve all failures and graph omission warnings. Timing is operational only; no performance conclusion from these two observations." + }, + "scoring": [ + "Use the unchanged compiler capture, UTF-16 to UTF-8 conversion, exact target declaration and source owner joins. Retain the complete 3785 ordinary plus 529 enum-reference denominator.", + "Inventory every returned field/enum contact in the registered source files, including extra, wrong, ambiguous, unanchored and unmapped contacts. Any unsupported new contact requires source review and a correction before claiming precision.", + "Run the fresh preceding enum-fixed baseline against the same frozen oracle; compare its complete graph to the preserved preceding candidate graph. Retain all original results and failed attempts.", + "Report declaration joins, exact target-plus-owner occurrence recall, every miss and all precision failures separately for ordinary fields and enum constants; Graphify keeps its frozen environment and graph.", + "Compare whole graph additions/removals, identities, edge direction/multiplicity/provenance and omission warnings; do not infer functional community quality from graph changes.", + "Repeat complete verification and compare report bytes. Repeated verifier agreement is consistency evidence, not an independent source oracle.", + "Check each of the four non-Java baseline/candidate graph pairs byte-for-byte, including metadata and array order; compare to preserved originals, retaining all differences. Record timing operationally without speed claims." + ], + "controls": { + "sourceRun": "java-state-access-02/run.json", + "sourceRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "repositories": [ + { + "name": "chi", + "repository": "go-chi/chi", + "language": "Go", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "originalCompassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "frozenGraphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "name": "click", + "repository": "pallets/click", + "language": "Python", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "originalCompassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "frozenGraphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "name": "redux", + "repository": "reduxjs/redux", + "language": "TypeScript", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "originalCompassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "frozenGraphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "name": "walkdir", + "repository": "BurntSushi/walkdir", + "language": "Rust", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "originalCompassGraphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "frozenGraphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ], + "order": [ + "baseline", + "candidate" + ], + "limits": { + "timeoutSeconds": 1200, + "streamBytes": 16777216, + "graphBytes": 268435456 + }, + "commandTemplate": [ + "", + "extract", + "", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "" + ], + "requirements": [ + "Use complete clean pinned checkouts as read-only source inputs. Preserve every failure and omission warning; do not reduce input scope or selectively repeat.", + "Record both frozen binary hashes, command arguments, process exit/timeout/stream limits, raw logs and full artifact hashes for all eight observations.", + "Compare complete baseline/candidate graph bytes, including metadata and array order; also compare each to its original preserved Compass graph. Any difference is retained and investigated, not silently excluded.", + "Keep frozen Graphify graphs and environment unchanged. These controls do not rerun Graphify or establish a new paired quality score.", + "Repeat artifact verification and compare reports. Operational durations are recorded but do not establish a timing comparison.", + "The original Java census remains 3785 ordinary plus 529 enum occurrences. These controls do not add to its recall denominator or replace any earlier failed outcomes." + ] + }, + "limitations": [ + "This is one known Java configuration; general cross-language superiority remains unproven.", + "The change was motivated by observed missed enum constants. All scores are development results, even though this follow-up protocol precedes candidate extraction.", + "No authored explanation, runtime feasibility, functional community or god-object classification claim follows.", + "The preceding compiler fixture captures remain separate development diagnostics; neither changes the fixed real-source denominator.", + "This correction canonicalizes already established nominal receivers. Missing type/value expression-chain, static-import, hierarchy and selector typing evidence remains explicit." + ] +} diff --git a/benchmarks/agent_query/java_dotted_owner_review.json b/benchmarks/agent_query/java_dotted_owner_review.json new file mode 100644 index 000000000..1a214dd25 --- /dev/null +++ b/benchmarks/agent_query/java_dotted_owner_review.json @@ -0,0 +1,2407 @@ +{ + "schema": "compass.java-dotted-owner-review/1", + "scope": "Complete unchanged compiler-backed jsoup development census after Java nominal dotted-name resolution; paired preservation controls on all four other known cohort repositories. Not held-out or broad quality confirmation.", + "productionCommit": "be2fb542b0f39f752914ef83feb6913c0b4f6325", + "packageVersion": "0.3.30", + "astCacheSemantics": "10 unchanged; resolver-only correction, stored graphs require rebuild", + "registrationSha256": "2524bcda515c6d62bf125fe0663c564e6366152b1c108fea9cbace684b627967", + "registrationCommit": "c5a94aeb91e8f93a833d3a185bf307e85e823746", + "previousReviewSha256": "e37b6699464d57bb9f1f1a03bfd531a6c3b3c5a172a5a8648d50c41dbd8925a5", + "source": { + "repository": "jhy/jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "sourceRoot": "src/main/java", + "files": 88, + "sourceRegistrationSha256": "6088df9f4cf420437a71ca06324bbe80817ed73142eb61c5686d8d3da36180af" + }, + "oracle": { + "path": "jsoup-java-field-oracle-02/capture-final/bindings.stdout", + "sha256": "4596b24d67fab7f728bc5dfe54e9b381fc42d411b9cb9042646cffbed420e95c", + "manifestSha256": "6b9532e36846aa7c2df0ac799c1c9f01dbf8c5061dd3adfa5a0fbc8e8bb64d3a", + "auditorSha256": "2ced23208ab1171d33ec00a6385fce34367a87c67d2cadef249650a1b8264e9b", + "release": "8", + "internalOrdinaryFieldReferences": 3785, + "internalEnumReferences": 529, + "nonSourceCategories": "Retain external fields, array lengths and class literals separately, as in the unchanged oracle." + }, + "binaries": { + "baseline": { + "path": "/java-enum-access-01/compass-candidate-release", + "sha256": "28ae29a3141164df250a237e88d8054af1bb00021b1dafd4387b674311b40889" + }, + "candidate": { + "path": "/java-dotted-owner-01/compass-candidate-release", + "sha256": "39919a9b5e0fe99f642d03423a91b8eb05b42b1c95e78d84bcc8f285bf473f61" + } + }, + "qualifiedPatchSha256": "89c67244f4cf87c238b2044102d84d76ee08db6fd74b5a2d0dd8f75c742e46e9", + "qualifiedSourceInputs": 748, + "results": { + "baseline": { + "contactStatus": { + "verified_target_and_owner": 3461 + }, + "mostMissedTargets": { + "enum_constant": [ + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::xml", + 27 + ], + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::html", + 12 + ], + [ + "org.jsoup.parser.Token.TokenType::StartTag", + 10 + ], + [ + "org.jsoup.parser.Token.TokenType::EndTag", + 10 + ], + [ + "org.jsoup.select.NodeFilter.FilterResult::CONTINUE", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::Comment", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::Character", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::Doctype", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::EOF", + 8 + ], + [ + "org.jsoup.Connection.Method::GET", + 6 + ], + [ + "org.jsoup.select.NodeFilter.FilterResult::STOP", + 5 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InBody", + 5 + ], + [ + "org.jsoup.parser.TokeniserState::Data", + 4 + ], + [ + "org.jsoup.Connection.Method::POST", + 3 + ], + [ + "org.jsoup.Connection.Method::HEAD", + 3 + ], + [ + "org.jsoup.nodes.Entities.EscapeMode::base", + 3 + ], + [ + "org.jsoup.nodes.Entities.EscapeMode::extended", + 3 + ], + [ + "org.jsoup.parser.TokeniserState::ScriptData", + 3 + ], + [ + "org.jsoup.nodes.Document.QuirksMode::quirks", + 3 + ], + [ + "org.jsoup.nodes.Entities.EscapeMode::xhtml", + 2 + ] + ], + "field": [ + [ + "org.jsoup.parser.TreeBuilder::stack", + 51 + ], + [ + "org.jsoup.parser.TokeniserState::eof", + 40 + ], + [ + "org.jsoup.parser.TokeniserState::nullChar", + 38 + ], + [ + "org.jsoup.parser.Parser::NamespaceHtml", + 31 + ], + [ + "org.jsoup.parser.Token.Doctype::forceQuirks", + 31 + ], + [ + "org.jsoup.parser.Token.Tag::normalName", + 21 + ], + [ + "org.jsoup.parser.TreeBuilder::settings", + 16 + ], + [ + "org.jsoup.select.Evaluator.AttributeKeyPair::key", + 14 + ], + [ + "org.jsoup.nodes.Node::parentNode", + 13 + ], + [ + "org.jsoup.parser.TreeBuilder::tokeniser", + 13 + ], + [ + "org.jsoup.parser.Token.Tag::attributes", + 13 + ], + [ + "org.jsoup.select.StructuralEvaluator::evaluator", + 11 + ], + [ + "org.jsoup.parser.Parser::NamespaceSvg", + 10 + ], + [ + "org.jsoup.parser.TreeBuilder::doc", + 10 + ], + [ + "org.jsoup.select.Evaluator.AttributeKeyPair::value", + 10 + ], + [ + "::i", + 9 + ], + [ + "org.jsoup.internal.SharedConstants::DefaultBufferSize", + 8 + ], + [ + "org.jsoup.parser.Parser::NamespaceMathml", + 8 + ], + [ + "org.jsoup.helper.DataUtil::UTF_8", + 7 + ], + [ + "org.jsoup.parser.TreeBuilder::currentToken", + 7 + ] + ] + }, + "summary": { + "enum_constant": { + "declarations": 131, + "exactTargetAndOwner": 355, + "occurrences": 529, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "declarations": 616, + "exactTargetAndOwner": 3106, + "occurrences": 3785, + "uniqueGraphDeclarations": 614, + "unsupportedAnchors": 0 + } + }, + "unsupportedContacts": [] + }, + "candidate": { + "contactStatus": { + "verified_target_and_owner": 3483 + }, + "mostMissedTargets": { + "enum_constant": [ + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::xml", + 27 + ], + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::html", + 12 + ], + [ + "org.jsoup.parser.Token.TokenType::StartTag", + 10 + ], + [ + "org.jsoup.parser.Token.TokenType::EndTag", + 10 + ], + [ + "org.jsoup.parser.Token.TokenType::Comment", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::Character", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::Doctype", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::EOF", + 8 + ], + [ + "org.jsoup.Connection.Method::GET", + 6 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InBody", + 5 + ], + [ + "org.jsoup.parser.TokeniserState::Data", + 4 + ], + [ + "org.jsoup.Connection.Method::POST", + 3 + ], + [ + "org.jsoup.Connection.Method::HEAD", + 3 + ], + [ + "org.jsoup.nodes.Entities.EscapeMode::base", + 3 + ], + [ + "org.jsoup.select.NodeFilter.FilterResult::CONTINUE", + 3 + ], + [ + "org.jsoup.nodes.Entities.EscapeMode::extended", + 3 + ], + [ + "org.jsoup.parser.TokeniserState::ScriptData", + 3 + ], + [ + "org.jsoup.nodes.Document.QuirksMode::quirks", + 3 + ], + [ + "org.jsoup.nodes.Entities.EscapeMode::xhtml", + 2 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::Initial", + 2 + ] + ], + "field": [ + [ + "org.jsoup.parser.TreeBuilder::stack", + 51 + ], + [ + "org.jsoup.parser.TokeniserState::eof", + 40 + ], + [ + "org.jsoup.parser.TokeniserState::nullChar", + 38 + ], + [ + "org.jsoup.parser.Parser::NamespaceHtml", + 31 + ], + [ + "org.jsoup.parser.Token.Doctype::forceQuirks", + 31 + ], + [ + "org.jsoup.parser.Token.Tag::normalName", + 21 + ], + [ + "org.jsoup.parser.TreeBuilder::settings", + 16 + ], + [ + "org.jsoup.select.Evaluator.AttributeKeyPair::key", + 14 + ], + [ + "org.jsoup.nodes.Node::parentNode", + 13 + ], + [ + "org.jsoup.parser.TreeBuilder::tokeniser", + 13 + ], + [ + "org.jsoup.parser.Token.Tag::attributes", + 13 + ], + [ + "org.jsoup.select.StructuralEvaluator::evaluator", + 11 + ], + [ + "org.jsoup.parser.Parser::NamespaceSvg", + 10 + ], + [ + "org.jsoup.parser.TreeBuilder::doc", + 10 + ], + [ + "org.jsoup.select.Evaluator.AttributeKeyPair::value", + 10 + ], + [ + "::i", + 9 + ], + [ + "org.jsoup.internal.SharedConstants::DefaultBufferSize", + 8 + ], + [ + "org.jsoup.parser.Parser::NamespaceMathml", + 8 + ], + [ + "org.jsoup.helper.DataUtil::UTF_8", + 7 + ], + [ + "org.jsoup.parser.TreeBuilder::currentToken", + 7 + ] + ] + }, + "summary": { + "enum_constant": { + "declarations": 131, + "exactTargetAndOwner": 368, + "occurrences": 529, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "declarations": 616, + "exactTargetAndOwner": 3115, + "occurrences": 3785, + "uniqueGraphDeclarations": 614, + "unsupportedAnchors": 0 + } + }, + "unsupportedContacts": [] + }, + "graphify": { + "contactStatus": {}, + "mostMissedTargets": { + "enum_constant": [ + [ + "org.jsoup.parser.TokeniserState::Data", + 81 + ], + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::xml", + 27 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InBody", + 24 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InHead", + 15 + ], + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::html", + 12 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InTable", + 12 + ], + [ + "org.jsoup.parser.Token.TokenType::StartTag", + 11 + ], + [ + "org.jsoup.parser.Token.TokenType::EndTag", + 11 + ], + [ + "org.jsoup.parser.TokeniserState::ScriptData", + 10 + ], + [ + "org.jsoup.parser.TokeniserState::Comment", + 10 + ], + [ + "org.jsoup.select.NodeFilter.FilterResult::CONTINUE", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::Comment", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::Character", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::Doctype", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::EOF", + 9 + ], + [ + "org.jsoup.parser.TokeniserState::BeforeAttributeName", + 9 + ], + [ + "org.jsoup.parser.TokeniserState::ScriptDataEscaped", + 9 + ], + [ + "org.jsoup.parser.TokeniserState::BogusDoctype", + 9 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InTableBody", + 8 + ], + [ + "org.jsoup.parser.TokeniserState::AttributeName", + 7 + ] + ], + "field": [ + [ + "org.jsoup.nodes.Node::parentNode", + 78 + ], + [ + "org.jsoup.parser.TreeBuilder::stack", + 67 + ], + [ + "org.jsoup.parser.CharacterReader::bufPos", + 62 + ], + [ + "org.jsoup.parser.Tokeniser::doctypePending", + 52 + ], + [ + "org.jsoup.parser.Tokeniser::tagPending", + 49 + ], + [ + "org.jsoup.parser.TokeniserState::nullChar", + 48 + ], + [ + "org.jsoup.parser.Tokeniser::reader", + 45 + ], + [ + "org.jsoup.helper.HttpConnection::req", + 41 + ], + [ + "org.jsoup.nodes.Attributes::size", + 41 + ], + [ + "org.jsoup.parser.TokeniserState::eof", + 41 + ], + [ + "org.jsoup.parser.CharacterReader::charBuf", + 39 + ], + [ + "org.jsoup.nodes.Element::childNodes", + 38 + ], + [ + "org.jsoup.nodes.Element::attributes", + 36 + ], + [ + "org.jsoup.select.QueryParser::tq", + 36 + ], + [ + "org.jsoup.parser.CharacterReader::bufLength", + 33 + ], + [ + "org.jsoup.parser.Token.Doctype::forceQuirks", + 33 + ], + [ + "org.jsoup.parser.Parser::NamespaceHtml", + 32 + ], + [ + "org.jsoup.nodes.Attributes::keys", + 30 + ], + [ + "org.jsoup.nodes.Attributes::vals", + 30 + ], + [ + "org.jsoup.nodes.Element::tag", + 30 + ] + ] + }, + "summary": { + "enum_constant": { + "declarations": 131, + "exactTargetAndOwner": 0, + "occurrences": 529, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "declarations": 616, + "exactTargetAndOwner": 0, + "occurrences": 3785, + "uniqueGraphDeclarations": 0, + "unsupportedAnchors": 0 + } + }, + "unsupportedContacts": [] + } + }, + "observations": [ + { + "argv": [ + "/java-enum-access-01/compass-candidate-release", + "extract", + "/jhy/jsoup", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/evaluation/baseline/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 6037, + "stdout_bytes": 494, + "stderr_bytes": 114, + "output_limited": false, + "name": "baseline", + "loadAverageBefore": [ + 13.48486328125, + 10.31005859375, + 9.2685546875 + ], + "loadAverageAfter": [ + 12.72509765625, + 10.205078125, + 9.2373046875 + ], + "stdoutSha256": "64be2ee2eb7b784231bfe80c59eaed5f0db987c653efbe44b8d749197929fdbb", + "stderrSha256": "45059c9ec54273c94fdab76dffa2e08eee926f56b533e2e277d2a1a2bee38743", + "graphPath": "/java-dotted-owner-01/evaluation/baseline/artifact/compass-out/snapshots/snapshot-1790543164384101000-80647-0/graph.json", + "graphBytes": 30256465, + "admitted": true, + "graphSha256": "300f9afd2bf1f3c04d11b7f4563e464fd85d4a95da6de68d940d42d9f99f6227", + "equalsOriginalCompassGraph": true, + "reviewSha256": "5c993b36e2a0a2429e2fe8f06659cc701ebd32eb922231b9e6cbd86907fec465", + "summary": { + "enum_constant": { + "occurrences": 529, + "exactTargetAndOwner": 355, + "declarations": 131, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 3785, + "exactTargetAndOwner": 3106, + "declarations": 616, + "uniqueGraphDeclarations": 614, + "unsupportedAnchors": 0 + } + }, + "contactStatus": { + "verified_target_and_owner": 3461 + } + }, + { + "argv": [ + "/java-dotted-owner-01/compass-candidate-release", + "extract", + "/jhy/jsoup", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/evaluation/candidate/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 5125, + "stdout_bytes": 495, + "stderr_bytes": 114, + "output_limited": false, + "name": "candidate", + "loadAverageBefore": [ + 12.72509765625, + 10.205078125, + 9.2373046875 + ], + "loadAverageAfter": [ + 12.9873046875, + 10.30126953125, + 9.27685546875 + ], + "stdoutSha256": "5b1aa0b8ad7ff4ad724ad8fec9158c9513d9b39f4222da73b4d56d6f426d418b", + "stderrSha256": "45059c9ec54273c94fdab76dffa2e08eee926f56b533e2e277d2a1a2bee38743", + "graphPath": "/java-dotted-owner-01/evaluation/candidate/artifact/compass-out/snapshots/snapshot-1790543171203895000-80748-0/graph.json", + "graphBytes": 30296084, + "admitted": true, + "graphSha256": "04fc11f8d2c30f663c694451cc2c2957c94536a3658e4d0eeb5584fa38b6a2d8", + "equalsOriginalCompassGraph": false, + "reviewSha256": "9e95fb6247727b4ea01e80b0ce54805793a97b07ae38e9b4a8260e5944072c3e", + "summary": { + "enum_constant": { + "occurrences": 529, + "exactTargetAndOwner": 368, + "declarations": 131, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 3785, + "exactTargetAndOwner": 3115, + "declarations": 616, + "uniqueGraphDeclarations": 614, + "unsupportedAnchors": 0 + } + }, + "contactStatus": { + "verified_target_and_owner": 3483 + } + } + ], + "graphify": { + "graphPath": "/runs/java-varargs-panel-a-02/artifacts/jsoup/graphify/graphify-out/graph.json", + "graphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69", + "reviewSha256": "dc5cbeea887a267d5a6f9a39860efc924e4be3a09fabb5a7c447de9e6a7ab0b2", + "summary": { + "enum_constant": { + "occurrences": 529, + "exactTargetAndOwner": 0, + "declarations": 131, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 3785, + "exactTargetAndOwner": 0, + "declarations": 616, + "uniqueGraphDeclarations": 0, + "unsupportedAnchors": 0 + } + }, + "contactStatus": {} + }, + "originalMatchedReferencesRetained": 3461, + "lostOriginalMatchedReferences": [], + "newVerifiedReferences": 22, + "newVerifiedContacts": [ + { + "index": 84, + "id": "sha256:00cace29738579a28a964dc715bfe0e8c7d26e2ee4b2efcff3a75b983f2d96a7", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:8fca14f0c24e37ff24402afe64fb98b3fb3449050ad9beed2da28b70eef2d517", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 156, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 6809, + "endByte": 6815, + "startLine": 156, + "startColumn": 39, + "endLine": 156, + "endColumn": 45 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1499:1505:enum_constant:REMOVE" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4313 + ], + "status": "verified_target_and_owner" + }, + { + "index": 305, + "id": "sha256:033846b4e59ae0c7b1f116cd0f0d1718971978f8a1e0f82cb131684855f3d4a0", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:c7bf096e51b72b30d7f5e6ab4614aab468141937edd30ab01abed707afbed022", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 124, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 5299, + "endByte": 5307, + "startLine": 124, + "startColumn": 39, + "endLine": 124, + "endColumn": 47 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1188:1196:enum_constant:CONTINUE" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4304 + ], + "status": "verified_target_and_owner" + }, + { + "index": 435, + "id": "sha256:048020294ce6b2dc53e4f92d5bfc4eeb6ec2c0af03e635521d75ae9936409032", + "source": "sha256:57ec730ceb5e52e360a9b8dbe0fb4b4253eb103d92321784c4624ec1f5a1d463", + "target": "sha256:3e279ab168895c5e84739f2706ef71591f5b10eda9d0f214f10628758324415d", + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "line": 51, + "site": { + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "startByte": 1713, + "endByte": 1726, + "startLine": 51, + "startColumn": 20, + "endLine": 51, + "endColumn": 33 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/helper/HttpConnection.java:26636:26662:field:statusMessage" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java:887:2184:method:execute" + ], + "oracleReferences": [ + 494 + ], + "status": "verified_target_and_owner" + }, + { + "index": 3262, + "id": "sha256:2062077b46b09e35fdf0c701844225ace97674e535678c286cf709759bfbf60f", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:5070d441b5070493ff795a4cfae07a38aa816eeeb9f74545f3100d9801402d27", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 134, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 5769, + "endByte": 5782, + "startLine": 134, + "startColumn": 78, + "endLine": 134, + "endColumn": 91 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1311:1324:enum_constant:SKIP_CHILDREN" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4306 + ], + "status": "verified_target_and_owner" + }, + { + "index": 3842, + "id": "sha256:26228dc28e40edfe6ec8e4c6ab6db2c4b2d3708f19c2a531d0832a74df54187b", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:c7bf096e51b72b30d7f5e6ab4614aab468141937edd30ab01abed707afbed022", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 144, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 6247, + "endByte": 6255, + "startLine": 144, + "startColumn": 38, + "endLine": 144, + "endColumn": 46 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1188:1196:enum_constant:CONTINUE" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4309 + ], + "status": "verified_target_and_owner" + }, + { + "index": 3962, + "id": "sha256:2747bce864ce935130d63f21c94de2f3802f9f75cf073d5b27479349873bef3a", + "source": "sha256:2dce7d9d277ab5893ad3f5957ee83c96e11f5371eb276ee9c448c8c647d78bc7", + "target": "sha256:949171853b3ec5b6a763cc9b934a706a9b767d94a37426a2e00627550f3bfb1b", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 172, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 7327, + "endByte": 7331, + "startLine": 172, + "startColumn": 51, + "endLine": 172, + "endColumn": 55 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1546:1550:enum_constant:STOP" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:7104:7361:method:filter" + ], + "oracleReferences": [ + 4315 + ], + "status": "verified_target_and_owner" + }, + { + "index": 4259, + "id": "sha256:29ec858c68e00ae5b693a4a8e6d737ac979cc54918bc945cfb6f40809422efe7", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:949171853b3ec5b6a763cc9b934a706a9b767d94a37426a2e00627550f3bfb1b", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 136, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 5888, + "endByte": 5892, + "startLine": 136, + "startColumn": 47, + "endLine": 136, + "endColumn": 51 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1546:1550:enum_constant:STOP" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4307 + ], + "status": "verified_target_and_owner" + }, + { + "index": 4701, + "id": "sha256:2e50a6f5a4ddea09ad817b2afee27f33ce56ea554cb1fc7d5fc7fab3afac90a8", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:c7bf096e51b72b30d7f5e6ab4614aab468141937edd30ab01abed707afbed022", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 134, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 5734, + "endByte": 5742, + "startLine": 134, + "startColumn": 43, + "endLine": 134, + "endColumn": 51 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1188:1196:enum_constant:CONTINUE" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4305 + ], + "status": "verified_target_and_owner" + }, + { + "index": 5461, + "id": "sha256:35f8c99d2c547a2c5f63feb3a8c6ad5073b361aa892f34013e2f952e3720ea9a", + "source": "sha256:b2fb86292c7499b3accd1ce417581ca8461f7e9da79fb7c0d0a2f27c8c1e25f5", + "target": "sha256:e60dcd6c99e24fa328dd30c2b3bfcdaca79435bae97c7a5b9dc575edcbcd6ec5", + "file": "src/main/java/org/jsoup/select/QueryParser.java", + "line": 535, + "site": { + "file": "src/main/java/org/jsoup/select/QueryParser.java", + "startByte": 22706, + "endByte": 22711, + "startLine": 535, + "startColumn": 45, + "endLine": 535, + "endColumn": 50 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/HasEvaluator.java:2039:2057:field:scope" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/QueryParser.java:22168:22971:method:planTraversals" + ], + "oracleReferences": [ + 4386 + ], + "status": "verified_target_and_owner" + }, + { + "index": 6773, + "id": "sha256:425413400a6c591da6ee8210e079fff0ce2bcda5bbe97d1800626e9a42b8312b", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:8fca14f0c24e37ff24402afe64fb98b3fb3449050ad9beed2da28b70eef2d517", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 142, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 6134, + "endByte": 6140, + "startLine": 142, + "startColumn": 43, + "endLine": 142, + "endColumn": 49 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1499:1505:enum_constant:REMOVE" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4308 + ], + "status": "verified_target_and_owner" + }, + { + "index": 7545, + "id": "sha256:4a502a8c1c7a791c441f465a889aac38731fa38e114488dfc5976c0f2cbc67fa", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:5070d441b5070493ff795a4cfae07a38aa816eeeb9f74545f3100d9801402d27", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 147, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 6435, + "endByte": 6448, + "startLine": 147, + "startColumn": 74, + "endLine": 147, + "endColumn": 87 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1311:1324:enum_constant:SKIP_CHILDREN" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4311 + ], + "status": "verified_target_and_owner" + }, + { + "index": 7835, + "id": "sha256:4d45b6ff28f863206a68762ea7cd99aabecedf6b2a50fa88a1fffe1c18e33db5", + "source": "sha256:b2fb86292c7499b3accd1ce417581ca8461f7e9da79fb7c0d0a2f27c8c1e25f5", + "target": "sha256:7dfea65523e52825889964b1210bf89192f8e0cbfaea8e1005d3b756bff2169e", + "file": "src/main/java/org/jsoup/select/QueryParser.java", + "line": 536, + "site": { + "file": "src/main/java/org/jsoup/select/QueryParser.java", + "startByte": 22799, + "endByte": 22808, + "startLine": 536, + "startColumn": 75, + "endLine": 536, + "endColumn": 84 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/HasEvaluator.java:2004:2030:field:evaluator" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/QueryParser.java:22168:22971:method:planTraversals" + ], + "oracleReferences": [ + 4387 + ], + "status": "verified_target_and_owner" + }, + { + "index": 9574, + "id": "sha256:5f22e9eee9be99aa59705c8030d2baecbd77f9fc70e12d0ab70b12e2e336bbd1", + "source": "sha256:57ec730ceb5e52e360a9b8dbe0fb4b4253eb103d92321784c4624ec1f5a1d463", + "target": "sha256:14a1f6d1c28c698bfce77bcabfa0f3dc811b545b2a86b9e569b34706a9a57faa", + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "line": 52, + "site": { + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "startByte": 1842, + "endByte": 1853, + "startLine": 52, + "startColumn": 16, + "endLine": 52, + "endColumn": 27 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/helper/HttpConnection.java:26866:26895:field:contentType" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java:887:2184:method:execute" + ], + "oracleReferences": [ + 496 + ], + "status": "verified_target_and_owner" + }, + { + "index": 15968, + "id": "sha256:9ecebf64ff2e6e42b3cf38e18e966582b64df183a7bf3775a9535ce3a31b87a3", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:c7bf096e51b72b30d7f5e6ab4614aab468141937edd30ab01abed707afbed022", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 160, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 6944, + "endByte": 6952, + "startLine": 160, + "startColumn": 28, + "endLine": 160, + "endColumn": 36 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1188:1196:enum_constant:CONTINUE" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4314 + ], + "status": "verified_target_and_owner" + }, + { + "index": 16693, + "id": "sha256:a5ee895709c8b4fbd60c5f1e0eca08d25556b5fdc5e7d981f28c8aebf0265121", + "source": "sha256:57ec730ceb5e52e360a9b8dbe0fb4b4253eb103d92321784c4624ec1f5a1d463", + "target": "sha256:3e279ab168895c5e84739f2706ef71591f5b10eda9d0f214f10628758324415d", + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "line": 50, + "site": { + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "startByte": 1650, + "endByte": 1663, + "startLine": 50, + "startColumn": 16, + "endLine": 50, + "endColumn": 29 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/helper/HttpConnection.java:26636:26662:field:statusMessage" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java:887:2184:method:execute" + ], + "oracleReferences": [ + 492 + ], + "status": "verified_target_and_owner" + }, + { + "index": 17452, + "id": "sha256:addc81574cbe384df4a6b19d8bd4f701634041db6f47c0b05f453e0353b80369", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:949171853b3ec5b6a763cc9b934a706a9b767d94a37426a2e00627550f3bfb1b", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 149, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 6546, + "endByte": 6550, + "startLine": 149, + "startColumn": 43, + "endLine": 149, + "endColumn": 47 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1546:1550:enum_constant:STOP" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4312 + ], + "status": "verified_target_and_owner" + }, + { + "index": 17995, + "id": "sha256:b38daa2e30a47cee084b5dedba8e062a0552289d31691f3edc5f4cd97c37f32d", + "source": "sha256:57ec730ceb5e52e360a9b8dbe0fb4b4253eb103d92321784c4624ec1f5a1d463", + "target": "sha256:09578e29ad13c9f9a6b580d9e0e3f70b7e35e3f5f11beee5839698772e61d8de", + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "line": 46, + "site": { + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "startByte": 1450, + "endByte": 1458, + "startLine": 46, + "startColumn": 16, + "endLine": 46, + "endColumn": 24 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/helper/HttpConnection.java:26780:26815:field:executor" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java:887:2184:method:execute" + ], + "oracleReferences": [ + 485 + ], + "status": "verified_target_and_owner" + }, + { + "index": 19700, + "id": "sha256:c42e62ab8f9bec28794100359c97a4097c14420c384337e1107687eebf9fabb8", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:949171853b3ec5b6a763cc9b934a706a9b767d94a37426a2e00627550f3bfb1b", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 121, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 5182, + "endByte": 5186, + "startLine": 121, + "startColumn": 39, + "endLine": 121, + "endColumn": 43 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1546:1550:enum_constant:STOP" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4303 + ], + "status": "verified_target_and_owner" + }, + { + "index": 20298, + "id": "sha256:ca264e2dcc1e0a385c502e94236c86b42a719e512786a477e140c779411f3bdd", + "source": "sha256:7c26c185526bd1f5cbb09ea65e7d80bb99325922659006a26a3c33f91fbe85e4", + "target": "sha256:c7bf096e51b72b30d7f5e6ab4614aab468141937edd30ab01abed707afbed022", + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "line": 147, + "site": { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "startByte": 6400, + "endByte": 6408, + "startLine": 147, + "startColumn": 39, + "endLine": 147, + "endColumn": 47 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/select/NodeFilter.java:1188:1196:enum_constant:CONTINUE" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/select/NodeTraversor.java:4936:6959:method:filter" + ], + "oracleReferences": [ + 4310 + ], + "status": "verified_target_and_owner" + }, + { + "index": 22565, + "id": "sha256:e0d1255df023b1b1d52b9c717eafe2ca63f63283e22bf097e3522fe4ce28483f", + "source": "sha256:57ec730ceb5e52e360a9b8dbe0fb4b4253eb103d92321784c4624ec1f5a1d463", + "target": "sha256:3e279ab168895c5e84739f2706ef71591f5b10eda9d0f214f10628758324415d", + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "line": 51, + "site": { + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "startByte": 1740, + "endByte": 1753, + "startLine": 51, + "startColumn": 47, + "endLine": 51, + "endColumn": 60 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/helper/HttpConnection.java:26636:26662:field:statusMessage" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java:887:2184:method:execute" + ], + "oracleReferences": [ + 495 + ], + "status": "verified_target_and_owner" + }, + { + "index": 25005, + "id": "sha256:f8aae85e8c816f866488766038d4ae8d29f1fba55b3067663d40bbc9f69c741c", + "source": "sha256:57ec730ceb5e52e360a9b8dbe0fb4b4253eb103d92321784c4624ec1f5a1d463", + "target": "sha256:568569ab1f68d27a4827997b315287fb5163829769a23cbc83522f45f0d61975", + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "line": 53, + "site": { + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "startByte": 1895, + "endByte": 1908, + "startLine": 53, + "startColumn": 16, + "endLine": 53, + "endColumn": 29 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/helper/HttpConnection.java:26904:26922:field:contentLength" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java:887:2184:method:execute" + ], + "oracleReferences": [ + 498 + ], + "status": "verified_target_and_owner" + }, + { + "index": 25499, + "id": "sha256:fdbd29f148a547fa4585c2aab58751957106e08014bb111afcea152a8813654d", + "source": "sha256:57ec730ceb5e52e360a9b8dbe0fb4b4253eb103d92321784c4624ec1f5a1d463", + "target": "sha256:fefa7c3d245cd15f4f7f2b5445da817ddc4598013c56736376056f0fd750e79e", + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "line": 49, + "site": { + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "startByte": 1597, + "endByte": 1607, + "startLine": 49, + "startColumn": 16, + "endLine": 49, + "endColumn": 26 + }, + "graphDirected": true, + "targetDeclarations": [ + "src/main/java/org/jsoup/helper/HttpConnection.java:26612:26627:field:statusCode" + ], + "ownerDeclarations": [ + "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java:887:2184:method:execute" + ], + "oracleReferences": [ + 490 + ], + "status": "verified_target_and_owner" + } + ], + "remainingMisses": { + "field": 670, + "enum_constant": 161 + }, + "wholeGraphDelta": { + "links": { + "added": 49, + "addedKinds": { + "references": 49 + }, + "addedOccurrenceScopes": { + "outside-registered-source-or-unanchored": 27, + "registered-source": 22 + }, + "baseline": 25676, + "candidate": 25725, + "changed": 0, + "changedFieldCounts": {}, + "removed": 0, + "removedKinds": {} + }, + "nodes": { + "added": 0, + "baseline": 6116, + "candidate": 6116, + "changed": 4097, + "changedFieldCounts": { + "community": 4097 + }, + "removed": 0 + } + }, + "otherTopLevelGraphFieldsEqual": true, + "sourceAnchorChecks": { + "schema": "compass.java-dotted-owner-added-anchors/1", + "graphSha256": "04fc11f8d2c30f663c694451cc2c2957c94536a3658e4d0eeb5584fa38b6a2d8", + "verificationSha256": "30e15a450eca8230e591161ca0b3e34f8cbb47215737d8bf000019dfbaec218c", + "scriptSha256": "cc6002bc024d722025ac17efe1dda7ebfa24acf9a36346961f20d6885e49d74d", + "allChecksPassed": true, + "outsideCompilerCohortFiles": { + "src/main/java11/org/jsoup/helper/HttpClientExecutor.java": 6, + "src/test/java/org/jsoup/integration/ConnectTest.java": 10, + "src/test/java/org/jsoup/nodes/DocumentTest.java": 4, + "src/test/java/org/jsoup/parser/XmlTreeBuilderTest.java": 7 + }, + "scope": "Checks graph/source byte anchors, provenance and callable containment only. Same-spelled wrong bindings can pass these checks; additions outside the Java 8 compiler cohort remain semantically unscored." + }, + "partialGraphWarnings": [ + { + "admitted": true, + "diagnostics": "warning: Compass published a partial graph after omitting 0 nodes and 2 edges; 0 identity collisions quarantined.\n", + "name": "baseline", + "successful": true + }, + { + "admitted": true, + "diagnostics": "warning: Compass published a partial graph after omitting 0 nodes and 2 edges; 0 identity collisions quarantined.\n", + "name": "candidate", + "successful": true + } + ], + "controls": { + "verification": { + "allEightAdmitted": true, + "allFourPairsEqual": true, + "allFourPairsEqualOriginal": true, + "limits": [ + "This is one known Java configuration; general cross-language superiority remains unproven.", + "The change was motivated by observed missed enum constants. All scores are development results, even though this follow-up protocol precedes candidate extraction.", + "No authored explanation, runtime feasibility, functional community or god-object classification claim follows.", + "The preceding compiler fixture captures remain separate development diagnostics; neither changes the fixed real-source denominator.", + "This correction canonicalizes already established nominal receivers. Missing type/value expression-chain, static-import, hierarchy and selector typing evidence remains explicit." + ], + "observations": [ + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "chi", + "stderr": "", + "successful": true, + "tool": "baseline" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "chi", + "stderr": "", + "successful": true, + "tool": "candidate" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "click", + "stderr": "", + "successful": true, + "tool": "baseline" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "click", + "stderr": "", + "successful": true, + "tool": "candidate" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "redux", + "stderr": "warning: Compass published a partial graph after omitting 0 nodes and 2 edges; 0 identity collisions quarantined.\n", + "successful": true, + "tool": "baseline" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "redux", + "stderr": "warning: Compass published a partial graph after omitting 0 nodes and 2 edges; 0 identity collisions quarantined.\n", + "successful": true, + "tool": "candidate" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "walkdir", + "stderr": "", + "successful": true, + "tool": "baseline" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "walkdir", + "stderr": "", + "successful": true, + "tool": "candidate" + } + ], + "panels": [ + { + "admitted": 2, + "allThreeEqual": true, + "completePair": true, + "fullPairByteEquality": true, + "repository": "chi" + }, + { + "admitted": 2, + "allThreeEqual": true, + "completePair": true, + "fullPairByteEquality": true, + "repository": "click" + }, + { + "admitted": 2, + "allThreeEqual": true, + "completePair": true, + "fullPairByteEquality": true, + "repository": "redux" + }, + { + "admitted": 2, + "allThreeEqual": true, + "completePair": true, + "fullPairByteEquality": true, + "repository": "walkdir" + } + ], + "registrationSha256": "2524bcda515c6d62bf125fe0663c564e6366152b1c108fea9cbace684b627967", + "runSha256": "02cc70888ef7dc532fcbe5ba6501b1dd1d1a67d3edffd0e70f4570b7ea0d3582", + "schema": "compass.java-dotted-owner-controls-verification/1", + "scope": "Complete unchanged compiler-backed jsoup development census after Java nominal dotted-name resolution; paired preservation controls on all four other known cohort repositories. Not held-out or broad quality confirmation.", + "verifierSha256": "b2ca7976d4271ae39061f8453ea2c53090ec3d3c5ca721ea5855f00eb3f3a810" + }, + "observations": [ + { + "argv": [ + "/java-enum-access-01/compass-candidate-release", + "extract", + "/go-chi/chi", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/controls/chi/baseline/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 1586, + "stdout_bytes": 493, + "stderr_bytes": 0, + "output_limited": false, + "repository": "chi", + "tool": "baseline", + "stdoutSha256": "ab149a5c14d7c1b3a0fe93ca02aca630322536af20225214abc8a7b1573910cd", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphPath": "/java-dotted-owner-01/controls/chi/baseline/artifact/compass-out/snapshots/snapshot-1790543163882142000-80622-0/graph.json", + "graphBytes": 2488750, + "admitted": true, + "graphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "equalsOriginalGraph": true + }, + { + "argv": [ + "/java-dotted-owner-01/compass-candidate-release", + "extract", + "/go-chi/chi", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/controls/chi/candidate/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 1564, + "stdout_bytes": 494, + "stderr_bytes": 0, + "output_limited": false, + "repository": "chi", + "tool": "candidate", + "stdoutSha256": "6021b54197ec67ec946d9bfad2788c5eae1b0345b7123eeed3daa96291764a99", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphPath": "/java-dotted-owner-01/controls/chi/candidate/artifact/compass-out/snapshots/snapshot-1790543165935883000-80658-0/graph.json", + "graphBytes": 2488750, + "admitted": true, + "graphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "equalsOriginalGraph": true + }, + { + "argv": [ + "/java-enum-access-01/compass-candidate-release", + "extract", + "/pallets/click", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/controls/click/baseline/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 2528, + "stdout_bytes": 498, + "stderr_bytes": 0, + "output_limited": false, + "repository": "click", + "tool": "baseline", + "stdoutSha256": "513df87e5ceabc04a9346c29affd7cdb27403416a3d1f35596a40bb3ae4b5427", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphPath": "/java-dotted-owner-01/controls/click/baseline/artifact/compass-out/snapshots/snapshot-1790543168173090000-80686-0/graph.json", + "graphBytes": 9607995, + "admitted": true, + "graphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "equalsOriginalGraph": true + }, + { + "argv": [ + "/java-dotted-owner-01/compass-candidate-release", + "extract", + "/pallets/click", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/controls/click/candidate/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 2242, + "stdout_bytes": 499, + "stderr_bytes": 0, + "output_limited": false, + "repository": "click", + "tool": "candidate", + "stdoutSha256": "e15948c13e5a88891e97586ef16b1c4e72443d907b936f68c775047f8f17e1fb", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphPath": "/java-dotted-owner-01/controls/click/candidate/artifact/compass-out/snapshots/snapshot-1790543171176890000-80747-0/graph.json", + "graphBytes": 9607995, + "admitted": true, + "graphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "equalsOriginalGraph": true + }, + { + "argv": [ + "/java-enum-access-01/compass-candidate-release", + "extract", + "/reduxjs/redux", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/controls/redux/baseline/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 3166, + "stdout_bytes": 498, + "stderr_bytes": 114, + "output_limited": false, + "repository": "redux", + "tool": "baseline", + "stdoutSha256": "6d31fcc44b95e7c2ae142af7e64f14c7c483df93ba50b7714888da6934177b53", + "stderrSha256": "45059c9ec54273c94fdab76dffa2e08eee926f56b533e2e277d2a1a2bee38743", + "graphPath": "/java-dotted-owner-01/controls/redux/baseline/artifact/compass-out/snapshots/snapshot-1790543174881936000-80761-0/graph.json", + "graphBytes": 8047006, + "admitted": true, + "graphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "equalsOriginalGraph": true + }, + { + "argv": [ + "/java-dotted-owner-01/compass-candidate-release", + "extract", + "/reduxjs/redux", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/controls/redux/candidate/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 2024, + "stdout_bytes": 499, + "stderr_bytes": 114, + "output_limited": false, + "repository": "redux", + "tool": "candidate", + "stdoutSha256": "a018792ab2edd4823d67c99d8e65622bcd752432da7a61ac387d01ca5d5f21e4", + "stderrSha256": "45059c9ec54273c94fdab76dffa2e08eee926f56b533e2e277d2a1a2bee38743", + "graphPath": "/java-dotted-owner-01/controls/redux/candidate/artifact/compass-out/snapshots/snapshot-1790543178528549000-80777-0/graph.json", + "graphBytes": 8047006, + "admitted": true, + "graphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "equalsOriginalGraph": true + }, + { + "argv": [ + "/java-enum-access-01/compass-candidate-release", + "extract", + "/BurntSushi/walkdir", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/controls/walkdir/baseline/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 867, + "stdout_bytes": 496, + "stderr_bytes": 0, + "output_limited": false, + "repository": "walkdir", + "tool": "baseline", + "stdoutSha256": "39c1484ddc57733f5c22e2bf89096f20ef571d6de2f048b2c2e7fc480eb6ea1b", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphPath": "/java-dotted-owner-01/controls/walkdir/baseline/artifact/compass-out/snapshots/snapshot-1790543181039404000-80785-0/graph.json", + "graphBytes": 1463032, + "admitted": true, + "graphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "equalsOriginalGraph": true + }, + { + "argv": [ + "/java-dotted-owner-01/compass-candidate-release", + "extract", + "/BurntSushi/walkdir", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/controls/walkdir/candidate/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 863, + "stdout_bytes": 497, + "stderr_bytes": 0, + "output_limited": false, + "repository": "walkdir", + "tool": "candidate", + "stdoutSha256": "afa7fca8ab34fa2dfa11ae545b17c0e2edc9592a81cff52580d47748a88cd8dc", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphPath": "/java-dotted-owner-01/controls/walkdir/candidate/artifact/compass-out/snapshots/snapshot-1790543182470054000-81022-0/graph.json", + "graphBytes": 1463032, + "admitted": true, + "graphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "equalsOriginalGraph": true + } + ], + "repositories": [ + { + "name": "chi", + "repository": "go-chi/chi", + "language": "Go", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "originalCompassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "frozenGraphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "name": "click", + "repository": "pallets/click", + "language": "Python", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "originalCompassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "frozenGraphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "name": "redux", + "repository": "reduxjs/redux", + "language": "TypeScript", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "originalCompassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "frozenGraphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "name": "walkdir", + "repository": "BurntSushi/walkdir", + "language": "Rust", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "originalCompassGraphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "frozenGraphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ] + }, + "communityReplay": { + "scope": "Post-change diagnostic after observing changed community labels. Replay every unchanged source task pair from the existing known development cohort; no new selection, tuning, preregistered quality outcome, functional-cohesion or superiority claim.", + "unchangedPairs": 75, + "repositories": [ + { + "repository": "chi", + "pairOutcomesUnchanged": true, + "baselineCommunities": 154, + "candidateCommunities": 154 + }, + { + "repository": "click", + "pairOutcomesUnchanged": true, + "baselineCommunities": 173, + "candidateCommunities": 173 + }, + { + "repository": "jsoup", + "pairOutcomesUnchanged": true, + "baselineCommunities": 40, + "candidateCommunities": 43 + }, + { + "repository": "redux", + "pairOutcomesUnchanged": true, + "baselineCommunities": 845, + "candidateCommunities": 845 + }, + { + "repository": "walkdir", + "pairOutcomesUnchanged": true, + "baselineCommunities": 10, + "candidateCommunities": 10 + } + ] + }, + "warmCache": { + "argv": [ + "/java-dotted-owner-01/compass-candidate-release", + "extract", + "/jhy/jsoup", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/warm-cache/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 7575, + "stdout_bytes": 485, + "stderr_bytes": 114, + "output_limited": false, + "scope": "Post-census compatibility diagnostic using copies of preserved baseline AST facts, not a new quality or timing score.", + "binarySha256": "39919a9b5e0fe99f642d03423a91b8eb05b42b1c95e78d84bcc8f285bf473f61", + "checksSha256": "e5b130b37763dc4041e14f0206383539a1f37c6e32621c2898a6d003f3fe549c", + "sourceCacheFiles": 206, + "sourceCacheBytes": 10436161, + "stdoutSha256": "32830fcb8debc92eeae9236104af1326d7163893e72f6ae222e6475b7e7dd31b", + "stderrSha256": "45059c9ec54273c94fdab76dffa2e08eee926f56b533e2e277d2a1a2bee38743", + "scriptSha256": "5ef25031fcc09a62b22137bbd2fd25a4f9ee8e70044499936ae8b1616ebcbeb2", + "graphSha256": "04fc11f8d2c30f663c694451cc2c2957c94536a3658e4d0eeb5584fa38b6a2d8", + "freshCandidateSha256": "04fc11f8d2c30f663c694451cc2c2957c94536a3658e4d0eeb5584fa38b6a2d8", + "fullGraphEqualsFreshCandidate": true + }, + "fixtures": { + "complete": true, + "scope": "Known compiler-backed development fixtures, distinct from the registered real-source denominator. No Graphify or broad quality comparison.", + "checksSha256": "e5b130b37763dc4041e14f0206383539a1f37c6e32621c2898a6d003f3fe549c", + "scriptSha256": "a267cc65f51bd055d2f115c0ca7013a3d793d089ed9f9361f116e49e72178f1c", + "results": [ + { + "argv": [ + "/java-enum-access-01/compass-candidate-release", + "extract", + "/java-dotted-owner-01/source-oracle", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/fixture-evaluation/imported-nominal/baseline/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 988, + "stdout_bytes": 509, + "stderr_bytes": 0, + "output_limited": false, + "fixture": "imported-nominal", + "tool": "baseline", + "binarySha256": "28ae29a3141164df250a237e88d8054af1bb00021b1dafd4387b674311b40889", + "sourceSha256": { + "model/Outer.java": "8bf2317e813b7ecaec5deac2535104c6b2ec111533c5b26144a888502ae4896d", + "app/Box.java": "c12de4815a9e41182ef443b33799d16699b823d121c8cfbdf4b508b0bf4f897e" + }, + "oracleSha256": "3fe82fe73483d6e23cd972808c4c7d8e12108abbb13aa865969a0ac018c9f2ec", + "stdoutSha256": "2cca084eb91dba6d5519e2664a4c888529c926133bfc07fc5d62e8c3f960c2ef", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphSha256": "c69f358899f6436595ac6bf481bd5e8e22e5e01d588e3576dad6ebceb036fc2a", + "summary": { + "enum_constant": { + "occurrences": 3, + "exactTargetAndOwner": 0, + "declarations": 2, + "uniqueGraphDeclarations": 2, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 1, + "exactTargetAndOwner": 0, + "declarations": 1, + "uniqueGraphDeclarations": 1, + "unsupportedAnchors": 0 + } + }, + "contactStatus": {}, + "reviewSha256": "366a39fdabb67982d19d07a7b08644c6ab68e5a73a8896715faeb07695fee543" + }, + { + "argv": [ + "/java-dotted-owner-01/compass-candidate-release", + "extract", + "/java-dotted-owner-01/source-oracle", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/fixture-evaluation/imported-nominal/candidate/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 983, + "stdout_bytes": 510, + "stderr_bytes": 0, + "output_limited": false, + "fixture": "imported-nominal", + "tool": "candidate", + "binarySha256": "39919a9b5e0fe99f642d03423a91b8eb05b42b1c95e78d84bcc8f285bf473f61", + "sourceSha256": { + "model/Outer.java": "8bf2317e813b7ecaec5deac2535104c6b2ec111533c5b26144a888502ae4896d", + "app/Box.java": "c12de4815a9e41182ef443b33799d16699b823d121c8cfbdf4b508b0bf4f897e" + }, + "oracleSha256": "3fe82fe73483d6e23cd972808c4c7d8e12108abbb13aa865969a0ac018c9f2ec", + "stdoutSha256": "3f900a9cec159374e69d298a1a1f100cfeedf20e7a28d8575ebeaeab57c8b1ba", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphSha256": "8e7e38d5924b95d1d98accc585bd4d7baba6f1632bb502e7b5c7ae3d1b9efba9", + "summary": { + "enum_constant": { + "occurrences": 3, + "exactTargetAndOwner": 3, + "declarations": 2, + "uniqueGraphDeclarations": 2, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 1, + "exactTargetAndOwner": 1, + "declarations": 1, + "uniqueGraphDeclarations": 1, + "unsupportedAnchors": 0 + } + }, + "contactStatus": { + "verified_target_and_owner": 4 + }, + "reviewSha256": "52bc7f40db02465d3d4101a1a90491d6f99033be71f3a559784602045e345042" + }, + { + "argv": [ + "/java-enum-access-01/compass-candidate-release", + "extract", + "/java-enum-access-01/nested-enum-oracle", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/fixture-evaluation/nested-expressions/baseline/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 993, + "stdout_bytes": 511, + "stderr_bytes": 0, + "output_limited": false, + "fixture": "nested-expressions", + "tool": "baseline", + "binarySha256": "28ae29a3141164df250a237e88d8054af1bb00021b1dafd4387b674311b40889", + "sourceSha256": { + "NestedEnums.java": "34d2542585f54e50b5430bacb1d5ab6e67ddde93c1ac524c535682004af93174" + }, + "oracleSha256": "0a9c5d681a66efea0f1d0972cf15626713c6f5ba0d31146c544de30888cbea90", + "stdoutSha256": "dff4159e1d7d847bcdab53efd735643011edccaadfa5c31051aaad42c4a3d76c", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphSha256": "359c762dbdc1d4b10a41ed9427014cd61e977f07f8aa5711f66f37c693cbec52", + "summary": { + "enum_constant": { + "occurrences": 8, + "exactTargetAndOwner": 5, + "declarations": 6, + "uniqueGraphDeclarations": 6, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 5, + "exactTargetAndOwner": 5, + "declarations": 3, + "uniqueGraphDeclarations": 3, + "unsupportedAnchors": 0 + } + }, + "contactStatus": { + "verified_target_and_owner": 10 + }, + "reviewSha256": "24ab7b2bd8ab594f720cb270d3d900fe7ee4ecad3f71f64e944b8c1f9f1f5074" + }, + { + "argv": [ + "/java-dotted-owner-01/compass-candidate-release", + "extract", + "/java-enum-access-01/nested-enum-oracle", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/java-dotted-owner-01/fixture-evaluation/nested-expressions/candidate/artifact" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 949, + "stdout_bytes": 512, + "stderr_bytes": 0, + "output_limited": false, + "fixture": "nested-expressions", + "tool": "candidate", + "binarySha256": "39919a9b5e0fe99f642d03423a91b8eb05b42b1c95e78d84bcc8f285bf473f61", + "sourceSha256": { + "NestedEnums.java": "34d2542585f54e50b5430bacb1d5ab6e67ddde93c1ac524c535682004af93174" + }, + "oracleSha256": "0a9c5d681a66efea0f1d0972cf15626713c6f5ba0d31146c544de30888cbea90", + "stdoutSha256": "0c11ab327ec7c1fedc32e0d2c0e989937f7492dc2d22170e4b454e9a0f0468a1", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphSha256": "359c762dbdc1d4b10a41ed9427014cd61e977f07f8aa5711f66f37c693cbec52", + "summary": { + "enum_constant": { + "occurrences": 8, + "exactTargetAndOwner": 5, + "declarations": 6, + "uniqueGraphDeclarations": 6, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 5, + "exactTargetAndOwner": 5, + "declarations": 3, + "uniqueGraphDeclarations": 3, + "unsupportedAnchors": 0 + } + }, + "contactStatus": { + "verified_target_and_owner": 10 + }, + "reviewSha256": "24ab7b2bd8ab594f720cb270d3d900fe7ee4ecad3f71f64e944b8c1f9f1f5074" + } + ] + }, + "graphifyEnvironmentVerification": { + "manifestSha256": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "checkedGraphifyPackageFiles": 227, + "changedFiles": [], + "checkedFrozenPackageVersions": 58, + "versionMismatches": {}, + "additionalDistributions": [], + "scriptSha256": "dae2f89912a6a56690339e012b96eaaff99f6f3d94764b7765a5915bf13309fa" + }, + "verification": { + "nativeSteps": [ + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 4033, + "stdout_bytes": 0, + "stderr_bytes": 0, + "output_limited": false, + "name": "fmt", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "cargo", + "test", + "-p", + "compass-resolve", + "--tests", + "--locked" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 156906, + "stdout_bytes": 46456, + "stderr_bytes": 4871, + "output_limited": false, + "name": "resolver-tests", + "stdoutSha256": "89f985ef90d11382f95a94c5335704cc70c55bdeacb18487778788ac94faca88", + "stderrSha256": "d1522de6b75e9254eaaa362b585ae3016c46bc8cc519463f19616cbc312104f3" + }, + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "cargo", + "clippy", + "-p", + "compass-resolve", + "--test", + "java_enum_access", + "--test", + "java_field_access", + "--locked", + "--", + "-D", + "warnings" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 10119, + "stdout_bytes": 0, + "stderr_bytes": 213, + "output_limited": false, + "name": "focused-clippy", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "dee6f5021abdae938d336c3e41f5519dfbb39fb7164aaf5962c6e26546f2ef03" + }, + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 53164, + "stdout_bytes": 0, + "stderr_bytes": 615, + "output_limited": false, + "name": "workspace-clippy", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "5909b0c529577e4145f7a184462541e3dad0d4c75dd731d85b23ee3a77f7db1d" + }, + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 124764, + "stdout_bytes": 95610, + "stderr_bytes": 6183, + "output_limited": false, + "name": "workspace-tests", + "stdoutSha256": "1799df0601f60995757e8619c4d3cfa46e934640a71eeaec89242ed4d9398376", + "stderrSha256": "e9b0dbe44505b707d453a781e4f90a16d9fcdc394dad64dc2aacf8abc6789273" + }, + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 58203, + "stdout_bytes": 673, + "stderr_bytes": 1044, + "output_limited": false, + "name": "product", + "stdoutSha256": "24bb3b5a630eab967028f400d3d40602908bb4d769d8934839dd7bf9a5f9ceef", + "stderrSha256": "02baf2ee06c9bbfae778d7abe7698889fbd0a252b71a27dc29fb97edd7768392" + }, + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "./scripts/qualify_code_graph_v1.sh", + "--fixtures-only" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 826304, + "stdout_bytes": 16700, + "stderr_bytes": 5794, + "output_limited": false, + "name": "fixtures", + "stdoutSha256": "d6183870264b87bd8f21887d9a5abc8679e2bd965dd06e4aeb9332c29f83085d", + "stderrSha256": "67275acc70bd67a37b39ba6f23447e43beab6472e9b3670a47d32a3f9ca1619a" + }, + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "python3", + "-m", + "unittest", + "discover", + "-s", + "benchmarks/agent_query/tests" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 2011, + "stdout_bytes": 0, + "stderr_bytes": 338, + "output_limited": false, + "name": "benchmark-tests", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "b26939e4e063a705ee8908a2782954820d872e4fb85340ebafa64a4d500b7249" + }, + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "sh", + "scripts/check_product_boundary.sh" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 50, + "stdout_bytes": 0, + "stderr_bytes": 0, + "output_limited": false, + "name": "boundary", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "argv": [ + "env", + "CARGO_TARGET_DIR=", + "PROJECT_ROOT=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_PARSER_SOURCE_DIR=/debug/build/compass-tree-sitter-language-pack-3a9794dcf61d9a4c/out/_parsers", + "TSLP_OFFLINE=1", + "TMPDIR=/sql-prefix-scan-01/tmp", + "cargo", + "build", + "--release", + "--locked", + "-p", + "compass-cli", + "--bin", + "compass" + ], + "exit_code": 0, + "timed_out": false, + "wall_ms": 1164, + "stdout_bytes": 0, + "stderr_bytes": 62, + "output_limited": false, + "name": "release-build", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "537405d5f285a378fc72a211cd213874ce69eeba5e997c45363867ec94d31f17" + } + ], + "testCounts": { + "resolver-tests": { + "passed": 536, + "failed": 0, + "ignored": 0, + "suites": 32 + }, + "workspace-tests": { + "passed": 1109, + "failed": 0, + "ignored": 2, + "suites": 36 + }, + "product": { + "passed": 9, + "failed": 0, + "ignored": 0, + "suites": 1 + } + }, + "benchmarkTests": 238, + "suitesOverlap": true, + "repeatReportsByteEqual": true, + "notRun": [ + "Standalone browser/platform/packaging matrices were not rerun for this resolver-only correction." + ], + "fixtureComparisonsReconstructed": true + }, + "retainedFailures": [ + "Initial imported-nested regression failed with zero rather than three enum contacts; baseline log and source hash retained. The fixture later added an ordinary field and cumulative lookup-budget cases.", + "Three nested type-expression-chain enum references remain missed in the separate 13-reference compiler fixture." + ], + "limitations": [ + "This is one known Java configuration; general cross-language superiority remains unproven.", + "The change was motivated by observed missed enum constants. All scores are development results, even though this follow-up protocol precedes candidate extraction.", + "No authored explanation, runtime feasibility, functional community or god-object classification claim follows.", + "The preceding compiler fixture captures remain separate development diagnostics; neither changes the fixed real-source denominator.", + "This correction canonicalizes already established nominal receivers. Missing type/value expression-chain, static-import, hierarchy and selector typing evidence remains explicit.", + "All 3483 returned compiler-cohort contacts have exact source owner and target support; 831 internal compiler references remain missing.", + "27 additional references lie outside the compiler cohort: 21 test occurrences and 6 Java 11 overlay occurrences. Token/provenance/containment checks do not prove their bindings.", + "jsoup retains two omitted edges; Redux controls retain two omitted edges. These are published partial graphs.", + "Repeated verification is consistency evidence, not a second independent oracle. Community replay was selected after observing partition changes.", + "All extraction durations are operational; no performance inference. Frozen Graphify graphs were rescored; Graphify extraction was not rerun." + ], + "artifactDirectory": "java-dotted-owner-01", + "artifactSha256": { + "checks.json": "e5b130b37763dc4041e14f0206383539a1f37c6e32621c2898a6d003f3fe549c", + "qualified.patch": "89c67244f4cf87c238b2044102d84d76ee08db6fd74b5a2d0dd8f75c742e46e9", + "checks.py": "e6a23fa4ab1ddbd325c129ca5354c27dde6990562d7bd96760bf407dc192e113", + "evaluate.py": "5912ab4f2ed704998454f110dc75c3ec53ed3a46cc12f8a635dcd37c7d35f6d1", + "evaluation/run.json": "1b4b5a8e33471cf8da754384751a69c8683198e2a3719cb9da67967d1c29ca56", + "verify_evaluation.py": "1efd8e87a83db27fd555e95716aa735bd2b3bd2fc11f302611664022971a483d", + "verified-evaluation.json": "30e15a450eca8230e591161ca0b3e34f8cbb47215737d8bf000019dfbaec218c", + "verified-evaluation-repeat.json": "30e15a450eca8230e591161ca0b3e34f8cbb47215737d8bf000019dfbaec218c", + "control_runs.py": "278afdce258669c4a8c575218013a1434f45002ff3d2b4850c0fe0e0cd8b091a", + "controls/run.json": "02cc70888ef7dc532fcbe5ba6501b1dd1d1a67d3edffd0e70f4570b7ea0d3582", + "verify_controls.py": "b2ca7976d4271ae39061f8453ea2c53090ec3d3c5ca721ea5855f00eb3f3a810", + "verified-controls.json": "8569254764c8067fd77b8618755c9a346a8eb564209fa344d23801b5b706d488", + "verified-controls-repeat.json": "8569254764c8067fd77b8618755c9a346a8eb564209fa344d23801b5b706d488", + "fixture_runs.py": "a267cc65f51bd055d2f115c0ca7013a3d793d089ed9f9361f116e49e72178f1c", + "fixture-evaluation/run.json": "a9736835253226e1a1ddbc4a0a744e2105af2c73c91e5cdcf1b038473d237365", + "warm_cache.py": "5ef25031fcc09a62b22137bbd2fd25a4f9ee8e70044499936ae8b1616ebcbeb2", + "warm-cache/report.json": "bf3f3fb248aef62700e57eb97227a9ebc6c73f00138ee01ed98bcbd73ba257d3", + "check_added_anchors.py": "cc6002bc024d722025ac17efe1dda7ebfa24acf9a36346961f20d6885e49d74d", + "added-anchor-review.json": "47feacc329577009bae8ed7d652286d21eccf6a23a59e2fe759bfdb1552fb1ec", + "replay_communities.py": "03d356da551e499337b06367d0544ef3966a2c296a2fe1b770fc4db794365b39", + "community-replay.json": "19d48a53766753b898d3f4116b7f6ad5fb701109b49481400a282633fea30726", + "community-replay-repeat.json": "19d48a53766753b898d3f4116b7f6ad5fb701109b49481400a282633fea30726", + "graphify-environment-verification.json": "f234306696faef338c37c6941eded9537f70be5d9339fcdd87fd0b25bc80e4a7", + "publish_review.py": "2b311da21dc6554bae1e47847cad0c088939b3ed4d71aa4125ae1cbdd0ee7170", + "baseline.json": "a5f502f3391e42ed9c44cc2b68542014292b69ebf15d5818056a10ea456d9bf2", + "focused.json": "65d74172f21ffbdaf4a8525b49175ba4ac864f05308be0d93807e78a6010362f", + "source-oracle/captures.json": "a6b00f3dfc79ef56bfbee972543c3a14e17a639e5b2c8ecd41e5aedc1cbd843e" + } +} diff --git a/benchmarks/agent_query/java_enum_access_registration.json b/benchmarks/agent_query/java_enum_access_registration.json new file mode 100644 index 000000000..ad669bb1a --- /dev/null +++ b/benchmarks/agent_query/java_enum_access_registration.json @@ -0,0 +1,65 @@ +{ + "schema": "compass.java-enum-access-registration/1", + "scope": "Complete frozen compiler-backed jsoup census after enum-reference corrections. Known development repository and already inspected misses; not held-out, independent human review, whole-graph precision or god-object classification.", + "baselineBranchCommit": "f86969df", + "source": { + "repository": "jhy/jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "sourceRoot": "src/main/java", + "files": 88, + "sourceRegistrationSha256": "6088df9f4cf420437a71ca06324bbe80817ed73142eb61c5686d8d3da36180af" + }, + "oracle": { + "path": "jsoup-java-field-oracle-02/capture-final/bindings.stdout", + "sha256": "4596b24d67fab7f728bc5dfe54e9b381fc42d411b9cb9042646cffbed420e95c", + "manifestSha256": "6b9532e36846aa7c2df0ac799c1c9f01dbf8c5061dd3adfa5a0fbc8e8bb64d3a", + "auditorSha256": "2ced23208ab1171d33ec00a6385fce34367a87c67d2cadef249650a1b8264e9b", + "release": "8", + "internalOrdinaryFieldReferences": 3785, + "internalEnumReferences": 529, + "nonSourceCategories": "Retain external fields, array lengths and class literals separately, as in the unchanged oracle." + }, + "baselineBinary": { + "path": "sql-regex-cache-01/compass-candidate-release", + "sha256": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4", + "productionCommit": "9df5dcf32f9581c1d9eeb299eb2123d807afe60c" + }, + "candidate": "Build and freeze a release candidate after native regression/gates. Record exact production sources, commit, manifests, build settings and binary hash before extraction. No package version bump.", + "comparison": { + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69", + "originalCompassGraphSha256": "2a9216926b1c5dfc82e4f88df0cce24a7a14ac67aa2a350158eff39018145314", + "originalReviewSha256": "db2e7b95b95b7a156f0f8fe5ea614d4c92b6acf1123cfd4c9b904b1e0b087195", + "commandTemplate": [ + "", + "extract", + "", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "" + ], + "order": [ + "baseline", + "candidate" + ], + "graphBoundBytes": 268435456, + "streamBoundBytes": 16777216, + "timeoutSeconds": 1200, + "sourcePolicy": "Read-only pinned clean repository; entire original extraction scope, fresh outputs for each frozen release binary. The source oracle only scores its registered 88-file Java 8 cohort; retain other graph records separately. Preserve all failures and graph omission warnings. Timing is operational only; no performance conclusion from these two observations." + }, + "scoring": [ + "Use the unchanged compiler capture, UTF-16 to UTF-8 conversion, exact target declaration and source owner joins. Retain the complete 3785 ordinary plus 529 enum-reference denominator.", + "Inventory every returned field/enum contact in the registered source files, including extra, wrong, ambiguous, unanchored and unmapped contacts. Any unsupported new contact requires source review and a correction before claiming precision.", + "Run the fresh pre-enum baseline against the same frozen oracle; compare its whole graph to the original preserved Compass graph and disclose differences instead of assuming equality. Preserve all original results.", + "Report declaration joins, exact target-plus-owner occurrence recall, every miss and all precision failures separately for ordinary fields and enum constants; Graphify keeps its frozen environment and graph.", + "Compare whole graph additions/removals, identities, edge direction/multiplicity/provenance and omission warnings; do not infer functional community quality from graph changes.", + "Repeat complete verification and compare report bytes. Repeated verifier agreement is consistency evidence, not an independent source oracle." + ], + "limitations": [ + "This is one known Java configuration; general cross-language superiority remains unproven.", + "The change was motivated by observed missed enum constants. All scores are development results, even though this follow-up protocol precedes candidate extraction.", + "No authored explanation, runtime feasibility, functional community or god-object classification claim follows." + ] +} diff --git a/benchmarks/agent_query/java_enum_access_review.json b/benchmarks/agent_query/java_enum_access_review.json new file mode 100644 index 000000000..b1c56390d --- /dev/null +++ b/benchmarks/agent_query/java_enum_access_review.json @@ -0,0 +1,1120 @@ +{ + "schema": "compass.java-enum-access-review/1", + "scope": "Compiler-backed source-reference census for the unchanged 88-file Java 8 jsoup development cohort, plus paired preservation controls on the other four known language repositories. No held-out or overall superiority claim.", + "productionCommit": "a8b4a490eddeccb210d1e3c4390979c80d1e678a", + "packageVersion": "0.3.30", + "astCacheSemantics": "10", + "registrationSha256": "eaaa3c887089c339ba29d84cd5dab84a180a074b67e870bc2165667614623107", + "controlRegistrationSha256": "defa895e00191e1cc57a2f16cc8194a62584d8d489b811e01a50eb6a2702cc4a", + "originalReviewSha256": "db2e7b95b95b7a156f0f8fe5ea614d4c92b6acf1123cfd4c9b904b1e0b087195", + "binaries": { + "baseline": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4", + "candidate": "28ae29a3141164df250a237e88d8054af1bb00021b1dafd4387b674311b40889" + }, + "productionAndBuildInputSha256": { + "crates/compass-languages/src/evidence/build/java_fields.rs": "57e15e6e9d373e149471f9789becf39ef1e5a33edc3557747918021520e658cc", + "crates/compass-resolve/src/evidence/languages/java.rs": "0f36021b7917526badf031d576cddd3c1baf9b2096c8c4abe709b342077eb6a8", + "crates/compass-files/src/cache.rs": "65ba2b1b7ce46e6b0db049de80bc1aacc74466914833a6a5403ecf2ebf1931d4", + "Cargo.toml": "fe4c17809055a12229a5bb55ac9c950d0ebe1d465958673390b73e408d71ee20", + "Cargo.lock": "cc35464cdeafe61a095ef46886eb3bc3943b1abbd9aa25118f07b4140c24978b", + "rust-toolchain.toml": "3617e46e3a6e60e653a4ee823df314534ab7d54c83c1b0fd866e008e3fee1bba" + }, + "testSha256": { + "crates/compass-languages/tests/java_enum_access.rs": "13a73d2f1ee7c5ff96ef65ab1141b876e496a55ab18edb870c84ada6f6cf383c", + "crates/compass-languages/tests/java_field_access.rs": "83e263526a23d4e34b1b90d50eda6de3c2885ca023db952ca2c326184a04a15e", + "crates/compass-resolve/tests/java_enum_access.rs": "6ad7fe691eb410c763eb283635fc0783f0ff0eafc39292782a279305cb5502df", + "crates/compass-resolve/tests/java_field_access.rs": "2658e695530f3b7b10d71094761370dbda9a82127a292edc3ff8565118c3effe", + "crates/compass-files/tests/contracts.rs": "9eb55d454e8b094f632f1ea7dc6f6a876f7cb8050afab30dd31dc50e487729cf" + }, + "results": { + "baseline": { + "contactStatus": { + "verified_target_and_owner": 3047 + }, + "mostMissedTargets": { + "enum_constant": [ + [ + "org.jsoup.parser.TokeniserState::Data", + 81 + ], + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::xml", + 27 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InBody", + 24 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InHead", + 15 + ], + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::html", + 12 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InTable", + 12 + ], + [ + "org.jsoup.parser.Token.TokenType::StartTag", + 11 + ], + [ + "org.jsoup.parser.Token.TokenType::EndTag", + 11 + ], + [ + "org.jsoup.parser.TokeniserState::ScriptData", + 10 + ], + [ + "org.jsoup.parser.TokeniserState::Comment", + 10 + ], + [ + "org.jsoup.select.NodeFilter.FilterResult::CONTINUE", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::Comment", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::Character", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::Doctype", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::EOF", + 9 + ], + [ + "org.jsoup.parser.TokeniserState::BeforeAttributeName", + 9 + ], + [ + "org.jsoup.parser.TokeniserState::ScriptDataEscaped", + 9 + ], + [ + "org.jsoup.parser.TokeniserState::BogusDoctype", + 9 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InTableBody", + 8 + ], + [ + "org.jsoup.parser.TokeniserState::AttributeName", + 7 + ] + ], + "field": [ + [ + "org.jsoup.parser.TreeBuilder::stack", + 51 + ], + [ + "org.jsoup.parser.TokeniserState::nullChar", + 47 + ], + [ + "org.jsoup.parser.TokeniserState::eof", + 41 + ], + [ + "org.jsoup.parser.Parser::NamespaceHtml", + 32 + ], + [ + "org.jsoup.parser.Token.Doctype::forceQuirks", + 31 + ], + [ + "org.jsoup.parser.TokeniserState::replacementChar", + 26 + ], + [ + "org.jsoup.parser.Token.Tag::normalName", + 21 + ], + [ + "org.jsoup.parser.TreeBuilder::settings", + 16 + ], + [ + "org.jsoup.select.Evaluator.AttributeKeyPair::key", + 14 + ], + [ + "org.jsoup.nodes.Node::parentNode", + 13 + ], + [ + "org.jsoup.parser.TreeBuilder::tokeniser", + 13 + ], + [ + "org.jsoup.parser.Token.Tag::attributes", + 13 + ], + [ + "org.jsoup.select.StructuralEvaluator::evaluator", + 11 + ], + [ + "org.jsoup.parser.Parser::NamespaceSvg", + 10 + ], + [ + "org.jsoup.parser.TreeBuilder::doc", + 10 + ], + [ + "org.jsoup.select.Evaluator.AttributeKeyPair::value", + 10 + ], + [ + "::i", + 9 + ], + [ + "org.jsoup.internal.SharedConstants::DefaultBufferSize", + 8 + ], + [ + "org.jsoup.parser.Parser::NamespaceMathml", + 8 + ], + [ + "org.jsoup.helper.DataUtil::UTF_8", + 7 + ] + ] + }, + "summary": { + "enum_constant": { + "declarations": 131, + "exactTargetAndOwner": 0, + "occurrences": 529, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "declarations": 616, + "exactTargetAndOwner": 3047, + "occurrences": 3785, + "uniqueGraphDeclarations": 614, + "unsupportedAnchors": 0 + } + }, + "unsupportedContacts": [] + }, + "candidate": { + "contactStatus": { + "verified_target_and_owner": 3461 + }, + "mostMissedTargets": { + "enum_constant": [ + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::xml", + 27 + ], + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::html", + 12 + ], + [ + "org.jsoup.parser.Token.TokenType::StartTag", + 10 + ], + [ + "org.jsoup.parser.Token.TokenType::EndTag", + 10 + ], + [ + "org.jsoup.select.NodeFilter.FilterResult::CONTINUE", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::Comment", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::Character", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::Doctype", + 8 + ], + [ + "org.jsoup.parser.Token.TokenType::EOF", + 8 + ], + [ + "org.jsoup.Connection.Method::GET", + 6 + ], + [ + "org.jsoup.select.NodeFilter.FilterResult::STOP", + 5 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InBody", + 5 + ], + [ + "org.jsoup.parser.TokeniserState::Data", + 4 + ], + [ + "org.jsoup.Connection.Method::POST", + 3 + ], + [ + "org.jsoup.Connection.Method::HEAD", + 3 + ], + [ + "org.jsoup.nodes.Entities.EscapeMode::base", + 3 + ], + [ + "org.jsoup.nodes.Entities.EscapeMode::extended", + 3 + ], + [ + "org.jsoup.parser.TokeniserState::ScriptData", + 3 + ], + [ + "org.jsoup.nodes.Document.QuirksMode::quirks", + 3 + ], + [ + "org.jsoup.nodes.Entities.EscapeMode::xhtml", + 2 + ] + ], + "field": [ + [ + "org.jsoup.parser.TreeBuilder::stack", + 51 + ], + [ + "org.jsoup.parser.TokeniserState::eof", + 40 + ], + [ + "org.jsoup.parser.TokeniserState::nullChar", + 38 + ], + [ + "org.jsoup.parser.Parser::NamespaceHtml", + 31 + ], + [ + "org.jsoup.parser.Token.Doctype::forceQuirks", + 31 + ], + [ + "org.jsoup.parser.Token.Tag::normalName", + 21 + ], + [ + "org.jsoup.parser.TreeBuilder::settings", + 16 + ], + [ + "org.jsoup.select.Evaluator.AttributeKeyPair::key", + 14 + ], + [ + "org.jsoup.nodes.Node::parentNode", + 13 + ], + [ + "org.jsoup.parser.TreeBuilder::tokeniser", + 13 + ], + [ + "org.jsoup.parser.Token.Tag::attributes", + 13 + ], + [ + "org.jsoup.select.StructuralEvaluator::evaluator", + 11 + ], + [ + "org.jsoup.parser.Parser::NamespaceSvg", + 10 + ], + [ + "org.jsoup.parser.TreeBuilder::doc", + 10 + ], + [ + "org.jsoup.select.Evaluator.AttributeKeyPair::value", + 10 + ], + [ + "::i", + 9 + ], + [ + "org.jsoup.internal.SharedConstants::DefaultBufferSize", + 8 + ], + [ + "org.jsoup.parser.Parser::NamespaceMathml", + 8 + ], + [ + "org.jsoup.helper.DataUtil::UTF_8", + 7 + ], + [ + "org.jsoup.parser.TreeBuilder::currentToken", + 7 + ] + ] + }, + "summary": { + "enum_constant": { + "declarations": 131, + "exactTargetAndOwner": 355, + "occurrences": 529, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "declarations": 616, + "exactTargetAndOwner": 3106, + "occurrences": 3785, + "uniqueGraphDeclarations": 614, + "unsupportedAnchors": 0 + } + }, + "unsupportedContacts": [] + }, + "graphify": { + "contactStatus": {}, + "mostMissedTargets": { + "enum_constant": [ + [ + "org.jsoup.parser.TokeniserState::Data", + 81 + ], + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::xml", + 27 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InBody", + 24 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InHead", + 15 + ], + [ + "org.jsoup.nodes.Document.OutputSettings.Syntax::html", + 12 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InTable", + 12 + ], + [ + "org.jsoup.parser.Token.TokenType::StartTag", + 11 + ], + [ + "org.jsoup.parser.Token.TokenType::EndTag", + 11 + ], + [ + "org.jsoup.parser.TokeniserState::ScriptData", + 10 + ], + [ + "org.jsoup.parser.TokeniserState::Comment", + 10 + ], + [ + "org.jsoup.select.NodeFilter.FilterResult::CONTINUE", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::Comment", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::Character", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::Doctype", + 9 + ], + [ + "org.jsoup.parser.Token.TokenType::EOF", + 9 + ], + [ + "org.jsoup.parser.TokeniserState::BeforeAttributeName", + 9 + ], + [ + "org.jsoup.parser.TokeniserState::ScriptDataEscaped", + 9 + ], + [ + "org.jsoup.parser.TokeniserState::BogusDoctype", + 9 + ], + [ + "org.jsoup.parser.HtmlTreeBuilderState::InTableBody", + 8 + ], + [ + "org.jsoup.parser.TokeniserState::AttributeName", + 7 + ] + ], + "field": [ + [ + "org.jsoup.nodes.Node::parentNode", + 78 + ], + [ + "org.jsoup.parser.TreeBuilder::stack", + 67 + ], + [ + "org.jsoup.parser.CharacterReader::bufPos", + 62 + ], + [ + "org.jsoup.parser.Tokeniser::doctypePending", + 52 + ], + [ + "org.jsoup.parser.Tokeniser::tagPending", + 49 + ], + [ + "org.jsoup.parser.TokeniserState::nullChar", + 48 + ], + [ + "org.jsoup.parser.Tokeniser::reader", + 45 + ], + [ + "org.jsoup.helper.HttpConnection::req", + 41 + ], + [ + "org.jsoup.nodes.Attributes::size", + 41 + ], + [ + "org.jsoup.parser.TokeniserState::eof", + 41 + ], + [ + "org.jsoup.parser.CharacterReader::charBuf", + 39 + ], + [ + "org.jsoup.nodes.Element::childNodes", + 38 + ], + [ + "org.jsoup.nodes.Element::attributes", + 36 + ], + [ + "org.jsoup.select.QueryParser::tq", + 36 + ], + [ + "org.jsoup.parser.CharacterReader::bufLength", + 33 + ], + [ + "org.jsoup.parser.Token.Doctype::forceQuirks", + 33 + ], + [ + "org.jsoup.parser.Parser::NamespaceHtml", + 32 + ], + [ + "org.jsoup.nodes.Attributes::keys", + 30 + ], + [ + "org.jsoup.nodes.Attributes::vals", + 30 + ], + [ + "org.jsoup.nodes.Element::tag", + 30 + ] + ] + }, + "summary": { + "enum_constant": { + "declarations": 131, + "exactTargetAndOwner": 0, + "occurrences": 529, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "declarations": 616, + "exactTargetAndOwner": 0, + "occurrences": 3785, + "uniqueGraphDeclarations": 0, + "unsupportedAnchors": 0 + } + }, + "unsupportedContacts": [] + } + }, + "observations": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 4929, + "stdout_bytes": 493, + "stderr_bytes": 114, + "output_limited": false, + "name": "baseline", + "loadAverageBefore": [ + 4.02978515625, + 8.2822265625, + 7.908203125 + ], + "loadAverageAfter": [ + 3.787109375, + 8.1611328125, + 7.86767578125 + ], + "stdoutSha256": "a7a5be81f225b763c6d7714a3dfc08de1e35d0f7c8cd23b2f90d664ca543464f", + "stderrSha256": "45059c9ec54273c94fdab76dffa2e08eee926f56b533e2e277d2a1a2bee38743", + "graphBytes": 29638966, + "admitted": true, + "graphSha256": "2a9216926b1c5dfc82e4f88df0cce24a7a14ac67aa2a350158eff39018145314", + "equalsOriginalCompassGraph": true, + "reviewSha256": "7a0275882b32656c194207d5491d5ac7a50f5c33692bb7d905c9183a1470161f", + "summary": { + "enum_constant": { + "occurrences": 529, + "exactTargetAndOwner": 0, + "declarations": 131, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 3785, + "exactTargetAndOwner": 3047, + "declarations": 616, + "uniqueGraphDeclarations": 614, + "unsupportedAnchors": 0 + } + }, + "contactStatus": { + "verified_target_and_owner": 3047 + } + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 5090, + "stdout_bytes": 494, + "stderr_bytes": 114, + "output_limited": false, + "name": "candidate", + "loadAverageBefore": [ + 3.787109375, + 8.1611328125, + 7.86767578125 + ], + "loadAverageAfter": [ + 3.7236328125, + 8.0751953125, + 7.8388671875 + ], + "stdoutSha256": "7a6fc540ba965595c567ed7082a72cde12cb948318442fef34d273bbd688b494", + "stderrSha256": "45059c9ec54273c94fdab76dffa2e08eee926f56b533e2e277d2a1a2bee38743", + "graphBytes": 30256465, + "admitted": true, + "graphSha256": "300f9afd2bf1f3c04d11b7f4563e464fd85d4a95da6de68d940d42d9f99f6227", + "equalsOriginalCompassGraph": false, + "reviewSha256": "5c993b36e2a0a2429e2fe8f06659cc701ebd32eb922231b9e6cbd86907fec465", + "summary": { + "enum_constant": { + "occurrences": 529, + "exactTargetAndOwner": 355, + "declarations": 131, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 3785, + "exactTargetAndOwner": 3106, + "declarations": 616, + "uniqueGraphDeclarations": 614, + "unsupportedAnchors": 0 + } + }, + "contactStatus": { + "verified_target_and_owner": 3461 + } + } + ], + "originalMatchedReferencesRetained": 3047, + "lostOriginalMatchedReferences": [], + "newVerifiedReferences": 414, + "wholeGraphDelta": { + "links": { + "added": 670, + "addedKinds": { + "references": 670 + }, + "addedOccurrenceScopes": { + "outside-registered-source-or-unanchored": 256, + "registered-source": 414 + }, + "baseline": 25006, + "candidate": 25676, + "changed": 0, + "changedFieldCounts": {}, + "removed": 0, + "removedKinds": {} + }, + "nodes": { + "added": 0, + "baseline": 6116, + "candidate": 6116, + "changed": 4111, + "changedFieldCounts": { + "community": 4111 + }, + "removed": 0 + } + }, + "sourceAnchorChecks": { + "checkedRecords": 670, + "allPassed": true, + "outsideCompilerCohortFiles": { + "src/test/java/org/jsoup/helper/AuthenticationHandlerTest.java": 1, + "src/test/java/org/jsoup/helper/DataUtilTest.java": 3, + "src/test/java/org/jsoup/helper/HttpConnectionTest.java": 1, + "src/test/java/org/jsoup/helper/W3CDomTest.java": 2, + "src/test/java/org/jsoup/integration/ConnectTest.java": 7, + "src/test/java/org/jsoup/integration/ProxyTest.java": 6, + "src/test/java/org/jsoup/integration/netty/NettyProxyServer.java": 3, + "src/test/java/org/jsoup/integration/netty/NettyTestServer.java": 5, + "src/test/java/org/jsoup/integration/netty/TestResponse.java": 16, + "src/test/java/org/jsoup/internal/ControllableInputStreamTest.java": 5, + "src/test/java/org/jsoup/internal/SoftPoolTest.java": 2, + "src/test/java/org/jsoup/internal/StringUtilTest.java": 1, + "src/test/java/org/jsoup/nodes/BuildEntities.java": 1, + "src/test/java/org/jsoup/parser/CharacterReaderTest.java": 9, + "src/test/java/org/jsoup/parser/HtmlParserTest.java": 55, + "src/test/java/org/jsoup/parser/HtmlTextHandlingTest.java": 5, + "src/test/java/org/jsoup/parser/HtmlTreeBuilderTest.java": 18, + "src/test/java/org/jsoup/parser/NameNormalizationTest.java": 14, + "src/test/java/org/jsoup/parser/ParserTest.java": 5, + "src/test/java/org/jsoup/parser/PositionTest.java": 3, + "src/test/java/org/jsoup/parser/StreamParserTest.java": 2, + "src/test/java/org/jsoup/parser/TagSetTest.java": 30, + "src/test/java/org/jsoup/parser/TagTest.java": 31, + "src/test/java/org/jsoup/parser/TokeniserStateTest.java": 16, + "src/test/java/org/jsoup/parser/TokeniserTest.java": 4, + "src/test/java/org/jsoup/parser/XmlTreeBuilderTest.java": 11 + }, + "scope": "Checks graph/source byte anchors, provenance and callable containment only. Same-spelled wrong bindings can pass these checks; the 256 test-source references outside the Java 8 compiler cohort remain semantically unscored." + }, + "partialGraphWarnings": [ + { + "admitted": true, + "diagnostics": "warning: Compass published a partial graph after omitting 0 nodes and 2 edges; 0 identity collisions quarantined.\n", + "name": "baseline", + "successful": true + }, + { + "admitted": true, + "diagnostics": "warning: Compass published a partial graph after omitting 0 nodes and 2 edges; 0 identity collisions quarantined.\n", + "name": "candidate", + "successful": true + } + ], + "graphifyEnvironmentVerification": { + "manifestSha256": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "checkedGraphifyPackageFiles": 227, + "changedFiles": [], + "checkedFrozenPackageVersions": 58, + "versionMismatches": {}, + "additionalDistributions": [] + }, + "controls": { + "panels": [ + { + "admitted": 2, + "allThreeEqual": true, + "completePair": true, + "fullPairByteEquality": true, + "repository": "chi" + }, + { + "admitted": 2, + "allThreeEqual": true, + "completePair": true, + "fullPairByteEquality": true, + "repository": "click" + }, + { + "admitted": 2, + "allThreeEqual": true, + "completePair": true, + "fullPairByteEquality": true, + "repository": "redux" + }, + { + "admitted": 2, + "allThreeEqual": true, + "completePair": true, + "fullPairByteEquality": true, + "repository": "walkdir" + } + ], + "observations": [ + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "chi", + "stderr": "", + "successful": true, + "tool": "baseline" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "chi", + "stderr": "", + "successful": true, + "tool": "candidate" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "click", + "stderr": "", + "successful": true, + "tool": "baseline" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "click", + "stderr": "", + "successful": true, + "tool": "candidate" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "redux", + "stderr": "warning: Compass published a partial graph after omitting 0 nodes and 2 edges; 0 identity collisions quarantined.\n", + "successful": true, + "tool": "baseline" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "redux", + "stderr": "warning: Compass published a partial graph after omitting 0 nodes and 2 edges; 0 identity collisions quarantined.\n", + "successful": true, + "tool": "candidate" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "walkdir", + "stderr": "", + "successful": true, + "tool": "baseline" + }, + { + "admitted": true, + "equalsOriginalGraph": true, + "repository": "walkdir", + "stderr": "", + "successful": true, + "tool": "candidate" + } + ], + "graphifyPolicy": "Frozen graphs and environment retained; no new Graphify query capture or timing comparison." + }, + "communityReplay": { + "scope": "Post-change diagnostic after observing changed community labels. Replay every unchanged source task pair from the existing known development cohort; no new selection, tuning, preregistered quality outcome, functional-cohesion or superiority claim.", + "pairs": 75, + "allOutcomesUnchanged": true, + "repositories": [ + { + "repository": "chi", + "baselineCommunities": 154, + "candidateCommunities": 154, + "pairOutcomesUnchanged": true + }, + { + "repository": "click", + "baselineCommunities": 173, + "candidateCommunities": 173, + "pairOutcomesUnchanged": true + }, + { + "repository": "jsoup", + "baselineCommunities": 42, + "candidateCommunities": 40, + "pairOutcomesUnchanged": true + }, + { + "repository": "redux", + "baselineCommunities": 845, + "candidateCommunities": 845, + "pairOutcomesUnchanged": true + }, + { + "repository": "walkdir", + "baselineCommunities": 10, + "candidateCommunities": 10, + "pairOutcomesUnchanged": true + } + ] + }, + "verification": { + "repeats": { + "verified-evaluation.json": { + "byteIdentical": true, + "sha256": "541a2a058c6241393556b85b20d2ea97c25f2fde1f3ac54f67681f0f546147f1" + }, + "verified-controls.json": { + "byteIdentical": true, + "sha256": "8a15f71b3988dd45700548441d0d547aaa14970c9f2d0af5820d4df3a40209c3" + }, + "community-replay.json": { + "byteIdentical": true, + "sha256": "64e699241018a37d84fa6c6cf42c0c81decbf5ae4403a27d90a69341cb7ff018" + } + }, + "nativeSteps": [ + { + "name": "fmt", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 3863, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "compass-languages-java", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 16892, + "stdoutSha256": "769214247b89d8c86fa29c65113e0a57a2f4055f11f6c70bbbc1b7d80ff4d195", + "stderrSha256": "6175565a037ef74e3168e3b57019bb5f47a0f119d637e18c9de4e1e4bf42dfeb" + }, + { + "name": "compass-resolve-java", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 21047, + "stdoutSha256": "e08dcda52b2aba3d094fc8b3536b59c2ca952c74adfd17978f91da76f77bd708", + "stderrSha256": "03e57de4e03eacabad198527d4d5c07adf5c6ed43e9a26a87b69fdbf1d4cc801" + }, + { + "name": "cache-contracts", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 12330, + "stdoutSha256": "636123b095f122fed2be1c140334f841331ac4017193734cbd36b535050f75cf", + "stderrSha256": "707da2a8eeaa8510bf64716ce3550805c5d4da6fa176422b6cf7dd0bc1c29a48" + }, + { + "name": "focused-clippy", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 51618, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "4a9dfff97954803ca47798c7dbb8b6ac65cb6111398d89d8cf505bdf7d48d923" + }, + { + "name": "workspace-clippy", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 16226, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "143107eddda218a0952ead20d9ffdb33111d4f70017f4a3d7cc9029a93339885" + }, + { + "name": "workspace-tests", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 261319, + "stdoutSha256": "72ec8b79c7bf32b7f7e0c51ae4e853472f5e73efe2804bfa8314cbe209305e00", + "stderrSha256": "6212f8d00ac38d8f3b6aa4808a3bf7edc80baf5616d581b70288c9e4b90d6dc3" + }, + { + "name": "product", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 249901, + "stdoutSha256": "e1d3eb4a2731b1a067164fc1d5c0705a8d4e89dccfc395361d6d4bd77174e710", + "stderrSha256": "eaac1c76b9ddef037dbf77fefd664376a7d1cbe609f7f7347c56bbed53297dc5" + }, + { + "name": "fixtures", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 1002012, + "stdoutSha256": "1f54e54732b8485068c32ba4dfd366080a76f162113cbf18ae0ea783aa8ed0bc", + "stderrSha256": "5612a25c1abfbcf5ba7b43b4aba7935b6a3883c7ba635388f1a32163ffa45ff0" + }, + { + "name": "benchmark-tests", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 2030, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "580aed35f056e6709444bcf67a5732188c35f7d54bf0ecc1d02720b16b24482b" + }, + { + "name": "boundary", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 53, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "release-build", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 1051, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "7ad127ac731c4ba62cead7a8d4306abe207718ed5901bbca3e6535cffcfee8d9" + }, + { + "name": "fmt", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 3765, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "resolver-tests", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 75985, + "stdoutSha256": "a106d447b2a7b073e2a8b57c4fe81537b41f7a003647a17e7a4573f9b77a4f23", + "stderrSha256": "cabc30efc267dc7f1cce245530c2e02de6272cb2513ebff72bc5d9920d4f0533" + }, + { + "name": "scope-test-clippy", + "exit_code": 0, + "timed_out": false, + "output_limited": false, + "wall_ms": 1457, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "40968d6684235a5d3285d9175b0baf88fab3213dc4da4294c40eaf8218e27176" + } + ], + "counts": { + "javaLanguageIntegration": 38, + "fullResolverTests": 533, + "cacheContracts": 33, + "workspacePassed": 1109, + "workspaceIgnored": 2, + "productTests": 9, + "benchmarkTests": 238 + }, + "nativeCountNote": "Suites overlap; do not sum these into one unique-test count. The full resolver run includes the corrected missing-scope and existing-module-scope cases." + }, + "retainedCorrections": [ + "Unchanged production first failed seven of eight language and three of six resolver regressions.", + "An initial initializer fixture used an invalid enum-static access during construction. The valid own-field initializer also failed before the ownership fix; six positive fixtures compile under javac 17 with --release 8.", + "The initial receiver implementation regressed source-type precedence over imports. A new nested-enum regression reproduced it; source-type precedence is restored.", + "The first scope negative looked for a nonexistent file-kind scope and tested a missing scope. It now separately checks the existing module scope and missing scope; all 533 resolver tests and focused Clippy pass." + ], + "limitations": [ + "The 4314 internal occurrences retain all 3785 ordinary field and 529 enum references. Candidate still misses 679 ordinary and 174 enum references. No denominator was reselected.", + "All 3461 returned in-cohort field/enum contacts agree with the compiler on target and owner. Graphify has zero such contacts and no positive-contact precision denominator.", + "Of 670 added graph references, 414 belong to the compiler cohort; 256 are in test sources outside it. All 670 pass source-token, provenance and applicable callable-containment checks, but those checks cannot establish semantic binding correctness for the 256 unscored test references.", + "No original edge is removed or changed. All 6116 node identities remain; 4111 community attributes change. jsoup communities move from 42 to 40 while all 75 existing task-pair outcomes remain unchanged. This post-change diagnostic does not establish functional cohesion or clustering quality.", + "Both jsoup graphs retain the warning for two omitted edges. Redux controls retain their original warnings. Known development source, build configuration and previously observed misses prevent a held-out claim.", + "The frozen candidate was built before the production commit was recorded; its source/build inputs and corrected test digests match this commit. Original failed attempts, baseline graph and prior outcomes remain preserved.", + "Graphify graphs and package environment remain unchanged. These field-reference results do not measure authored answers, query usability, longer walks, god-object classification or broad cross-language superiority.", + "No standalone browser/platform/packaging matrix was rerun locally. The production fixture gate includes its React/JavaScript qualification. No merge, release or version bump was performed." + ], + "artifactDirectory": "java-enum-access-01", + "artifactSha256": { + "checks.py": "009ce14d258aef53f71fe16755a958fe364d63dfaf40d6ce9396f0775f414501", + "checks.json": "268da7556c6b9f1a3159079a3720699018798d178e5db9973f8e955d3f9424c9", + "supplemental.py": "c257bea2d5ed8fb0ada1069290f8404fa96f6bd55df73c70e2b5b184bbefdae7", + "supplemental.json": "7fb644ed42a4d18edbc50ae0015aeedd8b4b7b3c6324ab6c11a263dced4dc650", + "baseline.py": "5189c19a4ce399c229d39d77856a68b308ccd188a51da33ea33a7b60e9753011", + "baseline.json": "72554dbb7d220a5d5ac9529b24e1703252832a128cdb0d80b3908f1e79c68d72", + "compiler-fixtures.json": "8b63465fb44a23f00f6dda2a3769c96b18efa8da76e09cbc2ca199627294a843", + "initializer-before.stdout": "e2ec8f0be364074e9459d7b8fe82b8fdc559e14d6ff4afe4ced94a883bebebc7", + "valid-initializer-before.stdout": "3bc4c21571c4d6420a4dd860cae51c14e9f26de95308e811dc01ca9c0daf4894", + "import-before.stdout": "15b198d24496a8d73303b88f4a8ad4b93e7793cb195b55e17a81b63368427629", + "evaluate.py": "e304cef89009149670486c004d65eb631296d64f27babfd753528afe7da94505", + "evaluation/run.json": "a2fe6e4d8c789a9f42080e4d42bad2d6f96de982104480072afe7dcbd7b2c1ce", + "evaluation/baseline-review.json": "7a0275882b32656c194207d5491d5ac7a50f5c33692bb7d905c9183a1470161f", + "evaluation/candidate-review.json": "5c993b36e2a0a2429e2fe8f06659cc701ebd32eb922231b9e6cbd86907fec465", + "evaluation/graphify-review.json": "dc5cbeea887a267d5a6f9a39860efc924e4be3a09fabb5a7c447de9e6a7ab0b2", + "verify_evaluation.py": "ac890acc22e3ed8f50c79dc114f0ec997e952db36a71d0e76954f82741e33d81", + "verified-evaluation.json": "541a2a058c6241393556b85b20d2ea97c25f2fde1f3ac54f67681f0f546147f1", + "verified-evaluation-repeat.json": "541a2a058c6241393556b85b20d2ea97c25f2fde1f3ac54f67681f0f546147f1", + "control_runs.py": "33af7a59bb9861dcd256e8f99c2006d08bdb84e431ac4cd01cf6062788e990e2", + "controls/run.json": "c4da882401849c12281ca76cb3eaa549c0951ccaaf7912584d8147c3094c291a", + "verify_controls.py": "e1c1e6920d5296c38e581a8ed5d4c7f3d7de7167399287bb1a7b7da55025849c", + "verified-controls.json": "8a15f71b3988dd45700548441d0d547aaa14970c9f2d0af5820d4df3a40209c3", + "verified-controls-repeat.json": "8a15f71b3988dd45700548441d0d547aaa14970c9f2d0af5820d4df3a40209c3", + "check_added_anchors.py": "ac04093a87379b760f79bc91ca77394004662273b53d006f6841a3e427b7893e", + "added-anchor-review.json": "4d1e8e2dfcffe478887709912ebdca3b9104356832b7a1ff02c55586a29fd6f8", + "replay_communities.py": "143a8c0e8acf4344d4e502cb73ea85a630d416835d5cc3558ac1c7a285169249", + "community-replay.json": "64e699241018a37d84fa6c6cf42c0c81decbf5ae4403a27d90a69341cb7ff018", + "community-replay-repeat.json": "64e699241018a37d84fa6c6cf42c0c81decbf5ae4403a27d90a69341cb7ff018", + "nested-enum-oracle/verified-source.json": "48ba18c7613b8d39ec35da0ff40916848a557fc40ddbf2108a32546f7b295b02", + "graphify-environment-verification.json": "939046876e0ffdeaa5ad4ba413a5ef91e0796acbad500126a0d543940763a0fc", + "publish.py": "09eced5168ecd220f94745854b65d94d73ac631ecb713c1ea7224bf31645a3cd" + } +} diff --git a/benchmarks/agent_query/java_enum_control_registration.json b/benchmarks/agent_query/java_enum_control_registration.json new file mode 100644 index 000000000..c73c24fe7 --- /dev/null +++ b/benchmarks/agent_query/java_enum_control_registration.json @@ -0,0 +1,78 @@ +{ + "schema": "compass.java-enum-control-registration/1", + "purpose": "Paired extraction controls on all four other repositories from the existing five-language development cohort. Check that Java enum and shared-cache changes do not alter unrelated language graphs. This is preservation evidence, not new query, explanation, community or superiority evidence.", + "registrationPhase": "Before either release binary is extracted on these control repositories for this change; native qualification is still running.", + "sourceRun": "java-state-access-02/run.json", + "sourceRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "javaFollowupRegistrationSha256": "eaaa3c887089c339ba29d84cd5dab84a180a074b67e870bc2165667614623107", + "repositories": [ + { + "name": "chi", + "repository": "go-chi/chi", + "language": "Go", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "originalCompassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "frozenGraphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "name": "click", + "repository": "pallets/click", + "language": "Python", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "originalCompassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "frozenGraphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "name": "redux", + "repository": "reduxjs/redux", + "language": "TypeScript", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "originalCompassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "frozenGraphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "name": "walkdir", + "repository": "BurntSushi/walkdir", + "language": "Rust", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "originalCompassGraphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "frozenGraphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ], + "binaries": { + "baselineSha256": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4", + "candidate": "The same frozen, qualified release executable used for the separately registered complete jsoup compiler census." + }, + "order": [ + "baseline", + "candidate" + ], + "commandTemplate": [ + "", + "extract", + "", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "" + ], + "limits": { + "timeoutSeconds": 1200, + "streamBytes": 16777216, + "graphBytes": 268435456 + }, + "requirements": [ + "Use complete clean pinned checkouts as read-only source inputs. Preserve every failure and omission warning; do not reduce input scope or selectively repeat.", + "Record both frozen binary hashes, command arguments, process exit/timeout/stream limits, raw logs and full artifact hashes for all eight observations.", + "Compare complete baseline/candidate graph bytes, including metadata and array order; also compare each to its original preserved Compass graph. Any difference is retained and investigated, not silently excluded.", + "Keep frozen Graphify graphs and environment unchanged. These controls do not rerun Graphify or establish a new paired quality score.", + "Repeat artifact verification and compare reports. Operational durations are recorded but do not establish a timing comparison.", + "The original Java census remains 3785 ordinary plus 529 enum occurrences. These controls do not add to its recall denominator or replace any earlier failed outcomes." + ], + "limitations": [ + "All four repositories are known development inputs, not held-out confirmation.", + "Graph preservation does not prove source-edge correctness, authored explanation quality, functional communities, god-object classification or general cross-language superiority." + ] +} diff --git a/benchmarks/agent_query/java_field_capture.py b/benchmarks/agent_query/java_field_capture.py new file mode 100644 index 000000000..0b84853f0 --- /dev/null +++ b/benchmarks/agent_query/java_field_capture.py @@ -0,0 +1,100 @@ +"""Capture the registered real-source field oracle with an installed JDK. + +Uses cached, digest-matched dependencies. No downloads, project code execution, +annotation processors or generated project classes. All outputs go to a new +explicit artifact directory; a failed process is retained and never scored. +""" +import argparse +import json +import os +from pathlib import Path +import subprocess + +from benchmarks.agent_query.java_source_fields import load_capture, sha, MAX_CAPTURE +from benchmarks.agent_query.state_access_audit import read, MAX_GRAPH_BYTES +from benchmarks.agent_query.runner import run_bounded + + +def capture(registration, root, java_home, classpath, artifacts): + reg = json.loads(read(registration, MAX_CAPTURE)) + if reg['schema'] != 'compass.java-real-field-registration/1': + raise ValueError('unknown compiler registration') + root, java_home = root.resolve(), java_home.resolve() + suffix = '.exe' if os.name == 'nt' else '' + java = java_home / 'bin' / ('java' + suffix) + javac = java_home / 'bin' / ('javac' + suffix) + def git(*args): + return subprocess.check_output(['git', '-C', str(root), *args], text=True, timeout=30).strip() + files = {row['file']: row['sha256'] for row in reg['files']} + if len(files) != len(reg['files']) or not 0 < len(files) <= 512: + raise ValueError('duplicate or excessive source files') + def check_sources(): + if git('rev-parse', 'HEAD') != reg['commit'] or git('status', '--porcelain'): + raise ValueError('source commit/status drift') + if sha(root / 'pom.xml') != reg['buildEvidence']['pomSha256']: + raise ValueError('build configuration drift') + total = 0 + for file, digest in files.items(): + path = (root / file).resolve() + path.relative_to(root) + data = read(path, 4 * 1024 * 1024) + total += len(data) + if sha(path) != digest or total > 64 * 1024 * 1024: + raise ValueError('source digest/size mismatch') + check_sources() + libraries = [p.resolve() for p in classpath] + expected = reg['buildEvidence']['classpath'] + if len(libraries) != len(expected) or any(sha(p) != row['sha256'] for p, row in zip(libraries, expected)): + raise ValueError('classpath does not match registration') + artifacts.mkdir(parents=True, exist_ok=False) + classes = artifacts / 'classes' + classes.mkdir() + tool = Path(__file__).parent / 'java_oracle/FieldBindings.java' + manifest = dict(schema='compass.java-field-capture/1', complete=False, + registrationSha256=sha(registration), toolSha256=sha(tool), + collectorSha256=sha(__file__), runnerSha256=sha(Path(__file__).with_name('runner.py')), + javaSha256=sha(java), javacSha256=sha(javac), + modulesSha256=sha(java_home / 'lib/modules', MAX_GRAPH_BYTES), + releaseSha256=sha(java_home / 'release'), files=files, + classpathSha256={row['coordinate']: sha(p) for p, row in zip(libraries, expected)}, commands=[]) + destination = artifacts / 'manifest.json' + def save(): + destination.write_text(json.dumps(manifest, indent=2) + '\n') + def call(name, argv): + result = run_bounded(tuple(map(str, argv)), cwd=artifacts, timeout_seconds=120, + stdout_path=artifacts / (name + '.stdout'), stderr_path=artifacts / (name + '.stderr')) + manifest['commands'].append(dict(name=name, argv=list(map(str, argv)), exitCode=result.exit_code, + timedOut=result.timed_out, outputLimited=result.output_limited, milliseconds=result.wall_ms, + stdoutSha256=sha(artifacts / (name + '.stdout')), stderrSha256=sha(artifacts / (name + '.stderr')))) + save() + if result.exit_code or result.timed_out or result.output_limited: + raise ValueError(f'{name} failed; retained logs are not a scored capture') + save() + call('compile', [javac, '--release', '17', '-proc:none', '-d', classes, tool.resolve()]) + manifest['classHashes'] = {str(p.relative_to(classes)): sha(p) for p in sorted(classes.rglob('*.class'))} + listing = artifacts / 'files.txt' + listing.write_text('\n'.join(sorted(files)) + '\n') + call('bindings', [java, '-Xmx1024m', '-cp', classes, 'FieldBindings', root, + reg['buildEvidence']['release'], os.pathsep.join(map(str, libraries)), listing]) + load_capture(artifacts / 'bindings.stdout', root, files) + check_sources() + manifest.update(complete=True, exitCode=0, timedOut=False, outputLimited=False, + stdoutSha256=sha(artifacts / 'bindings.stdout'), stderrSha256=sha(artifacts / 'bindings.stderr')) + save() + return manifest + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--registration', type=Path, required=True) + parser.add_argument('--root', type=Path, required=True) + parser.add_argument('--java-home', type=Path, required=True) + parser.add_argument('--classpath', type=Path, action='append', required=True) + parser.add_argument('--artifacts', type=Path, required=True) + args = parser.parse_args() + result = capture(args.registration, args.root, args.java_home, args.classpath, args.artifacts.resolve()) + print(json.dumps(dict(complete=result['complete'], files=len(result['files']), stdoutSha256=result['stdoutSha256']))) + + +if __name__ == '__main__': + main() diff --git a/benchmarks/agent_query/java_oracle/FieldBindings.java b/benchmarks/agent_query/java_oracle/FieldBindings.java new file mode 100644 index 000000000..712d95f3a --- /dev/null +++ b/benchmarks/agent_query/java_oracle/FieldBindings.java @@ -0,0 +1,221 @@ +/* Independent development oracle using public JDK compiler APIs. + * Parse and attribute source; never generate or execute project classes. + */ +import com.sun.source.tree.*; +import com.sun.source.util.*; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.*; +import java.util.*; +import javax.lang.model.element.*; +import javax.lang.model.type.TypeKind; +import javax.tools.*; + +public final class FieldBindings { + private static final int MAX_FILES = 512, MAX_RECORDS = 100000; + private static final long MAX_FILE = 4194304, MAX_TOTAL = 67108864; + private final Trees trees; + private final Path root; + private final Set inputs; + private final Map texts = new HashMap<>(); + private final Set declarations = new HashSet<>(); + private final Set occurrences = new HashSet<>(); + private int records; + private int unboundExpressions; + + private FieldBindings(Trees trees, Path root, Set inputs) { + this.trees = trees; + this.root = root; + this.inputs = inputs; + } + + private static Map object(Object... entries) { + Map map = new LinkedHashMap<>(); + for (int i = 0; i < entries.length; i += 2) + map.put((String) entries[i], entries[i + 1]); + return map; + } + + private static String json(Object value) { + if (value == null) return "null"; + if (value instanceof Number || value instanceof Boolean) return value.toString(); + if (value instanceof Map map) { + List parts = new ArrayList<>(); + for (var entry : map.entrySet()) parts.add(json(entry.getKey()) + ":" + json(entry.getValue())); + return "{" + String.join(",", parts) + "}"; + } + String text = value.toString(); + StringBuilder out = new StringBuilder("\""); + for (int i = 0; i < text.length(); i++) { + char c = text.charAt(i); + if (c == '\\' || c == '"') out.append('\\').append(c); + else if (c < 32) out.append(String.format(Locale.ROOT, "\\u%04x", (int) c)); + else out.append(c); + } + return out.append('"').toString(); + } + + private void emit(Map record) { + if (++records > MAX_RECORDS) throw new IllegalStateException("record limit"); + System.out.println(json(record)); + } + + private String file(CompilationUnitTree unit) { + try { + Path path = Path.of(unit.getSourceFile().toUri()).toRealPath(); + if (!inputs.contains(path)) throw new IllegalStateException("unregistered source: " + path); + return root.relativize(path).toString().replace(File.separatorChar, '/'); + } catch (IOException ex) { throw new UncheckedIOException(ex); } + } + + private String text(CompilationUnitTree unit) { + return texts.computeIfAbsent(file(unit), key -> { + try { return unit.getSourceFile().getCharContent(false).toString(); } + catch (IOException ex) { throw new UncheckedIOException(ex); } + }); + } + + private static boolean field(Element element) { + return element != null && (element.getKind() == ElementKind.FIELD + || element.getKind() == ElementKind.ENUM_CONSTANT); + } + + private static String qualified(Element element) { + if (element instanceof TypeElement type) return type.getQualifiedName().toString(); + if (element == null) return ""; + return qualified(element.getEnclosingElement()) + "::" + element.getSimpleName(); + } + + private Map declaration(TreePath path) { + if (path == null) return null; + CompilationUnitTree unit = path.getCompilationUnit(); + long start = trees.getSourcePositions().getStartPosition(unit, path.getLeaf()); + long end = trees.getSourcePositions().getEndPosition(unit, path.getLeaf()); + Element element = trees.getElement(path); + if (element == null || start < 0 || end <= start || end > text(unit).length()) return null; + String name = element.getSimpleName().toString(); + String kind = element.getKind().toString().toLowerCase(Locale.ROOT); + String file = file(unit); + String id = file + ":" + start + ":" + end + ":" + kind + ":" + name; + return object("id", id, "kind", kind, "file", file, "name", name, + "qualified", qualified(element), "startUtf16", start, "endUtf16", end, + "startLine", unit.getLineMap().getLineNumber(start), + "endLine", unit.getLineMap().getLineNumber(end - 1)); + } + + private Map owner(TreePath path) { + for (TreePath parent = path.getParentPath(); parent != null; parent = parent.getParentPath()) { + Tree leaf = parent.getLeaf(); + if (leaf instanceof MethodTree || leaf instanceof ClassTree + || (leaf instanceof VariableTree && field(trees.getElement(parent)))) + return declaration(parent); + } + return null; + } + + private void declare(TreePath path) { + Map value = declaration(path); + if (value != null && declarations.add((String) value.get("id"))) + emit(object("type", "declaration", "declaration", value)); + } + + private void access(TreePath path, String spelling) { + if (spelling.equals("this") || spelling.equals("super")) return; + Element element = trees.getElement(path); + if (element == null) { unboundExpressions++; return; } + if (!field(element)) return; + CompilationUnitTree unit = path.getCompilationUnit(); + long start = trees.getSourcePositions().getStartPosition(unit, path.getLeaf()); + long end = trees.getSourcePositions().getEndPosition(unit, path.getLeaf()); + // Attribute-generated trees are not source occurrences. + if (start < 0 || end <= start || end > text(unit).length()) return; + long tokenStart = path.getLeaf() instanceof IdentifierTree ? start : end - spelling.length(); + boolean anchored = tokenStart >= start && text(unit).substring((int) tokenStart, (int) end).equals(spelling); + String key = file(unit) + ":" + start + ":" + end; + if (!occurrences.add(key)) throw new IllegalStateException("duplicate occurrence: " + key); + Map target = declaration(trees.getPath(element)); + String origin = target != null ? "source" : "external"; + if (target == null && path.getLeaf() instanceof MemberSelectTree select) { + if (spelling.equals("class")) origin = "class-literal"; + else if (spelling.equals("length") && trees.getTypeMirror( + new TreePath(path, select.getExpression())).getKind() == TypeKind.ARRAY) + origin = "array-length"; + } + emit(object("type", "fieldReference", "file", file(unit), "name", spelling, + "expressionStartUtf16", start, "expressionEndUtf16", end, + "tokenStartUtf16", anchored ? tokenStart : null, "tokenEndUtf16", anchored ? end : null, + "anchorStatus", anchored ? "exact" : "unsupported-raw-spelling", + "line", unit.getLineMap().getLineNumber(end - 1), + "targetKind", element.getKind().toString().toLowerCase(Locale.ROOT), + "targetQualified", qualified(element), "targetOrigin", origin, "target", target, "owner", owner(path))); + } + + private final class Scanner extends TreePathScanner { + private int depth; + @Override public Void scan(Tree tree, Void unused) { + if (++depth > 512) throw new IllegalStateException("AST depth limit"); + try { return super.scan(tree, unused); } + finally { depth--; } + } + @Override public Void visitImport(ImportTree tree, Void unused) { return null; } + @Override public Void visitClass(ClassTree tree, Void unused) { + declare(getCurrentPath()); return super.visitClass(tree, unused); + } + @Override public Void visitMethod(MethodTree tree, Void unused) { + declare(getCurrentPath()); return super.visitMethod(tree, unused); + } + @Override public Void visitVariable(VariableTree tree, Void unused) { + if (field(trees.getElement(getCurrentPath()))) declare(getCurrentPath()); + return super.visitVariable(tree, unused); + } + @Override public Void visitIdentifier(IdentifierTree tree, Void unused) { + access(getCurrentPath(), tree.getName().toString()); return super.visitIdentifier(tree, unused); + } + @Override public Void visitMemberSelect(MemberSelectTree tree, Void unused) { + access(getCurrentPath(), tree.getIdentifier().toString()); return super.visitMemberSelect(tree, unused); + } + } + + public static void main(String[] args) throws Exception { + if (args.length != 4) throw new IllegalArgumentException("root release classpath file-list"); + System.setOut(new PrintStream(System.out, true, StandardCharsets.UTF_8)); + Path root = Path.of(args[0]).toRealPath(); + List names = Files.readAllLines(Path.of(args[3]), StandardCharsets.UTF_8); + if (names.isEmpty() || names.size() > MAX_FILES) throw new IllegalArgumentException("file count"); + SortedSet paths = new TreeSet<>(); + long bytes = 0; + for (String name : names) { + Path path = root.resolve(name).toRealPath(); + long size = Files.size(path); + if (!path.startsWith(root) || !name.endsWith(".java") || size > MAX_FILE || !paths.add(path)) + throw new IllegalArgumentException("invalid source " + name); + bytes += size; + } + if (bytes > MAX_TOTAL) throw new IllegalArgumentException("source byte limit"); + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + if (compiler == null) throw new IllegalStateException("JDK compiler required"); + DiagnosticCollector diagnostics = new DiagnosticCollector<>(); + try (StandardJavaFileManager manager = compiler.getStandardFileManager(diagnostics, Locale.ROOT, StandardCharsets.UTF_8)) { + JavacTask task = (JavacTask) compiler.getTask(new PrintWriter(System.err), manager, diagnostics, + List.of("--release", args[1], "-encoding", "UTF-8", "-proc:none", "-implicit:none", + "-sourcepath", "", "-classpath", args[2], "-Xmaxerrs", "100", "-Xmaxwarns", "100"), + null, manager.getJavaFileObjectsFromPaths(paths)); + List units = new ArrayList<>(); + task.parse().forEach(units::add); + task.analyze(); + boolean errors = false; + for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { + errors |= diagnostic.getKind() == Diagnostic.Kind.ERROR; + System.err.println(diagnostic.toString()); + } + if (errors) throw new IllegalStateException("compiler errors; no scored oracle"); + FieldBindings oracle = new FieldBindings(Trees.instance(task), root, paths); + oracle.emit(object("type", "header", "schema", "compass.javac-field-bindings/1", + "files", paths.size(), "sourceBytes", bytes, "release", args[1], + "positionEncoding", "UTF-16 code units", "compilerRuntime", Runtime.version().toString())); + for (CompilationUnitTree unit : units) oracle.new Scanner().scan(unit, null); + oracle.emit(object("type", "complete", "declarations", oracle.declarations.size(), + "fieldReferences", oracle.occurrences.size(), "unboundExpressions", oracle.unboundExpressions)); + } + } +} diff --git a/benchmarks/agent_query/java_real_field_registration.json b/benchmarks/agent_query/java_real_field_registration.json new file mode 100644 index 000000000..d5e243849 --- /dev/null +++ b/benchmarks/agent_query/java_real_field_registration.json @@ -0,0 +1,492 @@ +{ + "schema": "compass.java-real-field-registration/1", + "baselineCommit": "d278c1e9f1e9c99e8a3ca07a7ebd4ceda40f5b63", + "scope": "Complete Java 8 base-source field-reference audit on a previously observed jsoup development repository and frozen graphs. Registered before compiler source binding capture; not held-out or an independent human review. Do not combine with five-language site recall or treat as god-object classification.", + "repository": "jhy/jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "sourceRoot": "src/main/java", + "excluded": [ + "package-info.java (metadata compiled separately by project)", + "src/main/java11 overlay (separate build target)", + "src/test (test dependencies and build target outside this panel)" + ], + "buildEvidence": { + "pomSha256": "e100f30fe8dc33f9445644bd5ee53a2e59750995ae62eb209f5882da7c0c63f3", + "release": "8", + "annotationProcessing": false, + "implicitCompilation": false, + "executeProjectCode": false, + "classpath": [ + { + "coordinate": "org.jspecify:jspecify:1.0.1", + "sha256": "070d75f261fe4c5b8202508366715f7f2d4660f88c8ef7e6d3575e48c9683b66" + }, + { + "coordinate": "com.google.re2j:re2j:1.8", + "sha256": "7b52c72156dd7f98b3237a5b35c1d34fba381b21048c89208913ad80a45dfbd7" + } + ] + }, + "files": [ + { + "file": "src/main/java/org/jsoup/Connection.java", + "bytes": 43713, + "sha256": "031151f474574f94a8c9176049a4d8a9f97b14c334cde9ffd1f5b05127acc062" + }, + { + "file": "src/main/java/org/jsoup/HttpStatusException.java", + "bytes": 589, + "sha256": "ecf725c71ae86ab5d915431ce4980b4ffb679d273b1b2561242842fab1ff3196" + }, + { + "file": "src/main/java/org/jsoup/Jsoup.java", + "bytes": 19746, + "sha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + }, + { + "file": "src/main/java/org/jsoup/Progress.java", + "bytes": 802, + "sha256": "edeb649820e6879673415e431cb49db14852b432b55ce0d1858ed359f45293bc" + }, + { + "file": "src/main/java/org/jsoup/SerializationException.java", + "bytes": 1572, + "sha256": "96e426ace0e719074fd26e67ca36bb2657050c133af49b1fd4fba3368e652c59" + }, + { + "file": "src/main/java/org/jsoup/UnsupportedMimeTypeException.java", + "bytes": 689, + "sha256": "ba4fb475e31d400f274d24c1cac751322061be5af6a6b8297df5b489cc6285ac" + }, + { + "file": "src/main/java/org/jsoup/examples/HtmlToPlainText.java", + "bytes": 6484, + "sha256": "3f7e6718b8518240a8d538f60030edeab37648c0b7e70b6c620ee26a434bac7e" + }, + { + "file": "src/main/java/org/jsoup/examples/ListLinks.java", + "bytes": 2032, + "sha256": "a4e4260d8e9671de4fa49d9a0016bec7170631efed2dc5422e4a7583a60cd86e" + }, + { + "file": "src/main/java/org/jsoup/examples/Wikipedia.java", + "bytes": 963, + "sha256": "abf753f2d99f3b5bbd83e55d8af178ebc5a01749a544cb5a0ec1d4f8331a0aa1" + }, + { + "file": "src/main/java/org/jsoup/helper/AuthenticationHandler.java", + "bytes": 3794, + "sha256": "b545635ca593e5df27b62527996980be457ec75745283cc02399d002aa0eb782" + }, + { + "file": "src/main/java/org/jsoup/helper/CookieUtil.java", + "bytes": 5302, + "sha256": "8def4382a79e3ff766d48d29348dca04a5e07e6badee9ad042f4f784518037c2" + }, + { + "file": "src/main/java/org/jsoup/helper/DataUtil.java", + "bytes": 19766, + "sha256": "5ff6d0e32308c350deb8c7541bf430e79caa1eac73a9c9d7b15f4fe90673ea6f" + }, + { + "file": "src/main/java/org/jsoup/helper/HttpConnection.java", + "bytes": 53873, + "sha256": "9f439dc7f7aa03d18a1fbff716cfb562f9e2667b249a60dfc329f5232b3c1145" + }, + { + "file": "src/main/java/org/jsoup/helper/Re2jRegex.java", + "bytes": 1745, + "sha256": "1ee3361ff0b7a48e9332ed96780162d4601c3f7c392f189b3d4cef3164a4c9f5" + }, + { + "file": "src/main/java/org/jsoup/helper/Regex.java", + "bytes": 4248, + "sha256": "50b30ad1a0cdd14d27070407f577f27397bbaedb2baf7e98ecd813c79b89eee0" + }, + { + "file": "src/main/java/org/jsoup/helper/RequestAuthenticator.java", + "bytes": 2934, + "sha256": "52ddc822692de5b5f21ee161d5743e18bbb3a2b24aebd0714a77f8a1f9ef69dd" + }, + { + "file": "src/main/java/org/jsoup/helper/RequestDispatch.java", + "bytes": 2043, + "sha256": "8f6f8c50b1126e6b4f3c48e67b861f2df60158ff61ec79e85590f968d3f4dc8c" + }, + { + "file": "src/main/java/org/jsoup/helper/RequestExecutor.java", + "bytes": 749, + "sha256": "666b1e382faebcb196e9cd351607455fe29592e347dcb47a4f6f9f66f745c01e" + }, + { + "file": "src/main/java/org/jsoup/helper/UrlBuilder.java", + "bytes": 4426, + "sha256": "874ee79c27016735ff8a5141e1f09f76be40438e1f9bec99311b9a34a6e6f593" + }, + { + "file": "src/main/java/org/jsoup/helper/UrlConnectionExecutor.java", + "bytes": 4993, + "sha256": "886011395e27d3922686ae88fc7fe305c2a512d11c9770cc7de1887d4f17998c" + }, + { + "file": "src/main/java/org/jsoup/helper/Validate.java", + "bytes": 7084, + "sha256": "256262c372b996305f30d89e668cb5110d6b36b13afa551c8bfa3a5ee50c85e6" + }, + { + "file": "src/main/java/org/jsoup/helper/ValidationException.java", + "bytes": 972, + "sha256": "209e9b62845a9effe55d9e684c8ebe76d6f63be27cd66ee0a2ff24ce3585cfbd" + }, + { + "file": "src/main/java/org/jsoup/helper/W3CDom.java", + "bytes": 27090, + "sha256": "97221e9770c46f56ad4736fccc0ec5fd690f9708ded17537e59fcd9faf137725" + }, + { + "file": "src/main/java/org/jsoup/internal/ControllableInputStream.java", + "bytes": 12748, + "sha256": "8b1561d4df241a4ce77ce009df23e7e604763b35f2700f9ba2e4a23b08bae1eb" + }, + { + "file": "src/main/java/org/jsoup/internal/LineMap.java", + "bytes": 2378, + "sha256": "a512f223f1f9c2ada0abb37b0342d2cfbc91181d3593b2d9035b6287e3c567a0" + }, + { + "file": "src/main/java/org/jsoup/internal/NamespaceBindings.java", + "bytes": 3581, + "sha256": "10ec33f8ed69f55cac30042a59b5508068513466f352eab85b9ea40f71dafca5" + }, + { + "file": "src/main/java/org/jsoup/internal/Normalizer.java", + "bytes": 1790, + "sha256": "5587cbbc0574eebd72f2ef03442047f36f924ae4ec95347fc24aee0c6ab50185" + }, + { + "file": "src/main/java/org/jsoup/internal/QuietAppendable.java", + "bytes": 2637, + "sha256": "7ddaaa971e97c710c34c5a824d40583c8a452297cec2668d801eaa4f9de4dc9f" + }, + { + "file": "src/main/java/org/jsoup/internal/SharedConstants.java", + "bytes": 1013, + "sha256": "efea92b5536f08bbb85c1ee3233d8a3fa4cac854f49413a816fc9dd488f72e17" + }, + { + "file": "src/main/java/org/jsoup/internal/SimpleBufferedInput.java", + "bytes": 6768, + "sha256": "5456a093bb2da2fdbde7775182fb364ee7a44ddaa2b76e6d0410d8962ba2a525" + }, + { + "file": "src/main/java/org/jsoup/internal/SimpleStreamReader.java", + "bytes": 3412, + "sha256": "26daa659178efc7edde8f2b58e0b862ed68d96e9adacaf8a3ed0ab6eddd4968e" + }, + { + "file": "src/main/java/org/jsoup/internal/SoftPool.java", + "bytes": 2400, + "sha256": "f2e1f04034ff027f342fe1863532702aefa2aabe77ce425b96f1896f7de01e08" + }, + { + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "bytes": 17505, + "sha256": "7e61ba7e8630f101f0a74d56fb91237c8588fceeb5c472166c60926dd6047881" + }, + { + "file": "src/main/java/org/jsoup/nodes/Attribute.java", + "bytes": 12105, + "sha256": "3d747f3fad35d3f9dfc0f8466a45c94b21e362cc553d8190119eac4047315739" + }, + { + "file": "src/main/java/org/jsoup/nodes/Attributes.java", + "bytes": 26795, + "sha256": "39551b1d008f2a77b212b5b16e09e257b0ec9d8f118a0b7131a1cfe11ac32875" + }, + { + "file": "src/main/java/org/jsoup/nodes/CDataNode.java", + "bytes": 841, + "sha256": "07f8c6622992fa6af68516d09cf7cf1a25b0006aa69e90a6208a7b90a53b32d9" + }, + { + "file": "src/main/java/org/jsoup/nodes/Comment.java", + "bytes": 2255, + "sha256": "311956f0cd15ecacca663f56a27f9bbb18beb71968aa7b7171bd81831c93d3e8" + }, + { + "file": "src/main/java/org/jsoup/nodes/DataNode.java", + "bytes": 1956, + "sha256": "045c6c94ff716e666b842e79ee961c923559b89d3ca51c2e174ea9f4e63c0848" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "bytes": 20793, + "sha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + }, + { + "file": "src/main/java/org/jsoup/nodes/DocumentType.java", + "bytes": 3854, + "sha256": "7a37c3ef20e42e53ea53a2faa1045155f05f938a74ab153007900e37a3f64664" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "bytes": 84173, + "sha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + }, + { + "file": "src/main/java/org/jsoup/nodes/Entities.java", + "bytes": 17614, + "sha256": "5192dae7df7bc05b3c6346f8db8c7bb45f5084e45f6d6ac17f9f5791b2555bcc" + }, + { + "file": "src/main/java/org/jsoup/nodes/EntitiesData.java", + "bytes": 33565, + "sha256": "5d2d6726a607fca5d0f9393aa6d5dc0882e780507dfb35371cd4d17e7e1e63f9" + }, + { + "file": "src/main/java/org/jsoup/nodes/FormElement.java", + "bytes": 5802, + "sha256": "400e23f8f7ede595e2063bb1611bc796de6d7b920fd835f11ffb4afc6b1ab6e5" + }, + { + "file": "src/main/java/org/jsoup/nodes/LeafNode.java", + "bytes": 5709, + "sha256": "a034f109630e48e6c225e15737288c8e27b12d370dd103fc945bf83c8a89edba" + }, + { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "bytes": 38462, + "sha256": "5a8e21930be1a65ae41055a09ba3400dd8a134ad3e693cea61f41cc4242d27ec" + }, + { + "file": "src/main/java/org/jsoup/nodes/NodeInternals.java", + "bytes": 2565, + "sha256": "3d593987076236b10c89ce8c3b6ebf3103fba56338cee9c7180255ce9795eda9" + }, + { + "file": "src/main/java/org/jsoup/nodes/NodeIterator.java", + "bytes": 4503, + "sha256": "6f5b0b36d110f6c664016bbfc0a11b3eb6af01d441b20f230a90839b9dc18bab" + }, + { + "file": "src/main/java/org/jsoup/nodes/NodeUtils.java", + "bytes": 2760, + "sha256": "04dffffb32b1fa4bfeb237205faa6e37433cf773ecc57a9e89de3f9d1eb67bd9" + }, + { + "file": "src/main/java/org/jsoup/nodes/Printer.java", + "bytes": 9607, + "sha256": "63972e16a946056b46d1cc6b92bfc4df3c5c6e559b865a4ba21c1a0a23452de5" + }, + { + "file": "src/main/java/org/jsoup/nodes/ProcessingInstruction.java", + "bytes": 5195, + "sha256": "08ac02e2561950fc907ff4481099932aab5e0d9acf77ea59da599cfb001e3974" + }, + { + "file": "src/main/java/org/jsoup/nodes/Range.java", + "bytes": 18868, + "sha256": "5e5365018f097d63eba66eb24d84dfd0a7e1d623ec9d9b20a86b694c0eb9d68b" + }, + { + "file": "src/main/java/org/jsoup/nodes/TextNode.java", + "bytes": 3584, + "sha256": "6b524fbd7fc85e56ad19fd5b45beb2bd72f299a30441c423bdcdca71837a12a8" + }, + { + "file": "src/main/java/org/jsoup/nodes/XmlDeclaration.java", + "bytes": 2899, + "sha256": "622cf1a566bf747593815d3d39b6f91406f4a73f738caf79886675ef14d53ad5" + }, + { + "file": "src/main/java/org/jsoup/parser/CharacterReader.java", + "bytes": 23540, + "sha256": "f93452a6022d438df7ce17f00dabd9d32589815b30ee4f5e6d1bd1208e36274c" + }, + { + "file": "src/main/java/org/jsoup/parser/ForeignNames.java", + "bytes": 3610, + "sha256": "1239f1386994cc399195f8e564a39327b0029ad8a7381066a57536c91f4e48d7" + }, + { + "file": "src/main/java/org/jsoup/parser/HtmlTagOptions.java", + "bytes": 3893, + "sha256": "ecf9e4de64b525014c62ef46e7fda0cd5f45c9afa39b57143134c29d301c98e1" + }, + { + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilder.java", + "bytes": 50484, + "sha256": "c7fff264056bc226eb6065efd407cbf990722c739afc00ebcde1ffef6ca7b72f" + }, + { + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilderState.java", + "bytes": 82032, + "sha256": "53a24a75eea9a75c941bdfa7240188ec5f6d79e0ad9c771c0ad4233ef331b763" + }, + { + "file": "src/main/java/org/jsoup/parser/ParseError.java", + "bytes": 1617, + "sha256": "73a1dbe9caf2a439051b5dd77af383ae339d034d24ec673f9634d092d23aa6f0" + }, + { + "file": "src/main/java/org/jsoup/parser/ParseErrorList.java", + "bytes": 1241, + "sha256": "c4aa6c789ee9044cb74ca35255bfd7030b1f45b6f38a4da7744bc48bd6efcea3" + }, + { + "file": "src/main/java/org/jsoup/parser/ParseSettings.java", + "bytes": 2258, + "sha256": "733903589b1f65f000b04b969b4d3dd462754b2b9b3b94f1342f5b284b3af3fd" + }, + { + "file": "src/main/java/org/jsoup/parser/Parser.java", + "bytes": 15426, + "sha256": "2b8baa95140fbf12fad9c874b42d8d31e24b186fd7c665c1708395e6d852ba98" + }, + { + "file": "src/main/java/org/jsoup/parser/StreamParser.java", + "bytes": 19831, + "sha256": "5a50cf810031c426623c68cc630218c3e6725e1519bb039143777f9f19637855" + }, + { + "file": "src/main/java/org/jsoup/parser/Tag.java", + "bytes": 13340, + "sha256": "98b0a56d5963298da2176eeb555ae1e66cf43ddd0df28a25ebec1fa8ed7bee5a" + }, + { + "file": "src/main/java/org/jsoup/parser/TagSet.java", + "bytes": 13030, + "sha256": "26261d2c9ee3d2e978c184f15328022488af3264ae8b1c54b6bd8fcdd02a0dff" + }, + { + "file": "src/main/java/org/jsoup/parser/Token.java", + "bytes": 21265, + "sha256": "a2c94fbf931bcb7fae31da45ca56a3070a7c1ed3ec4d82c9839b6b120595a379" + }, + { + "file": "src/main/java/org/jsoup/parser/TokenData.java", + "bytes": 2419, + "sha256": "816b9225ced88924eb45b7a0dccea19f4a15e96154a9700f34fad3a3435e4bfb" + }, + { + "file": "src/main/java/org/jsoup/parser/TokenQueue.java", + "bytes": 17091, + "sha256": "7a23106abcfc95d71a6b774bdc10c02d33a98b25cbc429ade2d94db5d69e0fb1" + }, + { + "file": "src/main/java/org/jsoup/parser/Tokeniser.java", + "bytes": 16428, + "sha256": "16250f9ef5cf94e3fc7100a8356e466ef1c4273d84c455d64ace82a29b35a09f" + }, + { + "file": "src/main/java/org/jsoup/parser/TokeniserState.java", + "bytes": 70346, + "sha256": "d6a94fc73b4561011470263872b74b29024ed1ddddf220df636357a1ab35bea0" + }, + { + "file": "src/main/java/org/jsoup/parser/TreeBuilder.java", + "bytes": 13876, + "sha256": "6f210b4b6e1f5e5d1f81655aa279103bf101e5b1f0ec17ee8fe7035894c10746" + }, + { + "file": "src/main/java/org/jsoup/parser/XmlTreeBuilder.java", + "bytes": 9735, + "sha256": "c016f43e79dbf01b49370d5ba689ebbdb70f3d15e108d9d0f75eacf1e6a88abd" + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "bytes": 11402, + "sha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "bytes": 27741, + "sha256": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501" + }, + { + "file": "src/main/java/org/jsoup/select/Collector.java", + "bytes": 4122, + "sha256": "84a60695159cdd345b6ec5f19ea968ba9d0951956c7d9ad0ae97a7ab01e009c5" + }, + { + "file": "src/main/java/org/jsoup/select/CombiningEvaluator.java", + "bytes": 4728, + "sha256": "4d7d2aa47151f1be31769709738db73afafe65458871b817510925327c4fe1c8" + }, + { + "file": "src/main/java/org/jsoup/select/Elements.java", + "bytes": 25504, + "sha256": "b6ed7b3905a52d85658ba6e6b1347de84513b9c6b51e8c8f5879ee29865f2873" + }, + { + "file": "src/main/java/org/jsoup/select/Evaluator.java", + "bytes": 29101, + "sha256": "5a3ce0742ddf5d5bb647e8627735c47c656f5642361f41fbb30f26fa7b6f7e8d" + }, + { + "file": "src/main/java/org/jsoup/select/HasEvaluator.java", + "bytes": 7033, + "sha256": "64e5e7227c38b9663c3dab4fb152c17ffc7ef9b155f42a2b99f9b57b1307e321" + }, + { + "file": "src/main/java/org/jsoup/select/NodeEvaluator.java", + "bytes": 3550, + "sha256": "7099d38531322df9b7a3c6a12995f891aaa37620d4b21b26a3017d8721dbcc7e" + }, + { + "file": "src/main/java/org/jsoup/select/NodeFilter.java", + "bytes": 2682, + "sha256": "d6902c3debda319f47a7df5b281a2544154bf692c57b3a35af248456fb3a4234" + }, + { + "file": "src/main/java/org/jsoup/select/NodeTraversor.java", + "bytes": 7364, + "sha256": "3fc9d4e257300e2399bf61d631838411539936e733adbec458a483f2b3b1e235" + }, + { + "file": "src/main/java/org/jsoup/select/NodeVisitor.java", + "bytes": 3748, + "sha256": "f6b26808cd5acd748746a94bc45935a63776ad7dcc38f5f2d80c04375aae773d" + }, + { + "file": "src/main/java/org/jsoup/select/Nodes.java", + "bytes": 9816, + "sha256": "d4c8c088df00bf04e5c9cd7e47bda7b644a52552bf11387870f882f07b0ac7f2" + }, + { + "file": "src/main/java/org/jsoup/select/QueryParser.java", + "bytes": 27791, + "sha256": "86eb0671a0c358d12f75bbeea6da4fe4525dfa879ce339d25e27ba58f66a58d3" + }, + { + "file": "src/main/java/org/jsoup/select/Selector.java", + "bytes": 23604, + "sha256": "5452b5f12561dedcb8b7dccfdf861c4159e1e4292fef6a2d0cb4f1636f8a84b9" + }, + { + "file": "src/main/java/org/jsoup/select/StructuralEvaluator.java", + "bytes": 7243, + "sha256": "5e67d4df5224e8e19ecf8415d50ac19c1ae19889cb98823fa4ca9028e040bd16" + } + ], + "graphRun": "java-state-access-02/run.json", + "graphRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "graphSha256": { + "compass": "2a9216926b1c5dfc82e4f88df0cce24a7a14ac67aa2a350158eff39018145314", + "graphify": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + "protocol": { + "oracle": "JDK JavacTask parse/analyze and Trees source bindings. No code generation or project execution. Error diagnostics abort scored capture. Enumerate all variable field/enum-constant expression references, retaining target declaration and enclosing source owner. Exclude import bindings and synthetic this/super identifiers; distinguish external/intrinsic targets and unsupported anchors.", + "identity": "Join graph declarations to compiler source file, declaration region and name; preserve multiple candidates as ambiguous. Count exact UTF-8 occurrence spans, target identity and caller identity separately. No first-match or nearest-name selection. Report all graph field contacts inside registered files, including unmatched/wrong targets and owners.", + "comparison": "Use the same frozen source inputs and native graphs for both tools. Report full-source occurrence recall and returned-contact precision only when the adapter independently verifies identities; absent fields are misses. Separate ordinary fields and enum constants; preserve unsupported cases and negative outcomes. No graph rebuild or performance comparison.", + "qualification": "First check compiler oracle against existing 44-case source/bytecode fixture and additional bounded adversarial fixtures for Unicode positions, shadowing, hidden fields, lambdas, anonymous/local classes, overload ownership and multi-declarators. Do not tune product implementation in the baseline capture.", + "bounds": { + "files": 512, + "fileBytes": 4194304, + "totalSourceBytes": 67108864, + "records": 100000, + "seconds": 120, + "heapMiB": 1024 + } + } +} diff --git a/benchmarks/agent_query/java_real_field_review.json b/benchmarks/agent_query/java_real_field_review.json new file mode 100644 index 000000000..a1972f66f --- /dev/null +++ b/benchmarks/agent_query/java_real_field_review.json @@ -0,0 +1,209 @@ +{ + "schema": "compass.java-real-field-review/1", + "scope": "Complete Java 8 base-source field-reference audit on a previously observed jsoup development repository and frozen graphs. Registered before compiler source binding capture; not held-out or an independent human review. Do not combine with five-language site recall or treat as god-object classification.", + "registrationCommit": "2499e927", + "registrationSha256": "6088df9f4cf420437a71ca06324bbe80817ed73142eb61c5686d8d3da36180af", + "productCommit": "f2cacfebba15d69a738e7c14694d51320e4e07ba", + "baselineBranchCommit": "d278c1e9f1e9c99e8a3ca07a7ebd4ceda40f5b63", + "sourceCommit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "artifactDirectory": "jsoup-java-field-oracle-02", + "sourceFiles": 88, + "sourceBytes": 1150637, + "compilerRuntime": "17.0.8.1+8-LTS", + "compilerRelease": "8", + "compilerRecords": { + "type": "complete", + "declarations": 3356, + "fieldReferences": 4444, + "unboundExpressions": 0 + }, + "origins": { + "source": 4314, + "array-length": 55, + "external": 44, + "class-literal": 31 + }, + "results": { + "compass": { + "summary": { + "enum_constant": { + "occurrences": 529, + "exactTargetAndOwner": 0, + "declarations": 131, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 3785, + "exactTargetAndOwner": 3047, + "declarations": 616, + "uniqueGraphDeclarations": 614, + "unsupportedAnchors": 0 + } + }, + "contactStatus": { + "verified_target_and_owner": 3047 + }, + "graphSha256": "2a9216926b1c5dfc82e4f88df0cce24a7a14ac67aa2a350158eff39018145314", + "graphDirected": true + }, + "graphify": { + "summary": { + "enum_constant": { + "occurrences": 529, + "exactTargetAndOwner": 0, + "declarations": 131, + "uniqueGraphDeclarations": 131, + "unsupportedAnchors": 0 + }, + "field": { + "occurrences": 3785, + "exactTargetAndOwner": 0, + "declarations": 616, + "uniqueGraphDeclarations": 0, + "unsupportedAnchors": 0 + } + }, + "contactStatus": {}, + "graphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69", + "graphDirected": false + } + }, + "missingOrdinaryFields": [ + { + "file": "src/main/java/org/jsoup/nodes/Attributes.java", + "line": 473, + "name": "expectedSize", + "qualified": "::expectedSize" + }, + { + "file": "src/main/java/org/jsoup/nodes/Attributes.java", + "line": 474, + "name": "i", + "qualified": "::i" + } + ], + "mostMissedOrdinaryTargets": [ + { + "qualified": "org.jsoup.parser.TreeBuilder::stack", + "occurrences": 51 + }, + { + "qualified": "org.jsoup.parser.TokeniserState::nullChar", + "occurrences": 47 + }, + { + "qualified": "org.jsoup.parser.TokeniserState::eof", + "occurrences": 41 + }, + { + "qualified": "org.jsoup.parser.Parser::NamespaceHtml", + "occurrences": 32 + }, + { + "qualified": "org.jsoup.parser.Token.Doctype::forceQuirks", + "occurrences": 31 + }, + { + "qualified": "org.jsoup.parser.TokeniserState::replacementChar", + "occurrences": 26 + }, + { + "qualified": "org.jsoup.parser.Token.Tag::normalName", + "occurrences": 21 + }, + { + "qualified": "org.jsoup.parser.TreeBuilder::settings", + "occurrences": 16 + }, + { + "qualified": "org.jsoup.select.Evaluator.AttributeKeyPair::key", + "occurrences": 14 + }, + { + "qualified": "org.jsoup.nodes.Node::parentNode", + "occurrences": 13 + }, + { + "qualified": "org.jsoup.parser.TreeBuilder::tokeniser", + "occurrences": 13 + }, + { + "qualified": "org.jsoup.parser.Token.Tag::attributes", + "occurrences": 13 + }, + { + "qualified": "org.jsoup.select.StructuralEvaluator::evaluator", + "occurrences": 11 + }, + { + "qualified": "org.jsoup.parser.Parser::NamespaceSvg", + "occurrences": 10 + }, + { + "qualified": "org.jsoup.parser.TreeBuilder::doc", + "occurrences": 10 + }, + { + "qualified": "org.jsoup.select.Evaluator.AttributeKeyPair::value", + "occurrences": 10 + }, + { + "qualified": "::i", + "occurrences": 9 + }, + { + "qualified": "org.jsoup.internal.SharedConstants::DefaultBufferSize", + "occurrences": 8 + }, + { + "qualified": "org.jsoup.parser.Parser::NamespaceMathml", + "occurrences": 8 + }, + { + "qualified": "org.jsoup.helper.DataUtil::UTF_8", + "occurrences": 7 + } + ], + "qualification": { + "sourceBytecodeCases": 44, + "sourceBytecodeOccurrences": 45, + "adversarialRecords": 20, + "unitTests": 176, + "productBoundaryPassed": true, + "repeatedCaptureByteIdentical": true, + "offlineReviewsReplayed": true + }, + "limitations": [ + "Previously observed development repository; this is a compiler-backed source census for one build configuration, not held-out or five-language generalization.", + "All native graph references/reads/writes to field or enum-member endpoints in the registered files are inventoried. Unmapped, ambiguous, wrong and unanchored records must be retained. No such failure occurred among the 3047 Compass contacts here; Graphify has no such contacts and no positive-contact precision denominator.", + "Declarations use source regions and names; exact occurrence scoring requires target and owner identities plus UTF-8 spans. Line-only and unordered records are not upgraded to exact/directed proof.", + "JDK/base-source version and cached dependencies are pinned. Java 11 overlay, metadata, test sources, external fields and compiler intrinsics are separate from the 4314 internal-reference denominator.", + "Read/write effects, runtime aliasing, explanations, graph traversal, functional community quality and god-object judgments remain unscored. Missing field contacts cannot prove independent responsibilities.", + "Round 01 mixed array-length and class-literal pseudo-fields into the non-source group; retained as superseded captures. Round 02 separates them. The internal denominator and comparison results remain unchanged.", + "This checkpoint changes only the evaluation harness, fixtures and documentation. Native Rust/JS/platform/packaging gates were not rerun." + ], + "supportSha256": { + "java_field_capture.py": "535e43b75cc4aa09349f2086025781bd2301cca923571d9565659849a35c1c06", + "java_source_fields.py": "2ced23208ab1171d33ec00a6385fce34367a87c67d2cadef249650a1b8264e9b", + "java_oracle/FieldBindings.java": "0616d29730f77fc33a313e5c3280d6905c5435433f8e52ac4250ce2a8124e9d6", + "tests/test_java_source_fields.py": "b276d9e2be309c41a7102201deba709923db8e8cce74afa6ae3b635ecf130bd4", + "runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "state_access_audit.py": "2bf95b707f18f34c9df4461a26f011b83d86f166efacfaab652f8e6231161058" + }, + "artifactSha256": { + "capture-final/manifest.json": "6b9532e36846aa7c2df0ac799c1c9f01dbf8c5061dd3adfa5a0fbc8e8bb64d3a", + "capture-final/bindings.stdout": "4596b24d67fab7f728bc5dfe54e9b381fc42d411b9cb9042646cffbed420e95c", + "capture-final/bindings.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "capture-repeat/manifest.json": "9790bfc817fabd951e733f4a2b2381dfb03d8fba8c88c3f03a8ee7cf35e037ec", + "scope.stdout": "f9add7ff7e6b7158f6a0afdc8be51c439417952b7f4a26dad8eedd047484b1c6", + "scope-manifest.json": "35346f31a8bf1d6285dff4fe948445c08046f824b1e8671d486328429390f864", + "adversarial.stdout": "be9b847db2aa9a8a298c9fe2c91453250e3c8b2d8ba89dbca87c787e6f5f7967", + "adversarial-manifest.json": "258b27cf9637ac8e5f5f0af7705372bd1a459730f987fbbf652f8436bb8fe3b0", + "compass-review.json": "a08b07df8b4e22eebbd7934867fc188dd321a9fd97f93ccfcc6d49025f0be7a0", + "graphify-review.json": "7c7aa583a7ce0394f3bd2c1830a34e0d02cb618602d33feae035b9699e1137e1", + "final-tests.log": "df327030d1d1fc29759f586cf5a94946d0d121b4cec3784b2d51a06566d4159c", + "product-boundary.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "verify.py": "a43d8bb199b3625875c7470e34ef1bb0414ed135ce802e6e1f53c58ddbd695d6" + } +} diff --git a/benchmarks/agent_query/java_source_fields.py b/benchmarks/agent_query/java_source_fields.py new file mode 100644 index 000000000..01ce838d9 --- /dev/null +++ b/benchmarks/agent_query/java_source_fields.py @@ -0,0 +1,290 @@ +"""Replay public-JDK source field bindings and compare frozen native graphs. + +Development evidence only. Exact occurrences, targets and owners are distinct +from graph consistency, line-only support, read/write effects and design quality. +The compiler is needed for capture, never for offline replay or product runtime. +""" +import argparse +from array import array +from bisect import bisect_right +from collections import Counter, defaultdict +import hashlib +import json +from pathlib import Path + +from benchmarks.agent_query.state_access_audit import read, name, anchor, MAX_GRAPH_BYTES + +MAX_SOURCE = 4 * 1024 * 1024 +MAX_CAPTURE = 16 * 1024 * 1024 +MAX_RECORDS = 100000 + + +def sha(path, limit=MAX_CAPTURE): + return hashlib.sha256(read(Path(path), limit)).hexdigest() + + +def utf16_to_bytes(text): + """Map Java character positions to UTF-8 bytes; reject split surrogates.""" + result = array('q', [0]) + total = 0 + for char in text: + if ord(char) > 0xffff: + result.append(-1) + total += len(char.encode('utf-8')) + result.append(total) + return result + + +def position(mapping, value): + if type(value) is not int or not 0 <= value < len(mapping) or mapping[value] < 0: + raise ValueError('invalid UTF-16 source boundary') + return mapping[value] + + +def load_capture(path, root, source_hashes): + if not 0 < len(source_hashes) <= 512: + raise ValueError('source count limit') + sources, mappings, lines = {}, {}, {} + root = root.resolve() + total = 0 + for file, digest in source_hashes.items(): + p = (root / file).resolve() + p.relative_to(root) + raw = read(p, MAX_SOURCE) + total += len(raw) + if total > 64 * 1024 * 1024 or hashlib.sha256(raw).hexdigest() != digest: + raise ValueError('source drift or byte limit') + sources[file] = raw + mappings[file] = utf16_to_bytes(raw.decode('utf-8')) + lines[file] = [0] + [i + 1 for i, byte in enumerate(raw) if byte == 10] + rows = [json.loads(line) for line in read(path, MAX_CAPTURE).splitlines()] + if not 2 <= len(rows) <= MAX_RECORDS: + raise ValueError('capture record count') + header, complete = rows[0], rows[-1] + if (header.get('type') != 'header' or header.get('schema') != 'compass.javac-field-bindings/1' + or header.get('positionEncoding') != 'UTF-16 code units' + or header.get('files') != len(sources) or header.get('sourceBytes') != total + or complete.get('type') != 'complete' or complete.get('unboundExpressions') != 0): + raise ValueError('incomplete or incompatible compiler capture') + + def declaration(raw): + if raw is None: + return None + item = dict(raw) + file = item['file'] + mapping = mappings[file] + start, end = position(mapping, item['startUtf16']), position(mapping, item['endUtf16']) + if start >= end: + raise ValueError('empty declaration') + expected_id = f"{file}:{item['startUtf16']}:{item['endUtf16']}:{item['kind']}:{item['name']}" + if (item['id'] != expected_id or item['startLine'] != bisect_right(lines[file], start) + or item['endLine'] != bisect_right(lines[file], end - 1)): + raise ValueError('declaration identity/line mismatch') + item.update(startByte=start, endByte=end) + return item + + declarations, references, seen = {}, [], set() + for raw in rows[1:-1]: + if raw.get('type') == 'declaration': + item = declaration(raw['declaration']) + if item['id'] in declarations: + raise ValueError('duplicate declaration') + declarations[item['id']] = item + elif raw.get('type') == 'fieldReference': + item = dict(raw) + file = item['file'] + mapping = mappings[file] + a, b = position(mapping, item['expressionStartUtf16']), position(mapping, item['expressionEndUtf16']) + key = (file, a, b) + if a >= b or key in seen or item['line'] != bisect_right(lines[file], b - 1): + raise ValueError('duplicate or invalid field occurrence') + seen.add(key) + if item['anchorStatus'] == 'exact': + start, end = position(mapping, item['tokenStartUtf16']), position(mapping, item['tokenEndUtf16']) + if not a <= start < end <= b or sources[file][start:end].decode() != item['name']: + raise ValueError('field token mismatch') + item.update(startByte=start, endByte=end) + elif item['anchorStatus'] == 'unsupported-raw-spelling': + if item['tokenStartUtf16'] is not None or item['tokenEndUtf16'] is not None: + raise ValueError('unsupported anchor supplied coordinates') + item.update(startByte=None, endByte=None) + else: + raise ValueError('unknown anchor status') + item['target'] = declaration(item['target']) + item['owner'] = declaration(item['owner']) + if item.get('targetOrigin') not in {'source', 'external', 'array-length', 'class-literal'} or (item['targetOrigin'] == 'source') != bool(item['target']): + raise ValueError('invalid target origin') + item.update(expressionStartByte=a, expressionEndByte=b) + if item['target'] and item['target']['kind'] != item['targetKind']: + raise ValueError('target kind mismatch') + if item['owner'] and not (item['owner']['file'] == file + and item['owner']['startByte'] <= a < b <= item['owner']['endByte']): + raise ValueError('source owner does not contain occurrence') + references.append(item) + else: + raise ValueError('unknown capture record') + if complete.get('declarations') != len(declarations) or complete.get('fieldReferences') != len(references): + raise ValueError('compiler completion count mismatch') + for row in references: + for key in ('target', 'owner'): + if row[key] and declarations.get(row[key]['id']) != row[key]: + raise ValueError('unregistered compiler declaration') + return dict(header=header, complete=complete, declarations=declarations, references=references) + + +def compatible_kind(node, tool, declaration): + kind = declaration['kind'] + if tool == 'compass': + return node.get('kind') == { + 'enum_constant': 'enum_member', 'annotation_type': 'annotation', + }.get(kind, kind) + # Only use explicit native flags; absent type metadata is not invented. + if node.get('_callable_class'): + return kind in {'class', 'interface', 'enum', 'annotation_type', 'record'} + if node.get('_callable'): + return kind in {'method', 'constructor'} + return True + + +def join_declarations(graph, tool, declarations): + by_file_name = defaultdict(list) + for declaration in declarations.values(): + aliases = {declaration['name']} + if declaration['kind'] == 'constructor': + aliases.add(declaration['qualified'].rsplit('::', 1)[0].rsplit('.', 1)[-1]) + for alias in aliases: + by_file_name[declaration['file'], alias].append(declaration) + node_to_decls, decl_to_nodes = {}, defaultdict(list) + for node in graph['nodes']: + file, line = anchor(node, tool) + matches = [] + for declaration in by_file_name.get((file, name(node, tool)), []): + if not compatible_kind(node, tool, declaration): + continue + if tool == 'compass': + point = node.get('source', {}).get('startByte') + inside = type(point) is int and declaration['startByte'] <= point < declaration['endByte'] + else: + inside = type(line) is int and declaration['startLine'] <= line <= declaration['endLine'] + if inside: + matches.append(declaration['id']) + decl_to_nodes[declaration['id']].append(node['id']) + node_to_decls[node['id']] = sorted(matches) + return node_to_decls, {key: sorted(value) for key, value in decl_to_nodes.items()} + + +def compare(graph, tool, capture, files): + nodes = {node['id']: node for node in graph['nodes']} + if len(nodes) != len(graph['nodes']) or len(graph['nodes']) > 1000000 or len(graph['links']) > 5000000: + raise ValueError('duplicate node or graph size limit') + if any(e['source'] not in nodes or e['target'] not in nodes for e in graph['links']): + raise ValueError('missing graph endpoint') + declarations, references = capture['declarations'], capture['references'] + node_join, decl_join = join_declarations(graph, tool, declarations) + field_kinds = {'field', 'enum_constant'} + site_index = defaultdict(list) + for i, row in enumerate(references): + if row['startByte'] is not None: + site_index[row['file'], row['startByte'], row['endByte']].append(i) + contacts, matched = [], set() + for i, edge in enumerate(graph['links']): + if edge.get('kind' if tool == 'compass' else 'relation') not in {'references', 'reads', 'writes'}: + continue + target, source = nodes[edge['target']], nodes[edge['source']] + def is_field(node): + return (node.get('kind') in {'field', 'enum_member'} or node.get('symbol_kind') == 'field' + or any(declarations[d]['kind'] in field_kinds for d in node_join[node['id']])) + if not is_field(target): + if tool == 'graphify' and graph.get('directed') is False and is_field(source): + # Inventory an unordered contact in either stored orientation. + # It still has no exact/directed occurrence proof. + source, target = target, source + else: + continue + targets, owners = node_join[target['id']], node_join[source['id']] + site = edge.get('relationshipSite', {}) if tool == 'compass' else {} + file, line = ((site.get('file'), site.get('startLine')) if tool == 'compass' else anchor(edge, tool)) + if file not in files: + if file is not None or anchor(source, tool)[0] not in files: + continue + file = anchor(source, tool)[0] + expected = site_index.get((file, site.get('startByte'), site.get('endByte')), []) + status = 'unanchored' if not site else 'unmatched_occurrence' + if expected: + if len(expected) != 1: + status = 'ambiguous_occurrence' + elif len(targets) != 1 or len(decl_join.get(targets[0], [])) != 1: + status = 'unmapped_target' if not targets else 'ambiguous_target' + else: + row = references[expected[0]] + if row['target'] is None or row['target']['id'] != targets[0]: + status = 'wrong_target' + elif len(owners) != 1 or row['owner'] is None or len(decl_join.get(owners[0], [])) != 1: + status = 'unmapped_owner' if not owners else 'ambiguous_owner' + elif row['owner']['id'] != owners[0]: + status = 'wrong_owner' + else: + status = 'verified_target_and_owner' + matched.add(expected[0]) + contacts.append(dict(index=i, id=edge.get('id'), source=edge['source'], target=edge['target'], + file=file, line=line, site=site, graphDirected=graph.get('directed'), targetDeclarations=targets, + ownerDeclarations=owners, oracleReferences=expected, status=status)) + internal = [(i, row) for i, row in enumerate(references) if row['target']] + summary = {} + for kind in sorted(field_kinds): + rows = [(i, r) for i, r in internal if r['targetKind'] == kind] + fields = [d for d in declarations.values() if d['kind'] == kind] + summary[kind] = dict(occurrences=len(rows), exactTargetAndOwner=sum(i in matched for i, _ in rows), + declarations=len(fields), uniqueGraphDeclarations=sum(len(decl_join.get(d['id'], [])) == 1 for d in fields), + unsupportedAnchors=sum(r['startByte'] is None for _, r in rows)) + misses = [] + for i, row in internal: + if i in matched: + continue + target_candidates = decl_join.get(row['target']['id'], []) + owner_candidates = decl_join.get(row['owner']['id'], []) if row['owner'] else [] + misses.append(dict(oracleReference=i, file=row['file'], line=row['line'], name=row['name'], + target=row['target']['id'], owner=row['owner']['id'] if row['owner'] else None, + targetCandidates=target_candidates, ownerCandidates=owner_candidates)) + return dict(schema='compass.java-source-field-review/1', tool=tool, graphDirected=graph.get('directed'), identityPolicy='name/kind and byte region for Compass; explicit native flags and name/line region for Graphify; ambiguous joins never select a winner', + summary=summary, contactStatus=dict(sorted(Counter(c['status'] for c in contacts).items())), + contacts=contacts, misses=misses, declarationJoins=decl_join, + limits='Exact-span semantic evidence only. Line-only contacts remain unanchored and are not silently expanded into repeated occurrences. No inference about read/write effects, paths, cohesion, god-object defects or overall superiority.') + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--capture', type=Path, required=True) + parser.add_argument('--root', type=Path, required=True) + parser.add_argument('--manifest', type=Path, required=True) + parser.add_argument('--graph', type=Path) + parser.add_argument('--tool', choices=['compass', 'graphify']) + parser.add_argument('--output', type=Path, required=True) + parser.add_argument('--verify', action='store_true', help='recompute and compare an existing output') + args = parser.parse_args() + manifest = json.loads(read(args.manifest, MAX_CAPTURE)) + expected_hash = manifest.get('stdoutSha256', manifest.get('captureSha256')) + if not expected_hash or sha(args.capture) != expected_hash: + raise ValueError('capture drift or missing digest') + if manifest.get('exitCode', 0) != 0 or manifest.get('timedOut') or manifest.get('outputLimited'): + raise ValueError('failed or incomplete capture process') + capture = load_capture(args.capture, args.root, manifest['files']) + if args.graph: + if not args.tool: + parser.error('--graph requires --tool') + report = compare(json.loads(read(args.graph, MAX_GRAPH_BYTES)), args.tool, capture, manifest['files']) + report.update(graphSha256=sha(args.graph, MAX_GRAPH_BYTES)) + else: + report = capture + report.update(captureSha256=sha(args.capture), manifestSha256=sha(args.manifest), auditorSha256=sha(__file__)) + payload = (json.dumps(report, indent=2) + '\n').encode() + if args.verify: + if read(args.output, MAX_GRAPH_BYTES) != payload: + raise ValueError('replay differs from saved result') + else: + with args.output.open('xb') as output: + output.write(payload) + + +if __name__ == '__main__': + main() diff --git a/benchmarks/agent_query/java_state_access_development_registration.json b/benchmarks/agent_query/java_state_access_development_registration.json new file mode 100644 index 000000000..88213b22a --- /dev/null +++ b/benchmarks/agent_query/java_state_access_development_registration.json @@ -0,0 +1,17 @@ +{ + "schema": "compass.java-state-access-development-registration/1", + "baselineCommit": "716446141d8c1e9e0d945487b041d03f5e72e423", + "sourceRegistration": "benchmarks/agent_query/state_access_development_registration.json", + "sourceRegistrationSha256": "4805af71d9ae358fa65dba8394228d77a8203589f8f5201c20fe469c6aa3362d", + "scopeRegistration": "benchmarks/agent_query/java_state_scope_registration.json", + "scopeRegistrationSha256": "3a12b108736b5341ed09f0f9c66aa874e2612ef8d8e26afc542692fe0bdf445a", + "scope": "Java production field-access correction on known development subjects. Retain all 44 compiler scope cases and all 20 five-repository access sites; unsupported cases remain failures. Not held-out or god-object classification.", + "contract": "Emit exact field-only member-access occurrences using lexical value bindings and source-proven receiver types. Scope exit restores outer bindings; unsupported/ambiguous receivers never select an outer or same-named field. Keep qualified universal resolution and existing graph References projection. Preserve occurrences, method-selector exclusion and source anchors. Bounded inference; source/compiler limitations remain explicit.", + "evaluation": "Rebuild all five Compass graphs from the same pinned read-only sources; reuse unchanged Graphify graphs. Replay the unchanged 20-site auditor. Rebuild the compiler fixture and compare all 44 cases against the saved compiler oracle, retaining all extra/missing targets. Report complete graph deltas and community changes. Inspect every newly published jsoup field occurrence for field target/source-anchor consistency; this does not prove compiler-grade precision.", + "verification": [ + "Fail-before native regressions, lexical scope and ambiguous/unknown negatives", + "Cross-file resolution and publication tests with exact caller, field, direction, multiplicity and byte anchors", + "Cache invalidation and native baseline; production fixture qualification", + "Compiler scope fixture rerun and full five-repository state diagnostic with exact source/binary/graph hashes" + ] +} diff --git a/benchmarks/agent_query/java_state_access_development_review.json b/benchmarks/agent_query/java_state_access_development_review.json new file mode 100644 index 000000000..9c4fc0d30 --- /dev/null +++ b/benchmarks/agent_query/java_state_access_development_review.json @@ -0,0 +1,952 @@ +{ + "schema": "compass.java-state-access-development-review/1", + "scope": "Known development sources and fixed access sites. Full graph inventory, compiler fixture and separate known-ID-assisted public retrieval control. Not held-out, representative god-object classification, exhaustive edge precision, authored explanations, read/write effects, or overall superiority.", + "productCommit": "f2cacfebba15d69a738e7c14694d51320e4e07ba", + "registrationCommits": [ + "5c10c9d4", + "5548a864" + ], + "registrationSha256": "fd2de77260e0fdfcbf5f6f47f30d96037c183a87491d3b5468b3ba309d16e773", + "sourceRegistrationSha256": "4805af71d9ae358fa65dba8394228d77a8203589f8f5201c20fe469c6aa3362d", + "scopeRegistrationSha256": "3a12b108736b5341ed09f0f9c66aa874e2612ef8d8e26afc542692fe0bdf445a", + "publicRegistrationSha256": "b20a8aabce091f8a3c57d25878cc97cdebd25bdfaa7e3a76074e75fc4476228a", + "artifactDirectory": "java-state-access-02", + "sourceSha256": { + "crates/compass-resolve/src/evidence/languages/java.rs": "949d444ed0eee178a2b11a46738ceb0fdad6ca0dbf52963960bc41b6f4b08861", + "crates/compass-resolve/src/evidence/languages/policy.rs": "d8dc456079c763d21c2a7cd8d3fc71d625f8087c24b87ca225321ac6d35fc2e0", + "crates/compass-languages/src/evidence/build/java_fields.rs": "22aeb543e345846fc72b22fca8bef3a1c5bd399d1048b5b6fabefb7a84dc73e9", + "crates/compass-languages/src/evidence/build.rs": "5c5efdcf5d3b738e9aa6b6382f59738c75cd8f21aa462c7e5a3b155197860898", + "crates/compass-files/src/cache.rs": "5c207692609e4c1da2285ec804eaedccce19229b9ee1a3971020ec15a1c40d77", + "crates/compass-files/tests/contracts.rs": "3a34cf1c6784d738bfede178a08e209d376c5b956a903a6614fd8db7e1a27fed", + "crates/compass-languages/tests/java_field_access.rs": "3196df595bd2af0a39e5b62db0f3e40c3210e60a911b530f3cf02acdcd519be9", + "crates/compass-resolve/tests/java_field_access.rs": "2658e695530f3b7b10d71094761370dbda9a82127a292edc3ff8565118c3effe" + }, + "compassBinarySha256": "5f6ff5f9b7b13866fdc7435e7a05888d3a95a0b23636be89cf45bc3478660139", + "graphResults": { + "compass": { + "accessSites": 20, + "uniqueCallableSites": 20, + "uniqueStateSlots": 6, + "contactSupported": 8, + "selectedLineSupported": 8, + "status": { + "contact_edge": 8, + "missing_state": 8, + "no_contact_edge": 4 + } + }, + "graphify": { + "accessSites": 20, + "uniqueCallableSites": 20, + "uniqueStateSlots": 0, + "contactSupported": 0, + "selectedLineSupported": 0, + "status": { + "missing_state": 20 + } + } + }, + "graphDeltas": [ + { + "repository": "chi", + "oldGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "newGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "nodesBefore": 729, + "nodesAfter": 729, + "edgesBefore": 1914, + "edgesAfter": 1914, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 0, + "addedEdges": 0, + "removedEdges": 0, + "changedEdges": 0 + }, + { + "repository": "click", + "oldGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "newGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "nodesBefore": 4264, + "nodesAfter": 4264, + "edgesBefore": 6387, + "edgesAfter": 6387, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 0, + "addedEdges": 0, + "removedEdges": 0, + "changedEdges": 0 + }, + { + "repository": "jsoup", + "oldGraphSha256": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "newGraphSha256": "2a9216926b1c5dfc82e4f88df0cce24a7a14ac67aa2a350158eff39018145314", + "nodesBefore": 6116, + "nodesAfter": 6116, + "edgesBefore": 21110, + "edgesAfter": 25006, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 5567, + "addedEdges": 3896, + "removedEdges": 0, + "changedEdges": 0 + }, + { + "repository": "redux", + "oldGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "newGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "nodesBefore": 3503, + "nodesAfter": 3503, + "edgesBefore": 5653, + "edgesAfter": 5653, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 0, + "addedEdges": 0, + "removedEdges": 0, + "changedEdges": 0 + }, + { + "repository": "walkdir", + "oldGraphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "newGraphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "nodesBefore": 288, + "nodesAfter": 288, + "edgesBefore": 1380, + "edgesAfter": 1380, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 0, + "addedEdges": 0, + "removedEdges": 0, + "changedEdges": 0 + } + ], + "scopeResults": { + "compass": { + "fieldDeclarations": 14, + "uniqueFields": 12, + "missingFields": 2, + "ambiguousFields": 0, + "fieldContactRecords": 39, + "registeredFieldOccurrences": 45, + "occurrenceTargetsMatched": 39, + "negativeCases": 8, + "negativeCasesWithContact": 0, + "callerOwnershipScored": false, + "edgePrecision": null + }, + "graphify": { + "fieldDeclarations": 14, + "uniqueFields": 0, + "missingFields": 14, + "ambiguousFields": 0, + "fieldContactRecords": 0, + "registeredFieldOccurrences": 45, + "occurrenceTargetsMatched": 0, + "negativeCases": 8, + "negativeCasesWithContact": 0, + "callerOwnershipScored": false, + "edgePrecision": null + } + }, + "scopeMissingOrUnexpected": { + "compass": [ + { + "id": "super_field", + "expected": [ + "base_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "static_fields", + "expected": [ + "scope_static", + "scope_static" + ], + "matched": 1, + "unexpected": [] + }, + { + "id": "inherited_beats_outer", + "expected": [ + "base_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "anonymous_this", + "expected": [ + "anonymous_value", + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "local_class_this", + "expected": [ + "local_value" + ], + "matched": 0, + "unexpected": [] + } + ], + "graphify": [ + { + "id": "constructor", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "explicit_this", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "implicit_this", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "repeated", + "expected": [ + "scope_value", + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "block_before", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "block_after", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "before_local", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "for_after", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "enhanced_iterable", + "expected": [ + "scope_items" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "enhanced_binding", + "expected": [ + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "enhanced_after", + "expected": [ + "scope_slot", + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "lambda_this", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "lambda_implicit", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "catch_after", + "expected": [ + "scope_failure" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "resource_binding", + "expected": [ + "token_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "resource_catch", + "expected": [ + "scope_resource", + "token_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "resource_after", + "expected": [ + "scope_resource", + "token_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "pattern_true", + "expected": [ + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "pattern_after", + "expected": [ + "scope_slot", + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "pattern_input", + "expected": [ + "scope_pattern" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "pattern_flow", + "expected": [ + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "typed_parameter", + "expected": [ + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "cast_receiver", + "expected": [ + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "field_chain", + "expected": [ + "scope_slot", + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "array_receiver", + "expected": [ + "scope_items", + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "super_field", + "expected": [ + "base_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "declared_receiver", + "expected": [ + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "hiding_receiver", + "expected": [ + "shadow_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "generic_bound", + "expected": [ + "cell_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "static_fields", + "expected": [ + "scope_static", + "scope_static" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "declarator_order", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "inner_own", + "expected": [ + "inner_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "qualified_this", + "expected": [ + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "inherited_beats_outer", + "expected": [ + "base_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "anonymous_this", + "expected": [ + "anonymous_value", + "scope_value" + ], + "matched": 0, + "unexpected": [] + }, + { + "id": "local_class_this", + "expected": [ + "local_value" + ], + "matched": 0, + "unexpected": [] + } + ] + }, + "scopeCallerConsistency": { + "schema": "compass.java-scope-caller-consistency/1", + "scope": "Post-capture compiler/graph consistency check on the registered synthetic fixture; not a newly blinded score. Original target/line inventory remains unchanged. Compiler lambda body names map to the enclosing source method, whose source extent must contain the access. All fixture callable names are unambiguous; no general overload identity adapter is claimed.", + "oracleSha256": "38fb8d38bccbc395cd06e5ec42fa7edcd7735f9ef4839e9a727d4a2af851a1e7", + "graphSha256": "9ba95283221028543ba431e6fb8ce6f3e0b33e46f7558aa71147488d2c94ad61", + "verifiedOccurrences": 39, + "missingOccurrences": 6 + }, + "addedOccurrenceConsistency": 3896, + "fieldInitializerOwnership": 26, + "publicResults": { + "compass": { + "tasks": 4, + "fieldNeighborIdentity": 4, + "selectedLineAnchored": 4, + "textBytes": 9883, + "wireBytes": 108999 + }, + "graphify": { + "tasks": 4, + "fieldNeighborIdentity": 0, + "selectedLineAnchored": 0, + "textBytes": 3313, + "wireBytes": 3708 + } + }, + "communityImpact": { + "scope": "Co-membership stability diagnostic, not responsibility quality or god-object classification.", + "beforeGraphSha256": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "afterGraphSha256": "2a9216926b1c5dfc82e4f88df0cce24a7a14ac67aa2a350158eff39018145314", + "nodes": 6116, + "communitiesBefore": 41, + "communitiesAfter": 42, + "unassignedBefore": 0, + "unassignedAfter": 0, + "pairsBefore": 1110372, + "pairsAfter": 1077153, + "retained": 796307, + "separated": 314065, + "joined": 280846 + }, + "communityTasks": { + "before": { + "compass": { + "cross_task": { + "same_community": 18, + "different_community": 42, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 6, + "different_community": 38, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 12, + "different_community": 4, + "unresolved": 0 + }, + "within_task": { + "same_community": 13, + "different_community": 2, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 11, + "different_community": 2, + "unresolved": 0 + } + }, + "graphify": { + "cross_task": { + "same_community": 12, + "different_community": 48, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 0, + "different_community": 44, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 12, + "different_community": 4, + "unresolved": 0 + }, + "within_task": { + "same_community": 12, + "different_community": 3, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 10, + "different_community": 3, + "unresolved": 0 + } + } + }, + "after": { + "compass": { + "cross_task": { + "same_community": 18, + "different_community": 42, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 6, + "different_community": 38, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 12, + "different_community": 4, + "unresolved": 0 + }, + "within_task": { + "same_community": 13, + "different_community": 2, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 11, + "different_community": 2, + "unresolved": 0 + } + }, + "graphify": { + "cross_task": { + "same_community": 12, + "different_community": 48, + "unresolved": 0 + }, + "cross_task/cross_file": { + "same_community": 0, + "different_community": 44, + "unresolved": 0 + }, + "cross_task/same_file": { + "same_community": 12, + "different_community": 4, + "unresolved": 0 + }, + "within_task": { + "same_community": 12, + "different_community": 3, + "unresolved": 0 + }, + "within_task/cross_file": { + "same_community": 2, + "different_community": 0, + "unresolved": 0 + }, + "within_task/same_file": { + "same_community": 10, + "different_community": 3, + "unresolved": 0 + } + } + }, + "changedPairs": [] + }, + "superseded": { + "directory": "java-state-access-01", + "reason": "Interim product 09ca58e6 selected an imported type over a member type; compiler proof and two failing native cases retained. Duplicate nominal receiver types also selected by field availability in a separate failing regression. Both fixed before final rerun. Interrupted qualification was not counted as passed." + }, + "checks": { + "preflight-clippy": { + "argv": [ + "cargo", + "clippy", + "-p", + "compass-languages", + "-p", + "compass-resolve", + "--test", + "java_field_access", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 0.31, + "reportSha256": "cdb84eaedadb049bd41ba65fc24565fc8ae8587b642abc9bb96432990f7f4895", + "logSha256": "9ae36bb22d8f0f810a77044760863f70b81405396a32cce477ec08eecd4e6d59" + }, + "fmt": { + "argv": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "seconds": 3.51, + "reportSha256": "4d4bdcbd582b918f68b4371c94cda442736723f41f71a440c7d0e2bc8b339fbe", + "logSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "build": { + "argv": [ + "cargo", + "build", + "-p", + "compass-cli", + "--bin", + "compass", + "--locked" + ], + "exitCode": 0, + "seconds": 40.96, + "reportSha256": "74dda0666605c13b90e3563e194ce541ee8a3304190c7d724d9a372a6f15e839", + "logSha256": "84b2cf417c28401956d22a63c60f5f78e4a03a88db1b4f3ba1499cd74ab1babf" + }, + "language-tests": { + "argv": [ + "cargo", + "test", + "-p", + "compass-languages", + "--test", + "java_field_access", + "--test", + "java_varargs", + "--test", + "java_universal_conformance", + "--locked" + ], + "exitCode": 0, + "seconds": 3.43, + "reportSha256": "ec2f2414ab76b5c12bddb03d4581af4d02267735e36163573ec3ebcbf59a7ba4", + "logSha256": "fc4f1e7ded1ca61f180e3dd7d90ae20fddd8d32e5aa9f7c6ba84fd0c2d549da9", + "testCounts": { + "passed": 27, + "failed": 0, + "ignored": 0 + } + }, + "resolver-tests": { + "argv": [ + "cargo", + "test", + "-p", + "compass-resolve", + "--test", + "java_field_access", + "--test", + "universal_evidence", + "--test", + "universal_resolution", + "--test", + "java_constructor_receivers", + "--test", + "java_varargs", + "--test", + "java_varargs_phases", + "--locked" + ], + "exitCode": 0, + "seconds": 6.78, + "reportSha256": "39e376e1cccd147887502478f8943a2ee35244efb71958eaf9cb95d714c4fc97", + "logSha256": "b8fdd62e9ebbae5540ace5e4ed95c947788629e393ab4b2b5ef895af6ddf0462", + "testCounts": { + "passed": 244, + "failed": 0, + "ignored": 0 + } + }, + "cache-tests": { + "argv": [ + "cargo", + "test", + "-p", + "compass-files", + "--test", + "contracts", + "--locked" + ], + "exitCode": 0, + "seconds": 1.19, + "reportSha256": "1cd1b1c3853fda02ea5cec11b44fb600bcb0c2de3036aaa6934f7d93e40238ac", + "logSha256": "e11e4f830f7e35a2fc7c7cace36ceaa556ab16c33226bbdf8f45e3cb5fa9c38a", + "testCounts": { + "passed": 33, + "failed": 0, + "ignored": 0 + } + }, + "clippy": { + "argv": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 19.87, + "reportSha256": "1994e48a3a5077f04b7dd885e324e9bd0a94e28a9e1f39cf6f3476ec49ab629b", + "logSha256": "6f15f3038220fcb1ed187df07944d683ff66e6ff78b8a36c0e776388ae9af8af" + }, + "focused-clippy": { + "argv": [ + "cargo", + "clippy", + "-p", + "compass-languages", + "-p", + "compass-resolve", + "--test", + "java_field_access", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 0.35, + "reportSha256": "ff991cb8170f78e713662fea13be0d76badf53bdcc7f1514fc84d26d0b0e27be", + "logSha256": "59e339d2aa27cd2222fead9549dbc67b0a6e0d10e368fb0ddf49b9c9ba0ac0a3" + }, + "workspace-tests": { + "argv": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "seconds": 82.84, + "reportSha256": "be6d154bc770da4cdca83d5f28c5cd2688a6b85120eda17098cab160e815c6c9", + "logSha256": "36bfc8e761abce7e729a795b6236eaac6e076249eb3122c365754f1ba2ecd4fa", + "testCounts": { + "passed": 1106, + "failed": 0, + "ignored": 2 + } + }, + "product-tests": { + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "seconds": 3.47, + "reportSha256": "a3880eca791cd111a56398188a7ff225774098c03c34c0991209af16de8132c7", + "logSha256": "27cc488ba8d06463219c6cb54a7766883fbc375c51dcae91e6a324a2db1584e5", + "testCounts": { + "passed": 9, + "failed": 0, + "ignored": 0 + } + }, + "boundary": { + "argv": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "seconds": 0.1, + "reportSha256": "babb0ce0501376cea10d60722855d84c56ba3169822708f8a522f9b07c0efcd1", + "logSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "fixtures": { + "argv": [ + "bash", + "scripts/qualify_code_graph_v1.sh", + "--fixtures-only" + ], + "exitCode": 0, + "seconds": 666.34, + "reportSha256": "e156b76e25ef0cf0d571d5deff6354eb507bd694c42469638c51685fa3878bb3", + "logSha256": "dd6613ebd79db8ecd945a58f98b64b8c0806314eedb02b9619049446ca9262e9", + "testCounts": { + "passed": 6, + "failed": 0, + "ignored": 0 + } + }, + "benchmarks": { + "argv": [ + "python3", + "-m", + "unittest", + "discover", + "-s", + "benchmarks/agent_query/tests" + ], + "exitCode": 0, + "seconds": 2.04, + "reportSha256": "d06c8f8c4ec3eca2430ef69b18361dddf60c74720d17dbf824f1366b0560eb09", + "logSha256": "729939fb1dec4ad2b7023ded51a5676a1903ebe417b65092f82f8133af5021aa" + } + }, + "artifactSha256": { + "run.json": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "review.json": "e9a01c941adc0c7d42a414ee714f8fc2378527c474f093a8b5095d74cc23d25f", + "verification.json": "dc7125509ffd7cf8032e63f7eddf8ec6611b27ca17c6a3044abb078e6debc746", + "scope-graphs.json": "b814930e4045cbe975765bdea277f8443cf26d435c4a6594560ac989c94eada8", + "scope-review.json": "a4447e67ce4fc99f781d37575ff8d8e75e9a89190820dcf90f7ecaa3b99d41b4", + "scope-caller-consistency.json": "8e2ff407ed288d9f26bc234f39e39dd27e372b4671aa7a0f1cd00fc45579b50a", + "public-capture.json": "7319b09d0b3c8fa01cddf4a36c1768975433623e31a5668bd73e84c421844bda", + "added-occurrence-consistency.json": "64287f4b09c871b98eae8bbda9d8f9c164cefac9952f3e3eb5a13c7c28b69a20", + "initializer-ownership.json": "42fff2ea76ff7dc1149acce39971f1897dfa2bef3eb1ba62d7e202387ae90b73", + "community-task-impact.json": "0ff221fee89d464db723f1ac8105f353b5ad9fa050a4052712ef014db80be011", + "community-impact.json": "db6c2f9d4fe1fa98da6568bfe6f47902c182c9491e710d6729690a2c897938b1", + "post-counterexample-delta.json": "d455a9d9c0e66d8dc4128f3925aae64492782c39c34d7f9f4bbda8b3434d936a", + "post-counterexample-source-review.json": "00e3aa8f2852bbe2227eb831ca037466d14fad2ead946213f006d35b7a37a5b4", + "precedence.json": "a8614a2c881b41b99afc3b90c422f98d4055da77b6e619467f82c30f5c7644f5", + "evaluate.py": "624a1483480829e1bada5b9858fdc47da64c616ca2e24d506be7fb72bf1bace6", + "scope.py": "c7fafb80c80f9a58baf6cbb2d3b494abc00851881c5a4acb242550cf41d06dfa", + "public.py": "da5a67dbea7ec84b5ff651c52d94d9f5c6afe2182c48b6e51210808dc6c17c39", + "verify.py": "061b40a069d788087bd1c06605565fcc4d21e312a66707ae6738cf8f72761454", + "verify-scope.py": "d39d18cc94102a47f65e4d5d57802c86c468b9322e78ac03a9c4609d51d77aa2", + "initializer-audit.py": "ff793fb6b8ffc93d80a6e6753556a430f8d4f1701398cacdd375431801813a00", + "initializer_ast.rs": "1d44c3f61bbb2a11766dbce28b4fef54d65a49dcc41196ab861accecc75cc32b", + "community-replay.py": "ebcab25f8453955ce80fa0a171d9b862a8a1b766562219c2d2b387c74b8fa165", + "community-impact.py": "bc62e80b990b2dbca98e8cfb0f458e17c118707e0b61e244ff11ab5ed3150620", + "precedence.py": "0b431b5174a11d82b700419b6b22e9d959c760e34feb3ba327393ef043ab6845", + "run.py": "e7e01fedde8cebd9b9994d59e58bbdaacc343d93a3076ffadb3349cacc12368b", + "validate-final.py": "623ca47c24b9e1882a3effde9093d5fb95d7b6e0c21592f824a8f2440c01841e" + } +} diff --git a/benchmarks/agent_query/java_state_access_public_registration.json b/benchmarks/agent_query/java_state_access_public_registration.json new file mode 100644 index 000000000..899e0ddcd --- /dev/null +++ b/benchmarks/agent_query/java_state_access_public_registration.json @@ -0,0 +1,65 @@ +{ + "schema": "compass.java-state-access-public-registration/1", + "registrationCommit": "09ca58e6a92ee6ec5045e7cbde14300d136b9e6a", + "scope": "Known-ID-assisted development retrieval control. Registered after implementation/native regressions, before rebuilt real-repository graphs or public responses are inspected. No identity-discovery, authored-answer, held-out or overall-superiority claim.", + "sourceRegistration": "benchmarks/agent_query/state_access_development_registration.json", + "sourceRegistrationSha256": "4805af71d9ae358fa65dba8394228d77a8203589f8f5201c20fe469c6aa3362d", + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "tasks": [ + { + "owner": "Cleaner", + "state": "safelist", + "access": { + "method": "Cleaner", + "methodLine": 50, + "line": 52, + "column": 9, + "expression": "this.safelist", + "operation": "write", + "text": " this.safelist = safelist;" + } + }, + { + "owner": "Cleaner", + "state": "safelist", + "access": { + "method": "createSafeElement", + "methodLine": 188, + "line": 197, + "column": 17, + "expression": "safelist", + "operation": "read", + "text": " if (safelist.isSafeAttribute(sourceTag, sourceEl, sourceAttr)) { // will keep this attr" + } + }, + { + "owner": "CleaningVisitor", + "state": "destination", + "access": { + "method": "CleaningVisitor", + "methodLine": 143, + "line": 145, + "column": 13, + "expression": "this.destination", + "operation": "write", + "text": " this.destination = destination;" + } + }, + { + "owner": "CleaningVisitor", + "state": "destination", + "access": { + "method": "head", + "methodLine": 148, + "line": 158, + "column": 21, + "expression": "destination", + "operation": "write", + "text": " destination = destChild;" + } + } + ], + "policy": "For each source-validated callable, provide each tool its own exact graph ID as task input and issue one public MCP get_neighbors call without relation filtering. Preserve native defaults, all errors, truncation and full response bytes; no retries or source follow-ups. Score field identity separately from selected-line anchors. Verify Compass full-node/parallel-record response against the graph; report payload costs without an efficiency claim. Reuse unchanged baseline Graphify graphs and the new Compass jsoup graph." +} diff --git a/benchmarks/agent_query/java_state_scope_audit.py b/benchmarks/agent_query/java_state_scope_audit.py new file mode 100644 index 000000000..78a8b73ee --- /dev/null +++ b/benchmarks/agent_query/java_state_scope_audit.py @@ -0,0 +1,411 @@ +"""Compiler-backed Java field-scope development oracle, separate from product CI. + +Requires a supplied installed JDK only when capturing. Never executes Java fixture +code. Verification replays bounded, hashed class files and javap transcripts. +This is not a general Java bytecode analyzer or a real-repository scorecard. +""" +import argparse +from collections import Counter +import hashlib +import json +from pathlib import Path +import re +import struct + +from benchmarks.agent_query.runner import run_bounded +from benchmarks.agent_query.state_access_audit import MAX_GRAPH_BYTES, candidates, occurrence, read + +LIMIT = 4 * 1024 * 1024 +MAX_CLASSES = 64 + + +def support_hashes(): + return {name: sha(Path(__file__).with_name(name)) + for name in ('runner.py', 'state_access_audit.py')} + + +def sha(path): + return hashlib.sha256(read(path, LIMIT)).hexdigest() + + +def registration(path): + data = json.loads(read(path, LIMIT)) + if data['schema'] != 'compass.java-state-scope-registration/1': + raise ValueError('unknown registration schema') + source = Path(data['source']) + if sha(source) != data['sourceSha256']: + raise ValueError('source hash mismatch') + lines = read(source, LIMIT).decode().splitlines() + ids, sites = set(), set() + for case in data['cases']: + if case['id'] in ids or case['line'] in sites: + raise ValueError('duplicate case identity or source line') + ids.add(case['id']) + sites.add(case['line']) + if lines[case['line'] - 1] != case['text']: + raise ValueError('case source witness mismatch') + if any(field not in data['fields'] for field in case['expectedFields']): + raise ValueError('unknown expected field') + for field in data['fields'].values(): + if lines[field['line'] - 1] != field['text']: + raise ValueError('field source witness mismatch') + return data + + +class ClassReader: + """Read only constant pool, ancestry and field metadata; no code execution.""" + def __init__(self, data): + if len(data) > LIMIT: + raise ValueError('oversized class') + self.data, self.position = data, 0 + + def take(self, size): + end = self.position + size + if end > len(self.data): + raise ValueError('truncated class') + data, self.position = self.data[self.position:end], end + return data + + def u2(self): + return struct.unpack('>H', self.take(2))[0] + + def parse(self): + if self.take(4) != b'\xca\xfe\xba\xbe': + raise ValueError('invalid class magic') + minor, major = self.u2(), self.u2() + pool = [None] * self.u2() + index = 1 + while index < len(pool): + tag = self.take(1)[0] + if tag == 1: + # Fixture identifiers are ASCII; reject unsupported modified UTF-8. + pool[index] = self.take(self.u2()).decode('utf-8') + elif tag in (7, 8, 16, 19, 20): + pool[index] = (tag, self.u2()) + elif tag in (3, 4, 9, 10, 11, 12, 17, 18): + self.take(4) + elif tag in (5, 6): + self.take(8) + index += 1 + elif tag == 15: + self.take(3) + else: + raise ValueError(f'unsupported constant tag {tag}') + index += 1 + + def string(index): + if not 0 < index < len(pool) or not isinstance(pool[index], str): + raise ValueError('invalid string constant') + return pool[index] + + def class_name(index): + if index == 0: + return None + if not 0 < index < len(pool) or not isinstance(pool[index], tuple) or pool[index][0] != 7: + raise ValueError('invalid class constant') + return string(pool[index][1]).replace('/', '.') + + self.u2() # Class flags are irrelevant to field identity. + owner, parent = class_name(self.u2()), class_name(self.u2()) + interfaces = [class_name(self.u2()) for _ in range(self.u2())] + fields = [] + for _ in range(self.u2()): + flags, name, descriptor = self.u2(), string(self.u2()), string(self.u2()) + synthetic = bool(flags & 0x1000) + for _ in range(self.u2()): + attribute = string(self.u2()) + size = struct.unpack('>I', self.take(4))[0] + self.take(size) + synthetic |= attribute == 'Synthetic' + fields.append(dict(name=name, descriptor=descriptor, synthetic=synthetic)) + return dict(owner=owner, parent=parent, interfaces=interfaces, fields=fields, + major=major, minor=minor) + + +def parse_javap(text, owner): + """Associate each field instruction with the preceding bytecode line entry.""" + methods, current = [], None + for line in text.splitlines(): + # -p -c -l -s emits two-space declaration headers and deeper code. + if re.match(r'^ \S', line): + if '(' in line and line.endswith(';'): + current = dict(method=line.strip(), instructions=[], lines=[], offsets=[]) + methods.append(current) + elif line == ' static {};': + current = dict(method='', instructions=[], lines=[], offsets=[]) + methods.append(current) + else: + current = None + if current is None: + continue + instruction = re.match(r'^\s+(\d+):\s+(\w+)\b', line) + if instruction: + offset, opcode = int(instruction[1]), instruction[2] + current['offsets'].append(offset) + if opcode in {'getfield', 'putfield', 'getstatic', 'putstatic'}: + field = re.search(r'// Field ([^: ]+):([^ ]+)\s*$', line) + if not field: + raise ValueError('unrecognized field instruction') + reference = field[1].replace('/', '.') + target_owner, _, name = reference.rpartition('.') + current['instructions'].append(dict(offset=offset, opcode=opcode, + owner=target_owner or owner, name=name, descriptor=field[2], raw=line)) + entry = re.fullmatch(r'\s+line (\d+): (\d+)', line) + if entry: + current['lines'].append((int(entry[2]), int(entry[1]))) + if not methods: + raise ValueError('no methods in javap output') + occurrences, covered = [], set() + for method in methods: + offsets = method['offsets'] + if offsets != sorted(set(offsets)): + raise ValueError('duplicate or unordered instruction offsets') + line_map = sorted(method['lines']) + if len({offset for offset, _ in line_map}) != len(line_map): + raise ValueError('ambiguous line mapping') + if any(offset not in offsets for offset, _ in line_map): + raise ValueError('line mapping outside instructions') + covered.update(line for _, line in line_map) + for instruction in method['instructions']: + preceding = [entry for entry in line_map if entry[0] <= instruction['offset']] + if not preceding: + raise ValueError('field instruction missing source line') + occurrences.append(dict(instruction, line=preceding[-1][1], + method=method['method'], bytecodeClass=owner)) + return occurrences, covered + + +def field_declaration(classes, owner, name, descriptor): + """JVM field resolution: declared field, interfaces, then superclass. + + This fixture has no interface fields. Reject multiple interface matches + instead of treating inheritance order as source-level disambiguation. + """ + def find(current, visiting): + if current in visiting or len(visiting) >= MAX_CLASSES: + raise ValueError('cyclic or excessive field hierarchy') + if current not in classes: + return [] + cls = classes[current] + direct = [dict(field, owner=current) for field in cls['fields'] + if field['name'] == name and field['descriptor'] == descriptor] + if direct: + return direct + visiting = visiting | {current} + interfaces = [field for interface in cls['interfaces'] for field in find(interface, visiting)] + return interfaces or find(cls['parent'], visiting) + result = find(owner, set()) + if len(result) != 1: + raise ValueError(f'field declaration missing or ambiguous: {owner}.{name}:{descriptor}') + return result[0] + + +def capture(reg_path, directory, java_home): + reg = registration(reg_path) + directory.mkdir(parents=True, exist_ok=False) + commands = [] + + def run(name, argv): + result = run_bounded(tuple(map(str, argv)), cwd=Path.cwd(), timeout_seconds=60, + stdout_path=directory / f'{name}.stdout', stderr_path=directory / f'{name}.stderr') + commands.append(dict(argv=list(result.argv), exitCode=result.exit_code, + timedOut=result.timed_out, outputLimited=result.output_limited, + stdout=f'{name}.stdout', stderr=f'{name}.stderr')) + if result.exit_code or result.timed_out or result.output_limited: + raise ValueError(f'command failed; preserved logs: {name}') + + javac, javap = java_home / 'bin/javac', java_home / 'bin/javap' + run('compiler-version', [javac, '-version']) + run('javac', [javac, '--release', '17', '-proc:none', '-implicit:none', + '-g:lines,vars,source', '-d', directory / 'classes', Path(reg['source']).resolve()]) + files = sorted((directory / 'classes').rglob('*.class')) + if not 0 < len(files) <= MAX_CLASSES: + raise ValueError('invalid class count') + artifacts = [] + for index, path in enumerate(files): + cls = ClassReader(read(path, LIMIT)).parse() + name = f'class-{index:02}' + run(name, [javap, '-p', '-c', '-l', '-s', '-classpath', directory / 'classes', cls['owner']]) + artifacts.append(dict(owner=cls['owner'], binary=str(path.relative_to(directory)), + disassembly=f'{name}.stdout')) + hashes = {str(path.relative_to(directory)): sha(path) + for path in sorted(directory.rglob('*')) if path.is_file()} + manifest = dict(schema='compass.java-state-scope-capture/1', + registrationSha256=sha(reg_path), sourceSha256=reg['sourceSha256'], + jdkRelease=read(java_home / 'release', LIMIT).decode(), + compilerSha256=sha(javac), disassemblerSha256=sha(javap), + commands=commands, classes=artifacts, hashes=hashes) + (directory / 'capture.json').write_text(json.dumps(manifest, indent=2) + '\n') + registration(reg_path) # Reject concurrent fixture changes. + + +def evaluate(reg_path, directory): + reg = registration(reg_path) + manifest = json.loads(read(directory / 'capture.json', LIMIT)) + if (manifest['schema'] != 'compass.java-state-scope-capture/1' + or manifest['registrationSha256'] != sha(reg_path) + or manifest['sourceSha256'] != reg['sourceSha256']): + raise ValueError('capture registration mismatch') + for name, expected in manifest['hashes'].items(): + path = (directory / name).resolve() + path.relative_to(directory.resolve()) + if sha(path) != expected: + raise ValueError('capture file hash mismatch') + if not manifest['commands'] or any(c['exitCode'] or c['timedOut'] or c['outputLimited'] + for c in manifest['commands']): + raise ValueError('unsuccessful capture') + classes, occurrences, covered = {}, [], set() + if not 0 < len(manifest['classes']) <= MAX_CLASSES: + raise ValueError('invalid class count') + for artifact in manifest['classes']: + if any(artifact[k] not in manifest['hashes'] for k in ('binary', 'disassembly')): + raise ValueError('unhashed class input') + cls = ClassReader(read(directory / artifact['binary'], LIMIT)).parse() + if cls['owner'] != artifact['owner'] or cls['owner'] in classes: + raise ValueError('class identity mismatch') + classes[cls['owner']] = cls + found, lines = parse_javap(read(directory / artifact['disassembly'], LIMIT).decode(), cls['owner']) + occurrences.extend(found) + covered.update(lines) + inventory = {(v['owner'], v['name']): k for k, v in reg['fields'].items()} + compiled = {(owner, field['name']) for owner, cls in classes.items() + for field in cls['fields'] if not field['synthetic']} + if compiled != set(inventory) or len(inventory) != len(reg['fields']): + raise ValueError('compiled field inventory differs from registration') + for occurrence in occurrences: + declaration = field_declaration(classes, occurrence['owner'], occurrence['name'], occurrence['descriptor']) + occurrence['declaration'] = declaration + occurrence['field'] = inventory.get((declaration['owner'], declaration['name'])) + if occurrence['field'] is None and not declaration['synthetic']: + raise ValueError('unexpected nonsynthetic field') + rows = [] + for case in reg['cases']: + if case['line'] not in covered: + raise ValueError(f'case has no compiled source line: {case["id"]}') + records = [o for o in occurrences if o['line'] == case['line']] + actual = [o['field'] for o in records if o['field'] is not None] + rows.append(dict(case, observedFields=actual, compilerInstructions=records, + agrees=Counter(actual) == Counter(case['expectedFields']))) + return dict(schema='compass.java-state-scope-oracle/1', registrationSha256=sha(reg_path), + scriptSha256=sha(Path(__file__)), supportSha256=support_hashes(), captureSha256=sha(directory / 'capture.json'), + compiler=manifest['jdkRelease'], classes=classes, + summary=dict(cases=len(rows), agreed=sum(row['agrees'] for row in rows), + positiveCases=sum(bool(row['expectedFields']) for row in rows), + negativeCases=sum(not row['expectedFields'] for row in rows), + fieldOccurrences=sum(len(row['expectedFields']) for row in rows)), cases=rows) + + + +def graph_inventory(graph, tool, reg): + """Inventory field endpoints and occurrence targets, without caller scoring. + + This is a diagnostic prerequisite, not a positive field-edge precision score: + caller ownership still requires its own source-coordinate/native regression. + """ + nodes = {node['id']: node for node in graph['nodes']} + if len(nodes) != len(graph['nodes']): + raise ValueError('duplicate graph node ID') + if any(edge['source'] not in nodes or edge['target'] not in nodes for edge in graph['links']): + raise ValueError('dangling graph endpoint') + file = Path(reg['source']).name + fields = {key: candidates(graph['nodes'], tool, file, field['line'], field['name']) + for key, field in reg['fields'].items()} + if tool == 'compass': + fields = {key: [node for node in choices if node.get('kind') == 'field'] + for key, choices in fields.items()} + unique = {choices[0]['id']: key for key, choices in fields.items() if len(choices) == 1} + all_ids = {node['id'] for choices in fields.values() for node in choices} + contacts = sorted((edge for edge in graph['links'] if edge['target'] in all_ids + and edge.get('kind' if tool == 'compass' else 'relation') + in {'references', 'reads', 'writes'}), key=lambda e: json.dumps(e, sort_keys=True)) + rows = [] + for case in reg['cases']: + records = [edge for edge in contacts if occurrence(edge, tool, file, case['line'])] + observed = [unique[edge['target']] for edge in records if edge['target'] in unique] + expected = Counter(case['expectedFields']) + actual = Counter(observed) + rows.append(dict(id=case['id'], line=case['line'], expectedFields=case['expectedFields'], + observedUniqueTargets=observed, connectingRecords=records, + targetOccurrencesMatched=sum((actual & expected).values()), + unexpectedTargets=list((actual - expected).elements()))) + return dict(graphDirected=graph.get('directed'), nodes=len(nodes), edges=len(graph['links']), + fieldCandidates=fields, allContactRecords=contacts, cases=rows, + summary=dict(fieldDeclarations=len(fields), uniqueFields=len(unique), + missingFields=sum(not choices for choices in fields.values()), + ambiguousFields=sum(len(choices) > 1 for choices in fields.values()), + fieldContactRecords=len(contacts), registeredFieldOccurrences=sum(len(c['expectedFields']) for c in reg['cases']), + occurrenceTargetsMatched=sum(r['targetOccurrencesMatched'] for r in rows), + negativeCases=sum(not c['expectedFields'] for c in reg['cases']), + negativeCasesWithContact=sum(not c['expectedFields'] and bool(c['connectingRecords']) for c in rows), + callerOwnershipScored=False, edgePrecision=None)) + + +def compare_graphs(reg_path, oracle_path, manifest_path): + reg = registration(reg_path) + oracle = json.loads(read(oracle_path, LIMIT)) + if (oracle['registrationSha256'] != sha(reg_path) + or oracle['summary']['cases'] != len(reg['cases']) + or oracle['summary']['agreed'] != len(reg['cases'])): + raise ValueError('compiler oracle does not confirm the registration') + manifest = json.loads(read(manifest_path, LIMIT)) + if manifest['registrationSha256'] != sha(reg_path) or manifest['sourceSha256'] != reg['sourceSha256']: + raise ValueError('graph registration mismatch') + reports = {} + for tool in ('compass', 'graphify'): + metadata = manifest['tools'][tool] + raw = read(Path(metadata['graph']), MAX_GRAPH_BYTES) + if hashlib.sha256(raw).hexdigest() != metadata['graphSha256'] or metadata['exitCode'] != 0: + raise ValueError('graph capture mismatch') + reports[tool] = graph_inventory(json.loads(raw), tool, reg) + return dict(schema='compass.java-state-scope-baseline/1', registrationSha256=sha(reg_path), + scriptSha256=sha(Path(__file__)), supportSha256=support_hashes(), oracleSha256=sha(oracle_path), + graphManifestSha256=sha(manifest_path), scope=reg['scope'], + limitations=['Target/line diagnostic only; caller ownership and positive edge precision are unscored.', + 'The compiler confirms this nonconstant fixture, not a general source-access oracle.', + 'Graphify stored endpoint order is preserved; an undirected graph is not directed path proof.', + 'Synthetic controls do not replace the five real-repository comparisons or prove god-object quality.'], + inputs=manifest, tools=reports) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--registration', type=Path, required=True) + parser.add_argument('--artifacts', type=Path, required=True) + parser.add_argument('--graph-manifest', type=Path) + parser.add_argument('--oracle', type=Path, help='verified compiler review for graph comparison') + parser.add_argument('--java-home', type=Path, help='capture into a new directory using this installed JDK') + parser.add_argument('--output', type=Path, required=True) + parser.add_argument('--verify', action='store_true') + args = parser.parse_args() + if bool(args.graph_manifest) != bool(args.oracle): + parser.error('--graph-manifest and --oracle must be supplied together') + if args.graph_manifest and args.java_home: + parser.error('graph comparison never recaptures the compiler') + if args.java_home: + if args.verify: + parser.error('verification never recaptures') + capture(args.registration, args.artifacts, args.java_home) + if args.graph_manifest: + # Recompute the compiler evidence, not just its saved summary. + actual = (json.dumps(evaluate(args.registration, args.artifacts), indent=2) + '\n').encode() + if read(args.oracle, LIMIT) != actual: + raise ValueError('compiler oracle differs on replay') + report = compare_graphs(args.registration, args.oracle, args.graph_manifest) + else: + report = evaluate(args.registration, args.artifacts) + payload = (json.dumps(report, indent=2) + '\n').encode() + if args.verify: + if read(args.output, LIMIT) != payload: + raise ValueError('oracle review differs on replay') + else: + with args.output.open('xb') as stream: + stream.write(payload) + summary = ({tool: result['summary'] for tool, result in report['tools'].items()} + if args.graph_manifest else report['summary']) + print(json.dumps(summary, indent=2)) + if not args.graph_manifest and report['summary']['agreed'] != report['summary']['cases']: + raise SystemExit('source/compiler disagreement; do not score this oracle') + + +if __name__ == '__main__': + main() diff --git a/benchmarks/agent_query/java_state_scope_baseline.json b/benchmarks/agent_query/java_state_scope_baseline.json new file mode 100644 index 000000000..8bd73ab31 --- /dev/null +++ b/benchmarks/agent_query/java_state_scope_baseline.json @@ -0,0 +1,1608 @@ +{ + "schema": "compass.java-state-scope-baseline/1", + "registrationSha256": "3a12b108736b5341ed09f0f9c66aa874e2612ef8d8e26afc542692fe0bdf445a", + "scriptSha256": "9a7f160a8c2a4a4ae9ed1c33d978aee953f2b9aafe9b8467d5b141a220272123", + "supportSha256": { + "runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "state_access_audit.py": "2bf95b707f18f34c9df4461a26f011b83d86f166efacfaab652f8e6231161058" + }, + "oracleSha256": "38fb8d38bccbc395cd06e5ec42fa7edcd7735f9ef4839e9a727d4a2af851a1e7", + "graphManifestSha256": "2073c22e8c0a2fcfe456f0ec837c3d1451b305501950e4f63d81ee052e795e66", + "scope": "Source-authored synthetic development challenge for Java field scope and receiver selection. Not a real-repository result, held-out evaluation, query benchmark or god-object classifier.", + "limitations": [ + "Target/line diagnostic only; caller ownership and positive edge precision are unscored.", + "The compiler confirms this nonconstant fixture, not a general source-access oracle.", + "Graphify stored endpoint order is preserved; an undirected graph is not directed path proof.", + "Synthetic controls do not replace the five real-repository comparisons or prove god-object quality." + ], + "inputs": { + "registrationSha256": "3a12b108736b5341ed09f0f9c66aa874e2612ef8d8e26afc542692fe0bdf445a", + "sourceSha256": "bfc306296dbc95809b0d0171ed770785ce442ba6253dd98ecbbf37cff9730335", + "compassBinary": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/rust-state-access-01/compass", + "compassBinarySha256": "a1692336191eff63849846eb91c1804798381d9e9f1a4ff1180a73a37c61f505", + "graphifyBinary": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/graphify-mcp-env/bin/graphify", + "graphifyBinarySha256": "ed90e12baa7ef1820eb6ab994850cecae3b8dd0c9e35ee43cd8763bc5603dcb6", + "graphifyEnvironmentSha256": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "tools": { + "compass": { + "argv": [ + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/rust-state-access-01/compass", + "extract", + "/Users/haipingfu/.codex/worktrees/58baf490-704c-4d67-9c65-a00a1ca7e005/compass/benchmarks/agent_query/fixtures/java_state_access", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-scope-01/graphs/compass" + ], + "exitCode": 0, + "graph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-scope-01/graphs/compass/compass-out/snapshots/snapshot-1790511939362120000-67292-0/graph.json", + "graphSha256": "667eb129744eee412c13201f261541cd2bb8a2ab5bb9413e095feb8bee683b82", + "stdoutSha256": "c47196698414352df28b4065f3ed15a9f493690b4371bb48cd052e98fb5ab852", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "graphify": { + "argv": [ + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/graphify-mcp-env/bin/graphify", + "extract", + "/Users/haipingfu/.codex/worktrees/58baf490-704c-4d67-9c65-a00a1ca7e005/compass/benchmarks/agent_query/fixtures/java_state_access", + "--code-only", + "--out", + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-scope-01/graphs/graphify" + ], + "exitCode": 0, + "graph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-scope-01/graphs/graphify/graphify-out/graph.json", + "graphSha256": "161b065248da2f4407e6827761dde90841bba37e984be7c975795a65b2c8aa2d", + "stdoutSha256": "20b38f2f49563f331e37f38e13fecf67966d986ffdaabe291d8775f463b375d3", + "stderrSha256": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb" + } + } + }, + "tools": { + "compass": { + "graphDirected": true, + "nodes": 53, + "edges": 78, + "fieldCandidates": { + "scope_value": [ + { + "id": "sha256:c120391c9804991eb001a0931b57304659226e7d01ffc53085f83fe821e14682", + "kind": "field", + "name": "value", + "qualifiedName": "audit.ScopeFixture::value", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 231, + "endByte": 236, + "startLine": 8, + "startColumn": 8, + "endLine": 8, + "endColumn": 13 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 231, + "endByte": 236, + "startLine": 8, + "startColumn": 8, + "endLine": 8, + "endColumn": 13 + } + ] + } + ], + "community": { + "id": 0, + "label": "ScopeFixture" + } + } + ], + "scope_slot": [ + { + "id": "sha256:c619e464c6b19595928732033a66d53458db7fd9700cf706335d5d847f02946f", + "kind": "field", + "name": "slot", + "qualifiedName": "audit.ScopeFixture::slot", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 268, + "endByte": 272, + "startLine": 9, + "startColumn": 9, + "endLine": 9, + "endColumn": 13 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 268, + "endByte": 272, + "startLine": 9, + "startColumn": 9, + "endLine": 9, + "endColumn": 13 + } + ] + } + ], + "community": { + "id": 1, + "label": "Cell" + } + } + ], + "scope_items": [ + { + "id": "sha256:2bdbd3f28c364d1b40e7ea4ba2b34dfef3ad736d42f4aa63e8ef4e0d9e5c54c7", + "kind": "field", + "name": "items", + "qualifiedName": "audit.ScopeFixture::items", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 305, + "endByte": 310, + "startLine": 10, + "startColumn": 11, + "endLine": 10, + "endColumn": 16 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 305, + "endByte": 310, + "startLine": 10, + "startColumn": 11, + "endLine": 10, + "endColumn": 16 + } + ] + } + ], + "community": { + "id": 1, + "label": "Cell" + } + } + ], + "scope_failure": [ + { + "id": "sha256:a9c547361cad58532c1cd08f804ac8b9f3d2bb8a6f5af12119d5bef15cda7224", + "kind": "field", + "name": "failure", + "qualifiedName": "audit.ScopeFixture::failure", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 354, + "endByte": 361, + "startLine": 11, + "startColumn": 21, + "endLine": 11, + "endColumn": 28 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 354, + "endByte": 361, + "startLine": 11, + "startColumn": 21, + "endLine": 11, + "endColumn": 28 + } + ] + } + ], + "community": { + "id": 0, + "label": "ScopeFixture" + } + } + ], + "scope_resource": [ + { + "id": "sha256:73ad1f600b37b11263bfa5f1cfad9147cf7df45d0fe8090aa008bb0e744bfe76", + "kind": "field", + "name": "resource", + "qualifiedName": "audit.ScopeFixture::resource", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 396, + "endByte": 404, + "startLine": 12, + "startColumn": 10, + "endLine": 12, + "endColumn": 18 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 396, + "endByte": 404, + "startLine": 12, + "startColumn": 10, + "endLine": 12, + "endColumn": 18 + } + ] + } + ], + "community": { + "id": 4, + "label": "Token" + } + } + ], + "scope_pattern": [ + { + "id": "sha256:86a48a4109ea79da64074189aecc6511576c8e008da8236323a2f6bef2b857c5", + "kind": "field", + "name": "pattern", + "qualifiedName": "audit.ScopeFixture::pattern", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 441, + "endByte": 448, + "startLine": 13, + "startColumn": 11, + "endLine": 13, + "endColumn": 18 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 441, + "endByte": 448, + "startLine": 13, + "startColumn": 11, + "endLine": 13, + "endColumn": 18 + } + ] + } + ], + "community": { + "id": 0, + "label": "ScopeFixture" + } + } + ], + "scope_static": [ + { + "id": "sha256:9640b33e89ef020d7198a0109a8603256f072cd8cae801cf6e06794f2a5febe6", + "kind": "field", + "name": "staticValue", + "qualifiedName": "audit.ScopeFixture::staticValue", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 488, + "endByte": 499, + "startLine": 14, + "startColumn": 15, + "endLine": 14, + "endColumn": 26 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 488, + "endByte": 499, + "startLine": 14, + "startColumn": 15, + "endLine": 14, + "endColumn": 26 + } + ] + } + ], + "community": { + "id": 0, + "label": "ScopeFixture" + } + } + ], + "inner_value": [ + { + "id": "sha256:6b7ddf31e47588cb7e38e5d2b7af2fbea587db26b6451eb25a278747be7c5d42", + "kind": "field", + "name": "value", + "qualifiedName": "audit.ScopeFixture::Inner::value", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 4410, + "endByte": 4415, + "startLine": 123, + "startColumn": 12, + "endLine": 123, + "endColumn": 17 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 4410, + "endByte": 4415, + "startLine": 123, + "startColumn": 12, + "endLine": 123, + "endColumn": 17 + } + ] + } + ], + "community": { + "id": 3, + "label": "Inner" + } + } + ], + "anonymous_value": [], + "local_value": [], + "base_value": [ + { + "id": "sha256:c4d7ec7b8bfad6392d33d030ed93419e9d930010f75a6d724f028bde9945b66a", + "kind": "field", + "name": "value", + "qualifiedName": "audit.Base::value", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 5384, + "endByte": 5389, + "startLine": 156, + "startColumn": 8, + "endLine": 156, + "endColumn": 13 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 5384, + "endByte": 5389, + "startLine": 156, + "startColumn": 8, + "endLine": 156, + "endColumn": 13 + } + ] + } + ], + "community": { + "id": 0, + "label": "ScopeFixture" + } + } + ], + "cell_value": [ + { + "id": "sha256:00c165a1eecef001df211ee8af6590b433183f710703bf96f08a6f4749b651b7", + "kind": "field", + "name": "value", + "qualifiedName": "audit.Cell::value", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 5434, + "endByte": 5439, + "startLine": 159, + "startColumn": 8, + "endLine": 159, + "endColumn": 13 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 5434, + "endByte": 5439, + "startLine": 159, + "startColumn": 8, + "endLine": 159, + "endColumn": 13 + } + ] + } + ], + "community": { + "id": 1, + "label": "Cell" + } + } + ], + "shadow_value": [ + { + "id": "sha256:4f1db07ec624d79cb8530c7b864ae5e92a35b32a2a59ac2eed1efb570d8fc295", + "kind": "field", + "name": "value", + "qualifiedName": "audit.Shadow::value", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 5499, + "endByte": 5504, + "startLine": 162, + "startColumn": 8, + "endLine": 162, + "endColumn": 13 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 5499, + "endByte": 5504, + "startLine": 162, + "startColumn": 8, + "endLine": 162, + "endColumn": 13 + } + ] + } + ], + "community": { + "id": 1, + "label": "Cell" + } + } + ], + "token_value": [ + { + "id": "sha256:f806daf2ddfcccec2f458b73414b365d04a23954587c8ada5efa398fdfcd6d0d", + "kind": "field", + "name": "value", + "qualifiedName": "audit.Token::value", + "language": "java", + "source": { + "file": "ScopeFixture.java", + "startByte": 5577, + "endByte": 5582, + "startLine": 165, + "startColumn": 8, + "endLine": 165, + "endColumn": 13 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "ScopeFixture.java", + "startByte": 5577, + "endByte": 5582, + "startLine": 165, + "startColumn": 8, + "endLine": 165, + "endColumn": 13 + } + ] + } + ], + "community": { + "id": 4, + "label": "Token" + } + } + ] + }, + "allContactRecords": [], + "cases": [ + { + "id": "constructor", + "line": 17, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "explicit_this", + "line": 20, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "implicit_this", + "line": 23, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "repeated", + "line": 26, + "expectedFields": [ + "scope_value", + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "parameter_shadow", + "line": 29, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "block_before", + "line": 32, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "block_shadow", + "line": 35, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "block_after", + "line": 37, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "before_local", + "line": 40, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "after_local", + "line": 42, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "for_shadow", + "line": 46, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "for_after", + "line": 48, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "enhanced_iterable", + "line": 51, + "expectedFields": [ + "scope_items" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "enhanced_binding", + "line": 52, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "enhanced_after", + "line": 54, + "expectedFields": [ + "scope_slot", + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "lambda_shadow", + "line": 57, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "lambda_this", + "line": 58, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "lambda_implicit", + "line": 59, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "catch_shadow", + "line": 65, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "catch_after", + "line": 67, + "expectedFields": [ + "scope_failure" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "resource_binding", + "line": 71, + "expectedFields": [ + "token_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "resource_catch", + "line": 73, + "expectedFields": [ + "scope_resource", + "token_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "resource_after", + "line": 75, + "expectedFields": [ + "scope_resource", + "token_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "pattern_true", + "line": 79, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "pattern_after", + "line": 81, + "expectedFields": [ + "scope_slot", + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "pattern_input", + "line": 84, + "expectedFields": [ + "scope_pattern" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "pattern_flow", + "line": 85, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "typed_parameter", + "line": 88, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "cast_receiver", + "line": 91, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "field_chain", + "line": 94, + "expectedFields": [ + "scope_slot", + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "array_receiver", + "line": 97, + "expectedFields": [ + "scope_items", + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "super_field", + "line": 100, + "expectedFields": [ + "base_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "declared_receiver", + "line": 103, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "hiding_receiver", + "line": 106, + "expectedFields": [ + "shadow_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "generic_bound", + "line": 109, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "static_fields", + "line": 112, + "expectedFields": [ + "scope_static", + "scope_static" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "method_not_field", + "line": 116, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "declarator_order", + "line": 119, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "declarator_shadow", + "line": 120, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "inner_own", + "line": 125, + "expectedFields": [ + "inner_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "qualified_this", + "line": 128, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "inherited_beats_outer", + "line": 133, + "expectedFields": [ + "base_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "anonymous_this", + "line": 140, + "expectedFields": [ + "anonymous_value", + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "local_class_this", + "line": 148, + "expectedFields": [ + "local_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + } + ], + "summary": { + "fieldDeclarations": 14, + "uniqueFields": 12, + "missingFields": 2, + "ambiguousFields": 0, + "fieldContactRecords": 0, + "registeredFieldOccurrences": 45, + "occurrenceTargetsMatched": 0, + "negativeCases": 8, + "negativeCasesWithContact": 0, + "callerOwnershipScored": false, + "edgePrecision": null + } + }, + "graphify": { + "graphDirected": false, + "nodes": 43, + "edges": 62, + "fieldCandidates": { + "scope_value": [], + "scope_slot": [], + "scope_items": [], + "scope_failure": [], + "scope_resource": [], + "scope_pattern": [], + "scope_static": [], + "inner_value": [], + "anonymous_value": [], + "local_value": [], + "base_value": [], + "cell_value": [], + "shadow_value": [], + "token_value": [] + }, + "allContactRecords": [], + "cases": [ + { + "id": "constructor", + "line": 17, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "explicit_this", + "line": 20, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "implicit_this", + "line": 23, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "repeated", + "line": 26, + "expectedFields": [ + "scope_value", + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "parameter_shadow", + "line": 29, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "block_before", + "line": 32, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "block_shadow", + "line": 35, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "block_after", + "line": 37, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "before_local", + "line": 40, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "after_local", + "line": 42, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "for_shadow", + "line": 46, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "for_after", + "line": 48, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "enhanced_iterable", + "line": 51, + "expectedFields": [ + "scope_items" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "enhanced_binding", + "line": 52, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "enhanced_after", + "line": 54, + "expectedFields": [ + "scope_slot", + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "lambda_shadow", + "line": 57, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "lambda_this", + "line": 58, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "lambda_implicit", + "line": 59, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "catch_shadow", + "line": 65, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "catch_after", + "line": 67, + "expectedFields": [ + "scope_failure" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "resource_binding", + "line": 71, + "expectedFields": [ + "token_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "resource_catch", + "line": 73, + "expectedFields": [ + "scope_resource", + "token_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "resource_after", + "line": 75, + "expectedFields": [ + "scope_resource", + "token_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "pattern_true", + "line": 79, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "pattern_after", + "line": 81, + "expectedFields": [ + "scope_slot", + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "pattern_input", + "line": 84, + "expectedFields": [ + "scope_pattern" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "pattern_flow", + "line": 85, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "typed_parameter", + "line": 88, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "cast_receiver", + "line": 91, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "field_chain", + "line": 94, + "expectedFields": [ + "scope_slot", + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "array_receiver", + "line": 97, + "expectedFields": [ + "scope_items", + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "super_field", + "line": 100, + "expectedFields": [ + "base_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "declared_receiver", + "line": 103, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "hiding_receiver", + "line": 106, + "expectedFields": [ + "shadow_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "generic_bound", + "line": 109, + "expectedFields": [ + "cell_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "static_fields", + "line": 112, + "expectedFields": [ + "scope_static", + "scope_static" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "method_not_field", + "line": 116, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "declarator_order", + "line": 119, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "declarator_shadow", + "line": 120, + "expectedFields": [], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "inner_own", + "line": 125, + "expectedFields": [ + "inner_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "qualified_this", + "line": 128, + "expectedFields": [ + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "inherited_beats_outer", + "line": 133, + "expectedFields": [ + "base_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "anonymous_this", + "line": 140, + "expectedFields": [ + "anonymous_value", + "scope_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + }, + { + "id": "local_class_this", + "line": 148, + "expectedFields": [ + "local_value" + ], + "observedUniqueTargets": [], + "connectingRecords": [], + "targetOccurrencesMatched": 0, + "unexpectedTargets": [] + } + ], + "summary": { + "fieldDeclarations": 14, + "uniqueFields": 0, + "missingFields": 14, + "ambiguousFields": 0, + "fieldContactRecords": 0, + "registeredFieldOccurrences": 45, + "occurrenceTargetsMatched": 0, + "negativeCases": 8, + "negativeCasesWithContact": 0, + "callerOwnershipScored": false, + "edgePrecision": null + } + } + } +} diff --git a/benchmarks/agent_query/java_state_scope_oracle.json b/benchmarks/agent_query/java_state_scope_oracle.json new file mode 100644 index 000000000..f73d78ef0 --- /dev/null +++ b/benchmarks/agent_query/java_state_scope_oracle.json @@ -0,0 +1,1637 @@ +{ + "schema": "compass.java-state-scope-oracle/1", + "registrationSha256": "3a12b108736b5341ed09f0f9c66aa874e2612ef8d8e26afc542692fe0bdf445a", + "scriptSha256": "9a7f160a8c2a4a4ae9ed1c33d978aee953f2b9aafe9b8467d5b141a220272123", + "supportSha256": { + "runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "state_access_audit.py": "2bf95b707f18f34c9df4461a26f011b83d86f166efacfaab652f8e6231161058" + }, + "captureSha256": "ffeb55f94c91af8462243adbfea94b5e4a0c9788ebbd46233a3c48707197de32", + "compiler": "IMPLEMENTOR=\"Amazon.com Inc.\"\nIMPLEMENTOR_VERSION=\"Corretto-17.0.8.8.1\"\nJAVA_RUNTIME_VERSION=\"17.0.8.1+8-LTS\"\nJAVA_VERSION=\"17.0.8.1\"\nJAVA_VERSION_DATE=\"2023-08-22\"\nLIBC=\"default\"\nMODULES=\"java.base java.compiler java.datatransfer java.xml java.prefs java.desktop java.instrument java.logging java.management java.security.sasl java.naming java.rmi java.management.rmi java.net.http java.scripting java.security.jgss java.transaction.xa java.sql java.sql.rowset java.xml.crypto java.se java.smartcardio jdk.accessibility jdk.internal.jvmstat jdk.attach jdk.charsets jdk.compiler jdk.crypto.ec jdk.crypto.cryptoki jdk.dynalink jdk.internal.ed jdk.editpad jdk.hotspot.agent jdk.httpserver jdk.incubator.foreign jdk.incubator.vector jdk.internal.le jdk.internal.opt jdk.internal.vm.ci jdk.internal.vm.compiler jdk.internal.vm.compiler.management jdk.jartool jdk.javadoc jdk.jcmd jdk.management jdk.management.agent jdk.jconsole jdk.jdeps jdk.jdwp.agent jdk.jdi jdk.jfr jdk.jlink jdk.jpackage jdk.jshell jdk.jsobject jdk.jstatd jdk.localedata jdk.management.jfr jdk.naming.dns jdk.naming.rmi jdk.net jdk.nio.mapmode jdk.random jdk.sctp jdk.security.auth jdk.security.jgss jdk.unsupported jdk.unsupported.desktop jdk.xml.dom jdk.zipfs\"\nOS_ARCH=\"aarch64\"\nOS_NAME=\"Darwin\"\nSOURCE=\".:git:9a3cc984f76c+\"\n", + "classes": { + "audit.Base": { + "owner": "audit.Base", + "parent": "java.lang.Object", + "interfaces": [], + "fields": [ + { + "name": "value", + "descriptor": "I", + "synthetic": false + } + ], + "major": 61, + "minor": 0 + }, + "audit.Cell": { + "owner": "audit.Cell", + "parent": "java.lang.Object", + "interfaces": [], + "fields": [ + { + "name": "value", + "descriptor": "I", + "synthetic": false + } + ], + "major": 61, + "minor": 0 + }, + "audit.ScopeFixture$1": { + "owner": "audit.ScopeFixture$1", + "parent": "java.lang.Object", + "interfaces": [ + "java.util.function.IntSupplier" + ], + "fields": [ + { + "name": "value", + "descriptor": "I", + "synthetic": false + }, + { + "name": "this$0", + "descriptor": "Laudit/ScopeFixture;", + "synthetic": true + } + ], + "major": 61, + "minor": 0 + }, + "audit.ScopeFixture$1Local": { + "owner": "audit.ScopeFixture$1Local", + "parent": "java.lang.Object", + "interfaces": [], + "fields": [ + { + "name": "value", + "descriptor": "I", + "synthetic": false + }, + { + "name": "this$0", + "descriptor": "Laudit/ScopeFixture;", + "synthetic": true + } + ], + "major": 61, + "minor": 0 + }, + "audit.ScopeFixture$Inherited": { + "owner": "audit.ScopeFixture$Inherited", + "parent": "audit.Base", + "interfaces": [], + "fields": [ + { + "name": "this$0", + "descriptor": "Laudit/ScopeFixture;", + "synthetic": true + } + ], + "major": 61, + "minor": 0 + }, + "audit.ScopeFixture$Inner": { + "owner": "audit.ScopeFixture$Inner", + "parent": "java.lang.Object", + "interfaces": [], + "fields": [ + { + "name": "value", + "descriptor": "I", + "synthetic": false + }, + { + "name": "this$0", + "descriptor": "Laudit/ScopeFixture;", + "synthetic": true + } + ], + "major": 61, + "minor": 0 + }, + "audit.ScopeFixture": { + "owner": "audit.ScopeFixture", + "parent": "audit.Base", + "interfaces": [], + "fields": [ + { + "name": "value", + "descriptor": "I", + "synthetic": false + }, + { + "name": "slot", + "descriptor": "Laudit/Cell;", + "synthetic": false + }, + { + "name": "items", + "descriptor": "[Laudit/Cell;", + "synthetic": false + }, + { + "name": "failure", + "descriptor": "Ljava/lang/RuntimeException;", + "synthetic": false + }, + { + "name": "resource", + "descriptor": "Laudit/Token;", + "synthetic": false + }, + { + "name": "pattern", + "descriptor": "Ljava/lang/Object;", + "synthetic": false + }, + { + "name": "staticValue", + "descriptor": "I", + "synthetic": false + } + ], + "major": 61, + "minor": 0 + }, + "audit.Shadow": { + "owner": "audit.Shadow", + "parent": "audit.Cell", + "interfaces": [], + "fields": [ + { + "name": "value", + "descriptor": "I", + "synthetic": false + } + ], + "major": 61, + "minor": 0 + }, + "audit.Token": { + "owner": "audit.Token", + "parent": "java.lang.Object", + "interfaces": [ + "java.lang.AutoCloseable" + ], + "fields": [ + { + "name": "value", + "descriptor": "I", + "synthetic": false + } + ], + "major": 61, + "minor": 0 + } + }, + "summary": { + "cases": 44, + "agreed": 44, + "positiveCases": 36, + "negativeCases": 8, + "fieldOccurrences": 45 + }, + "cases": [ + { + "id": "constructor", + "line": 17, + "text": " this.value = value; // case constructor: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 6, + "opcode": "putfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 6: putfield #7 // Field value:I", + "line": 17, + "method": "audit.ScopeFixture(int);", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "explicit_this", + "line": 20, + "text": " return this.value; // case explicit_this: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #7 // Field value:I", + "line": 20, + "method": "int explicit();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "implicit_this", + "line": 23, + "text": " return value; // case implicit_this: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #7 // Field value:I", + "line": 23, + "method": "int implicit();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "repeated", + "line": 26, + "text": " return value + this.value; // case repeated: scope_value,scope_value", + "expectedFields": [ + "scope_value", + "scope_value" + ], + "observedFields": [ + "scope_value", + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #7 // Field value:I", + "line": 26, + "method": "int repeated();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + }, + { + "offset": 5, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 5: getfield #7 // Field value:I", + "line": 26, + "method": "int repeated();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "parameter_shadow", + "line": 29, + "text": " return value; // case parameter_shadow: -", + "expectedFields": [], + "observedFields": [], + "compilerInstructions": [], + "agrees": true + }, + { + "id": "block_before", + "line": 32, + "text": " sink(value); // case block_before: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #7 // Field value:I", + "line": 32, + "method": "void block();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "block_shadow", + "line": 35, + "text": " sink(value); // case block_shadow: -", + "expectedFields": [], + "observedFields": [], + "compilerInstructions": [], + "agrees": true + }, + { + "id": "block_after", + "line": 37, + "text": " sink(value); // case block_after: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 15, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 15: getfield #7 // Field value:I", + "line": 37, + "method": "void block();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "before_local", + "line": 40, + "text": " sink(value); // case before_local: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #7 // Field value:I", + "line": 40, + "method": "int beforeLocal();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "after_local", + "line": 42, + "text": " return value; // case after_local: -", + "expectedFields": [], + "observedFields": [], + "compilerInstructions": [], + "agrees": true + }, + { + "id": "for_shadow", + "line": 46, + "text": " sink(value); // case for_shadow: -", + "expectedFields": [], + "observedFields": [], + "compilerInstructions": [], + "agrees": true + }, + { + "id": "for_after", + "line": 48, + "text": " sink(value); // case for_after: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 18, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 18: getfield #7 // Field value:I", + "line": 48, + "method": "void loop();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "enhanced_iterable", + "line": 51, + "text": " for (Cell slot : items) { // case enhanced_iterable: scope_items", + "expectedFields": [ + "scope_items" + ], + "observedFields": [ + "scope_items" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "items", + "descriptor": "[Laudit/Cell;", + "raw": " 1: getfield #17 // Field items:[Laudit/Cell;", + "line": 51, + "method": "int enhanced();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "items", + "descriptor": "[Laudit/Cell;", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_items" + } + ], + "agrees": true + }, + { + "id": "enhanced_binding", + "line": 52, + "text": " sink(slot.value); // case enhanced_binding: cell_value", + "expectedFields": [ + "cell_value" + ], + "observedFields": [ + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 22, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 22: getfield #21 // Field audit/Cell.value:I", + "line": 52, + "method": "int enhanced();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "enhanced_after", + "line": 54, + "text": " return slot.value; // case enhanced_after: scope_slot,cell_value", + "expectedFields": [ + "scope_slot", + "cell_value" + ], + "observedFields": [ + "scope_slot", + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 35, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "slot", + "descriptor": "Laudit/Cell;", + "raw": " 35: getfield #24 // Field slot:Laudit/Cell;", + "line": 54, + "method": "int enhanced();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "slot", + "descriptor": "Laudit/Cell;", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_slot" + }, + { + "offset": 38, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 38: getfield #21 // Field audit/Cell.value:I", + "line": 54, + "method": "int enhanced();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "lambda_shadow", + "line": 57, + "text": " IntUnaryOperator a = value -> value + 1; // case lambda_shadow: -", + "expectedFields": [], + "observedFields": [], + "compilerInstructions": [], + "agrees": true + }, + { + "id": "lambda_this", + "line": 58, + "text": " IntSupplier b = () -> this.value; // case lambda_this: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #7 // Field value:I", + "line": 58, + "method": "private int lambda$lambdas$1();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "lambda_implicit", + "line": 59, + "text": " IntSupplier c = () -> value; // case lambda_implicit: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #7 // Field value:I", + "line": 59, + "method": "private int lambda$lambdas$2();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "catch_shadow", + "line": 65, + "text": " sink(failure == null ? 0 : 1); // case catch_shadow: -", + "expectedFields": [], + "observedFields": [], + "compilerInstructions": [], + "agrees": true + }, + { + "id": "catch_after", + "line": 67, + "text": " sink(failure == null ? 0 : 1); // case catch_after: scope_failure", + "expectedFields": [ + "scope_failure" + ], + "observedFields": [ + "scope_failure" + ], + "compilerInstructions": [ + { + "offset": 22, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "failure", + "descriptor": "Ljava/lang/RuntimeException;", + "raw": " 22: getfield #50 // Field failure:Ljava/lang/RuntimeException;", + "line": 67, + "method": "void catches();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "failure", + "descriptor": "Ljava/lang/RuntimeException;", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_failure" + } + ], + "agrees": true + }, + { + "id": "resource_binding", + "line": 71, + "text": " sink(resource.value); // case resource_binding: token_value", + "expectedFields": [ + "token_value" + ], + "observedFields": [ + "token_value" + ], + "compilerInstructions": [ + { + "offset": 9, + "opcode": "getfield", + "owner": "audit.Token", + "name": "value", + "descriptor": "I", + "raw": " 9: getfield #57 // Field audit/Token.value:I", + "line": 71, + "method": "void resources();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Token" + }, + "field": "token_value" + } + ], + "agrees": true + }, + { + "id": "resource_catch", + "line": 73, + "text": " sink(resource.value); // case resource_catch: scope_resource,token_value", + "expectedFields": [ + "scope_resource", + "token_value" + ], + "observedFields": [ + "scope_resource", + "token_value" + ], + "compilerInstructions": [ + { + "offset": 43, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "resource", + "descriptor": "Laudit/Token;", + "raw": " 43: getfield #67 // Field resource:Laudit/Token;", + "line": 73, + "method": "void resources();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "resource", + "descriptor": "Laudit/Token;", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_resource" + }, + { + "offset": 46, + "opcode": "getfield", + "owner": "audit.Token", + "name": "value", + "descriptor": "I", + "raw": " 46: getfield #57 // Field audit/Token.value:I", + "line": 73, + "method": "void resources();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Token" + }, + "field": "token_value" + } + ], + "agrees": true + }, + { + "id": "resource_after", + "line": 75, + "text": " sink(resource.value); // case resource_after: scope_resource,token_value", + "expectedFields": [ + "scope_resource", + "token_value" + ], + "observedFields": [ + "scope_resource", + "token_value" + ], + "compilerInstructions": [ + { + "offset": 53, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "resource", + "descriptor": "Laudit/Token;", + "raw": " 53: getfield #67 // Field resource:Laudit/Token;", + "line": 75, + "method": "void resources();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "resource", + "descriptor": "Laudit/Token;", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_resource" + }, + { + "offset": 56, + "opcode": "getfield", + "owner": "audit.Token", + "name": "value", + "descriptor": "I", + "raw": " 56: getfield #57 // Field audit/Token.value:I", + "line": 75, + "method": "void resources();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Token" + }, + "field": "token_value" + } + ], + "agrees": true + }, + { + "id": "pattern_true", + "line": 79, + "text": " return slot.value; // case pattern_true: cell_value", + "expectedFields": [ + "cell_value" + ], + "observedFields": [ + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 13, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 13: getfield #21 // Field audit/Cell.value:I", + "line": 79, + "method": "int pattern(java.lang.Object);", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "pattern_after", + "line": 81, + "text": " return slot.value; // case pattern_after: scope_slot,cell_value", + "expectedFields": [ + "scope_slot", + "cell_value" + ], + "observedFields": [ + "scope_slot", + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 18, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "slot", + "descriptor": "Laudit/Cell;", + "raw": " 18: getfield #24 // Field slot:Laudit/Cell;", + "line": 81, + "method": "int pattern(java.lang.Object);", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "slot", + "descriptor": "Laudit/Cell;", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_slot" + }, + { + "offset": 21, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 21: getfield #21 // Field audit/Cell.value:I", + "line": 81, + "method": "int pattern(java.lang.Object);", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "pattern_input", + "line": 84, + "text": " if (!(pattern instanceof Cell slot)) return 0; // case pattern_input: scope_pattern", + "expectedFields": [ + "scope_pattern" + ], + "observedFields": [ + "scope_pattern" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "pattern", + "descriptor": "Ljava/lang/Object;", + "raw": " 1: getfield #71 // Field pattern:Ljava/lang/Object;", + "line": 84, + "method": "int negatedPattern();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "pattern", + "descriptor": "Ljava/lang/Object;", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_pattern" + } + ], + "agrees": true + }, + { + "id": "pattern_flow", + "line": 85, + "text": " return slot.value; // case pattern_flow: cell_value", + "expectedFields": [ + "cell_value" + ], + "observedFields": [ + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 23, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 23: getfield #21 // Field audit/Cell.value:I", + "line": 85, + "method": "int negatedPattern();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "typed_parameter", + "line": 88, + "text": " return cell.value; // case typed_parameter: cell_value", + "expectedFields": [ + "cell_value" + ], + "observedFields": [ + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #21 // Field audit/Cell.value:I", + "line": 88, + "method": "int typed(audit.Cell);", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "cast_receiver", + "line": 91, + "text": " return ((Cell) cell).value; // case cast_receiver: cell_value", + "expectedFields": [ + "cell_value" + ], + "observedFields": [ + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 4, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 4: getfield #21 // Field audit/Cell.value:I", + "line": 91, + "method": "int cast(java.lang.Object);", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "field_chain", + "line": 94, + "text": " return slot.value; // case field_chain: scope_slot,cell_value", + "expectedFields": [ + "scope_slot", + "cell_value" + ], + "observedFields": [ + "scope_slot", + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "slot", + "descriptor": "Laudit/Cell;", + "raw": " 1: getfield #24 // Field slot:Laudit/Cell;", + "line": 94, + "method": "int chain();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "slot", + "descriptor": "Laudit/Cell;", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_slot" + }, + { + "offset": 4, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 4: getfield #21 // Field audit/Cell.value:I", + "line": 94, + "method": "int chain();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "array_receiver", + "line": 97, + "text": " return items[0].value; // case array_receiver: scope_items,cell_value", + "expectedFields": [ + "scope_items", + "cell_value" + ], + "observedFields": [ + "scope_items", + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "items", + "descriptor": "[Laudit/Cell;", + "raw": " 1: getfield #17 // Field items:[Laudit/Cell;", + "line": 97, + "method": "int indexed();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "items", + "descriptor": "[Laudit/Cell;", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_items" + }, + { + "offset": 6, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 6: getfield #21 // Field audit/Cell.value:I", + "line": 97, + "method": "int indexed();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "super_field", + "line": 100, + "text": " return super.value; // case super_field: base_value", + "expectedFields": [ + "base_value" + ], + "observedFields": [ + "base_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.Base", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #75 // Field audit/Base.value:I", + "line": 100, + "method": "int parent();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Base" + }, + "field": "base_value" + } + ], + "agrees": true + }, + { + "id": "declared_receiver", + "line": 103, + "text": " return cell.value; // case declared_receiver: cell_value", + "expectedFields": [ + "cell_value" + ], + "observedFields": [ + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #21 // Field audit/Cell.value:I", + "line": 103, + "method": "int staticBinding(audit.Cell, audit.Shadow);", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "hiding_receiver", + "line": 106, + "text": " return cell.value; // case hiding_receiver: shadow_value", + "expectedFields": [ + "shadow_value" + ], + "observedFields": [ + "shadow_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.Shadow", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #76 // Field audit/Shadow.value:I", + "line": 106, + "method": "int subtype(audit.Shadow);", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Shadow" + }, + "field": "shadow_value" + } + ], + "agrees": true + }, + { + "id": "generic_bound", + "line": 109, + "text": " return cell.value; // case generic_bound: cell_value", + "expectedFields": [ + "cell_value" + ], + "observedFields": [ + "cell_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.Cell", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #21 // Field audit/Cell.value:I", + "line": 109, + "method": " int generic(T);", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Cell" + }, + "field": "cell_value" + } + ], + "agrees": true + }, + { + "id": "static_fields", + "line": 112, + "text": " return staticValue + ScopeFixture.staticValue; // case static_fields: scope_static,scope_static", + "expectedFields": [ + "scope_static", + "scope_static" + ], + "observedFields": [ + "scope_static", + "scope_static" + ], + "compilerInstructions": [ + { + "offset": 0, + "opcode": "getstatic", + "owner": "audit.ScopeFixture", + "name": "staticValue", + "descriptor": "I", + "raw": " 0: getstatic #79 // Field staticValue:I", + "line": 112, + "method": "static int statics();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "staticValue", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_static" + }, + { + "offset": 3, + "opcode": "getstatic", + "owner": "audit.ScopeFixture", + "name": "staticValue", + "descriptor": "I", + "raw": " 3: getstatic #79 // Field staticValue:I", + "line": 112, + "method": "static int statics();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "staticValue", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_static" + } + ], + "agrees": true + }, + { + "id": "method_not_field", + "line": 116, + "text": " return value(); // case method_not_field: -", + "expectedFields": [], + "observedFields": [], + "compilerInstructions": [], + "agrees": true + }, + { + "id": "declarator_order", + "line": 119, + "text": " int first = value, value = 2; // case declarator_order: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #7 // Field value:I", + "line": 119, + "method": "void declarators();", + "bytecodeClass": "audit.ScopeFixture", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "declarator_shadow", + "line": 120, + "text": " sink(first + value); // case declarator_shadow: -", + "expectedFields": [], + "observedFields": [], + "compilerInstructions": [], + "agrees": true + }, + { + "id": "inner_own", + "line": 125, + "text": " return value; // case inner_own: inner_value", + "expectedFields": [ + "inner_value" + ], + "observedFields": [ + "inner_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture$Inner", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #13 // Field value:I", + "line": 125, + "method": "int own();", + "bytecodeClass": "audit.ScopeFixture$Inner", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture$Inner" + }, + "field": "inner_value" + } + ], + "agrees": true + }, + { + "id": "qualified_this", + "line": 128, + "text": " return ScopeFixture.this.value; // case qualified_this: scope_value", + "expectedFields": [ + "scope_value" + ], + "observedFields": [ + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture$Inner", + "name": "this$0", + "descriptor": "Laudit/ScopeFixture;", + "raw": " 1: getfield #1 // Field this$0:Laudit/ScopeFixture;", + "line": 128, + "method": "int outer();", + "bytecodeClass": "audit.ScopeFixture$Inner", + "declaration": { + "name": "this$0", + "descriptor": "Laudit/ScopeFixture;", + "synthetic": true, + "owner": "audit.ScopeFixture$Inner" + }, + "field": null + }, + { + "offset": 4, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 4: getfield #17 // Field audit/ScopeFixture.value:I", + "line": 128, + "method": "int outer();", + "bytecodeClass": "audit.ScopeFixture$Inner", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "inherited_beats_outer", + "line": 133, + "text": " return value; // case inherited_beats_outer: base_value", + "expectedFields": [ + "base_value" + ], + "observedFields": [ + "base_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture$Inherited", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #13 // Field value:I", + "line": 133, + "method": "int inherited();", + "bytecodeClass": "audit.ScopeFixture$Inherited", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.Base" + }, + "field": "base_value" + } + ], + "agrees": true + }, + { + "id": "anonymous_this", + "line": 140, + "text": " return this.value + ScopeFixture.this.value; // case anonymous_this: anonymous_value,scope_value", + "expectedFields": [ + "anonymous_value", + "scope_value" + ], + "observedFields": [ + "anonymous_value", + "scope_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture$1", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #13 // Field value:I", + "line": 140, + "method": "public int getAsInt();", + "bytecodeClass": "audit.ScopeFixture$1", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture$1" + }, + "field": "anonymous_value" + }, + { + "offset": 5, + "opcode": "getfield", + "owner": "audit.ScopeFixture$1", + "name": "this$0", + "descriptor": "Laudit/ScopeFixture;", + "raw": " 5: getfield #1 // Field this$0:Laudit/ScopeFixture;", + "line": 140, + "method": "public int getAsInt();", + "bytecodeClass": "audit.ScopeFixture$1", + "declaration": { + "name": "this$0", + "descriptor": "Laudit/ScopeFixture;", + "synthetic": true, + "owner": "audit.ScopeFixture$1" + }, + "field": null + }, + { + "offset": 8, + "opcode": "getfield", + "owner": "audit.ScopeFixture", + "name": "value", + "descriptor": "I", + "raw": " 8: getfield #17 // Field audit/ScopeFixture.value:I", + "line": 140, + "method": "public int getAsInt();", + "bytecodeClass": "audit.ScopeFixture$1", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture" + }, + "field": "scope_value" + } + ], + "agrees": true + }, + { + "id": "local_class_this", + "line": 148, + "text": " return this.value; // case local_class_this: local_value", + "expectedFields": [ + "local_value" + ], + "observedFields": [ + "local_value" + ], + "compilerInstructions": [ + { + "offset": 1, + "opcode": "getfield", + "owner": "audit.ScopeFixture$1Local", + "name": "value", + "descriptor": "I", + "raw": " 1: getfield #13 // Field value:I", + "line": 148, + "method": "int get();", + "bytecodeClass": "audit.ScopeFixture$1Local", + "declaration": { + "name": "value", + "descriptor": "I", + "synthetic": false, + "owner": "audit.ScopeFixture$1Local" + }, + "field": "local_value" + } + ], + "agrees": true + } + ] +} diff --git a/benchmarks/agent_query/java_state_scope_registration.json b/benchmarks/agent_query/java_state_scope_registration.json new file mode 100644 index 000000000..c679f72a3 --- /dev/null +++ b/benchmarks/agent_query/java_state_scope_registration.json @@ -0,0 +1,443 @@ +{ + "schema": "compass.java-state-scope-registration/1", + "baselineCommit": "b4b8300d30c872946ae0c37c8ba4d915d9049925", + "scope": "Source-authored synthetic development challenge for Java field scope and receiver selection. Not a real-repository result, held-out evaluation, query benchmark or god-object classifier.", + "source": "benchmarks/agent_query/fixtures/java_state_access/ScopeFixture.java", + "sourceSha256": "bfc306296dbc95809b0d0171ed770785ce442ba6253dd98ecbbf37cff9730335", + "compilerPolicy": "Compile without processors using an already installed JDK with --release 17 and line tables; do not execute fixture code. Verify each registered line against every compiled method, including lambda and nested class methods. Resolve bytecode field owner through source class declarations; retain all field instructions and unexpected targets. Exclude compiler-generated fields only when absent from the declared fixture field inventory. Duplicated compiler instructions at the same source line remain visible.", + "scoringPolicy": "Compare occurrence-bearing forward state contact records against compiled field contacts per registered line. Missing field nodes and missing occurrence anchors remain failures. Negative lines are explicit scope controls, reported separately; zero emitted accesses cannot establish positive precision. No read/write classification score. Preserve multiplicity and all mismatches. Synthetic results never replace the unchanged 20-site five-repository registration.", + "nextProductContract": "Use an AST lexical scope index for Java field accesses, with explicit shadow barriers. Preserve field-only qualified resolution, exact occurrence anchors, ambiguity and unsupported targets. Cover ordinary this/unqualified and typed receivers while avoiding method/type/declaration names. Inheritance, patterns, local/anonymous classes and bounded generic lookup must be source-proven or remain unsupported, never fall back to an outer or same-named field.", + "fields": { + "scope_value": { + "owner": "audit.ScopeFixture", + "name": "value", + "line": 8, + "text": " int value; // field scope_value" + }, + "scope_slot": { + "owner": "audit.ScopeFixture", + "name": "slot", + "line": 9, + "text": " Cell slot; // field scope_slot" + }, + "scope_items": { + "owner": "audit.ScopeFixture", + "name": "items", + "line": 10, + "text": " Cell[] items; // field scope_items" + }, + "scope_failure": { + "owner": "audit.ScopeFixture", + "name": "failure", + "line": 11, + "text": " RuntimeException failure; // field scope_failure" + }, + "scope_resource": { + "owner": "audit.ScopeFixture", + "name": "resource", + "line": 12, + "text": " Token resource; // field scope_resource" + }, + "scope_pattern": { + "owner": "audit.ScopeFixture", + "name": "pattern", + "line": 13, + "text": " Object pattern; // field scope_pattern" + }, + "scope_static": { + "owner": "audit.ScopeFixture", + "name": "staticValue", + "line": 14, + "text": " static int staticValue; // field scope_static" + }, + "inner_value": { + "owner": "audit.ScopeFixture$Inner", + "name": "value", + "line": 123, + "text": " int value; // field inner_value" + }, + "anonymous_value": { + "owner": "audit.ScopeFixture$1", + "name": "value", + "line": 138, + "text": " int value; // field anonymous_value" + }, + "local_value": { + "owner": "audit.ScopeFixture$1Local", + "name": "value", + "line": 146, + "text": " int value; // field local_value" + }, + "base_value": { + "owner": "audit.Base", + "name": "value", + "line": 156, + "text": " int value; // field base_value" + }, + "cell_value": { + "owner": "audit.Cell", + "name": "value", + "line": 159, + "text": " int value; // field cell_value" + }, + "shadow_value": { + "owner": "audit.Shadow", + "name": "value", + "line": 162, + "text": " int value; // field shadow_value" + }, + "token_value": { + "owner": "audit.Token", + "name": "value", + "line": 165, + "text": " int value; // field token_value" + } + }, + "cases": [ + { + "id": "constructor", + "line": 17, + "text": " this.value = value; // case constructor: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "explicit_this", + "line": 20, + "text": " return this.value; // case explicit_this: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "implicit_this", + "line": 23, + "text": " return value; // case implicit_this: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "repeated", + "line": 26, + "text": " return value + this.value; // case repeated: scope_value,scope_value", + "expectedFields": [ + "scope_value", + "scope_value" + ] + }, + { + "id": "parameter_shadow", + "line": 29, + "text": " return value; // case parameter_shadow: -", + "expectedFields": [] + }, + { + "id": "block_before", + "line": 32, + "text": " sink(value); // case block_before: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "block_shadow", + "line": 35, + "text": " sink(value); // case block_shadow: -", + "expectedFields": [] + }, + { + "id": "block_after", + "line": 37, + "text": " sink(value); // case block_after: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "before_local", + "line": 40, + "text": " sink(value); // case before_local: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "after_local", + "line": 42, + "text": " return value; // case after_local: -", + "expectedFields": [] + }, + { + "id": "for_shadow", + "line": 46, + "text": " sink(value); // case for_shadow: -", + "expectedFields": [] + }, + { + "id": "for_after", + "line": 48, + "text": " sink(value); // case for_after: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "enhanced_iterable", + "line": 51, + "text": " for (Cell slot : items) { // case enhanced_iterable: scope_items", + "expectedFields": [ + "scope_items" + ] + }, + { + "id": "enhanced_binding", + "line": 52, + "text": " sink(slot.value); // case enhanced_binding: cell_value", + "expectedFields": [ + "cell_value" + ] + }, + { + "id": "enhanced_after", + "line": 54, + "text": " return slot.value; // case enhanced_after: scope_slot,cell_value", + "expectedFields": [ + "scope_slot", + "cell_value" + ] + }, + { + "id": "lambda_shadow", + "line": 57, + "text": " IntUnaryOperator a = value -> value + 1; // case lambda_shadow: -", + "expectedFields": [] + }, + { + "id": "lambda_this", + "line": 58, + "text": " IntSupplier b = () -> this.value; // case lambda_this: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "lambda_implicit", + "line": 59, + "text": " IntSupplier c = () -> value; // case lambda_implicit: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "catch_shadow", + "line": 65, + "text": " sink(failure == null ? 0 : 1); // case catch_shadow: -", + "expectedFields": [] + }, + { + "id": "catch_after", + "line": 67, + "text": " sink(failure == null ? 0 : 1); // case catch_after: scope_failure", + "expectedFields": [ + "scope_failure" + ] + }, + { + "id": "resource_binding", + "line": 71, + "text": " sink(resource.value); // case resource_binding: token_value", + "expectedFields": [ + "token_value" + ] + }, + { + "id": "resource_catch", + "line": 73, + "text": " sink(resource.value); // case resource_catch: scope_resource,token_value", + "expectedFields": [ + "scope_resource", + "token_value" + ] + }, + { + "id": "resource_after", + "line": 75, + "text": " sink(resource.value); // case resource_after: scope_resource,token_value", + "expectedFields": [ + "scope_resource", + "token_value" + ] + }, + { + "id": "pattern_true", + "line": 79, + "text": " return slot.value; // case pattern_true: cell_value", + "expectedFields": [ + "cell_value" + ] + }, + { + "id": "pattern_after", + "line": 81, + "text": " return slot.value; // case pattern_after: scope_slot,cell_value", + "expectedFields": [ + "scope_slot", + "cell_value" + ] + }, + { + "id": "pattern_input", + "line": 84, + "text": " if (!(pattern instanceof Cell slot)) return 0; // case pattern_input: scope_pattern", + "expectedFields": [ + "scope_pattern" + ] + }, + { + "id": "pattern_flow", + "line": 85, + "text": " return slot.value; // case pattern_flow: cell_value", + "expectedFields": [ + "cell_value" + ] + }, + { + "id": "typed_parameter", + "line": 88, + "text": " return cell.value; // case typed_parameter: cell_value", + "expectedFields": [ + "cell_value" + ] + }, + { + "id": "cast_receiver", + "line": 91, + "text": " return ((Cell) cell).value; // case cast_receiver: cell_value", + "expectedFields": [ + "cell_value" + ] + }, + { + "id": "field_chain", + "line": 94, + "text": " return slot.value; // case field_chain: scope_slot,cell_value", + "expectedFields": [ + "scope_slot", + "cell_value" + ] + }, + { + "id": "array_receiver", + "line": 97, + "text": " return items[0].value; // case array_receiver: scope_items,cell_value", + "expectedFields": [ + "scope_items", + "cell_value" + ] + }, + { + "id": "super_field", + "line": 100, + "text": " return super.value; // case super_field: base_value", + "expectedFields": [ + "base_value" + ] + }, + { + "id": "declared_receiver", + "line": 103, + "text": " return cell.value; // case declared_receiver: cell_value", + "expectedFields": [ + "cell_value" + ] + }, + { + "id": "hiding_receiver", + "line": 106, + "text": " return cell.value; // case hiding_receiver: shadow_value", + "expectedFields": [ + "shadow_value" + ] + }, + { + "id": "generic_bound", + "line": 109, + "text": " return cell.value; // case generic_bound: cell_value", + "expectedFields": [ + "cell_value" + ] + }, + { + "id": "static_fields", + "line": 112, + "text": " return staticValue + ScopeFixture.staticValue; // case static_fields: scope_static,scope_static", + "expectedFields": [ + "scope_static", + "scope_static" + ] + }, + { + "id": "method_not_field", + "line": 116, + "text": " return value(); // case method_not_field: -", + "expectedFields": [] + }, + { + "id": "declarator_order", + "line": 119, + "text": " int first = value, value = 2; // case declarator_order: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "declarator_shadow", + "line": 120, + "text": " sink(first + value); // case declarator_shadow: -", + "expectedFields": [] + }, + { + "id": "inner_own", + "line": 125, + "text": " return value; // case inner_own: inner_value", + "expectedFields": [ + "inner_value" + ] + }, + { + "id": "qualified_this", + "line": 128, + "text": " return ScopeFixture.this.value; // case qualified_this: scope_value", + "expectedFields": [ + "scope_value" + ] + }, + { + "id": "inherited_beats_outer", + "line": 133, + "text": " return value; // case inherited_beats_outer: base_value", + "expectedFields": [ + "base_value" + ] + }, + { + "id": "anonymous_this", + "line": 140, + "text": " return this.value + ScopeFixture.this.value; // case anonymous_this: anonymous_value,scope_value", + "expectedFields": [ + "anonymous_value", + "scope_value" + ] + }, + { + "id": "local_class_this", + "line": 148, + "text": " return this.value; // case local_class_this: local_value", + "expectedFields": [ + "local_value" + ] + } + ] +} diff --git a/benchmarks/agent_query/java_varargs_development_review.json b/benchmarks/agent_query/java_varargs_development_review.json new file mode 100644 index 000000000..5184c5be5 --- /dev/null +++ b/benchmarks/agent_query/java_varargs_development_review.json @@ -0,0 +1,1033 @@ +{ + "schema": "compass.java-varargs-development-review/1", + "scope": "Repeated five-language development comparison. Source-reviewed Java delta and compiler-checked reductions; not fresh held-out confirmation, representative precision, community quality, or general superiority.", + "runId": "java-varargs-panel-a-02", + "suiteDigest": "820a5c29f59e68b4ee8493e153c806b23e458a396431f3cf381660e469391237", + "runnerDigest": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "tools": [ + { + "binary": "java-varargs-resolution-02/compass", + "binarySha256": "9b958b7f35919ccc47042dc304ce58a6890af8a803b3214b148bae0595be083d", + "digestScope": "executable-file-only", + "name": "compass", + "version": "compass 0.3.30", + "binaryLocationScope": "external evaluation artifact root" + }, + { + "binary": "graphify", + "binarySha256": "a7fdb4ac8985755be15f10f89a2d17ee517130b3ac90c28c91644ae351881da3", + "digestScope": "executable-file-only", + "name": "graphify", + "version": "graphify 0.9.67", + "binaryLocationScope": "installed launcher; absolute location retained in external run manifest" + } + ], + "frozenManifestSha256": "7db16b8bd349284966ea8fb2f225e981dc76c867365929dc322e0ea28220abf8", + "productionSourceSha256": { + "crates/compass-files/src/cache.rs": "d1ec810e456af924c04e07adc01c29d25d73712ea70922550253c655bdd3bc89", + "crates/compass-languages/src/evidence/build.rs": "9427d1685e42b388bc4665e0bcfce54249441296f578e7a3d6a8e5261f355631", + "crates/compass-resolve/src/evidence/languages/java.rs": "ae08fc3c51a7cc90b1b233397faf9e1a493d68c884853eb0eb0fee06e3d91104", + "crates/compass-resolve/src/evidence/resolve/members.rs": "e612a3112f099158faa48a36cb28baf2e459db32fe5d368f6833d6e4bc0a4ba9" + }, + "metrics": { + "compass": { + "text": { + "passed": 49, + "questions": 55 + }, + "sourcePaths": { + "passed": 8, + "total": 10 + }, + "selectedSourceRelationships": { + "passed": 17, + "allOccurrencesPassed": 17, + "total": 21 + } + }, + "graphify": { + "text": { + "passed": 46, + "questions": 55 + }, + "sourcePaths": { + "passed": 8, + "total": 10 + }, + "selectedSourceRelationships": { + "passed": 20, + "allOccurrencesPassed": 17, + "total": 21 + } + } + }, + "repositories": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf", + "compassGraphByteIdenticalToPrevious": true, + "graphifyGraphByteIdenticalToPrevious": true + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234", + "compassGraphByteIdenticalToPrevious": true, + "graphifyGraphByteIdenticalToPrevious": true + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69", + "compassGraphByteIdenticalToPrevious": false, + "graphifyGraphByteIdenticalToPrevious": true + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b", + "compassGraphByteIdenticalToPrevious": true, + "graphifyGraphByteIdenticalToPrevious": true + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "compassBuildExit": 0, + "graphifyBuildExit": 0, + "compassGraphSha256": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd", + "compassGraphByteIdenticalToPrevious": true, + "graphifyGraphByteIdenticalToPrevious": true + } + ], + "diagnostic": { + "fixturePaths": [ + "benchmarks/agent_query/fixtures/java_varargs/VarargsDemo.java", + "benchmarks/agent_query/fixtures/java_varargs/ExtendedVarargs.java" + ], + "sourceSha256": { + "ExtendedVarargs.java": "b8423c3c341d366b6f81b032d5021e4819fcb97cc887e612eaac29635e0804f4", + "VarargsDemo.java": "2581dc8bb5b39948aee5df49900307a321460bf380d56daccbc9b401e9c0cd63" + }, + "compiler": "javac 17.0.8.1; javap descriptors and invoke instructions; classes not executed", + "javapSha256": "069cd6a68617f2d4eaf1c9427861f5373cbbb6a01560c350d32a83176d661546", + "before": { + "expectedOccurrences": 25, + "correctOccurrences": 6, + "wrongOccurrences": 5, + "missingOccurrences": 14 + }, + "after": { + "expectedOccurrences": 25, + "correctOccurrences": 24, + "wrongOccurrences": 0, + "missingOccurrences": 1 + }, + "remainingMiss": "ExtendedVarargs.unknown calls choose with a nested method-result expression. The compiler knows the String result; Compass retains an untyped argument and ambiguity. This is a recall miss, not an absence success.", + "beforeReviewSha256": "dc9c36a4218aa5eafdf537b6ac1de3424dee545d29b23dc8cc0fe29535be4d81", + "afterReviewSha256": "41471ea0635de694a92d0548358e6ac24939f63c4d8f9717ade02f3473365b27", + "oracleScope": "25 explicit calls to methods declared in the two fixture classes. External String.toString and compiler-inserted boxing/default-constructor instructions are outside this selected internal-call oracle." + }, + "jsoupDelta": { + "beforeCounts": { + "nodes": 6116, + "edges": 21095 + }, + "afterCounts": { + "nodes": 6116, + "edges": 21110 + }, + "signatureCorrections": 43, + "addedByKind": { + "references": 6, + "calls": 9 + }, + "removedByKind": {}, + "reviewedAddedRelationships": 15, + "addedCallsProduction": 5, + "addedCallsTests": 4, + "reviewScope": "All 43 changed signatures and all 15 added relationships reviewed against pinned jsoup source. This is the entire observed delta, not representative whole-graph precision. Five added calls are production source and four test source; all six added references are production source. No removed relationships.", + "reviewedArtifactSha256": "dc795537b527707a9a1f9ff36de9234831000d9aaf6d6a6b4b22b7f5336a2d8b", + "signatures": [ + { + "file": "src/main/java/org/jsoup/parser/ParseError.java", + "line": 17, + "before": "(CharacterReader,String)", + "after": "(CharacterReader,String,Object...)", + "sourceSha256": "73a1dbe9caf2a439051b5dd77af383ae339d034d24ec673f9634d092d23aa6f0" + }, + { + "file": "src/main/java/org/jsoup/parser/ParseError.java", + "line": 29, + "before": "(int,String)", + "after": "(int,String,Object...)", + "sourceSha256": "73a1dbe9caf2a439051b5dd77af383ae339d034d24ec673f9634d092d23aa6f0" + }, + { + "file": "src/main/java/org/jsoup/select/CombiningEvaluator.java", + "line": 90, + "before": "()", + "after": "(Evaluator...)", + "sourceSha256": "4d7d2aa47151f1be31769709738db73afafe65458871b817510925327c4fe1c8" + }, + { + "file": "src/main/java/org/jsoup/select/CombiningEvaluator.java", + "line": 134, + "before": "()", + "after": "(Evaluator...)", + "sourceSha256": "4d7d2aa47151f1be31769709738db73afafe65458871b817510925327c4fe1c8" + }, + { + "file": "src/main/java/org/jsoup/select/Elements.java", + "line": 45, + "before": "()", + "after": "(Element...)", + "sourceSha256": "b6ed7b3905a52d85658ba6e6b1347de84513b9c6b51e8c8f5879ee29865f2873" + }, + { + "file": "src/main/java/org/jsoup/select/Nodes.java", + "line": 45, + "before": "()", + "after": "(T...)", + "sourceSha256": "d4c8c088df00bf04e5c9cd7e47bda7b644a52552bf11387870f882f07b0ac7f2" + }, + { + "file": "src/main/java/org/jsoup/select/Selector.java", + "line": 293, + "before": "(String)", + "after": "(String,Object...)", + "sourceSha256": "5452b5f12561dedcb8b7dccfdf861c4159e1e4292fef6a2d0cb4f1636f8a84b9" + }, + { + "file": "src/main/java/org/jsoup/select/Selector.java", + "line": 297, + "before": "(Throwable,String)", + "after": "(Throwable,String,Object...)", + "sourceSha256": "5452b5f12561dedcb8b7dccfdf861c4159e1e4292fef6a2d0cb4f1636f8a84b9" + }, + { + "file": "src/main/java/org/jsoup/Connection.java", + "line": 288, + "before": "data()", + "after": "data(String...)", + "sourceSha256": "031151f474574f94a8c9176049a4d8a9f97b14c334cde9ffd1f5b05127acc062" + }, + { + "file": "src/main/java/org/jsoup/examples/HtmlToPlainText.java", + "line": 33, + "before": "main()", + "after": "main(String...)", + "sourceSha256": "3f7e6718b8518240a8d538f60030edeab37648c0b7e70b6c620ee26a434bac7e" + }, + { + "file": "src/main/java/org/jsoup/examples/ListLinks.java", + "line": 50, + "before": "print(String)", + "after": "print(String,Object...)", + "sourceSha256": "a4e4260d8e9671de4fa49d9a0016bec7170631efed2dc5422e4a7583a60cd86e" + }, + { + "file": "src/main/java/org/jsoup/examples/Wikipedia.java", + "line": 27, + "before": "log(String)", + "after": "log(String,String...)", + "sourceSha256": "abf753f2d99f3b5bbd83e55d8af178ebc5a01749a544cb5a0ec1d4f8331a0aa1" + }, + { + "file": "src/main/java/org/jsoup/helper/HttpConnection.java", + "line": 254, + "before": "data()", + "after": "data(String...)", + "sourceSha256": "9f439dc7f7aa03d18a1fbff716cfb562f9e2667b249a60dfc329f5232b3c1145" + }, + { + "file": "src/main/java/org/jsoup/helper/Validate.java", + "line": 69, + "before": "expectNotNull(T,String)", + "after": "expectNotNull(T,String,Object...)", + "sourceSha256": "256262c372b996305f30d89e668cb5110d6b36b13afa551c8bfa3a5ee50c85e6" + }, + { + "file": "src/main/java/org/jsoup/helper/Validate.java", + "line": 205, + "before": "fail(String)", + "after": "fail(String,Object...)", + "sourceSha256": "256262c372b996305f30d89e668cb5110d6b36b13afa551c8bfa3a5ee50c85e6" + }, + { + "file": "src/test/java/org/jsoup/integration/Benchmark.java", + "line": 34, + "before": "print(String)", + "after": "print(String,Object...)", + "sourceSha256": "e928f9cfbd7e67be3bb4dcee16a4023aa9971edf20f970190a95608e904473ce" + }, + { + "file": "src/main/java/org/jsoup/internal/StringUtil.java", + "line": 264, + "before": "in(String)", + "after": "in(String,String...)", + "sourceSha256": "7e61ba7e8630f101f0a74d56fb91237c8588fceeb5c472166c60926dd6047881" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 901, + "before": "insertChildren(int)", + "after": "insertChildren(int,Node...)", + "sourceSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 1595, + "before": "assertClassList(String)", + "after": "assertClassList(String,String...)", + "sourceSha256": "f3d201c08a41ee429f5fe9fb72a12bbb6a620592d1276e66d876022fb5ef39bc" + }, + { + "file": "src/test/java/org/jsoup/nodes/ElementTest.java", + "line": 1585, + "before": "assertClassNames(String)", + "after": "assertClassNames(String,String...)", + "sourceSha256": "f3d201c08a41ee429f5fe9fb72a12bbb6a620592d1276e66d876022fb5ef39bc" + }, + { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "line": 603, + "before": "addChildren()", + "after": "addChildren(Node...)", + "sourceSha256": "5a8e21930be1a65ae41055a09ba3400dd8a134ad3e693cea61f41cc4242d27ec" + }, + { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "line": 618, + "before": "addChildren(int)", + "after": "addChildren(int,Node...)", + "sourceSha256": "5a8e21930be1a65ae41055a09ba3400dd8a134ad3e693cea61f41cc4242d27ec" + }, + { + "file": "src/main/java/org/jsoup/parser/CharacterReader.java", + "line": 414, + "before": "consumeToAny()", + "after": "consumeToAny(char...)", + "sourceSha256": "f93452a6022d438df7ce17f00dabd9d32589815b30ee4f5e6d1bd1208e36274c" + }, + { + "file": "src/main/java/org/jsoup/parser/CharacterReader.java", + "line": 471, + "before": "consumeToAnySorted()", + "after": "consumeToAnySorted(char...)", + "sourceSha256": "f93452a6022d438df7ce17f00dabd9d32589815b30ee4f5e6d1bd1208e36274c" + }, + { + "file": "src/main/java/org/jsoup/parser/CharacterReader.java", + "line": 617, + "before": "matchesAny()", + "after": "matchesAny(char...)", + "sourceSha256": "f93452a6022d438df7ce17f00dabd9d32589815b30ee4f5e6d1bd1208e36274c" + }, + { + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilder.java", + "line": 765, + "before": "clearStackToContext()", + "after": "clearStackToContext(String...)", + "sourceSha256": "c7fff264056bc226eb6065efd407cbf990722c739afc00ebcde1ffef6ca7b72f" + }, + { + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilder.java", + "line": 743, + "before": "popStackToClose()", + "after": "popStackToClose(String...)", + "sourceSha256": "c7fff264056bc226eb6065efd407cbf990722c739afc00ebcde1ffef6ca7b72f" + }, + { + "file": "src/main/java/org/jsoup/parser/TokenQueue.java", + "line": 436, + "before": "consumeEscapedCssIdentifier()", + "after": "consumeEscapedCssIdentifier(char...)", + "sourceSha256": "7a23106abcfc95d71a6b774bdc10c02d33a98b25cbc429ade2d94db5d69e0fb1" + }, + { + "file": "src/main/java/org/jsoup/parser/TokenQueue.java", + "line": 135, + "before": "consumeToAny()", + "after": "consumeToAny(String...)", + "sourceSha256": "7a23106abcfc95d71a6b774bdc10c02d33a98b25cbc429ade2d94db5d69e0fb1" + }, + { + "file": "src/main/java/org/jsoup/parser/TokenQueue.java", + "line": 72, + "before": "matchesAny()", + "after": "matchesAny(char...)", + "sourceSha256": "7a23106abcfc95d71a6b774bdc10c02d33a98b25cbc429ade2d94db5d69e0fb1" + }, + { + "file": "src/main/java/org/jsoup/parser/TokenQueue.java", + "line": 454, + "before": "matchesCssIdentifier()", + "after": "matchesCssIdentifier(char...)", + "sourceSha256": "7a23106abcfc95d71a6b774bdc10c02d33a98b25cbc429ade2d94db5d69e0fb1" + }, + { + "file": "src/main/java/org/jsoup/parser/Tokeniser.java", + "line": 354, + "before": "characterReferenceError(String)", + "after": "characterReferenceError(String,Object...)", + "sourceSha256": "16250f9ef5cf94e3fc7100a8356e466ef1c4273d84c455d64ace82a29b35a09f" + }, + { + "file": "src/main/java/org/jsoup/parser/Tokeniser.java", + "line": 364, + "before": "error(String)", + "after": "error(String,Object...)", + "sourceSha256": "16250f9ef5cf94e3fc7100a8356e466ef1c4273d84c455d64ace82a29b35a09f" + }, + { + "file": "src/main/java/org/jsoup/parser/TreeBuilder.java", + "line": 312, + "before": "error(String)", + "after": "error(String,Object...)", + "sourceSha256": "6f210b4b6e1f5e5d1f81655aa279103bf101e5b1f0ec17ee8fe7035894c10746" + }, + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 303, + "before": "addAttributes(String)", + "after": "addAttributes(String,String...)", + "sourceSha256": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501" + }, + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 455, + "before": "addProtocols(String,String)", + "after": "addProtocols(String,String,String...)", + "sourceSha256": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501" + }, + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 254, + "before": "addTags()", + "after": "addTags(String...)", + "sourceSha256": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501" + }, + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 335, + "before": "removeAttributes(String)", + "after": "removeAttributes(String,String...)", + "sourceSha256": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501" + }, + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 485, + "before": "removeProtocols(String,String)", + "after": "removeProtocols(String,String,String...)", + "sourceSha256": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501" + }, + { + "file": "src/main/java/org/jsoup/safety/Safelist.java", + "line": 272, + "before": "removeTags()", + "after": "removeTags(String...)", + "sourceSha256": "0ff250830902fd2a7d7a2c6f5e3cd1eb851ef0c57123f71db6afaf5711990501" + }, + { + "file": "src/test/java/org/jsoup/select/CssTest.java", + "line": 200, + "before": "check(Elements)", + "after": "check(Elements,String...)", + "sourceSha256": "89fa0627ec7586eb2489524544566da9e9dd6877a6d2490e14f2fa0791ca14f1" + }, + { + "file": "src/test/java/org/jsoup/select/SelectorTest.java", + "line": 34, + "before": "assertSelectedIds(Elements)", + "after": "assertSelectedIds(Elements,String...)", + "sourceSha256": "0560f38b89cb82e8f7e12386d468b43bd069874941be5fa85ad3227363e18d66" + }, + { + "file": "src/test/java/org/jsoup/select/SelectorTest.java", + "line": 42, + "before": "assertSelectedOwnText(Elements)", + "after": "assertSelectedOwnText(Elements,String...)", + "sourceSha256": "0560f38b89cb82e8f7e12386d468b43bd069874941be5fa85ad3227363e18d66" + } + ], + "relationships": [ + { + "kind": "references", + "source": "org.jsoup.select.CombiningEvaluator::And::", + "target": "org.jsoup.select.Evaluator", + "targetSignature": "public abstract class Evaluator", + "targetSource": { + "file": "src/main/java/org/jsoup/select/Evaluator.java", + "startByte": 1213, + "endByte": 29100, + "startLine": 31, + "startColumn": 0, + "endLine": 1045, + "endColumn": 1 + }, + "site": { + "file": "src/main/java/org/jsoup/select/CombiningEvaluator.java", + "startByte": 2572, + "endByte": 2581, + "startLine": 90, + "startColumn": 12, + "endLine": 90, + "endColumn": 21 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "Evaluator", + "sourceFileSha256": "4d7d2aa47151f1be31769709738db73afafe65458871b817510925327c4fe1c8", + "rationale": "The spread parameter directly names the target type; same-package ownership or explicit import establishes its qualified identity. This is a type reference, not a call." + } + }, + { + "kind": "references", + "source": "org.jsoup.select.CombiningEvaluator::Or::", + "target": "org.jsoup.select.Evaluator", + "targetSignature": "public abstract class Evaluator", + "targetSource": { + "file": "src/main/java/org/jsoup/select/Evaluator.java", + "startByte": 1213, + "endByte": 29100, + "startLine": 31, + "startColumn": 0, + "endLine": 1045, + "endColumn": 1 + }, + "site": { + "file": "src/main/java/org/jsoup/select/CombiningEvaluator.java", + "startByte": 3911, + "endByte": 3920, + "startLine": 134, + "startColumn": 11, + "endLine": 134, + "endColumn": 20 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "Evaluator", + "sourceFileSha256": "4d7d2aa47151f1be31769709738db73afafe65458871b817510925327c4fe1c8", + "rationale": "The spread parameter directly names the target type; same-package ownership or explicit import establishes its qualified identity. This is a type reference, not a call." + } + }, + { + "kind": "references", + "source": "org.jsoup.select.Elements::", + "target": "org.jsoup.nodes.Element", + "targetSignature": "public class Element extends Node implements Iterable", + "targetSource": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 1780, + "endByte": 84172, + "startLine": 50, + "startColumn": 0, + "endLine": 2211, + "endColumn": 1 + }, + "site": { + "file": "src/main/java/org/jsoup/select/Elements.java", + "startByte": 1367, + "endByte": 1374, + "startLine": 45, + "startColumn": 20, + "endLine": 45, + "endColumn": 27 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "Element", + "sourceFileSha256": "b6ed7b3905a52d85658ba6e6b1347de84513b9c6b51e8c8f5879ee29865f2873", + "rationale": "The spread parameter directly names the target type; same-package ownership or explicit import establishes its qualified identity. This is a type reference, not a call." + } + }, + { + "kind": "calls", + "source": "org.jsoup.helper.HttpConnectionTest::data", + "target": "org.jsoup.Connection::data", + "targetSignature": "data(String...)", + "targetSource": { + "file": "src/main/java/org/jsoup/Connection.java", + "startByte": 12820, + "endByte": 12855, + "startLine": 288, + "startColumn": 4, + "endLine": 288, + "endColumn": 39 + }, + "site": { + "file": "src/test/java/org/jsoup/helper/HttpConnectionTest.java", + "startByte": 10827, + "endByte": 10831, + "startLine": 273, + "startColumn": 12, + "endLine": 273, + "endColumn": 16 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "data", + "sourceFileSha256": "62d806a0f78b538163554bd09e4cd9cdd58f5a5dbfcaf1addf600dd73a357355", + "rationale": "Connection-typed receiver; four String literals exclude InputStream overload and select data(String...)." + } + }, + { + "kind": "calls", + "source": "org.jsoup.helper.HttpConnectionTest::throwsOnOddData", + "target": "org.jsoup.Connection::data", + "targetSignature": "data(String...)", + "targetSource": { + "file": "src/main/java/org/jsoup/Connection.java", + "startByte": 12820, + "endByte": 12855, + "startLine": 288, + "startColumn": 4, + "endLine": 288, + "endColumn": 39 + }, + "site": { + "file": "src/test/java/org/jsoup/helper/HttpConnectionTest.java", + "startByte": 10664, + "endByte": 10668, + "startLine": 267, + "startColumn": 16, + "endLine": 267, + "endColumn": 20 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "data", + "sourceFileSha256": "62d806a0f78b538163554bd09e4cd9cdd58f5a5dbfcaf1addf600dd73a357355", + "rationale": "Connection-typed receiver; three String literals exclude InputStream overload and select data(String...)." + } + }, + { + "kind": "calls", + "source": "org.jsoup.helper.Validate::assertFail", + "target": "org.jsoup.helper.Validate::fail", + "targetSignature": "fail(String)", + "targetSource": { + "file": "src/main/java/org/jsoup/helper/Validate.java", + "startByte": 6375, + "endByte": 6462, + "startLine": 184, + "startColumn": 4, + "endLine": 186, + "endColumn": 5 + }, + "site": { + "file": "src/main/java/org/jsoup/helper/Validate.java", + "startByte": 6733, + "endByte": 6737, + "startLine": 195, + "startColumn": 8, + "endLine": 195, + "endColumn": 12 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "fail", + "sourceFileSha256": "256262c372b996305f30d89e668cb5110d6b36b13afa551c8bfa3a5ee50c85e6", + "rationale": "One String argument selects fail(String) in the fixed-arity phase before fail(String,Object...)." + } + }, + { + "kind": "calls", + "source": "org.jsoup.helper.ValidateTest::expectNotNull", + "target": "org.jsoup.helper.Validate::expectNotNull", + "targetSignature": "expectNotNull(T)", + "targetSource": { + "file": "src/main/java/org/jsoup/helper/Validate.java", + "startByte": 1710, + "endByte": 1888, + "startLine": 53, + "startColumn": 4, + "endLine": 57, + "endColumn": 5 + }, + "site": { + "file": "src/test/java/org/jsoup/helper/ValidateTest.java", + "startByte": 1771, + "endByte": 1784, + "startLine": 63, + "startColumn": 31, + "endLine": 63, + "endColumn": 44 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "expectNotNull", + "sourceFileSha256": "34dc5c7d4be83ab69a3c8d40ab65c2b33cd83a82a9801bfe3f913ea12feaf7f2", + "rationale": "The other expectNotNull overload requires at least two arguments; the one-argument generic declaration is the unique arity-compatible source target." + } + }, + { + "kind": "calls", + "source": "org.jsoup.helper.ValidateTest::expectNotNull", + "target": "org.jsoup.helper.Validate::expectNotNull", + "targetSignature": "expectNotNull(T)", + "targetSource": { + "file": "src/main/java/org/jsoup/helper/Validate.java", + "startByte": 1710, + "endByte": 1888, + "startLine": 53, + "startColumn": 4, + "endLine": 57, + "endColumn": 5 + }, + "site": { + "file": "src/test/java/org/jsoup/helper/ValidateTest.java", + "startByte": 1921, + "endByte": 1934, + "startLine": 66, + "startColumn": 98, + "endLine": 66, + "endColumn": 111 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "expectNotNull", + "sourceFileSha256": "34dc5c7d4be83ab69a3c8d40ab65c2b33cd83a82a9801bfe3f913ea12feaf7f2", + "rationale": "Null is the sole argument; the other expectNotNull overload requires at least two arguments." + } + }, + { + "kind": "references", + "source": "org.jsoup.nodes.Element::insertChildren", + "target": "org.jsoup.nodes.Node", + "targetSignature": "public abstract class Node implements Cloneable", + "targetSource": { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "startByte": 743, + "endByte": 38461, + "startLine": 26, + "startColumn": 0, + "endLine": 1089, + "endColumn": 1 + }, + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 35239, + "endByte": 35243, + "startLine": 901, + "startColumn": 45, + "endLine": 901, + "endColumn": 49 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "Node", + "sourceFileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "rationale": "The spread parameter directly names the target type; same-package ownership or explicit import establishes its qualified identity. This is a type reference, not a call." + } + }, + { + "kind": "calls", + "source": "org.jsoup.nodes.Element::insertChildren", + "target": "org.jsoup.nodes.Node::addChildren", + "targetSignature": "addChildren(int,Node...)", + "targetSource": { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "startByte": 21739, + "endByte": 23462, + "startLine": 618, + "startColumn": 4, + "endLine": 658, + "endColumn": 5 + }, + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 35561, + "endByte": 35572, + "startLine": 907, + "startColumn": 8, + "endLine": 907, + "endColumn": 19 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "addChildren", + "sourceFileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "rationale": "Element extends Node; index is int and children is Node[] from the spread declaration, selecting addChildren(int,Node...)." + } + }, + { + "kind": "calls", + "source": "org.jsoup.nodes.Element::prependChild", + "target": "org.jsoup.nodes.Node::addChildren", + "targetSignature": "addChildren(int,Node...)", + "targetSource": { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "startByte": 21739, + "endByte": 23462, + "startLine": 618, + "startColumn": 4, + "endLine": 658, + "endColumn": 5 + }, + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 33396, + "endByte": 33407, + "startLine": 857, + "startColumn": 8, + "endLine": 857, + "endColumn": 19 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "addChildren", + "sourceFileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "rationale": "Element extends Node; literal zero plus a Node parameter selects addChildren(int,Node...)." + } + }, + { + "kind": "references", + "source": "org.jsoup.nodes.Node::addChildren", + "target": "org.jsoup.nodes.Node", + "targetSignature": "public abstract class Node implements Cloneable", + "targetSource": { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "startByte": 743, + "endByte": 38461, + "startLine": 26, + "startColumn": 0, + "endLine": 1089, + "endColumn": 1 + }, + "site": { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "startByte": 21262, + "endByte": 21266, + "startLine": 603, + "startColumn": 31, + "endLine": 603, + "endColumn": 35 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "Node", + "sourceFileSha256": "5a8e21930be1a65ae41055a09ba3400dd8a134ad3e693cea61f41cc4242d27ec", + "rationale": "The spread parameter directly names the target type; same-package ownership or explicit import establishes its qualified identity. This is a type reference, not a call." + } + }, + { + "kind": "references", + "source": "org.jsoup.nodes.Node::addChildren", + "target": "org.jsoup.nodes.Node", + "targetSignature": "public abstract class Node implements Cloneable", + "targetSource": { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "startByte": 743, + "endByte": 38461, + "startLine": 26, + "startColumn": 0, + "endLine": 1089, + "endColumn": 1 + }, + "site": { + "file": "src/main/java/org/jsoup/nodes/Node.java", + "startByte": 21777, + "endByte": 21781, + "startLine": 618, + "startColumn": 42, + "endLine": 618, + "endColumn": 46 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "Node", + "sourceFileSha256": "5a8e21930be1a65ae41055a09ba3400dd8a134ad3e693cea61f41cc4242d27ec", + "rationale": "The spread parameter directly names the target type; same-package ownership or explicit import establishes its qualified identity. This is a type reference, not a call." + } + }, + { + "kind": "calls", + "source": "org.jsoup.parser.HtmlTreeBuilder::popStackToClose", + "target": "org.jsoup.parser.HtmlTreeBuilder::isHtmlEl", + "targetSignature": "isHtmlEl(Element,String[])", + "targetSource": { + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilder.java", + "startByte": 12169, + "endByte": 12305, + "startLine": 296, + "startColumn": 4, + "endLine": 298, + "endColumn": 5 + }, + "site": { + "file": "src/main/java/org/jsoup/parser/HtmlTreeBuilder.java", + "startByte": 30598, + "endByte": 30606, + "startLine": 746, + "startColumn": 16, + "endLine": 746, + "endColumn": 24 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "isHtmlEl", + "sourceFileSha256": "c7fff264056bc226eb6065efd407cbf990722c739afc00ebcde1ffef6ca7b72f", + "rationale": "el is declared Element; elNames is String[] from the spread declaration, selecting isHtmlEl(Element,String[])." + } + }, + { + "kind": "calls", + "source": "org.jsoup.parser.Tokeniser::emitTagPending", + "target": "org.jsoup.parser.Tokeniser::error", + "targetSignature": "error(String)", + "targetSource": { + "file": "src/main/java/org/jsoup/parser/Tokeniser.java", + "startByte": 15235, + "endByte": 15362, + "startLine": 359, + "startColumn": 4, + "endLine": 362, + "endColumn": 5 + }, + "site": { + "file": "src/main/java/org/jsoup/parser/Tokeniser.java", + "startByte": 12188, + "endByte": 12193, + "startLine": 268, + "startColumn": 16, + "endLine": 268, + "endColumn": 21 + }, + "review": { + "verdict": "source-supported", + "sourceSpan": "error", + "sourceFileSha256": "16250f9ef5cf94e3fc7100a8356e466ef1c4273d84c455d64ace82a29b35a09f", + "rationale": "A String literal selects error(String) before expanded error(String,Object...); TokeniserState is a distinct type." + } + } + ] + }, + "cacheUpgrade": { + "scope": "Final candidate: copied AST-v5 output upgrade and warm AST-v6 reuse compared with a clean build", + "graphBytesEqual": false, + "structureExcludingCommunityEqual": true, + "communityMemberPartitionsEqual": true, + "communityLabelsEqual": true, + "changedNodeFields": [ + "community.id" + ], + "cleanGraphSha256": "0e1536673b320e35783b469a957596ce9be04d1c51a40ffa3ec3958cf69a7969", + "upgradedGraphSha256": "548fbd9c1c2386936b1380fa21cdd175cca6f1fe81f2823fdfa3247779ae327a", + "upgradeSnapshots": { + "snapshot-1790487911654345000-94920-0": "548fbd9c1c2386936b1380fa21cdd175cca6f1fe81f2823fdfa3247779ae327a", + "snapshot-1790487912542778000-94917-0": "548fbd9c1c2386936b1380fa21cdd175cca6f1fe81f2823fdfa3247779ae327a" + }, + "firstBuild": "Compass indexed 2 files (2 extracted, 0 cached): 50 nodes, 72 edges, 9 communities with clustering.", + "secondBuild": "Compass indexed 2 files (0 extracted, 2 cached): 50 nodes, 72 edges, 9 communities with clustering.", + "inspectionCorrection": "Initial candidate full byte-equality assertion failed; the final candidate confirms only community numeric IDs differ under previous-state remapping. No whole-graph clean/upgrade byte-equivalence claim." + }, + "verification": { + "workspaceLibBins": { + "passed": 1092, + "failed": 0, + "ignored": 2 + }, + "contractsProductAndUniversalResolution": { + "passed": 250, + "failed": 0 + }, + "focusedFinal": { + "passed": 9, + "failed": 0, + "scope": "Final focused cases; the two original language cases were rerun with one added array-receiver case and counted once." + }, + "harnessTests": { + "passed": 99, + "failed": 0 + }, + "clippyWorkspaceAndFocusedTests": "passed -D warnings", + "formatDiffAndProductBoundary": "passed", + "fullFixtureQualification": "passed final-source fixtures-only qualification; retry after interrupted process was confirmed absent", + "logsSha256": { + "java-varargs-diagnostic/native-before.log": "12e803e1b59043f0b96f32c90c6fa43604fff9eef11ad8fa2df11a52d48cfeb7", + "java-varargs-diagnostic/resolve-before.log": "5a1ca619ecb0675cef3e74616e159da654fa8c444b2ddc76d2a7414b0f0c85bc", + "java-varargs-diagnostic/producer-after-01.log": "f0f1a670a4330f65e1e75fee705972b05ce828ef710682840f6a854166aa614d", + "java-varargs-diagnostic/producer-only-resolve.log": "9a3a45166e24b7ef264875fc99ae49e18b3a126baf56c4f5f5b109e9e3d968ee", + "java-varargs-diagnostic/baseline-01.log": "2c1587620fcb3d378bd0c94bc0bf71c5b14ff9f10429d80d82f62ea80aeec761", + "java-varargs-diagnostic/contracts-01.log": "d70f9ffff231014739c5eeb5ea4b2c5a5cb0e9f6d3dbc84712cb8fd44d548f30", + "java-varargs-diagnostic/clippy-01.log": "adf1459c5cac778d6f7fd28395e465468c63f9e438d028ccbb600013437135b5", + "java-varargs-diagnostic/build-01.log": "d63af56313ebe58aef7f31611fe4fed72d54222db42bd84943bd3211ab438c5f", + "java-varargs-resolution/native-final.log": "bf1516ce088be591d99de141dab2046aec23e2fff636656d303fe2948651be00", + "java-varargs-resolution/clippy-tests.log": "b47a9884711b2e035b98cd955bee4af1e70ba7dd46890a993d299dbadc42eb9b", + "java-varargs-diagnostic/harness-tests-02.log": "8fedd09e36ee392c613b4ccfd37584791bc391e9fc4c2ff42816a7cbdd348817", + "java-varargs-resolution-02/native-01.log": "44b07e649c453850e1d78dddd17057855bdf028b06b7335dc905cebdbd7d649e", + "java-varargs-resolution-02/baseline-01.log": "ee6dc64908c834664e2e68bf9b553cd755b1a8e6dbe048b5ac393fb31e9cba7f", + "java-varargs-resolution-02/contracts-01.log": "34bd55d1c3416441534f72ce92506738bf2f190d3bc192b4e7c836ed78105653", + "java-varargs-resolution-02/clippy-01.log": "6295551a2ff153dac1a505ad7f0aa8ed54356d6009dbd4aea999ee310e08aaee", + "java-varargs-resolution-02/clippy-tests.log": "fac2c1f1a82ac72753325b2f827dc4175737176ce2e24891453446a5c3e5aba5", + "java-varargs-resolution-02/build-01.log": "417587ddafc7f98dcabb9a1e2a27c82e820f932ffa72d1bc535b88b7ad1fc735", + "java-varargs-resolution-02/array-receiver-native.log": "5bfc3defd7d1840c09033831db91e5acd305ab0f400c31be7ee5d407a3da2a39", + "java-varargs-resolution-02/array-receiver-clippy.log": "44af7ac5bc4dcde7a22e573735545e22d984787c7ac702a061db4bd5f2142562", + "java-varargs-resolution-02/full-qualification-02.log": "f3c8f86f610855ef9609782d356bee868df87f10a9b516728b1a74899097f289" + }, + "additionalArrayReceiverRegression": { + "status": "passed; spread, ordinary-array, and trailing-dimension parameters retain unresolved clone occurrences without an invented element/array type receiver", + "sourceSha256": "fc0ad39c4b606aeefc507d2c06a5d44cbfb4510e100c41bb93b9c5536686a71c", + "nativeLogSha256": "5bfc3defd7d1840c09033831db91e5acd305ab0f400c31be7ee5d407a3da2a39", + "clippyLogSha256": "44af7ac5bc4dcde7a22e573735545e22d984787c7ac702a061db4bd5f2142562", + "productionSourcesChanged": false + }, + "missingParameterTypesRegression": { + "before": "failed: an absent optional vector incorrectly selected a zero-argument overload", + "after": "passed: the exact-match shortcut now requires a complete parameter vector", + "beforeLogSha256": "9e9951ef1a3909d7a5b32f2eee93ad45f2be081f395584fe675870033d04d1fe", + "afterLogSha256": "44b07e649c453850e1d78dddd17057855bdf028b06b7335dc905cebdbd7d649e" + }, + "supersededFirstQualification": { + "exitCode": 0, + "logSha256": "92cc06186a8584921cb7faddc60d8abd060c8a4be2bd731ad6c7d20b7dc9a4a7", + "releaseBinarySha256": "6d6c0a4caddf791ecd669367535f153929e8e95ef2f571cacdc5fdbeff20fe5f", + "scope": "Superseded run: started before the late zero-argument missing-types guard and ended after that edit. Retained as diagnostic history; not final-source qualification evidence." + }, + "interruptedFinalQualification": { + "status": "interrupted; handle missing and no matching process remained after turn interruption", + "logSha256": "5db7d8616f7238454b9a3353cc44fb604fd8f5a8797265b80ff8160b834fa4d5", + "compilerSampleSha256": "82cb63586712db0208775b33be375afb6cb17e7dfd428d483b69c422c003952c", + "scope": "Initial final-source attempt completed semantic/topology checks but stopped during release compilation. Not counted as a complete qualification." + }, + "completedFinalQualification": { + "exitCode": 0, + "log": "java-varargs-resolution-02/full-qualification-02.log", + "logSha256": "f3c8f86f610855ef9609782d356bee868df87f10a9b516728b1a74899097f289", + "releaseBinarySha256": "b2f4b9d6331b6f45319ca7e7b19caa5d8a43ffa5c9e5f287902742e4ca8c65b3", + "productionSourcesMatchFrozenComparison": true, + "scope": "Complete fixtures-only gate including semantic assertions, topology, independent Markdown checks, release frontend precedence/activation/determinism and source-anchor checks." + } + }, + "limitations": [ + "Comparison scores are unchanged by this fix. The original reused questions remain unchanged, including failures.", + "Corrected Click occurrence witness remains a post-output diagnostic; original oracle is retained.", + "No fresh directed-path or MCP comparison, representative edge precision, responsibility/community quality, or god-object diagnosis established.", + "Unequal varargs prefixes, untyped arguments, incomplete hierarchy, and compiler-level generic inference remain conservative limitations.", + "Initial benchmark unittest discovery command ran zero tests; corrected tests directory ran 99 successfully.", + "Initial whole-graph cache equality assertion failed; structural records and community membership are equal but preserved community numeric IDs differ.", + "No latency claim; concurrent builds and executions share the machine." + ], + "artifactRoot": "java-varargs-resolution-02", + "specification": [ + "https://docs.oracle.com/javase/specs/jls/se17/html/jls-8.html#jls-8.4.1", + "https://docs.oracle.com/javase/specs/jls/se17/html/jls-15.html#jls-15.12.2" + ], + "intermediateRunId": "java-varargs-panel-a-01", + "finalGraphsByteIdenticalToIntermediate": true +} diff --git a/benchmarks/agent_query/java_varargs_diagnostic_review.json b/benchmarks/agent_query/java_varargs_diagnostic_review.json new file mode 100644 index 000000000..1aff964cc --- /dev/null +++ b/benchmarks/agent_query/java_varargs_diagnostic_review.json @@ -0,0 +1,163 @@ +{ + "schema": "compass.java-varargs-diagnostic/1", + "scope": "Post-jsoup-output Java varargs development reduction; expected signatures and overload targets derive from this compiler-valid source before inspecting the diagnostic graph. No comparative score.", + "productionBinarySha256": "04eab05bd5bbc94f3f0f86580bdd3de9950599bc9e548b8f8ba95791b8baa0c9", + "sourceSha256": "2581dc8bb5b39948aee5df49900307a321460bf380d56daccbc9b401e9c0cd63", + "policySha256": "d07f29d1636932ea8ed6c108519fb7deb0d7dc20f1b0c87d3a68394cb12562e8", + "graphSha256": "881ea26d715768179c6ae3648eb961dbef5fd574a3b0ef29afd76a729016e2ff", + "javacVersion": "javac 17.0.8.1", + "javapSha256": "d79f5f02a538d36bfbafdcc34e32cd26d8caf221aa7dbe13341f3ab092f17020", + "compilerCheck": "javac succeeds; javap descriptors/call instructions independently support all five expected targets. Classes were not executed.", + "declarations": [ + { + "id": "sha256:351c542ad2e232f2ea0d17b89768c59fe7f477ecb4494ad2c33d9df5696eed24", + "line": 8, + "expected": "arrays(String[],int[])", + "actual": "arrays(String[],int[])", + "matched": true + }, + { + "id": "sha256:42e6c1d161fe53865950740560f34b0dcf3594f05a79debcadff1c9b3f13ad52", + "line": 5, + "expected": "join(int...)", + "actual": "join()", + "matched": false + }, + { + "id": "sha256:7273808751d5af1d86f5092e42120e07b56175d8d307cb0d312c3b7b7cef3677", + "line": 7, + "expected": "prefixed(String,String...)", + "actual": "prefixed(String)", + "matched": false + }, + { + "id": "sha256:8123f7ec5f2331101c918c18bb9399669ffab56f3a843eeb9d8083b6890cb0df", + "line": 4, + "expected": "join(String...)", + "actual": "join()", + "matched": false + }, + { + "id": "sha256:d066b45429219b124cf01c557aa12350030de07430407cadaa3675b709f80f5b", + "line": 6, + "expected": "join(boolean)", + "actual": "join(boolean)", + "matched": true + } + ], + "calls": [ + { + "caller": "text", + "callerId": "sha256:29868b4674ae3182cf0cd3c42560a1ce91f690b36c865f90b9be795dd947a3d0", + "expectedTargetLine": 4, + "matched": false, + "actualEdges": [] + }, + { + "caller": "numbers", + "callerId": "sha256:f9f687138af8cd065ddeabbce57e96f6d6167c755068facc1e35d2d233e49bb5", + "expectedTargetLine": 5, + "matched": false, + "actualEdges": [] + }, + { + "caller": "flag", + "callerId": "sha256:b9acf75cf87d34702e50e4b3f4662a52f46a3bdf390d1a823a9f450d9c65d603", + "expectedTargetLine": 6, + "matched": true, + "actualEdges": [ + { + "id": "sha256:f383ed947b1c6c09363fc97746ff511578a8f5fa0f11077784dc174c5c3c71ae", + "target": "sha256:d066b45429219b124cf01c557aa12350030de07430407cadaa3675b709f80f5b", + "targetLine": 6, + "site": { + "file": "VarargsDemo.java", + "startByte": 518, + "endByte": 522, + "startLine": 11, + "startColumn": 34, + "endLine": 11, + "endColumn": 38 + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.resolve.java.universal", + "confidence": "exact", + "rule": "universal-call-exact-lexical-declaration", + "anchors": [ + { + "file": "VarargsDemo.java", + "startByte": 518, + "endByte": 522, + "startLine": 11, + "startColumn": 34, + "endLine": 11, + "endColumn": 38 + } + ] + } + ] + } + ] + }, + { + "caller": "explicitArray", + "callerId": "sha256:a603dc4fd8be2f3032f4da006d2a519b5dab3369a9a659418f4f572c68a8a4ab", + "expectedTargetLine": 4, + "matched": false, + "actualEdges": [] + }, + { + "caller": "mixed", + "callerId": "sha256:7e5a305a9c07d2bb49f922cd757f4c094667bb90bae191b53a14fd1efd507d74", + "expectedTargetLine": 7, + "matched": true, + "actualEdges": [ + { + "id": "sha256:879485c67e8b7c9f6b104dc531cf819a1938e46e47e1833172caa8f0bea8e383", + "target": "sha256:7273808751d5af1d86f5092e42120e07b56175d8d307cb0d312c3b7b7cef3677", + "targetLine": 7, + "site": { + "file": "VarargsDemo.java", + "startByte": 643, + "endByte": 651, + "startLine": 13, + "startColumn": 35, + "endLine": 13, + "endColumn": 43 + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.resolve.java.universal", + "confidence": "exact", + "rule": "universal-call-explicit-binding", + "anchors": [ + { + "file": "VarargsDemo.java", + "startByte": 643, + "endByte": 651, + "startLine": 13, + "startColumn": 35, + "endLine": 13, + "endColumn": 43 + } + ] + } + ] + } + ] + } + ], + "findings": [ + "Both varargs-only join signatures omit their parameter types; prefixed omits its trailing spread parameter. Boolean and ordinary array signatures are preserved.", + "The graph preserves only two of five source/compiler-supported calls: flag and mixed. String, integer and explicit-array overload calls are missing. No wrong target is emitted for those three in this reduction.", + "java_parameter_signature and collect_java_parameter_type_nodes only read child_by_field_name(type); spread_parameter can lack that field. This is a code-inspection hypothesis until AST/native regression confirms the exact grammar shape." + ], + "inspectionCorrection": "Initial inspection looked for a top-level signature field. Corrected inspection reads details.data.signature; no claim that all signatures are absent.", + "status": "Historical before-fix diagnostic; preserved failures. See followupReview for the subsequent native correction and repeated development comparison.", + "artifactRoot": "java-varargs-diagnostic", + "sourceFixture": "benchmarks/agent_query/fixtures/java_varargs/VarargsDemo.java", + "followupReview": "java_varargs_development_review.json" +} diff --git a/benchmarks/agent_query/literal_identifier_development_review.json b/benchmarks/agent_query/literal_identifier_development_review.json new file mode 100644 index 000000000..09686de7c --- /dev/null +++ b/benchmarks/agent_query/literal_identifier_development_review.json @@ -0,0 +1,300 @@ +{ + "schema": "compass.literal-identifier-development-review/1", + "sourceCommits": [ + "090140f5", + "6711e3a3" + ], + "scope": "Post-diagnostic query improvement on reused five-language repositories and fixed graph files. No extraction, held-out confirmation, latency comparison or overall superiority claim.", + "artifactRoot": "literal-identifiers-02", + "captureSha256": "49ad76b89b5a20c4c769fc5b5723a0e6a5184c706ba336f77d9d6cfee1c99842", + "collectorSha256": "1b48fe2ef13381878f2189ee0925a614a4712397edbc76bdb5e441f73ba5af86", + "reviewerSha256": "d39ba8337e5617d69c61b8975cd7cbd212d42af87ad879fb1d04ec37718ec1fe", + "rawManifestSha256": "3c6379cd6b6704333fed267b096222c926e8b5943ba2e6a0214ba425ddbbb7a1", + "rawFiles": 248, + "sourceFileSha256": { + "crates/compass-query/src/discovery.rs": "768dee69664d6af73e2c90adb6aae10d8f678d3731bfc68a680c1a565aabcd0f", + "crates/compass-cli/tests/code_query_cli.rs": "07d0289c9e1f74d28eb99bba16413052144e222d6a76a35e464937fd0aa0ec42" + }, + "tools": { + "compass": { + "sha256": "0bd42c8b4b5e88622747ec80920daa36a522ff326355fb35adea3b55f5e9fe3f", + "digestScope": "executable-file-only" + }, + "graphify": { + "sha256": "a7fdb4ac8985755be15f10f89a2d17ee517130b3ac90c28c91644ae351881da3", + "digestScope": "executable-file-only" + } + }, + "sourceRunSha256": "c2bc04366343fbd32bbdf84ccfb1db7aaad2e2ed38b38f979065c6755432d792", + "suiteSha256": "820a5c29f59e68b4ee8493e153c806b23e458a396431f3cf381660e469391237", + "runnerSha256": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "comparativeRecall": { + "compass": { + "requests": 55, + "passed": 49 + }, + "graphify": { + "requests": 55, + "passed": 46 + } + }, + "verdictChanges": [], + "responsibilityResponseDiagnostics": [ + { + "repository": "chi", + "tool": "compass", + "beforeSha256": "37657db8665dda901e0e3befbd557c0987c833bc18c6e6722ae004b7c4e27bbf", + "afterSha256": "37657db8665dda901e0e3befbd557c0987c833bc18c6e6722ae004b7c4e27bbf", + "stdoutBytes": 7949, + "beforeSeedRows": [ + "SEED chi.Mux::Route [source=alias; matched=mux,route]", + "SEED middleware.HeaderRouter::Route [source=alias; matched=middleware,route,router]", + "SEED chi.Mux::Routes [source=term_index; matched=mux]" + ], + "afterSeedRows": [ + "SEED chi.Mux::Route [source=alias; matched=mux,route]", + "SEED middleware.HeaderRouter::Route [source=alias; matched=middleware,route,router]", + "SEED chi.Mux::Routes [source=term_index; matched=mux]" + ], + "ambiguousSeedWarnings": 1, + "lineMultisetUnchanged": true + }, + { + "repository": "chi", + "tool": "graphify", + "beforeSha256": "1bf6c1ffd510f5a1183367edaba6fb6a7a66764cd9a658fdaa9cfa3eeff6b52f", + "afterSha256": "1bf6c1ffd510f5a1183367edaba6fb6a7a66764cd9a658fdaa9cfa3eeff6b52f", + "stdoutBytes": 6571, + "beforeSeedRows": [], + "afterSeedRows": [], + "ambiguousSeedWarnings": 0, + "lineMultisetUnchanged": true + }, + { + "repository": "click", + "tool": "compass", + "beforeSha256": "09d1dab6c20017246f8e36ffe47f45c995cdf3b8f9d2e4fa9717f843769cdaf3", + "afterSha256": "d96d1f8f106be2093d3613fe9656b885f238ff9c2819d476f151ff8e0562bec0", + "stdoutBytes": 7966, + "beforeSeedRows": [ + "SEED src.click.core.Context::close [source=alias; matched=close,context,exception]", + "SEED src.click.utils._LazyFile::close [source=alias; matched=close,file]", + "SEED src.click._compat._AtomicFile::close [source=alias; matched=_atomic,close,file]" + ], + "afterSeedRows": [ + "SEED src.click._compat._AtomicFile [source=exact_name; matched=file]", + "SEED src.click.core.Context::close [source=alias; matched=close,context,exception]", + "SEED src.click.utils._LazyFile::close [source=alias; matched=close,file]" + ], + "ambiguousSeedWarnings": 0, + "lineMultisetUnchanged": false + }, + { + "repository": "click", + "tool": "graphify", + "beforeSha256": "f8e7ae3aae06a943c686f3cd5f94cc7c7ea1f7da243ef8aa1ff35b5984564da5", + "afterSha256": "f8e7ae3aae06a943c686f3cd5f94cc7c7ea1f7da243ef8aa1ff35b5984564da5", + "stdoutBytes": 6850, + "beforeSeedRows": [], + "afterSeedRows": [], + "ambiguousSeedWarnings": 0, + "lineMultisetUnchanged": true + }, + { + "repository": "jsoup", + "tool": "compass", + "beforeSha256": "51bcb6e5217ff0bb974a18fb07a6b636d7a2b67c2ed5641c5da5ad1acf6c5a94", + "afterSha256": "51bcb6e5217ff0bb974a18fb07a6b636d7a2b67c2ed5641c5da5ad1acf6c5a94", + "stdoutBytes": 7938, + "beforeSeedRows": [ + "SEED org.jsoup.safety.Cleaner::clean [source=alias; matched=clean,cleaner]", + "SEED org.jsoup.safety.Cleaner [source=alias; matched=cleaner]", + "SEED org.jsoup.safety.Safelist [source=alias; matched=safelist]" + ], + "afterSeedRows": [ + "SEED org.jsoup.safety.Cleaner::clean [source=alias; matched=clean,cleaner]", + "SEED org.jsoup.safety.Cleaner [source=alias; matched=cleaner]", + "SEED org.jsoup.safety.Safelist [source=alias; matched=safelist]" + ], + "ambiguousSeedWarnings": 1, + "lineMultisetUnchanged": true + }, + { + "repository": "jsoup", + "tool": "graphify", + "beforeSha256": "21db49e7171f06bfa3b36559f63a622705673ca94869932c49389803f09829c2", + "afterSha256": "21db49e7171f06bfa3b36559f63a622705673ca94869932c49389803f09829c2", + "stdoutBytes": 6667, + "beforeSeedRows": [], + "afterSeedRows": [], + "ambiguousSeedWarnings": 0, + "lineMultisetUnchanged": true + }, + { + "repository": "redux", + "tool": "compass", + "beforeSha256": "d30483e834045767618774140ade72fac87144bd43938a2360ab005ba9681235", + "afterSha256": "61c7e11bb1a2688b1dd9d03f470578e3c8e9def2855312520cf32fe19bd400cf", + "stdoutBytes": 7939, + "beforeSeedRows": [ + "SEED store.Dispatch [source=alias; matched=dispatch,store]", + "SEED store.Store [source=term_index; matched=store]", + "SEED createStore.createStore [source=term_index; matched=create,store]" + ], + "afterSeedRows": [ + "SEED createStore.createStore [source=exact_name; matched=create,store]", + "SEED createStore.createStore [source=exact_name; matched=create,store]", + "SEED createStore.createStore [source=exact_name; matched=create,store]" + ], + "ambiguousSeedWarnings": 3, + "lineMultisetUnchanged": false + }, + { + "repository": "redux", + "tool": "graphify", + "beforeSha256": "ba6c21a04ee4f7d720ee74726dd4551ce982429d97ade961ce50db31ef9a58da", + "afterSha256": "ba6c21a04ee4f7d720ee74726dd4551ce982429d97ade961ce50db31ef9a58da", + "stdoutBytes": 6609, + "beforeSeedRows": [], + "afterSeedRows": [], + "ambiguousSeedWarnings": 0, + "lineMultisetUnchanged": true + }, + { + "repository": "walkdir", + "tool": "compass", + "beforeSha256": "4e0658ae31900521385690c31083b617977c322a9af823faf5f17505ad63be49", + "afterSha256": "3e5d0641ad3345954446273004e4df1dcc15638ca7743af5dfea4eeaf007df23", + "stdoutBytes": 7988, + "beforeSeedRows": [ + "SEED ::IntoIter [source=term_index; matched=iter]", + "SEED walkdir::IntoIter [source=term_index; matched=iter]", + "SEED walkdir::IntoIter::oldest_opened [source=term_index; matched=iter]" + ], + "afterSeedRows": [ + "SEED ::IntoIter [source=exact_name; matched=iter]", + "SEED walkdir::IntoIter [source=exact_name; matched=iter]", + "SEED walkdir::IntoIter::oldest_opened [source=term_index; matched=iter]" + ], + "ambiguousSeedWarnings": 2, + "lineMultisetUnchanged": false + }, + { + "repository": "walkdir", + "tool": "graphify", + "beforeSha256": "729cd0be188021d0e815f4167dd547728feb812a8a497f638f9164f86f3028be", + "afterSha256": "cc7707051db63230b38ff79ded253197a5885ce0576b72818b8c67809d453989", + "stdoutBytes": 26609, + "beforeSeedRows": [], + "afterSeedRows": [], + "ambiguousSeedWarnings": 0, + "lineMultisetUnchanged": true + } + ], + "verification": { + "fmt": { + "file": "literal-identifiers-final-fmt.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "passed": 0, + "failed": 0, + "ignored": 0, + "testBinaries": 0 + }, + "cli": { + "file": "literal-identifiers-final-cli.log", + "sha256": "c12ba8c90191e4deb956e8ec1669f89acc7e055678f124d3e9e7c8d586d44e57", + "passed": 37, + "failed": 0, + "ignored": 0, + "testBinaries": 1 + }, + "clippy": { + "file": "literal-identifiers-final-clippy.log", + "sha256": "6d31f6b1b212dc557bb58b86087e5a0e0ecd982be4dd1e67469c91a85316cc45", + "passed": 0, + "failed": 0, + "ignored": 0, + "testBinaries": 0 + }, + "workspace": { + "file": "literal-identifiers-final-workspace.log", + "sha256": "0ae8e0c9bcba9ce735e0470f205d9a1396b16d78550ea0dc75df12c592511961", + "passed": 1098, + "failed": 0, + "ignored": 2, + "testBinaries": 36 + }, + "query-integration": { + "file": "literal-identifiers-final-query-integration.log", + "sha256": "5f849a6ea3007a512faa898abe8005203a926792da86c129ab767e85c987798f", + "passed": 310, + "failed": 0, + "ignored": 0, + "testBinaries": 22 + }, + "product": { + "file": "literal-identifiers-final-product.log", + "sha256": "865ab9abec073a33b12deb5eb77ad86ce27306d2de4e96d06b9473e2e8c33def", + "passed": 9, + "failed": 0, + "ignored": 0, + "testBinaries": 1 + }, + "boundary": { + "file": "literal-identifiers-final-boundary.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "passed": 0, + "failed": 0, + "ignored": 0, + "testBinaries": 0 + } + }, + "developmentHistory": [ + { + "stage": "Initial literal-name regressions", + "log": "literal-identifiers-before.log", + "sha256": "ea746a95afb3c71742eee1261c57c9890c46d33bc1dbfb1e20db9d5a85408037", + "result": "One passed; exact provenance assertions failed in two tests before implementation." + }, + { + "stage": "Bounded lookup completeness regression", + "log": "literal-identifiers-query-tests-02.log", + "sha256": "c87d46c77c246bafc5dffd94a1b98fe256e062fa7a1e93cc60efc8b4f7276ef5", + "result": "184 passed, one failed: operation ranking incorrectly overrode truncated exact-name evidence. Fixed before the first real-repository candidate run." + }, + { + "stage": "Initial candidate comparison", + "artifactRoot": "literal-identifiers-01", + "captureSha256": "99252edb505910b27fbc51f111327121bff1db564fe746b28df6f73610f26888", + "result": "110 suite requests plus ten responsibility queries completed; unchanged 49/55 versus 46/55 recall. Redux exposed inconsistent per-seed ambiguity; Click displayed matched=none." + }, + { + "stage": "Initial workspace verification interrupted", + "log": "literal-identifiers-clippy.log", + "sha256": "162c4ffa5e5799e2ef69d0a11b01c7e803e2f12b6646b64477bac61b89a464c1", + "result": "Validation process group intentionally terminated with exit 143 to fix the observed collision classification. Not a completed baseline; superseded by final verification." + }, + { + "stage": "Cross-kind exact collision regression", + "log": "literal-identifiers-metadata-before.log", + "sha256": "8228ddc03ea4885c129d8cb90287ffcc6f9cc20a1279004c5321d922f5b29f5f", + "result": "Five passed; same-name struct/function ambiguity test failed before correction." + }, + { + "stage": "Final query library verification", + "log": "literal-identifiers-query-tests-04.log", + "sha256": "49a1f70f3113a34e2ced9a10c46bbe3851c8f2d055ff985d170daca0bc00965a", + "result": "186 passed, zero failed." + } + ], + "interpretation": [ + "Literal underscores and internal mixed-case capitals now receive bounded declared-name probes ahead of generic behavior terms. Missing literal spellings do not promote partial names, and ordinary words retain lexical ranking.", + "Exact-name collisions remain ambiguous across ranking evidence and declaration kinds. Global posting truncation and pool truncation cannot establish uniqueness. Six focused unit regressions plus an actual CLI subprocess regression exercise these boundaries.", + "Click _AtomicFile moves from surrounding-node context to the first exact-name seed. Redux createStore declarations all become exact-name seeds and all three carry ambiguity warnings. This is a post-output anchor diagnostic, not a new scored success rate.", + "Chi Mux and jsoup Cleaner outputs remain byte-identical. Single capitalized words do not receive the new literal-compound treatment. Further subject understanding remains open.", + "The unchanged 55-question suite per tool retains 49 versus 46 recall-proxy passes with no verdict changes. These checks do not establish full edge precision, source occurrence correctness or answer completeness.", + "Responsibility response rows and their actual byte sizes are retained. The earlier 11/20 versus 13/20 bounded source-follow-up result belongs to its frozen pre-change workflow; no new source-follow-up fact score is inferred here.", + "The query integration log includes the query library tests again; verification groups overlap and must not be summed as unique tests. The workspace log contains a pre-existing compass-core test unused_mut warning; the strict production Clippy invocation completes successfully.", + "Extraction, parser and graph publication code did not change in these commits. The prior extraction qualification is retained separately; no new full fixture/release-extraction gate is claimed for this query-only iteration. Fresh held-out evaluation, god-object diagnosis and functional community quality remain unfinished." + ] +} diff --git a/benchmarks/agent_query/longer_path_label_control_registration.json b/benchmarks/agent_query/longer_path_label_control_registration.json new file mode 100644 index 000000000..a96119b68 --- /dev/null +++ b/benchmarks/agent_query/longer_path_label_control_registration.json @@ -0,0 +1,11 @@ +{ + "schema": "compass.longer-path-label-control-registration/1", + "parentProtocolCommit": "0f3df063457368f333a8448c818ce4f010b5f837", + "reason": "The first new source-assisted Chi response again used different endpoints in Graphify CLI despite public resolver IDs. Keep cross-interface identity separate from native short-label path quality.", + "timing": "Registered after observing the Chi source-assisted output and prior ID/label studies, before this new label control. Other source-assisted cases are still being captured. Not blind or held-out.", + "inputs": "Use exactly nodes[0].symbol and nodes[-1].symbol from each of the five longer_path_witnesses.json tasks. No aliases, retries or scope changes.", + "commands": "Compass node SOURCE TARGET --max-depth 8 --max-paths 1 --format json --graph GRAPH; Graphify path SOURCE TARGET --directed --graph GRAPH.", + "artifacts": "Use the same ten frozen graphs, final evaluated Compass binary and hash-verified Graphify environment as the source-assisted arm.", + "bounds": "60 seconds and 16 MiB per stdout/stderr stream. Internal work limits differ; no speed ranking.", + "scoring": "Keep all five positive tasks. Review full ordered node identity, directed call edges, source anchors and alternate routes with the same source witnesses. Ambiguity, wrong endpoints, mixed-relation paths, limits and missing paths are distinct failures to complete a reviewed call-chain request. Never combine the best outputs from ID and label arms into a new primary score." +} diff --git a/benchmarks/agent_query/longer_path_registration.json b/benchmarks/agent_query/longer_path_registration.json new file mode 100644 index 000000000..8a1e06a21 --- /dev/null +++ b/benchmarks/agent_query/longer_path_registration.json @@ -0,0 +1,49 @@ +{ + "schema": "compass.longer-path-registration/1", + "registeredAt": "2026-09-27T15:06:17.015840+00:00", + "baselineCommit": "ce8b739417442a9d2a3ce8da0c2913d76e85f4e6", + "sourceWitnesses": { + "longer_path_witnesses.json": "33d1cdccc5cfb6f4225674c36ee7616b6dc21e0a51c2c5bbedc8fa1e44ae8718" + }, + "graphRun": "java-state-access-02/run.json", + "graphRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "baselineBinary": "member-focus-02/compass", + "baselineBinarySha256": "e33934b94d1e254ba59906fddece098d8433bf7e31af746e46aac3dfc6744f97", + "scope": "Source-selected longer chains across Go, Python, Java, TypeScript and Rust. All repository graphs and older questions have been observed. No graph route inspected to choose these endpoint pairs.", + "endpointResolution": "One public resolver per endpoint/tool. Both selectors validate identical symbol, file and declaration line. Compass search_symbols exact=true with source_file/start_line and old 256/500/524288 bounds; Graphify get_node file::symbol, validate source coordinate afterward. No graph ID substitution, retries or relaxed anchors. No kind filter.", + "pathRequests": [ + "compass", + "node", + "SOURCE", + "TARGET", + "--max-depth", + "8", + "--max-paths", + "1", + "--format", + "json", + "--graph", + "GRAPH" + ], + "graphifyPathRequests": [ + "graphify", + "path", + "SOURCE", + "TARGET", + "--directed", + "--graph", + "GRAPH" + ], + "bounds": "Same 60 second deadline and 16 MiB per CLI stream, 1 MiB MCP response. Compass depth 8 and one path; Graphify has no matching depth flag. No equal-work or latency claim.", + "judgment": "A complete directed call chain must identify the source declarations and each edge orientation/occurrence in the graph and source. Endpoint echoes, candidate lists, disconnected edges, or a reversed route do not count. Registered route is a positive witness, not a requirement to choose the same shortest route; independently source-review any alternate returned route.", + "reverse": "Diagnostic probes only. The forward source witness does not prove global reverse unreachability. No-path/ambiguous/limit answers receive no absence credit. Review any returned reverse route for actual directed source support.", + "diagnostics": "Compass max_depth 1 through one below the registered primary witness hops. Any alternate returned path must be source reviewed; never score it wrong solely for differing from witness. Retain overload/label ambiguity and mixed-relation routes as unmet call-path tasks. Do not assert shortest source paths from witnesses.", + "confidence": "Source-supported inferred edges may be recorded as such; neither tool gets exact-evidence credit for weak/unknown confidence.", + "verification": "Verify source revision, clean checkouts, source anchors and file digests, all graph/binary/environment hashes before and after. Preserve every output and every failure. Commit registration before running these endpoint pairs.", + "limitations": [ + "Five known development repositories; no held-out confirmation.", + "Endpoint assistance is part of workflow cost and differs from free-text question answering.", + "Source-supported static calls need not run on every invocation.", + "God-object design judgments, authored explanations and broader community/path quality remain unproven." + ] +} diff --git a/benchmarks/agent_query/longer_path_review.json b/benchmarks/agent_query/longer_path_review.json new file mode 100644 index 000000000..533bd6150 --- /dev/null +++ b/benchmarks/agent_query/longer_path_review.json @@ -0,0 +1,4370 @@ +{ + "schema": "compass.longer-path-review/1", + "scope": "Five new endpoint pairs, four-to-seven-call source witnesses, on previously inspected development repositories. Exact source-assisted public lookup and native short-label CLI are separate arms; no held-out or broad superiority claim.", + "registrationCommits": { + "sourceAssisted": "0f3df063", + "nativeLabels": "3eaefede" + }, + "productBinary": { + "path": "member-focus-02/compass", + "sha256": "e33934b94d1e254ba59906fddece098d8433bf7e31af746e46aac3dfc6744f97", + "version": "0.3.30", + "productionChanged": false + }, + "graphs": [ + { + "repository": "chi", + "source": "/Volumes/Workspace/Github/go-chi/chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/chi/compass/compass-out/snapshots/snapshot-1790515138751835000-41295-0/graph.json", + "compassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "compassBuildArgv": [ + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/compass", + "extract", + "/Volumes/Workspace/Github/go-chi/chi", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/chi/compass" + ], + "compassBuildExit": 0, + "compassBuildMs": 3724, + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/java-varargs-panel-a-02/artifacts/chi/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf", + "graphifyGraphReused": true + }, + { + "repository": "click", + "source": "/Volumes/Workspace/Github/pallets/click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/click/compass/compass-out/snapshots/snapshot-1790515142562123000-41316-0/graph.json", + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "compassBuildArgv": [ + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/compass", + "extract", + "/Volumes/Workspace/Github/pallets/click", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/click/compass" + ], + "compassBuildExit": 0, + "compassBuildMs": 11831, + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/java-varargs-panel-a-02/artifacts/click/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234", + "graphifyGraphReused": true + }, + { + "repository": "jsoup", + "source": "/Volumes/Workspace/Github/jhy/jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/jsoup/compass/compass-out/snapshots/snapshot-1790515154618245000-41532-0/graph.json", + "compassGraphSha256": "2a9216926b1c5dfc82e4f88df0cce24a7a14ac67aa2a350158eff39018145314", + "compassBuildArgv": [ + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/compass", + "extract", + "/Volumes/Workspace/Github/jhy/jsoup", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/jsoup/compass" + ], + "compassBuildExit": 0, + "compassBuildMs": 36218, + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/java-varargs-panel-a-02/artifacts/jsoup/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69", + "graphifyGraphReused": true + }, + { + "repository": "redux", + "source": "/Volumes/Workspace/Github/reduxjs/redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/redux/compass/compass-out/snapshots/snapshot-1790515191034845000-42365-0/graph.json", + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "compassBuildArgv": [ + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/compass", + "extract", + "/Volumes/Workspace/Github/reduxjs/redux", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/redux/compass" + ], + "compassBuildExit": 0, + "compassBuildMs": 10420, + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/java-varargs-panel-a-02/artifacts/redux/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b", + "graphifyGraphReused": true + }, + { + "repository": "walkdir", + "source": "/Volumes/Workspace/Github/BurntSushi/walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "compassGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/walkdir/compass/compass-out/snapshots/snapshot-1790515201525451000-42393-0/graph.json", + "compassGraphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "compassBuildArgv": [ + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/compass", + "extract", + "/Volumes/Workspace/Github/BurntSushi/walkdir", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/java-state-access-02/graphs/walkdir/compass" + ], + "compassBuildExit": 0, + "compassBuildMs": 2251, + "graphifyGraph": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/runs/java-varargs-panel-a-02/artifacts/walkdir/graphify/graphify-out/graph.json", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd", + "graphifyGraphReused": true + } + ], + "summary": { + "sourceAssisted": { + "compass": { + "sourceSupportedCallPaths": 2, + "frozenOccurrenceSitesMatch": 1, + "tasks": 5 + }, + "graphify": { + "sourceSupportedCallPaths": 0, + "frozenOccurrenceSitesMatch": 0, + "tasks": 5 + } + }, + "nativeLabels": { + "compass": { + "sourceSupportedCallPaths": 1, + "frozenOccurrenceSitesMatch": 1, + "tasks": 5 + }, + "graphify": { + "sourceSupportedCallPaths": 1, + "frozenOccurrenceSitesMatch": 0, + "tasks": 5 + } + } + }, + "sourceAssisted": [ + { + "question": "chi-longer-chain", + "tool": "compass", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "coordinate": [ + "mux.go", + 137 + ] + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "coordinate": [ + "mux.go", + 127 + ] + }, + { + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "name": ".handle()", + "coordinate": [ + "mux.go", + 430 + ] + }, + { + "id": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "name": ".InsertRoute()", + "coordinate": [ + "tree.go", + 148 + ] + }, + { + "id": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "name": ".addChild()", + "coordinate": [ + "tree.go", + 244 + ] + }, + { + "id": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "name": ".Sort()", + "coordinate": [ + "tree.go", + 834 + ] + }, + { + "id": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "name": ".tailSort()", + "coordinate": [ + "tree.go", + 841 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:275a2a085c7409a899e065c2d836a8a75506ddd76542ac01de4764e50e899b32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4471, + "endByte": 4480, + "startLine": 138, + "startColumn": 1, + "endLine": 138, + "endColumn": 10 + }, + "sourceBytes": "mx.Method", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 138, + "sourceLine": "mx.Method(method, pattern, handlerFn)" + }, + { + "edgeId": "sha256:3155b7566154b5aa0c12e18cd3b3049c0b96cc58b9d8a2f0fa38df38f24cb968", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4235, + "endByte": 4244, + "startLine": 132, + "startColumn": 1, + "endLine": 132, + "endColumn": 10 + }, + "sourceBytes": "mx.handle", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 132, + "sourceLine": "mx.handle(m, pattern, handler)" + }, + { + "edgeId": "sha256:a8a9ae5d8e8d38059bf3959a56f6ab77056b2a23faac85a18f88ce28c5fdebb5", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 14628, + "endByte": 14647, + "startLine": 450, + "startColumn": 8, + "endLine": 450, + "endColumn": 27 + }, + "sourceBytes": "mx.tree.InsertRoute", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 450, + "sourceLine": "return mx.tree.InsertRoute(method, pattern, h)" + }, + { + "edgeId": "sha256:17503263f573f194d45c6ae391671d2d5a4bd4e12bc747506a22ada192cbfc7a", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 5436, + "endByte": 5450, + "startLine": 234, + "startColumn": 8, + "endLine": 234, + "endColumn": 22 + }, + "sourceBytes": "child.addChild", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 234, + "sourceLine": "hn := child.addChild(subchild, search)" + }, + { + "edgeId": "sha256:601de0e2ca7205974e0faaff74d434e41ad0dd888152555f0c59fbd7628deac2", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 7758, + "endByte": 7784, + "startLine": 324, + "startColumn": 1, + "endLine": 324, + "endColumn": 27 + }, + "sourceBytes": "n.children[child.typ].Sort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 324, + "sourceLine": "n.children[child.typ].Sort()" + }, + { + "edgeId": "sha256:19b5d096b571e01247e9a40f78c6ac42547439d6983705ea941b42468340359f", + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 19591, + "endByte": 19602, + "startLine": 834, + "startColumn": 53, + "endLine": 834, + "endColumn": 64 + }, + "sourceBytes": "ns.tailSort", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 834, + "sourceLine": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": false, + "registeredRoute": "primary", + "sourceWitness": { + "id": "chi-longer-chain", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "question": "Find a directed source-supported call chain from MethodFunc to tailSort. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "mux.go", + "line": 137, + "text": "func (mx *Mux) MethodFunc(", + "symbol": "MethodFunc", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 127, + "text": "func (mx *Mux) Method(method,", + "symbol": "Method", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 430, + "text": "func (mx *Mux) handle(method", + "symbol": "handle", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "tree.go", + "line": 148, + "text": "func (n *node) InsertRoute(", + "symbol": "InsertRoute", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + }, + { + "file": "tree.go", + "line": 244, + "text": "func (n *node) addChild(child *node, prefix string) *node {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "addChild" + }, + { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "Sort" + }, + { + "file": "tree.go", + "line": 841, + "text": "func (ns nodes) tailSort() {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "tailSort" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 138, + "text": "mx.Method(method, pattern, handlerFn)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 132, + "text": "mx.handle(m, pattern, handler)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 450, + "text": "return mx.tree.InsertRoute(method, pattern, h)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 183, + "text": "hn := parent.addChild(child, search)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 324, + "text": "n.children[child.typ].Sort()", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + } + ], + "sourceInterpretation": "Six static call steps. InsertRoute new-child branch; node.children is an array of nodes (tree.go:112,831). Sort invokes tailSort directly, independently of sort.Sort callback dispatch. Not a guarantee for every route registration." + }, + "hops": 6 + }, + { + "question": "chi-longer-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "mux_go_chi_mux", + "name": "Mux", + "coordinate": [ + "mux.go", + 21 + ] + }, + { + "id": "chi_node", + "name": "node", + "coordinate": [ + "tree.go", + 97 + ] + }, + { + "id": "chi_nodes", + "name": "nodes", + "coordinate": [ + "tree.go", + 831 + ] + } + ], + "steps": [ + { + "relation": "references", + "direction": "forward", + "confidence": "EXTRACTED", + "storedEdges": [ + { + "source": "mux_go_chi_mux", + "target": "chi_node", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "field", + "source_file": "mux.go", + "source_location": "L27", + "weight": 1.0 + } + ] + }, + { + "relation": "references", + "direction": "forward", + "confidence": "EXTRACTED", + "storedEdges": [ + { + "source": "chi_node", + "target": "chi_nodes", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "field", + "source_file": "tree.go", + "source_location": "L112", + "weight": 1.0 + } + ] + } + ], + "renderedLabels": [ + "Mux", + "node", + "nodes" + ], + "renderedIdentityCandidates": [ + [ + "mux_go_chi_mux" + ], + [ + "chi_node" + ], + [ + "chi_nodes" + ] + ], + "endpointsMatch": [ + false, + false + ], + "classification": "wrong-endpoints" + }, + { + "question": "click-longer-chain", + "tool": "compass", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 422, + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + }, + { + "edgeId": "sha256:545665ec87f7ce482e62b5d92cc4e15ff1b43d7200ca996b886db73a6284ee5d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 11990, + "endByte": 12005, + "startLine": 390, + "startColumn": 19, + "endLine": 390, + "endColumn": 34 + }, + "sourceBytes": "get_text_stdout", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 390, + "sourceLine": "return get_text_stdout(encoding=encoding, errors=errors), False" + }, + { + "edgeId": "sha256:ca9f65d65cb42c4eca5c973d4653b50a88a86ffce59b508ef56ee64e4964ab64", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 10722, + "endByte": 10748, + "startLine": 351, + "startColumn": 11, + "endLine": 351, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_writer", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 351, + "sourceLine": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)" + }, + { + "edgeId": "sha256:76fba4b8cd7a8308c4cf92ab52dc9bbf57aaf6cc5aa0bbacc6edea6ff7589bab", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 9407, + "endByte": 9433, + "startLine": 309, + "startColumn": 11, + "endLine": 309, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 309, + "sourceLine": "return _force_correct_text_stream(" + }, + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 8034, + "endByte": 8058, + "startLine": 257, + "startColumn": 33, + "endLine": 257, + "endColumn": 57 + }, + "sourceBytes": "_stream_is_misconfigured", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 257, + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)" + }, + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 6550, + "endByte": 6567, + "startLine": 218, + "startColumn": 11, + "endLine": 218, + "endColumn": 28 + }, + "sourceBytes": "is_ascii_encoding", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 218, + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "preregistered-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "click-longer-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "classification": "no-path-reported" + }, + { + "question": "jsoup-longer-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "name": ".isValid()", + "coordinate": [ + "src/main/java/org/jsoup/Jsoup.java", + 434 + ] + }, + { + "id": "sha256:e800188397e3d537f837813168a0129fa6e5c7b853657e72bd20769d4d34bab9", + "name": "Cleaner", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 43 + ] + }, + { + "id": "sha256:8257236caa700621772547e7e6e703855b8f9e467af826e6a0b978aaee61cd86", + "name": "CleaningVisitor", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 138 + ] + }, + { + "id": "sha256:65912eb3660f15092355589775d874a7a702efcf0336e9865cf93b4fb56aaa29", + "name": ".head()", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 148 + ] + }, + { + "id": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "name": ".appendChild()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 813 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:c8ea55e34246710ed3a0a1c63d521e1207bf550bd4dcb5040d9a65fc6e09bf02", + "relation": "instantiates", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "startByte": 19693, + "endByte": 19700, + "startLine": 435, + "startColumn": 19, + "endLine": 435, + "endColumn": 26 + }, + "sourceBytes": "Cleaner", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:7970bf4749a996044fcdf02e1947fc37bac8bf2d10092db7edb472afb97b4475", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6345, + "endByte": 6360, + "startLine": 138, + "startColumn": 24, + "endLine": 138, + "endColumn": 39 + }, + "sourceBytes": "CleaningVisitor", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:95231134987023788fcf9e55846c662a21af12234dfe7f02eb7d5be938f5b097", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6720, + "endByte": 6724, + "startLine": 148, + "startColumn": 30, + "endLine": 148, + "endColumn": 34 + }, + "sourceBytes": "head", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:467a8313fd3a25e31275fa33804801be78f03e7d2a61616be6024810613bccd8", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 7904, + "endByte": 7915, + "startLine": 169, + "startColumn": 28, + "endLine": 169, + "endColumn": 39 + }, + "sourceBytes": "appendChild", + "confidence": [ + "exact" + ] + } + ], + "truncated": true, + "diagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + }, + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + }, + { + "question": "jsoup-longer-chain", + "tool": "graphify", + "classification": "execution-failure", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false + }, + { + "question": "redux-longer-chain", + "tool": "compass", + "classification": "unresolved-endpoint", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "endpointSelections": [ + { + "status": "anchor-mismatch", + "matchedIds": [], + "selector": null, + "returnedAnchors": [] + }, + { + "status": "resolved", + "matchedIds": [ + "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e" + ], + "selector": "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e", + "returnedAnchors": [ + { + "id": "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e", + "file": "src/utils/kindOf.ts", + "line": 40, + "symbols": [ + "ctorName" + ] + } + ] + } + ] + }, + { + "question": "redux-longer-chain", + "tool": "graphify", + "classification": "unresolved-endpoint", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "endpointSelections": [ + { + "status": "unresolved-response", + "matchedIds": [], + "selector": null, + "returnedAnchors": [] + }, + { + "status": "resolved", + "matchedIds": [ + "src_utils_kindof_ctorname" + ], + "selector": "src_utils_kindof_ctorname", + "returnedAnchors": [ + { + "id": "src_utils_kindof_ctorname", + "file": "src/utils/kindOf.ts", + "line": 40, + "symbols": [ + "ctorName" + ] + } + ] + } + ] + }, + { + "question": "walkdir-longer-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "coordinate": [ + "src/lib.rs", + 687 + ] + }, + { + "id": "sha256:fee92110685574fab9cc9ed406f9087b0a31367f58d21a22a3fc0146ab585f35", + "name": ".from_path()", + "coordinate": [ + "src/error.rs", + 162 + ] + }, + { + "id": "sha256:a66dc1de7a258eafe92e616e5c94a0107fda891db6f9ca33ca1e10fbac5845c9", + "name": "Error", + "coordinate": [ + "src/error.rs", + 28 + ] + }, + { + "id": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "name": ".from_loop()", + "coordinate": [ + "src/error.rs", + 184 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:ebafa756aa191dbe1c4a2036f69e77f65f78e9e8fc7aef535f942b023b6e2e7d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/lib.rs", + "startByte": 23832, + "endByte": 23848, + "startLine": 691, + "startColumn": 33, + "endLine": 691, + "endColumn": 49 + }, + "sourceBytes": "Error::from_path", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:41187f8bce764264633ff57f9d90649df36157f5953666a2e6ff12a793ff6a36", + "relation": "returns", + "direction": "forward", + "site": { + "file": "src/error.rs", + "startByte": 6275, + "endByte": 6279, + "startLine": 166, + "startColumn": 9, + "endLine": 166, + "endColumn": 13 + }, + "sourceBytes": "Self", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:808b946031e19484e268e5d018381338c0a64e04622a0579774d0501d9c3a28f", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/error.rs", + "startByte": 6783, + "endByte": 6792, + "startLine": 184, + "startColumn": 18, + "endLine": 184, + "endColumn": 27 + }, + "sourceBytes": "from_loop", + "confidence": [ + "exact" + ] + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + }, + { + "question": "walkdir-longer-chain", + "tool": "graphify", + "classification": "unresolved-endpoint", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "endpointSelections": [ + { + "status": "anchor-mismatch", + "matchedIds": [], + "selector": null, + "returnedAnchors": [ + { + "id": "src_lib_dirlist_next", + "file": "src/lib.rs", + "line": 1019, + "symbols": [ + "next" + ] + } + ] + }, + { + "status": "resolved", + "matchedIds": [ + "src_error_error_from_loop" + ], + "selector": "src_error_error_from_loop", + "returnedAnchors": [ + { + "id": "src_error_error_from_loop", + "file": "src/error.rs", + "line": 184, + "symbols": [ + "from_loop" + ] + } + ] + } + ] + } + ], + "nativeLabels": [ + { + "question": "chi-longer-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"MethodFunc\" matched 2 nodes", + "nodeId": null, + "path": null + } + ], + "classification": "ambiguous" + }, + { + "question": "chi-longer-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "renderedLabels": [ + ".MethodFunc()", + ".Method()", + ".handle()", + "node", + "nodes", + ".tailSort()" + ], + "renderedIdentityCandidates": [ + [ + "chi_mux_methodfunc", + "chi_router_methodfunc" + ], + [ + "chi_mux_method", + "chi_router_method" + ], + [ + "chi_mux_handle_a2dd7e" + ], + [ + "chi_node" + ], + [ + "chi_nodes" + ], + [ + "chi_nodes_tailsort" + ] + ], + "classification": "ambiguous-rendered-identity" + }, + { + "question": "click-longer-chain", + "tool": "compass", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 422, + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + }, + { + "edgeId": "sha256:545665ec87f7ce482e62b5d92cc4e15ff1b43d7200ca996b886db73a6284ee5d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 11990, + "endByte": 12005, + "startLine": 390, + "startColumn": 19, + "endLine": 390, + "endColumn": 34 + }, + "sourceBytes": "get_text_stdout", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 390, + "sourceLine": "return get_text_stdout(encoding=encoding, errors=errors), False" + }, + { + "edgeId": "sha256:ca9f65d65cb42c4eca5c973d4653b50a88a86ffce59b508ef56ee64e4964ab64", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 10722, + "endByte": 10748, + "startLine": 351, + "startColumn": 11, + "endLine": 351, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_writer", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 351, + "sourceLine": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)" + }, + { + "edgeId": "sha256:76fba4b8cd7a8308c4cf92ab52dc9bbf57aaf6cc5aa0bbacc6edea6ff7589bab", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 9407, + "endByte": 9433, + "startLine": 309, + "startColumn": 11, + "endLine": 309, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 309, + "sourceLine": "return _force_correct_text_stream(" + }, + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 8034, + "endByte": 8058, + "startLine": 257, + "startColumn": 33, + "endLine": 257, + "endColumn": 57 + }, + "sourceBytes": "_stream_is_misconfigured", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 257, + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)" + }, + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 6550, + "endByte": 6567, + "startLine": 218, + "startColumn": 11, + "endLine": 218, + "endColumn": 28 + }, + "sourceBytes": "is_ascii_encoding", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 218, + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "preregistered-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "click-longer-chain", + "tool": "graphify", + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "src_click_utils_open_file", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "src_click_compat_open_stream", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "src_click_compat_get_text_stdin", + "name": "get_text_stdin()", + "coordinate": [ + "src/click/_compat.py", + 340 + ] + }, + { + "id": "src_click_compat_force_correct_text_reader", + "name": "_force_correct_text_reader()", + "coordinate": [ + "src/click/_compat.py", + 287 + ] + }, + { + "id": "src_click_compat_force_correct_text_stream", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "src_click_compat_stream_is_misconfigured", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "src_click_compat_is_ascii_encoding", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "storedEdges": [ + { + "source": "src_click_utils_open_file", + "target": "src_click_compat_open_stream", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/click/utils.py", + "source_location": "L422", + "weight": 1.0 + } + ], + "registeredOccurrenceSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "storedEdges": [ + { + "source": "src_click_compat_open_stream", + "target": "src_click_compat_get_text_stdin", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/click/_compat.py", + "source_location": "L393", + "weight": 1.0 + } + ], + "registeredOccurrenceSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "storedEdges": [ + { + "source": "src_click_compat_get_text_stdin", + "target": "src_click_compat_force_correct_text_reader", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/click/_compat.py", + "source_location": "L344", + "weight": 1.0 + } + ], + "registeredOccurrenceSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "storedEdges": [ + { + "source": "src_click_compat_force_correct_text_reader", + "target": "src_click_compat_force_correct_text_stream", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/click/_compat.py", + "source_location": "L293", + "weight": 1.0 + } + ], + "registeredOccurrenceSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "storedEdges": [ + { + "source": "src_click_compat_force_correct_text_stream", + "target": "src_click_compat_stream_is_misconfigured", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/click/_compat.py", + "source_location": "L257", + "weight": 1.0 + } + ], + "registeredOccurrenceSupported": true + }, + { + "relation": "calls", + "direction": "forward", + "confidence": "EXTRACTED", + "storedEdges": [ + { + "source": "src_click_compat_stream_is_misconfigured", + "target": "src_click_compat_is_ascii_encoding", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/click/_compat.py", + "source_location": "L218", + "weight": 1.0 + } + ], + "registeredOccurrenceSupported": true + } + ], + "renderedLabels": [ + "open_file()", + "open_stream()", + "get_text_stdin()", + "_force_correct_text_reader()", + "_force_correct_text_stream()", + "_stream_is_misconfigured()", + "is_ascii_encoding()" + ], + "renderedIdentityCandidates": [ + [ + "src_click_utils_open_file" + ], + [ + "src_click_compat_open_stream" + ], + [ + "src_click_compat_get_text_stdin" + ], + [ + "src_click_compat_force_correct_text_reader" + ], + [ + "src_click_compat_force_correct_text_stream" + ], + [ + "src_click_compat_stream_is_misconfigured" + ], + [ + "src_click_compat_is_ascii_encoding" + ] + ], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "post-capture-source-reviewed-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 340, + "text": "def get_text_stdin(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdin" + }, + { + "file": "src/click/_compat.py", + "line": 287, + "text": "def _force_correct_text_reader(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_reader" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 393, + "text": "return get_text_stdin(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 344, + "text": "return _force_correct_text_reader(sys.stdin, encoding, errors, force_readable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 293, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "jsoup-longer-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"isValid\" matched 2 nodes", + "nodeId": null, + "path": null + }, + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "classification": "ambiguous" + }, + { + "question": "jsoup-longer-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "renderedLabels": [ + ".isValid()", + "Safelist", + ".getProtocolValue()", + "Element", + ".appendChild()" + ], + "renderedIdentityCandidates": [ + [ + "src_main_java_org_jsoup_safety_cleaner_cleaner_isvalid", + "src_main_java_org_jsoup_jsoup_jsoup_isvalid" + ], + [ + "src_main_java_org_jsoup_safety_safelist_safelist" + ], + [ + "src_main_java_org_jsoup_safety_safelist_safelist_getprotocolvalue" + ], + [ + "src_main_java_org_jsoup_nodes_element_element" + ], + [ + "src_main_java_org_jsoup_nodes_element_element_appendchild" + ] + ], + "classification": "ambiguous-rendered-identity" + }, + { + "question": "redux-longer-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "no_match", + "message": "NO EXACT MATCH for \"combination\"", + "nodeId": null, + "path": null + }, + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "redux-longer-chain", + "tool": "graphify", + "classification": "execution-failure", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false + }, + { + "question": "walkdir-longer-chain", + "tool": "compass", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": false, + "diagnostics": [ + { + "code": "ambiguous_match", + "message": "Symbol \"next\" matched 3 nodes", + "nodeId": null, + "path": null + } + ], + "classification": "ambiguous" + }, + { + "question": "walkdir-longer-chain", + "tool": "graphify", + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "classification": "no-path-reported" + } + ], + "costs": { + "compass": { + "resolverTextBytes": 6093, + "resolverWireBytes": 42349, + "forwardStdoutBytes": 64086, + "labelStdoutBytes": 34297 + }, + "graphify": { + "resolverTextBytes": 1227, + "resolverWireBytes": 2172, + "forwardStdoutBytes": 258, + "labelStdoutBytes": 829 + } + }, + "depthDiagnostics": { + "requests": 18, + "emptyBoundedResponses": 13, + "mixedRelationRoutes": 4, + "sourceSupportedCallPaths": 1, + "details": [ + { + "question": "chi-longer-chain", + "maxDepth": 1, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "chi-longer-chain", + "maxDepth": 2, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "chi-longer-chain", + "maxDepth": 3, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "chi-longer-chain", + "maxDepth": 4, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "coordinate": [ + "mux.go", + 137 + ] + }, + { + "id": "sha256:d003705234e34bbb357969b1c76ccd4cd1adadcf314b380d8ed89255dd633335", + "name": "Mux", + "coordinate": [ + "mux.go", + 21 + ] + }, + { + "id": "sha256:a5f10ee47ecf99eb3039567ca90b2070ee96c4e323ea1c7baf0f3b91b5febaf9", + "name": "node", + "coordinate": [ + "tree.go", + 97 + ] + }, + { + "id": "sha256:b596b655a0867f70a55d7f7e2689c858e13462a21ea7528bf1bdd338dda1597d", + "name": "nodes", + "coordinate": [ + "tree.go", + 831 + ] + }, + { + "id": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "name": ".tailSort()", + "coordinate": [ + "tree.go", + 841 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:4ff28af7f302f4c7bbc4d37edb354e2f57d52e12dbbd8d9b51d24e3b03a1e4d8", + "relation": "references", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4400, + "endByte": 4403, + "startLine": 137, + "startColumn": 10, + "endLine": 137, + "endColumn": 13 + }, + "sourceBytes": "Mux", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:25cba5fef1740e5aed4d8da4cce353f1220743d3d41fa918c8d1899b064ed479", + "relation": "references", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 778, + "endByte": 782, + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 11 + }, + "sourceBytes": "node", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:bc6cbafbb6154f9f8ffb4d32b3c3a533032c80734ee2bb6887b8d38e3e26babb", + "relation": "references", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 2524, + "endByte": 2529, + "startLine": 112, + "startColumn": 26, + "endLine": 112, + "endColumn": 31 + }, + "sourceBytes": "nodes", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:c3cac733428d251080cf5c980e80a779cccdb88f8f2519b619ac4678288ba56c", + "relation": "contains", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 19945, + "endByte": 19955, + "startLine": 841, + "startColumn": 5, + "endLine": 841, + "endColumn": 15 + }, + "sourceBytes": "(ns nodes)", + "confidence": [ + "exact" + ] + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + }, + { + "question": "chi-longer-chain", + "maxDepth": 5, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "coordinate": [ + "mux.go", + 137 + ] + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "coordinate": [ + "mux.go", + 127 + ] + }, + { + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "name": ".handle()", + "coordinate": [ + "mux.go", + 430 + ] + }, + { + "id": "sha256:a5f10ee47ecf99eb3039567ca90b2070ee96c4e323ea1c7baf0f3b91b5febaf9", + "name": "node", + "coordinate": [ + "tree.go", + 97 + ] + }, + { + "id": "sha256:b596b655a0867f70a55d7f7e2689c858e13462a21ea7528bf1bdd338dda1597d", + "name": "nodes", + "coordinate": [ + "tree.go", + 831 + ] + }, + { + "id": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "name": ".tailSort()", + "coordinate": [ + "tree.go", + 841 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:275a2a085c7409a899e065c2d836a8a75506ddd76542ac01de4764e50e899b32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4471, + "endByte": 4480, + "startLine": 138, + "startColumn": 1, + "endLine": 138, + "endColumn": 10 + }, + "sourceBytes": "mx.Method", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:3155b7566154b5aa0c12e18cd3b3049c0b96cc58b9d8a2f0fa38df38f24cb968", + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 4235, + "endByte": 4244, + "startLine": 132, + "startColumn": 1, + "endLine": 132, + "endColumn": 10 + }, + "sourceBytes": "mx.handle", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:3c4e5c0ae038321d422c7fd725e6d988f98cb9c1b4b9405be0b22a0ee58656a0", + "relation": "returns", + "direction": "forward", + "site": { + "file": "mux.go", + "startByte": 14073, + "endByte": 14077, + "startLine": 430, + "startColumn": 79, + "endLine": 430, + "endColumn": 83 + }, + "sourceBytes": "node", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:bc6cbafbb6154f9f8ffb4d32b3c3a533032c80734ee2bb6887b8d38e3e26babb", + "relation": "references", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 2524, + "endByte": 2529, + "startLine": 112, + "startColumn": 26, + "endLine": 112, + "endColumn": 31 + }, + "sourceBytes": "nodes", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:c3cac733428d251080cf5c980e80a779cccdb88f8f2519b619ac4678288ba56c", + "relation": "contains", + "direction": "forward", + "site": { + "file": "tree.go", + "startByte": 19945, + "endByte": 19955, + "startLine": 841, + "startColumn": 5, + "endLine": 841, + "endColumn": 15 + }, + "sourceBytes": "(ns nodes)", + "confidence": [ + "exact" + ] + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + }, + { + "question": "click-longer-chain", + "maxDepth": 1, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "click-longer-chain", + "maxDepth": 2, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "click-longer-chain", + "maxDepth": 3, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "click-longer-chain", + "maxDepth": 4, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "click-longer-chain", + "maxDepth": 5, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "click-longer-chain", + "maxDepth": 6, + "sourceSupportedCallPath": true, + "frozenOccurrenceSitesMatch": true, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "startByte": 12980, + "endByte": 12991, + "startLine": 422, + "startColumn": 22, + "endLine": 422, + "endColumn": 33 + }, + "sourceBytes": "open_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 422, + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + }, + { + "edgeId": "sha256:545665ec87f7ce482e62b5d92cc4e15ff1b43d7200ca996b886db73a6284ee5d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 11990, + "endByte": 12005, + "startLine": 390, + "startColumn": 19, + "endLine": 390, + "endColumn": 34 + }, + "sourceBytes": "get_text_stdout", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 390, + "sourceLine": "return get_text_stdout(encoding=encoding, errors=errors), False" + }, + { + "edgeId": "sha256:ca9f65d65cb42c4eca5c973d4653b50a88a86ffce59b508ef56ee64e4964ab64", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 10722, + "endByte": 10748, + "startLine": 351, + "startColumn": 11, + "endLine": 351, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_writer", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 351, + "sourceLine": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)" + }, + { + "edgeId": "sha256:76fba4b8cd7a8308c4cf92ab52dc9bbf57aaf6cc5aa0bbacc6edea6ff7589bab", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 9407, + "endByte": 9433, + "startLine": 309, + "startColumn": 11, + "endLine": 309, + "endColumn": 37 + }, + "sourceBytes": "_force_correct_text_stream", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 309, + "sourceLine": "return _force_correct_text_stream(" + }, + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 8034, + "endByte": 8058, + "startLine": 257, + "startColumn": 33, + "endLine": 257, + "endColumn": 57 + }, + "sourceBytes": "_stream_is_misconfigured", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 257, + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)" + }, + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "startByte": 6550, + "endByte": 6567, + "startLine": 218, + "startColumn": 11, + "endLine": 218, + "endColumn": 28 + }, + "sourceBytes": "is_ascii_encoding", + "confidence": [ + "exact" + ], + "acceptedOccurrenceLine": 218, + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")" + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "reviewed-call-chain", + "reviewedOccurrenceSitesMatch": true, + "registeredRoute": "preregistered-alternative", + "sourceWitness": { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + }, + "hops": 6 + }, + { + "question": "jsoup-longer-chain", + "maxDepth": 1, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + }, + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "jsoup-longer-chain", + "maxDepth": 2, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + }, + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "jsoup-longer-chain", + "maxDepth": 3, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + }, + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "jsoup-longer-chain", + "maxDepth": 4, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "name": ".isValid()", + "coordinate": [ + "src/main/java/org/jsoup/Jsoup.java", + 434 + ] + }, + { + "id": "sha256:e800188397e3d537f837813168a0129fa6e5c7b853657e72bd20769d4d34bab9", + "name": "Cleaner", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 43 + ] + }, + { + "id": "sha256:8257236caa700621772547e7e6e703855b8f9e467af826e6a0b978aaee61cd86", + "name": "CleaningVisitor", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 138 + ] + }, + { + "id": "sha256:65912eb3660f15092355589775d874a7a702efcf0336e9865cf93b4fb56aaa29", + "name": ".head()", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 148 + ] + }, + { + "id": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "name": ".appendChild()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 813 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:c8ea55e34246710ed3a0a1c63d521e1207bf550bd4dcb5040d9a65fc6e09bf02", + "relation": "instantiates", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "startByte": 19693, + "endByte": 19700, + "startLine": 435, + "startColumn": 19, + "endLine": 435, + "endColumn": 26 + }, + "sourceBytes": "Cleaner", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:7970bf4749a996044fcdf02e1947fc37bac8bf2d10092db7edb472afb97b4475", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6345, + "endByte": 6360, + "startLine": 138, + "startColumn": 24, + "endLine": 138, + "endColumn": 39 + }, + "sourceBytes": "CleaningVisitor", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:95231134987023788fcf9e55846c662a21af12234dfe7f02eb7d5be938f5b097", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6720, + "endByte": 6724, + "startLine": 148, + "startColumn": 30, + "endLine": 148, + "endColumn": 34 + }, + "sourceBytes": "head", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:467a8313fd3a25e31275fa33804801be78f03e7d2a61616be6024810613bccd8", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 7904, + "endByte": 7915, + "startLine": 169, + "startColumn": 28, + "endLine": 169, + "endColumn": 39 + }, + "sourceBytes": "appendChild", + "confidence": [ + "exact" + ] + } + ], + "truncated": false, + "diagnostics": [ + { + "code": "incomplete_coverage", + "message": "Published graph coverage is incomplete: partial graph published after quarantining 0 nodes and 2 edges with 0 identity collisions; 0 examples omitted by the diagnostic cap", + "nodeId": null, + "path": null + } + ], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + }, + { + "question": "walkdir-longer-chain", + "maxDepth": 1, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "walkdir-longer-chain", + "maxDepth": 2, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [], + "steps": [], + "truncated": true, + "diagnostics": [ + { + "code": "bounded_truncation", + "message": "One or more query bounds truncated the response", + "nodeId": null, + "path": null + } + ], + "classification": "no-complete-path" + }, + { + "question": "walkdir-longer-chain", + "maxDepth": 3, + "sourceSupportedCallPath": false, + "frozenOccurrenceSitesMatch": false, + "nodes": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "coordinate": [ + "src/lib.rs", + 687 + ] + }, + { + "id": "sha256:fee92110685574fab9cc9ed406f9087b0a31367f58d21a22a3fc0146ab585f35", + "name": ".from_path()", + "coordinate": [ + "src/error.rs", + 162 + ] + }, + { + "id": "sha256:a66dc1de7a258eafe92e616e5c94a0107fda891db6f9ca33ca1e10fbac5845c9", + "name": "Error", + "coordinate": [ + "src/error.rs", + 28 + ] + }, + { + "id": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "name": ".from_loop()", + "coordinate": [ + "src/error.rs", + 184 + ] + } + ], + "steps": [ + { + "edgeId": "sha256:ebafa756aa191dbe1c4a2036f69e77f65f78e9e8fc7aef535f942b023b6e2e7d", + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/lib.rs", + "startByte": 23832, + "endByte": 23848, + "startLine": 691, + "startColumn": 33, + "endLine": 691, + "endColumn": 49 + }, + "sourceBytes": "Error::from_path", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:41187f8bce764264633ff57f9d90649df36157f5953666a2e6ff12a793ff6a36", + "relation": "returns", + "direction": "forward", + "site": { + "file": "src/error.rs", + "startByte": 6275, + "endByte": 6279, + "startLine": 166, + "startColumn": 9, + "endLine": 166, + "endColumn": 13 + }, + "sourceBytes": "Self", + "confidence": [ + "exact" + ] + }, + { + "edgeId": "sha256:808b946031e19484e268e5d018381338c0a64e04622a0579774d0501d9c3a28f", + "relation": "contains", + "direction": "forward", + "site": { + "file": "src/error.rs", + "startByte": 6783, + "endByte": 6792, + "startLine": 184, + "startColumn": 18, + "endLine": 184, + "endColumn": 27 + }, + "sourceBytes": "from_loop", + "confidence": [ + "exact" + ] + } + ], + "truncated": false, + "diagnostics": [], + "endpointsMatch": [ + true, + true + ], + "classification": "mixed-relation-route" + } + ] + }, + "reverseDiagnostics": [ + { + "question": "chi-longer-chain", + "tool": "compass", + "truncated": true, + "diagnostics": [ + "bounded_truncation" + ] + }, + { + "question": "chi-longer-chain", + "tool": "graphify", + "noPathReported": true, + "executionSucceeded": true, + "stdout": "No directed path found between 'chi_nodes_tailsort' and 'chi_mux_methodfunc'. Re-run with --undirected to search ignoring edge direction.\n", + "stderr": " warning: skill at /Users/haipingfu/.claude/skills/graphify is from graphify 0.9.30, package is 0.9.67. Run 'graphify install --platform claude' to update it (a plain 'graphify install' refreshes only the detected platform).\n" + }, + { + "question": "click-longer-chain", + "tool": "compass", + "truncated": false, + "diagnostics": [ + "direction_mismatch" + ] + }, + { + "question": "click-longer-chain", + "tool": "graphify", + "noPathReported": true, + "executionSucceeded": true, + "stdout": "No directed path found between 'src_click_compat_is_ascii_encoding' and 'src_click_utils_open_file'. Re-run with --undirected to search ignoring edge direction.\n", + "stderr": " warning: skill at /Users/haipingfu/.claude/skills/graphify is from graphify 0.9.30, package is 0.9.67. Run 'graphify install --platform claude' to update it (a plain 'graphify install' refreshes only the detected platform).\n" + }, + { + "question": "jsoup-longer-chain", + "tool": "compass", + "truncated": true, + "diagnostics": [ + "incomplete_coverage", + "bounded_truncation" + ] + }, + { + "question": "jsoup-longer-chain", + "tool": "graphify", + "noPathReported": false, + "executionSucceeded": false, + "stdout": "", + "stderr": " warning: skill at /Users/haipingfu/.claude/skills/graphify is from graphify 0.9.30, package is 0.9.67. Run 'graphify install --platform claude' to update it (a plain 'graphify install' refreshes only the detected platform).\n'src_main_java_org_jsoup_nodes_element_element_appendchild' and 'src_main_java_org_jsoup_jsoup_jsoup_isvalid' both resolved to the same node 'src_main_java_org_jsoup_jsoup_jsoup'. Use a more specific label or the exact node ID.\n" + }, + { + "question": "walkdir-longer-chain", + "tool": "compass", + "truncated": false, + "diagnostics": [ + "direction_mismatch" + ] + } + ], + "graphAvailabilityDiagnosis": { + "schema": "compass.longer-path-graph-diagnosis/1", + "scope": "Post-output private-graph diagnostic. These are not public-query successes or source-confirmed alternate routes. Same exact source coordinate/name matching; no ambiguous candidate selection. Calls-only directed BFS with depth 8 and 10000 unique-adjacency expansion budget for both graphs.", + "results": [ + { + "repository": "chi", + "tool": "compass", + "witnessNodeCandidates": [ + [ + "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc" + ], + [ + "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948" + ], + [ + "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e" + ], + [ + "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6" + ], + [ + "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281" + ], + [ + "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f" + ], + [ + "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "MethodFunc", + "toSymbol": "Method", + "present": true + }, + { + "index": 2, + "fromSymbol": "Method", + "toSymbol": "handle", + "present": true + }, + { + "index": 3, + "fromSymbol": "handle", + "toSymbol": "InsertRoute", + "present": true + }, + { + "index": 4, + "fromSymbol": "InsertRoute", + "toSymbol": "addChild", + "present": true + }, + { + "index": 5, + "fromSymbol": "addChild", + "toSymbol": "Sort", + "present": true + }, + { + "index": 6, + "fromSymbol": "Sort", + "toSymbol": "tailSort", + "present": true + } + ], + "callsOnlyGraphRoute": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "coordinate": [ + "mux.go", + 137 + ] + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "coordinate": [ + "mux.go", + 127 + ] + }, + { + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "name": ".handle()", + "coordinate": [ + "mux.go", + 430 + ] + }, + { + "id": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "name": ".InsertRoute()", + "coordinate": [ + "tree.go", + 148 + ] + }, + { + "id": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "name": ".addChild()", + "coordinate": [ + "tree.go", + 244 + ] + }, + { + "id": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "name": ".Sort()", + "coordinate": [ + "tree.go", + 834 + ] + }, + { + "id": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "name": ".tailSort()", + "coordinate": [ + "tree.go", + 841 + ] + } + ], + "expandedUniqueAdjacencies": 21, + "bounded": false + }, + { + "repository": "chi", + "tool": "graphify", + "witnessNodeCandidates": [ + [ + "chi_mux_methodfunc" + ], + [ + "chi_mux_method" + ], + [ + "chi_mux_handle_a2dd7e" + ], + [ + "chi_node_insertroute" + ], + [ + "chi_node_addchild" + ], + [ + "chi_nodes_sort" + ], + [ + "chi_nodes_tailsort" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "MethodFunc", + "toSymbol": "Method", + "present": true + }, + { + "index": 2, + "fromSymbol": "Method", + "toSymbol": "handle", + "present": true + }, + { + "index": 3, + "fromSymbol": "handle", + "toSymbol": "InsertRoute", + "present": false + }, + { + "index": 4, + "fromSymbol": "InsertRoute", + "toSymbol": "addChild", + "present": true + }, + { + "index": 5, + "fromSymbol": "addChild", + "toSymbol": "Sort", + "present": true + }, + { + "index": 6, + "fromSymbol": "Sort", + "toSymbol": "tailSort", + "present": true + } + ], + "callsOnlyGraphRoute": null, + "expandedUniqueAdjacencies": 6, + "bounded": false + }, + { + "repository": "click", + "tool": "compass", + "witnessNodeCandidates": [ + [ + "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d" + ], + [ + "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6" + ], + [ + "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329" + ], + [ + "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504" + ], + [ + "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a" + ], + [ + "sha256:c075a3ccbc08848aeeaf9580eb357a64a6d0182880b227853117cb79752c8c29" + ], + [ + "sha256:b0e3b4d8fa87ac4c9a13b6ce1611a264093b6de84d1710bfde84a8a4ce7762a2" + ], + [ + "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "open_file", + "toSymbol": "open_stream", + "present": true + }, + { + "index": 2, + "fromSymbol": "open_stream", + "toSymbol": "get_text_stdout", + "present": true + }, + { + "index": 3, + "fromSymbol": "get_text_stdout", + "toSymbol": "_force_correct_text_writer", + "present": true + }, + { + "index": 4, + "fromSymbol": "_force_correct_text_writer", + "toSymbol": "_force_correct_text_stream", + "present": true + }, + { + "index": 5, + "fromSymbol": "_force_correct_text_stream", + "toSymbol": "_make_text_stream", + "present": true + }, + { + "index": 6, + "fromSymbol": "_make_text_stream", + "toSymbol": "get_best_encoding", + "present": true + }, + { + "index": 7, + "fromSymbol": "get_best_encoding", + "toSymbol": "is_ascii_encoding", + "present": true + } + ], + "callsOnlyGraphRoute": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "name": "get_text_stdout()", + "coordinate": [ + "src/click/_compat.py", + 347 + ] + }, + { + "id": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "name": "_force_correct_text_writer()", + "coordinate": [ + "src/click/_compat.py", + 303 + ] + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "expandedUniqueAdjacencies": 24, + "bounded": false + }, + { + "repository": "click", + "tool": "graphify", + "witnessNodeCandidates": [ + [ + "src_click_utils_open_file" + ], + [ + "src_click_compat_open_stream" + ], + [ + "src_click_compat_get_text_stdout" + ], + [ + "src_click_compat_force_correct_text_writer" + ], + [ + "src_click_compat_force_correct_text_stream" + ], + [ + "src_click_compat_make_text_stream" + ], + [ + "src_click_compat_get_best_encoding" + ], + [ + "src_click_compat_is_ascii_encoding" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "open_file", + "toSymbol": "open_stream", + "present": true + }, + { + "index": 2, + "fromSymbol": "open_stream", + "toSymbol": "get_text_stdout", + "present": true + }, + { + "index": 3, + "fromSymbol": "get_text_stdout", + "toSymbol": "_force_correct_text_writer", + "present": true + }, + { + "index": 4, + "fromSymbol": "_force_correct_text_writer", + "toSymbol": "_force_correct_text_stream", + "present": true + }, + { + "index": 5, + "fromSymbol": "_force_correct_text_stream", + "toSymbol": "_make_text_stream", + "present": true + }, + { + "index": 6, + "fromSymbol": "_make_text_stream", + "toSymbol": "get_best_encoding", + "present": true + }, + { + "index": 7, + "fromSymbol": "get_best_encoding", + "toSymbol": "is_ascii_encoding", + "present": true + } + ], + "callsOnlyGraphRoute": [ + { + "id": "src_click_utils_open_file", + "name": "open_file()", + "coordinate": [ + "src/click/utils.py", + 381 + ] + }, + { + "id": "src_click_compat_open_stream", + "name": "open_stream()", + "coordinate": [ + "src/click/_compat.py", + 374 + ] + }, + { + "id": "src_click_compat_get_text_stdin", + "name": "get_text_stdin()", + "coordinate": [ + "src/click/_compat.py", + 340 + ] + }, + { + "id": "src_click_compat_force_correct_text_reader", + "name": "_force_correct_text_reader()", + "coordinate": [ + "src/click/_compat.py", + 287 + ] + }, + { + "id": "src_click_compat_force_correct_text_stream", + "name": "_force_correct_text_stream()", + "coordinate": [ + "src/click/_compat.py", + 241 + ] + }, + { + "id": "src_click_compat_stream_is_misconfigured", + "name": "_stream_is_misconfigured()", + "coordinate": [ + "src/click/_compat.py", + 212 + ] + }, + { + "id": "src_click_compat_is_ascii_encoding", + "name": "is_ascii_encoding()", + "coordinate": [ + "src/click/_compat.py", + 43 + ] + } + ], + "expandedUniqueAdjacencies": 30, + "bounded": false + }, + { + "repository": "jsoup", + "tool": "compass", + "witnessNodeCandidates": [ + [ + "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6" + ], + [ + "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406" + ], + [ + "sha256:6b565ebf6e99cf106d72628589f681d6ca6a95cd379bf3f7818f8df5cb80afc0" + ], + [ + "sha256:e3344ff45a629bdf8ddf478b5eb389cc5007c1f33f5d5ba5ce4ba60d25abaa88" + ], + [ + "sha256:d4d9b048767facdf7fd9d8be44e6cc0c60c11e749d933908032323756c7512fe" + ], + [ + "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "isValid", + "toSymbol": "isValidBodyHtml", + "present": true + }, + { + "index": 2, + "fromSymbol": "isValidBodyHtml", + "toSymbol": "createShell", + "present": true + }, + { + "index": 3, + "fromSymbol": "createShell", + "toSymbol": "appendElement", + "present": true + }, + { + "index": 4, + "fromSymbol": "appendElement", + "toSymbol": "appendElement", + "present": true + }, + { + "index": 5, + "fromSymbol": "appendElement", + "toSymbol": "appendChild", + "present": true + } + ], + "callsOnlyGraphRoute": [ + { + "id": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "name": ".isValid()", + "coordinate": [ + "src/main/java/org/jsoup/Jsoup.java", + 434 + ] + }, + { + "id": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "name": ".isValidBodyHtml()", + "coordinate": [ + "src/main/java/org/jsoup/safety/Cleaner.java", + 124 + ] + }, + { + "id": "sha256:6b565ebf6e99cf106d72628589f681d6ca6a95cd379bf3f7818f8df5cb80afc0", + "name": ".createShell()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Document.java", + 65 + ] + }, + { + "id": "sha256:e3344ff45a629bdf8ddf478b5eb389cc5007c1f33f5d5ba5ce4ba60d25abaa88", + "name": ".appendElement()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 918 + ] + }, + { + "id": "sha256:d4d9b048767facdf7fd9d8be44e6cc0c60c11e749d933908032323756c7512fe", + "name": ".appendElement()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 929 + ] + }, + { + "id": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "name": ".appendChild()", + "coordinate": [ + "src/main/java/org/jsoup/nodes/Element.java", + 813 + ] + } + ], + "expandedUniqueAdjacencies": 21, + "bounded": false + }, + { + "repository": "jsoup", + "tool": "graphify", + "witnessNodeCandidates": [ + [ + "src_main_java_org_jsoup_jsoup_jsoup_isvalid" + ], + [ + "src_main_java_org_jsoup_safety_cleaner_cleaner_isvalidbodyhtml" + ], + [ + "src_main_java_org_jsoup_nodes_document_document_createshell" + ], + [ + "src_main_java_org_jsoup_nodes_element_element_appendelement" + ], + [], + [ + "src_main_java_org_jsoup_nodes_element_element_appendchild" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "isValid", + "toSymbol": "isValidBodyHtml", + "present": false + }, + { + "index": 2, + "fromSymbol": "isValidBodyHtml", + "toSymbol": "createShell", + "present": true + }, + { + "index": 3, + "fromSymbol": "createShell", + "toSymbol": "appendElement", + "present": true + }, + { + "index": 4, + "fromSymbol": "appendElement", + "toSymbol": "appendElement", + "present": false + }, + { + "index": 5, + "fromSymbol": "appendElement", + "toSymbol": "appendChild", + "present": false + } + ], + "callsOnlyGraphRoute": null, + "expandedUniqueAdjacencies": 0, + "bounded": false + }, + { + "repository": "redux", + "tool": "compass", + "witnessNodeCandidates": [ + [], + [ + "sha256:da5cafaec18ee5d29bd372cea969a95b76c892951b1e272ceedfb7157960545f" + ], + [ + "sha256:2dc819f91bc866786968c643e45ad6b3419369536fbc2f8851bb810298489506", + "sha256:df1114c0498b4e62ad32946ea04a508c76bd92955defafa89ab7857dbf577770" + ], + [ + "sha256:1c38121eddeb189509bb8d8efb07f7d9f34bfa79e7fab77f18234722d8114e0a", + "sha256:1c93d4d4f845f8b68d97822707d5e2d754f37e7ae6c69e307aab7ce195ef297a" + ], + [ + "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "combination", + "toSymbol": "getUnexpectedStateShapeWarningMessage", + "present": false + }, + { + "index": 2, + "fromSymbol": "getUnexpectedStateShapeWarningMessage", + "toSymbol": "kindOf", + "present": true + }, + { + "index": 3, + "fromSymbol": "kindOf", + "toSymbol": "miniKindOf", + "present": true + }, + { + "index": 4, + "fromSymbol": "miniKindOf", + "toSymbol": "ctorName", + "present": true + } + ], + "endpointDiagnostic": "not uniquely represented at frozen coordinates" + }, + { + "repository": "redux", + "tool": "graphify", + "witnessNodeCandidates": [ + [], + [ + "src_combinereducers_getunexpectedstateshapewarningmessage" + ], + [ + "src_utils_kindof_kindof" + ], + [ + "src_utils_kindof_minikindof" + ], + [ + "src_utils_kindof_ctorname" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "combination", + "toSymbol": "getUnexpectedStateShapeWarningMessage", + "present": false + }, + { + "index": 2, + "fromSymbol": "getUnexpectedStateShapeWarningMessage", + "toSymbol": "kindOf", + "present": true + }, + { + "index": 3, + "fromSymbol": "kindOf", + "toSymbol": "miniKindOf", + "present": true + }, + { + "index": 4, + "fromSymbol": "miniKindOf", + "toSymbol": "ctorName", + "present": true + } + ], + "endpointDiagnostic": "not uniquely represented at frozen coordinates" + }, + { + "repository": "walkdir", + "tool": "compass", + "witnessNodeCandidates": [ + [ + "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1" + ], + [ + "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e" + ], + [ + "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78" + ], + [ + "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3" + ], + [ + "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "next", + "toSymbol": "handle_entry", + "present": true + }, + { + "index": 2, + "fromSymbol": "handle_entry", + "toSymbol": "follow", + "present": true + }, + { + "index": 3, + "fromSymbol": "follow", + "toSymbol": "check_loop", + "present": true + }, + { + "index": 4, + "fromSymbol": "check_loop", + "toSymbol": "from_loop", + "present": true + } + ], + "callsOnlyGraphRoute": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "coordinate": [ + "src/lib.rs", + 687 + ] + }, + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "name": ".handle_entry()", + "coordinate": [ + "src/lib.rs", + 840 + ] + }, + { + "id": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "name": ".follow()", + "coordinate": [ + "src/lib.rs", + 961 + ] + }, + { + "id": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "name": ".check_loop()", + "coordinate": [ + "src/lib.rs", + 973 + ] + }, + { + "id": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "name": ".from_loop()", + "coordinate": [ + "src/error.rs", + 184 + ] + } + ], + "expandedUniqueAdjacencies": 25, + "bounded": false + }, + { + "repository": "walkdir", + "tool": "graphify", + "witnessNodeCandidates": [ + [ + "src_lib_intoiter_next" + ], + [ + "src_lib_intoiter_handle_entry" + ], + [ + "src_lib_intoiter_follow" + ], + [ + "src_lib_intoiter_check_loop" + ], + [ + "src_error_error_from_loop" + ] + ], + "originalWitnessSteps": [ + { + "index": 1, + "fromSymbol": "next", + "toSymbol": "handle_entry", + "present": true + }, + { + "index": 2, + "fromSymbol": "handle_entry", + "toSymbol": "follow", + "present": false + }, + { + "index": 3, + "fromSymbol": "follow", + "toSymbol": "check_loop", + "present": true + }, + { + "index": 4, + "fromSymbol": "check_loop", + "toSymbol": "from_loop", + "present": false + } + ], + "callsOnlyGraphRoute": null, + "expandedUniqueAdjacencies": 13, + "bounded": false + } + ] + }, + "findings": [ + "Source-assisted: Compass 2/5, Graphify 0/5. This includes resolver and CLI-ID interoperability; it is not a pure path-algorithm score.", + "Native short labels: tie at 1/5. Both return a source-supported six-call Click route. Compass selects text stdout/writer; Graphify selects text stdin/reader, independently source-reviewed after capture and accepted. It is not a preregistered occurrence match.", + "Compass source-assisted Chi returns six calls, using another valid InsertRoute-to-addChild occurrence at tree.go:234 instead of the frozen :183.", + "Compass jsoup returns a four-edge instantiates/contains/contains/calls route and marks the depth-8 search truncated. WalkDir returns a three-edge calls/returns/contains route. Neither is a call-chain answer.", + "The post-capture private-graph calls-only diagnostic finds all registered Compass call steps for Chi, Click, jsoup and WalkDir. This separates existing edge availability from public route selection; it is not credited as a public answer.", + "Neither tool exposes Redux combination at the frozen named-function-expression coordinate. The graph diagnostic keeps this missing endpoint, rather than selecting combineReducers as a substitute.", + "Graphify source-assisted Chi silently uses different endpoints, jsoup IDs resolve to the same unintended node and fail, and WalkDir next lookup fails the frozen source coordinate. Native labels are published separately rather than choosing the best arm per case.", + "Eighteen Compass depth probes produce thirteen explicitly bounded empty results, four mixed routes and one valid Click route at depth six. No empty bounded result claims complete absence. Reverse probes receive no source-global absence credit." + ], + "verification": { + "benchmarkTests": 204, + "newResolverTests": 2, + "productBoundary": "passed", + "sourceAndGraphHashes": "checked before/after capture and in separate verifier", + "rawMcpTranscripts": 20, + "cliRequests": 42, + "repeatedVerification": "byte-identical", + "notRun": "Rust/JavaScript/platform/packaging suites: no production changes", + "verifierCorrections": [ + "First attempt had an unclosed comprehension; preserved.", + "Second attempt applied the graph read bound to the much larger binary; changed binary hashing to streamed file_digest, preserving failure.", + "Draft report incorrectly named post-capture Click stdin occurrences frozen; corrected frozen credit to zero while retaining valid source-supported success and the draft." + ] + }, + "nextImplementation": "Add an explicit calls-only trail policy at the owning typed query boundary and expose it through public interfaces. Preserve existing structural defaults, direction, ambiguity, depth/work bounds and occurrence provenance. Qualify with shortcut fixtures and both successful/missing real-repository paths. Separately recover named function-expression identity for Redux; do not patch the oracle coordinate.", + "limitations": [ + "Same-agent source adjudication and verification, not independent human review.", + "Known development repositories and graphs; previous misses informed investigation.", + "Tool-native internal limits differ; no equal-work, latency or extraction comparison.", + "Native labels can collide; no source oracle is used to break rendered ties.", + "Static source chains are conditional, not runtime traces or proof of global shortest paths.", + "Inferred/extracted confidence is retained separately from exact evidence.", + "Authored explanations, genuine god-object design judgments, functional communities, larger path populations and held-out confirmation remain unproven." + ], + "artifacts": { + "longer-paths-01/benchmark-tests.log": "ba37e3b99d711c58e3469dd9c4336642473e30f197f03de394e00e1162ff663f", + "longer-paths-01/capture/capture.json": "075483a7a072c7b7daa693b85c2601fdd8e35f9d5807dd43640e3670d21df5e0", + "longer-paths-01/capture/community_identity.py": "5bc3d1c574211aa3180a2334fe6c758043f384651948b7077aba3ea879de4503", + "longer-paths-01/capture/community_navigation.py": "808df1c7b15c8c2afc86ac1ed09dc4f339c98a77d7a7b14eb4866e3da1c8c0f8", + "longer-paths-01/capture/directed_identity.py": "d692f39978c3b799873a92d344efee9ad341632fe63cd249e3f06bdd4195d603", + "longer-paths-01/capture/graphify-mcp-environment.json": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "longer-paths-01/capture/longer_path_registration.json": "5c4d1b4c0c3b335425afcb986580e6e31203cf72b9bfd4348acaf2529d9a8a38", + "longer-paths-01/capture/longer_path_witnesses.json": "33d1cdccc5cfb6f4225674c36ee7616b6dc21e0a51c2c5bbedc8fa1e44ae8718", + "longer-paths-01/capture/mcp_compare.py": "d23f093a1300fcf825457f917694097f0f8b8dc8ee8d671946032f5e4e89a5dc", + "longer-paths-01/capture/mcp_transport.py": "daaad69c554f824a1df94f0ef93cb9d4c6e9b4f4b712d1611323d524e10d44ee", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-1.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-1.stdout": "9be3a14e9ae01f02e04c3362e50bc9c1e0b83ae34e92e684cefffa553b879656", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-2.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-2.stdout": "850bf59f5fde009cce1ada6ab27caf6e2de8c074857308468c0e7802b32b1e69", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-3.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-3.stdout": "483f572e2271d0b09970a33d3f8aab504724a8f6de5f6b72e7ec091f334a7354", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-4.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-4.stdout": "44b7b95b5b3712fa9db9555a19b7429395e8deaf39cd717cd32ff05d2660b916", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-5.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/chi-longer-chain/compass/depth-5.stdout": "795420c69ba09154947ff0d62af2d34e393babbf202ce7b6cc2c9ac02849355c", + "longer-paths-01/capture/raw/chi-longer-chain/compass/forward.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/chi-longer-chain/compass/forward.stdout": "d5a6af58638d73e5b1f90aba94e63efcf2ff260ada494e87fd18d683509f1e7a", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/04.request.json": "3346922d490b3f9dde0d51d59b359c9e162723b41f13bc2ac27c7588124201ac", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/04.response.jsonl": "3ca951aecdb9c61a069a3aaecbeb0d9eb4e587a9271addc0dac624d70e3e5d4d", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/05.request.json": "9147dd17cfcfc6e5e648e11eb0ff04571e45fed502910a575c35e3841a92bd32", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/05.response.jsonl": "9a4a9333d54a152fd37a208fb1fece859081e238927e8a57e83b6df4fe255acd", + "longer-paths-01/capture/raw/chi-longer-chain/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/chi-longer-chain/compass/reverse.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/chi-longer-chain/compass/reverse.stdout": "1a9741ed4cfa74daa060427cf28265b1da2fd10e8641fd8d3522f24449228ba6", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/forward.stderr": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/forward.stdout": "bd40ef0429d60d9178cd4e2a09b1d4c8d8fc4bdad0d0f5c4bb7f3f8b278ab99a", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/04.request.json": "ca8821ddf48b9875c6b0feb8f7531c82ce28e780999345056ff5218c64fc05dc", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/04.response.jsonl": "8943ae66113466a56cfde07498a1498a23eec598412878f9c54fb17019d52dc1", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/05.request.json": "2ceb73a8d6d195468523d2771dc8efcc5f2c5e6e2d80f63d9d0dd34a4b703eb9", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/05.response.jsonl": "d29d63848af36e7ea0d8efb74257c018d4b36a0cb6cafb7a61e59e598b094805", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/reverse.stderr": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "longer-paths-01/capture/raw/chi-longer-chain/graphify/reverse.stdout": "7f77cb6578dd4adab7041222a2d7bbb495e3bf7855211a212fe0ed437bb725e1", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-1.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-1.stdout": "9be3a14e9ae01f02e04c3362e50bc9c1e0b83ae34e92e684cefffa553b879656", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-2.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-2.stdout": "850bf59f5fde009cce1ada6ab27caf6e2de8c074857308468c0e7802b32b1e69", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-3.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-3.stdout": "483f572e2271d0b09970a33d3f8aab504724a8f6de5f6b72e7ec091f334a7354", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-4.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-4.stdout": "195cea3fc9be47d58961bf8fb3ac5292e019dde20ab861eaa4881ebea08030d7", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-5.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-5.stdout": "bef2361a002a4327df4e66c4e857af8adf8a66c630a85517dfd858f59b6a0d09", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-6.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/compass/depth-6.stdout": "d6a70a4c40dcffd2d0ad3a87ac6a7f9104c0b3915abbe36596e6f366a22116c9", + "longer-paths-01/capture/raw/click-longer-chain/compass/forward.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/compass/forward.stdout": "f7718d009afa2066aa91ec453fd6bdd0d049621d492018b8dd31bab144941c9b", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/04.request.json": "57b70cb40cb134e8f6a98906dabe849b27e6a9bd3d49d56efcc5d04e249793f7", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/04.response.jsonl": "fd48aff4b11ef714490fe99d62dc272d7395201bf4ca491c1e38105eb65eb12f", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/05.request.json": "98f07b8c273443e8530480df42c9f592308bc8b3fdadf75cb1251f13eb2764ca", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/05.response.jsonl": "5b5813100dcc0415f1a23914447461d1fdad7b73638a2aeecb086fc48a02eb5e", + "longer-paths-01/capture/raw/click-longer-chain/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/compass/reverse.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/compass/reverse.stdout": "3d79592f9ee2e8f78f35814bc449ecca320db5ee46c0ff0af5eae6bc5de29856", + "longer-paths-01/capture/raw/click-longer-chain/graphify/forward.stderr": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "longer-paths-01/capture/raw/click-longer-chain/graphify/forward.stdout": "ed52edc4e0165740015ec316b16e91f59d805ee86c7f2ea079299958e899e1da", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/04.request.json": "a92de278553d90c84f6dfc74701922e1233a52c6296c56927d1593b787a7c4d3", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/04.response.jsonl": "f63ed30007d253c2e792a6e77ad308171205af3f7b751efbd2e26465b03cd7c9", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/05.request.json": "de5fc290ef349efe1269a717b7ab301c7f812198b57fa5eab757f8876d95a3fa", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/05.response.jsonl": "e919bc3a0011ad8fcc01e3ae39f6328d146d75352cde05ddcf0963d0c96911cd", + "longer-paths-01/capture/raw/click-longer-chain/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/click-longer-chain/graphify/reverse.stderr": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "longer-paths-01/capture/raw/click-longer-chain/graphify/reverse.stdout": "f1b24be88b9eb12f7522a88566c40853e314a98eea092713270911329b260273", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/depth-1.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/depth-1.stdout": "eb3a8d3ded5f26144d26b3648198401aa89f2ffc0dba6143d4937d96feec4003", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/depth-2.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/depth-2.stdout": "915b920f99df3ef558c8b6d50177be3e5e40e51c8c4aa93ec615c617614759d3", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/depth-3.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/depth-3.stdout": "a5f2467cdf094459a3b25a4bdfde6d9fc11387ae03b12f30d30fddee63f2c625", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/depth-4.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/depth-4.stdout": "fb47627a2a220a24fa09fbeb618a1038e89cd2cc27b0311b62f14bfa7da69ac7", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/forward.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/forward.stdout": "32f357d4e1d08b76d03066f94b776fd66db773ea23f305c83967708cf9ab5c43", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/04.request.json": "0c8a4e8271bc135ea3af0f8b9860bd798a402e9941c9f3d94d95dbcc0888c596", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/04.response.jsonl": "cb0fddb28b6679c614d160ef83f2fcef95ce30628e277932648a8bb753f11fcf", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/05.request.json": "900aa16e1523afbb129a8dd01d47c9f0391096aaa4b531b7045a007342d4dafb", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/05.response.jsonl": "a213605416d1448eeff49ff35ffc27434d5a99f6f712f6910e18dfd7cb62549c", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/reverse.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/jsoup-longer-chain/compass/reverse.stdout": "982bc2cb8d73cc310ccd7591bc8cd6569652afde7bea001d11aba5429f318694", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/forward.stderr": "a8f84ff9822a6b3bf9ec96cd1be6eabd7c9712d1be498d3eae04aff011ac3393", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/forward.stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/04.request.json": "9b9e040cec01faf6ab52f33f79a33ef6e4facd455b48371f06ce296f6a50b1a2", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/04.response.jsonl": "3f79d7a12e9971fa8f29523576e0471a33c6a1dc2894b2ee391a971be968cf2d", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/05.request.json": "f8491a75a44088cd11abba1a3451cadde5041e5714790f66d12749dd27620ccd", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/05.response.jsonl": "e40104e933c425f87774ffc4405723c32e7663f88d35f2100b933f3c91951812", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/reverse.stderr": "3771a73d6a566ff52352c440c60143fd093337b5482490e45d8cf00ef29047a9", + "longer-paths-01/capture/raw/jsoup-longer-chain/graphify/reverse.stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/04.request.json": "1d7095b72feea735904940405657eedb949473e4c83197b9d09d03e28e7d4e45", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/04.response.jsonl": "06fd970bb42dcbe1b04aae39ff838edb8ce61f3c9d2ce3e19630909c72200583", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/05.request.json": "91e9b64a540b04adb77b6808772c3fd1c9ffc1e1ff69261aba52d991877b94af", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/05.response.jsonl": "24fa6ba002dff26a8ce49d903e99ed381106d77a170797334d32ec16e1cf6403", + "longer-paths-01/capture/raw/redux-longer-chain/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/04.request.json": "aabb065532bd41f50796c10f60e44a8c1ac8a53aa146eff7754c1b7776d0226f", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/04.response.jsonl": "9ce8bd0bef51868b4a355fcd2c53223925265446e05f4cfbf29d752cac22425d", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/05.request.json": "3588c9588f4a34852fda42584064d32806ff375479b15c2a484e4dc4a5ba63a2", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/05.response.jsonl": "2de49d499910e55f997d9461e7f00d1ddb62fbbf31e4f68591315008b7cbe3eb", + "longer-paths-01/capture/raw/redux-longer-chain/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/depth-1.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/depth-1.stdout": "9be3a14e9ae01f02e04c3362e50bc9c1e0b83ae34e92e684cefffa553b879656", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/depth-2.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/depth-2.stdout": "850bf59f5fde009cce1ada6ab27caf6e2de8c074857308468c0e7802b32b1e69", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/depth-3.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/depth-3.stdout": "537a305f4b296eefbfc8eba6cb7b88b61bdd738f012998faaec97bfc811023be", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/forward.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/forward.stdout": "845f706fbf43bf4f9a1e8bd1783800471568e8743459afefb5174bba6d8008f0", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/04.request.json": "2f0c9f556e1724a6e44fe0729331479910b8b3255934d26200b91dd3a90fbf39", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/04.response.jsonl": "d6df8dcdd380ed00e8a922f87e80e143a3b1e0c97a757fb8b6d4a33725a3bb02", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/05.request.json": "0c1e778fee454ce56eb6f7efd38e35dc20beabc80c10c4fe976e5a4a4ad98d31", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/05.response.jsonl": "d386a14aac9d0fdb798b2ee8332a18ea3cd21d2c45f5867d48566033f33fd6cc", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/reverse.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/raw/walkdir-longer-chain/compass/reverse.stdout": "d5cdd7b5eafdfd3d6545c997198f5957c8b84fb65cb980faa7d97d16449d5a69", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/04.request.json": "c93848c7c01a7e7eae69d039a809fb7bb1fcef47e98ee172fa9a1a9795a49468", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/04.response.jsonl": "0308eb24566e0a49797f711ec37769ed3442e0479195cefb09d923f719786b5f", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/05.request.json": "9e81cabc0f1a8491d124c223a9d55dc7eea3a1ca53073c6594059770ce4fd8fa", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/05.response.jsonl": "2b5949da4df8aad8f97d06eb9731f6af5c9bb4d37bf6ad5d297dae32aff596fe", + "longer-paths-01/capture/raw/walkdir-longer-chain/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/capture/runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "longer-paths-01/capture.log": "fe1213a747789c829ec67899264a1b47874b2f325f4e4f97bca48d97060818fb", + "longer-paths-01/collect_label_control.py": "3977ddcd61fc40ab894db9d0f4aa59ba8ad1bbd992dfaa9f680382beb17a9355", + "longer-paths-01/diagnose.py": "590c6dfc638e4db49c151877bed42361e867fcd0e5a63fbdb529c65b603ab2ce", + "longer-paths-01/diagnosis.log": "a5e409dcb5e8b1aee127fe7f11da03b4068f8bf949fdcbca10a25d97485baa48", + "longer-paths-01/graph-diagnosis.json": "d060f5bd28fa00effcc5bba38548fed48041b67808e27cd3c63b617812d3c1ce", + "longer-paths-01/label-control/capture.json": "7a735d6237b76b780280f561d31374e2d11e4f30a55b7163adb0677e216a98a3", + "longer-paths-01/label-control/collect_label_control.py": "3977ddcd61fc40ab894db9d0f4aa59ba8ad1bbd992dfaa9f680382beb17a9355", + "longer-paths-01/label-control/longer_path_label_control_registration.json": "94e8139b66385afac2ea1b7147a004273845c4189278ba557c7edfca95a33202", + "longer-paths-01/label-control/longer_path_witnesses.json": "33d1cdccc5cfb6f4225674c36ee7616b6dc21e0a51c2c5bbedc8fa1e44ae8718", + "longer-paths-01/label-control/raw/chi-longer-chain.compass.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/label-control/raw/chi-longer-chain.compass.stdout": "59ef2c10741f173a87455c8965b1776927f63f5580a27c7158600bcf7b7125a1", + "longer-paths-01/label-control/raw/chi-longer-chain.graphify.stderr": "b9679c2a8cf75d4cc437463b970b844578b9bc39856f27321544066d264b8547", + "longer-paths-01/label-control/raw/chi-longer-chain.graphify.stdout": "9cfe363848d7537a89453b671842ac273f848baf266b07a1ebf22ed6ac32d00d", + "longer-paths-01/label-control/raw/click-longer-chain.compass.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/label-control/raw/click-longer-chain.compass.stdout": "f7718d009afa2066aa91ec453fd6bdd0d049621d492018b8dd31bab144941c9b", + "longer-paths-01/label-control/raw/click-longer-chain.graphify.stderr": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "longer-paths-01/label-control/raw/click-longer-chain.graphify.stdout": "60004deae9f42a7096103058a948cac99774322aa1d3f9c68137eadce555c535", + "longer-paths-01/label-control/raw/jsoup-longer-chain.compass.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/label-control/raw/jsoup-longer-chain.compass.stdout": "081a1fcf19bc562c2adfd6d204ac91c6548e1d41aa7f966d88f4cfde5fc6feab", + "longer-paths-01/label-control/raw/jsoup-longer-chain.graphify.stderr": "ad8b759ce936bd906bee37c4c7bf7f8c8bb7edd4473f01eaff2c5e71df608d9b", + "longer-paths-01/label-control/raw/jsoup-longer-chain.graphify.stdout": "9254f89c023b383ae6ee73faae60b417624bd30958baa8a0324b52315b133e98", + "longer-paths-01/label-control/raw/redux-longer-chain.compass.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/label-control/raw/redux-longer-chain.compass.stdout": "15d4abd85d838b16143d8ead29fc4335b345dc5134109d72a612ac4e58733f38", + "longer-paths-01/label-control/raw/redux-longer-chain.graphify.stderr": "594401865ce46fd5dcfaf566bfab8a4500eb68f9504d82031a7f3936d0f4bb66", + "longer-paths-01/label-control/raw/redux-longer-chain.graphify.stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/label-control/raw/walkdir-longer-chain.compass.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/label-control/raw/walkdir-longer-chain.compass.stdout": "52975f6e6eb0fb907111d982a3804fc0d18dd8f4a66019258e30067691f76a1c", + "longer-paths-01/label-control/raw/walkdir-longer-chain.graphify.stderr": "23caf23c6034d1afff9b9d35b5445d7f125cef858fc050de21c77abb322e3a44", + "longer-paths-01/label-control/raw/walkdir-longer-chain.graphify.stdout": "1fd59b9fc70145ee1ca909c38d185029914ed0a1a28bddb44234822c4bbf938c", + "longer-paths-01/label-control.log": "469601cc3783e60eb70dad4ed2d287a3bd8835afb09b4be0fcb551a718a73153", + "longer-paths-01/pr-before.json": "b5c8376fd6b73796d8f00b50f905acf55047f2485dc32af5699151f080c95c5e", + "longer-paths-01/product-boundary.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "longer-paths-01/register.py": "b3adf4bfbb1774e66625c7f195ad45c42050d193a13e1b7ef69764af4dda3fa7", + "longer-paths-01/repeat-verification.log": "9b4d23d2227fb9c37a7267411afc28a52082360beb9c9455c92391882523ffb9", + "longer-paths-01/replay-before.json": "f4c23c2386d8c1dc3947cb99590d2159bd1df512580630daeed243927a358eaf", + "longer-paths-01/replay.json": "2a9b527f7d30a8b01b18bfad09844459afb8e81bc6956b15f18be389cc44651c", + "longer-paths-01/section.md": "988f5e00975ba56cb08d57c15d27021c9286679dd637d2dd50d6a53ecb3bf9e5", + "longer-paths-01/verification-attempt-01.log": "c3ed84699a067bd1ee3bbc7f7138e96b3bb0745d563ea5feff4057f6e382205e", + "longer-paths-01/verification-attempt-02.log": "eca2dbc1b36c1cc1d637176089cc7571542a7b4334688ffd9992450857f14003", + "longer-paths-01/verification.log": "9b4d23d2227fb9c37a7267411afc28a52082360beb9c9455c92391882523ffb9", + "longer-paths-01/verified-summary-draft-03.json": "09ed7e760139205a57c4aaa8db89bcb8e38031a546fbaed1333d242532fab293", + "longer-paths-01/verified-summary.json": "5bbeeef6f7245348ca1638ff3b85f47d88db4745a134aa93a66807ce71f8f556", + "longer-paths-01/verify-attempt-01.py": "f8bb13823fd88eeadec089bdb5e1d5855dcb6a3b3af1fa17ebe165aa4df3a6c0", + "longer-paths-01/verify-attempt-02.py": "5a18d2f5c84e71c80cfcb0d9a3c5d2acd56921a332f5319a85343d4653848cbf", + "longer-paths-01/verify-draft-03.py": "a850dc6c1e32115fca7126640b0b7c163c278231ad0895de6ff3107378c44d3b", + "longer-paths-01/verify.py": "352fe85b2ccb24c78846ddb7855711a74826b79935de1632dd1a37830a38307d", + "longer-paths-01/write_review.py": "ee454e1f47da522f8d2873716217a5b34343627f95e7d220ac69e9fe995747e4", + "benchmarks/agent_query/longer_path_registration.json": "5c4d1b4c0c3b335425afcb986580e6e31203cf72b9bfd4348acaf2529d9a8a38", + "benchmarks/agent_query/longer_path_witnesses.json": "33d1cdccc5cfb6f4225674c36ee7616b6dc21e0a51c2c5bbedc8fa1e44ae8718", + "benchmarks/agent_query/longer_path_label_control_registration.json": "94e8139b66385afac2ea1b7147a004273845c4189278ba557c7edfca95a33202", + "benchmarks/agent_query/directed_identity.py": "d692f39978c3b799873a92d344efee9ad341632fe63cd249e3f06bdd4195d603", + "benchmarks/agent_query/tests/test_directed_identity.py": "eb150380f273374dbb925413665e41e37957042cb99af60528d06822fc8dbf7b" + } +} diff --git a/benchmarks/agent_query/longer_path_witnesses.json b/benchmarks/agent_query/longer_path_witnesses.json new file mode 100644 index 000000000..c5f70d819 --- /dev/null +++ b/benchmarks/agent_query/longer_path_witnesses.json @@ -0,0 +1,655 @@ +{ + "schema": "compass.longer-path-witnesses/1", + "scope": "Five new endpoint pairs in previously inspected development repositories. Four-to-seven-call positive witnesses, not held-out or population evidence.", + "witnesses": [ + { + "id": "chi-longer-chain", + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "question": "Find a directed source-supported call chain from MethodFunc to tailSort. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "mux.go", + "line": 137, + "text": "func (mx *Mux) MethodFunc(", + "symbol": "MethodFunc", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 127, + "text": "func (mx *Mux) Method(method,", + "symbol": "Method", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "mux.go", + "line": 430, + "text": "func (mx *Mux) handle(method", + "symbol": "handle", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + }, + { + "file": "tree.go", + "line": 148, + "text": "func (n *node) InsertRoute(", + "symbol": "InsertRoute", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + }, + { + "file": "tree.go", + "line": 244, + "text": "func (n *node) addChild(child *node, prefix string) *node {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "addChild" + }, + { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "Sort" + }, + { + "file": "tree.go", + "line": 841, + "text": "func (ns nodes) tailSort() {", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "symbol": "tailSort" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 138, + "text": "mx.Method(method, pattern, handlerFn)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 132, + "text": "mx.handle(m, pattern, handler)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "mux.go", + "line": 450, + "text": "return mx.tree.InsertRoute(method, pattern, h)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 183, + "text": "hn := parent.addChild(child, search)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 324, + "text": "n.children[child.typ].Sort()", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "tree.go", + "line": 834, + "text": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79" + } + } + ], + "sourceInterpretation": "Six static call steps. InsertRoute new-child branch; node.children is an array of nodes (tree.go:112,831). Sort invokes tailSort directly, independently of sort.Sort callback dispatch. Not a guarantee for every route registration." + }, + { + "id": "click-longer-chain", + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "question": "Find a directed source-supported call chain from open_file to is_ascii_encoding. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 22, + "text": "def _make_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_make_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 51, + "text": "def get_best_encoding(stream: t.IO[t.Any]) -> str:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_best_encoding" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 278, + "text": "return _make_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 30, + "text": "encoding = get_best_encoding(stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 54, + "text": "if is_ascii_encoding(rv):", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ], + "sourceInterpretation": "Seven static calls: non-lazy open_file, text standard-output branch, no Windows stream override, rewrap needed and encoding omitted. There is also a shorter six-call path through _stream_is_misconfigured; neither witness proves a globally shortest path.", + "alternativeWitnesses": [ + { + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "symbol": "open_file", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "symbol": "open_stream", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + }, + { + "file": "src/click/_compat.py", + "line": 347, + "text": "def get_text_stdout(encoding: str | None = None, errors: str | None = None) -> t.TextIO:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "get_text_stdout" + }, + { + "file": "src/click/_compat.py", + "line": 303, + "text": "def _force_correct_text_writer(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_writer" + }, + { + "file": "src/click/_compat.py", + "line": 241, + "text": "def _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_force_correct_text_stream" + }, + { + "file": "src/click/_compat.py", + "line": 212, + "text": "def _stream_is_misconfigured(stream: t.TextIO) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "_stream_is_misconfigured" + }, + { + "file": "src/click/_compat.py", + "line": 43, + "text": "def is_ascii_encoding(encoding: str) -> bool:", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "symbol": "is_ascii_encoding" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 390, + "text": "return get_text_stdout(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 351, + "text": "return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 309, + "text": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 257, + "text": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/click/_compat.py", + "line": 218, + "text": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913" + } + } + ] + } + ] + }, + { + "id": "jsoup-longer-chain", + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "question": "Find a directed source-supported call chain from isValid to appendChild. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 434, + "text": "public static boolean isValid(String", + "symbol": "isValid", + "fileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "text": "public boolean isValidBodyHtml(String", + "symbol": "isValidBodyHtml", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + }, + { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 65, + "text": "public static Document createShell(String baseUri) {", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "symbol": "createShell" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 918, + "text": "public Element appendElement(String tagName) {", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "symbol": "appendElement" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 929, + "text": "public Element appendElement(String tagName, String namespace) {", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "symbol": "appendElement" + }, + { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 813, + "text": "public Element appendChild(Node child) {", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "symbol": "appendChild" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 435, + "text": "return new Cleaner(safelist).isValidBodyHtml(bodyHtml);", + "fileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 126, + "text": "Document clean = Document.createShell(baseUri);", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 69, + "text": "Element html = doc.appendElement(\"html\");", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 919, + "text": "return appendElement(tagName, tag.namespace());", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 932, + "text": "appendChild(child);", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340" + } + } + ], + "sourceInterpretation": "Five calls, including inherited Element.appendElement on a concrete new Document, then one-argument to two-argument overload dispatch. Document extends Element at Document.java:26 and has no appendElement override. Constructor evaluation is not substituted for method invocation." + }, + { + "id": "redux-longer-chain", + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "question": "Find a directed source-supported call chain from combination to ctorName. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "src/combineReducers.ts", + "line": 157, + "text": "return function combination(", + "fileSha256": "52f4a8c5561bd9ea2532edd31d3a8958dabb13fcc0d11140d158c84e454ce1dc", + "symbol": "combination" + }, + { + "file": "src/combineReducers.ts", + "line": 14, + "text": "function getUnexpectedStateShapeWarningMessage(", + "fileSha256": "52f4a8c5561bd9ea2532edd31d3a8958dabb13fcc0d11140d158c84e454ce1dc", + "symbol": "getUnexpectedStateShapeWarningMessage" + }, + { + "file": "src/utils/kindOf.ts", + "line": 62, + "text": "export function kindOf(", + "symbol": "kindOf", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + }, + { + "file": "src/utils/kindOf.ts", + "line": 2, + "text": "export function miniKindOf(", + "symbol": "miniKindOf", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + }, + { + "file": "src/utils/kindOf.ts", + "line": 40, + "text": "function ctorName(", + "symbol": "ctorName", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + } + ], + "steps": [ + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/combineReducers.ts", + "line": 166, + "text": "const warningMessage = getUnexpectedStateShapeWarningMessage(", + "fileSha256": "52f4a8c5561bd9ea2532edd31d3a8958dabb13fcc0d11140d158c84e454ce1dc" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/combineReducers.ts", + "line": 35, + "text": "`The ${argumentName} has unexpected type of \"${kindOf(", + "fileSha256": "52f4a8c5561bd9ea2532edd31d3a8958dabb13fcc0d11140d158c84e454ce1dc" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/utils/kindOf.ts", + "line": 66, + "text": "typeOfVal = miniKindOf(val)", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + } + }, + { + "relation": "calls", + "direction": "forward", + "site": { + "file": "src/utils/kindOf.ts", + "line": 21, + "text": "const constructorName = ctorName(val)", + "fileSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f" + } + } + ], + "sourceInterpretation": "Four conditional calls from the returned named function expression itself, not from combineReducers. Development mode, nonempty reducer map, nonplain state, nonprimitive/non-Date/non-Error value. Returning a function is not a call edge." + }, + { + "id": "walkdir-longer-chain", + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "question": "Find a directed source-supported call chain from next to from_loop. Identify each declaration and call site, and distinguish conditional calls from guaranteed execution.", + "nodes": [ + { + "file": "src/lib.rs", + "line": 687, + "text": "fn next(&mut self) -> Option> {", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "symbol": "next" + }, + { + "file": "src/lib.rs", + "line": 840, + "text": " fn handle_entry(", + "symbol": "handle_entry", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a" + }, + { + "file": "src/lib.rs", + "line": 961, + "text": " fn follow(&self", + "symbol": "follow", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a" + }, + { + "file": "src/lib.rs", + "line": 973, + "text": " fn check_loop|<--) (.*?) \[([^\]]*)\] \[[^\]]*\]',text,re.M)) + expected=set();semantic=set() + for e in graph['links']: + rel=e.get('kind' if tool=='compass' else 'relation','') + if rel!='calls':continue + a,b=e['source'],e['target'] + if a==seed:expected.add(('-->',label(nodes[b],tool),rel)) + if b==seed:expected.add(('<--',label(nodes[a],tool),rel)) + a,b=(e.get('_src',a),e.get('_tgt',b)) if tool=='graphify' else (a,b) + if a==seed:semantic.add(('-->',label(nodes[b],tool),rel)) + if b==seed:semantic.add(('<--',label(nodes[a],tool),rel)) + result.update(expectedDisplayedTriples=len(expected),returnedTriples=len(actual), + missing=sorted(expected-actual),extra=sorted(actual-expected),displayedPairsMatch=actual==expected, + semanticDirectionsMatch=actual==semantic, + ambiguousNeighborLabels=sorted({name for _,name,_ in actual if len(names.get(name,[]))!=1})) + return result + + +def main(args): + run=json.loads(read_bounded(args.run/'run.json')) + if not run.get('complete'):raise ValueError('capture is incomplete') + old=Path(run['sourceRun']) + if _sha256_file(old/'run.json')!=run['sourceRunSha256']:raise ValueError('source run changed') + source=json.loads(read_bounded(old/'run.json')) + if _sha256_file(args.run/'inputs.json')!=run['inputSha256']: + raise ValueError('input manifest digest mismatch') + if _sha256_file(args.run/'mcp_compare.py')!=run['collectorSha256']: + raise ValueError('collector digest mismatch') + if 'transportSha256' in run and _sha256_file(args.run/'mcp_transport.py')!=run['transportSha256']: + raise ValueError('transport digest mismatch') + results=[] + graphs={} + for row in run['results']: + key=(row['repository'],row['tool']) + repo = captured_repository(source, key[0]) + if key[1] not in {'compass','graphify'}: + raise ValueError('invalid capture key') + if key not in graphs: + p=Path(repo[key[1]+'Graph']) + if _sha256_file(p)!=row['graphSha256']:raise ValueError('graph digest mismatch') + graphs[key]=json.loads(read_bounded(p,MAX_GRAPH_BYTES)) + if row['executionSucceeded']: + packet=row['response'] + identity=packet.get('id') + if type(identity) is not int or not 1 <= identity <= 100: + raise ValueError('invalid captured response ID') + raw=read_bounded(args.run/'raw'/key[0]/key[1]/f'{identity:02}.response.jsonl') + packets=[json.loads(line) for line in raw.splitlines() if line] + if not any(p==packet for p in packets): + raise ValueError('response differs from raw transcript') + text='\n'.join(c['text'] for c in packet.get('result',{}).get('content',[]) if c.get('type')=='text') + if text!=row['text'] or len(text.encode())!=row['textBytes']: + raise ValueError('answer text differs from response') + checked=audit(row,graphs[key]) + if row['executionSucceeded']: + checked['wireResponseBytes']=len(raw) + checked['textBytes']=row['textBytes'] + results.append(checked) + report={'scope':__doc__,'captureSha256':_sha256_file(args.run/'run.json'), + 'auditorSha256':_sha256_file(Path(__file__)),'results':results} + with args.output.open('x') as f:json.dump(report,f,indent=2,sort_keys=True) + for r in results: + print(r['repository'],r['tool'],r['question'],{k:v for k,v in r.items() if k.endswith('Match') or k.endswith('Matches') or k.endswith('Preserved')}) + + +if __name__=='__main__': + p=argparse.ArgumentParser(description=__doc__) + p.add_argument('--run',type=Path,required=True);p.add_argument('--output',type=Path,required=True) + main(p.parse_args()) diff --git a/benchmarks/agent_query/mcp_compare.py b/benchmarks/agent_query/mcp_compare.py new file mode 100644 index 000000000..e97a77778 --- /dev/null +++ b/benchmarks/agent_query/mcp_compare.py @@ -0,0 +1,188 @@ +"""Capture prepared, public MCP operations on existing paired graphs. + +This collector does not synthesize tool answers. Input IDs/community IDs are +prepared symmetrically from captured graphs; that preparation is not scored as +node retrieval. It requires separately supplied local server executables. +""" +from __future__ import annotations +import argparse +import json +from pathlib import Path +import re +import shutil +import time +from collections import Counter + +from benchmarks.agent_query.mcp_transport import StdioMcp +from benchmarks.agent_query.path_audit import read_bounded, MAX_GRAPH_BYTES, check_source +from benchmarks.agent_query.runner import _sha256_file, _node_anchor, _verify_source, load_suite + + +def community(node, tool): + value = node.get('community') + return value.get('id') if tool == 'compass' and isinstance(value, dict) else value + + +def captured_repository(source_run, name): + """Resolve one captured repository without allowing raw-output path escapes.""" + if not isinstance(name, str) or re.fullmatch(r'[a-z0-9][a-z0-9_-]{0,79}', name) is None: + raise ValueError('invalid repository key') + matches = [r for r in source_run['repositories'] if r['repository'] == name] + if len(matches) != 1: + raise ValueError('repository must occur exactly once in the captured run') + return matches[0] + + +def prepare_questions(graph, tool, witness): + if 'pathQuestions' in witness: + if not isinstance(witness['pathQuestions'], list) or not 1 <= len(witness['pathQuestions']) <= 32: + raise ValueError('prepared path questions must contain 1 to 32 entries') + queries = [] + identifiers = set() + for question in witness['pathQuestions']: + identifier = question['id'] + if not isinstance(identifier, str) or not identifier or identifier in identifiers: + raise ValueError('prepared question IDs must be nonempty and unique') + identifiers.add(identifier) + arguments = question['arguments'][tool] + if set(arguments) - {'source', 'target', 'max_hops', 'undirected'}: + raise ValueError('unexpected prepared path argument') + if not all(isinstance(arguments.get(key), str) and arguments[key] for key in ['source', 'target']): + raise ValueError('invalid prepared path endpoints') + if type(arguments.get('max_hops')) is not int or not 0 <= arguments['max_hops'] <= 64: + raise ValueError('invalid prepared hop bound') + if tool == 'graphify' and arguments.get('undirected') is not True: + raise ValueError('shared navigation tasks require explicit undirected Graphify search') + if tool == 'compass' and 'undirected' in arguments: + raise ValueError('Compass path comparison must use its advertised implicit undirected mode') + queries.append((question['id'], 'shortest_path', arguments)) + return queries + matches = [n for n in graph['nodes'] if _node_anchor(n, tool)[:2] == (witness['file'], witness['line']) + and witness['symbol'] in _node_anchor(n, tool)[2]] + if len(matches) != 1: + raise ValueError(f"{tool}: declaration input has {len(matches)} identities") + counts = Counter(community(n, tool) for n in graph['nodes'] if community(n, tool) is not None) + if not counts or any(type(k) is not int or k < 0 for k in counts): + raise ValueError('invalid or missing stored community IDs') + largest = min(counts, key=lambda k: (-counts[k], k)) + budget = {'token_budget': 262144} if tool == 'graphify' else {} + queries = [ + ('stats', 'graph_stats', {}), + ('hubs', 'god_nodes', {'top_n': 10}), + ('community', 'get_community', {'community_id': largest, **budget}), + ('missing-community', 'get_community', {'community_id': max(counts)+1, **budget}), + ('neighbors', 'get_neighbors', {'label': matches[0]['id'], 'relation_filter': 'calls', **budget}), + ] + if witness['ambiguousLabel']: + queries.append(('ambiguous-neighbors', 'get_neighbors', {'label': witness['ambiguousLabel'], **budget})) + return queries + + +def skipped_results(repository, tool, questions, graph_digest, argv): + return [{'repository':repository, 'tool':tool, 'question':identifier, + 'method':method, 'arguments':params, 'graphSha256':graph_digest, + 'argv':argv, 'executionSucceeded':False, + 'captureError':'not executed after the MCP connection failed'} + for identifier,method,params in questions] + + +def verify_environment(args): + manifest = json.loads(read_bounded(args.graphify_environment)) + roots = list(args.graphify_python.parent.parent.glob('lib/python*/site-packages/graphify')) + if len(roots) != 1: + raise ValueError('cannot identify Graphify package root') + for record in manifest['files']: + relative = Path(record['file']) + if relative.is_absolute() or '..' in relative.parts: + raise ValueError('invalid environment file path') + if _sha256_file(roots[0]/relative) != record['mcpEnvironmentSha256']: + raise ValueError('Graphify package changed since environment capture') + + +def execute(args): + verify_environment(args) + source_run = json.loads(read_bounded(args.run/'run.json')) + suite = load_suite(args.run/'suite.toml') + if suite.digest != source_run['suiteDigest']: + raise ValueError('captured suite digest mismatch') + manifest = json.loads(read_bounded(args.inputs)) + if manifest['schema'] != 'compass.mcp-comparison-inputs/1': + raise ValueError('unsupported MCP input schema') + args.output.mkdir(parents=True, exist_ok=False) + shutil.copy2(args.inputs, args.output/'inputs.json') + shutil.copy2(args.graphify_environment, args.output/'graphify-environment.json') + for name in ['mcp_compare.py', 'mcp_transport.py']: + shutil.copy2(Path(__file__).with_name(name), args.output/name) + report = {'schema':'compass.mcp-comparison-capture/1', 'sourceRunSha256':_sha256_file(args.run/'run.json'), + 'inputSha256':_sha256_file(args.inputs), 'sourceRun':str(args.run.resolve()), + 'collectorSha256':_sha256_file(Path(__file__)), + 'transportSha256':_sha256_file(Path(__file__).with_name('mcp_transport.py')), 'servers':{}, 'results':[]} + for tool, binary in [('compass',args.compass),('graphify',args.graphify_python)]: + report['servers'][tool] = {'executable':str(binary.resolve()), 'executableSha256':_sha256_file(binary)} + for witness in manifest['repositories']: + name = witness['name'] + repo = captured_repository(source_run, name) + pinned = next(r for r in suite.repositories if r.name == name) + source = Path(repo['source']) + _verify_source(pinned,source) + check_source(source, {'file':witness['file'],'line':witness['line'],'text':witness['sourceText']}) + if witness.get('commit', repo['commit']) != repo['commit']: + raise ValueError('prepared source commit differs') + for anchor in witness.get('anchors', []): + check_source(source, anchor) + for tool in ['compass','graphify']: + graph_path = Path(repo[tool+'Graph']) + digest = _sha256_file(graph_path) + if digest != repo[tool+'GraphSha256']: + raise ValueError('captured graph changed') + if witness.get('graphSha256', {}).get(tool, digest) != digest: + raise ValueError('prepared path graph differs') + graph = json.loads(read_bounded(graph_path,MAX_GRAPH_BYTES)) + questions = prepare_questions(graph,tool,witness) + argv = [str(args.compass),'serve'] if tool == 'compass' else [str(args.graphify_python),'-m','graphify.serve'] + argv += ['--graph',str(graph_path),'--transport','stdio'] + directory = args.output/'raw'/name/tool + with StdioMcp(argv,source,directory) as session: + session.initialize() + listing = session.send('tools/list',{}) + advertised = {t['name'] for t in listing.get('result',{}).get('tools',[])} + for position, (identifier, method, params) in enumerate(questions): + if method not in advertised: + raise ValueError(f'{tool} did not advertise {method}') + started = time.monotonic() + row = {'repository':name,'tool':tool,'question':identifier,'method':method, + 'arguments':params,'graphSha256':digest,'argv':argv} + try: + response = session.send('tools/call',{'name':method,'arguments':params}) + result = response.get('result',{}) + text = '\n'.join(c['text'] for c in result.get('content',[]) if c.get('type') == 'text') + row.update({'response':response,'text':text,'textBytes':len(text.encode()), + 'protocolBytes':len(json.dumps(response).encode()), + 'executionSucceeded': 'error' not in response and not result.get('isError',False)}) + except (ValueError,RuntimeError,TimeoutError,OSError) as error: + row.update({'executionSucceeded':False,'captureError':str(error)}) + row['wallMs'] = round((time.monotonic()-started)*1000) + report['results'].append(row) + (args.output/'run.json').write_text(json.dumps(report,indent=2,sort_keys=True)+'\n') + print(name,tool,identifier,row['executionSucceeded'],row.get('textBytes'),flush=True) + if 'captureError' in row: + report['results'].extend(skipped_results(name,tool,questions[position+1:],digest,argv)) + break # A desynchronized connection cannot be reused. + if _sha256_file(graph_path) != digest: + raise ValueError('graph changed during MCP questions') + _verify_source(pinned,source) + verify_environment(args) + report['graphifyEnvironmentSha256'] = _sha256_file(args.graphify_environment) + report['complete'] = True + (args.output/'run.json').write_text(json.dumps(report,indent=2,sort_keys=True)+'\n') + + +if __name__ == '__main__': + p=argparse.ArgumentParser(description=__doc__) + p.add_argument('--run',type=Path,required=True) + p.add_argument('--inputs',type=Path,default=Path(__file__).with_name('suite_mcp.json')) + p.add_argument('--output',type=Path,required=True) + p.add_argument('--compass',type=Path,required=True) + p.add_argument('--graphify-python',type=Path,required=True) + p.add_argument('--graphify-environment',type=Path,required=True) + execute(p.parse_args()) diff --git a/benchmarks/agent_query/mcp_panel_a_review.json b/benchmarks/agent_query/mcp_panel_a_review.json new file mode 100644 index 000000000..b4adf64bb --- /dev/null +++ b/benchmarks/agent_query/mcp_panel_a_review.json @@ -0,0 +1,485 @@ +{ + "afterRouteCorrection": { + "binarySha256": "872aff05f6c1723d27ee96230a4e315d3f0d6e1849387de09530b907f0ff3f40", + "capture": "mcp-panel-a-02", + "cli": { + "questionsPerTool": 55, + "sourcePathMatches": { + "compass": 6, + "graphify": 8 + }, + "successfulExecutions": 98, + "textPasses": { + "compass": 46, + "graphify": 46 + }, + "timeouts": 0 + }, + "edgeAudit": { + "corrected": { + "compass": { + "occurrenceAgreement": 16, + "pairs": 21, + "relationshipMatches": 16 + }, + "graphify": { + "occurrenceAgreement": 17, + "pairs": 21, + "relationshipMatches": 20 + } + }, + "registered": { + "compass": { + "occurrenceAgreement": 15, + "pairs": 21, + "relationshipMatches": 16 + }, + "graphify": { + "occurrenceAgreement": 18, + "pairs": 21, + "relationshipMatches": 20 + } + } + }, + "expectedQuestionMultisetVerified": true, + "relationshipDelta": { + "chi": { + "added": 0, + "baseline": "go-initializer-chi-02", + "nodeCountUnchanged": true, + "removedContains": 88 + }, + "otherFourRepositories": "No relationship changes against frozen panel A." + }, + "scope": "Repeated development MCP questions on fresh panel graphs, including both the prior Go receiver correction and the route-hierarchy correction. The two changes are separated in the relationship delta.", + "successfulRequests": 60, + "tools": { + "compass": { + "ambiguityPreserved": 5, + "communityMembers": { + "chi": 90, + "click": 389, + "jsoup": 752, + "redux": 271, + "walkdir": 116 + }, + "hubIdentitiesKnown": 50, + "hubSummaryMatches": 50, + "membershipMatches": 5, + "missingCommunityMatches": 5, + "neighborDisplayedTriplesMatch": 5, + "sourceRoles": { + "callable": 7, + "documentation-tooling": 2, + "source-module": 2, + "test-helper": 9, + "test-module": 5, + "test-type": 2, + "type": 23 + }, + "statsMatches": 5, + "textBytes": 125192, + "wireResponseBytes": 174698 + }, + "graphify": { + "ambiguityPreserved": 4, + "communityMembers": { + "chi": 108, + "click": 84, + "jsoup": 295, + "redux": 71, + "walkdir": 47 + }, + "hubIdentitiesKnown": 41, + "hubSummaryMatches": 0, + "membershipMatches": 5, + "missingCommunityMatches": 5, + "neighborDisplayedTriplesMatch": 5, + "sourceRoles": { + "callable": 5, + "example-callable": 2, + "example-type": 1, + "test-helper": 2, + "test-type": 5, + "type": 26, + "unverified-identity": 9 + }, + "statsMatches": 5, + "textBytes": 42550, + "wireResponseBytes": 45989 + } + }, + "verification": { + "benchmarkTestsPassed": 97, + "clippy": "passed on workspace lib/bin plus selected integrations; first run retained an existing expect_err lint failure, corrected with an explicit error assertion", + "frameworkQualificationTestsRerunAfterLintCleanup": 4, + "frameworkRoutesPassed": 17, + "fullFixtureQualification": "FAILED at the old topology count floor. Complete source review justifies 19 removed false containment edges; recalibrated count policy passes, but the new independent-route assertions find one remaining false filesystem parent. See route_hierarchy_fixture_review.json.", + "nativeFailed": 0, + "nativeIgnored": 2, + "nativePassed": 1431 + } + }, + "artifactDigests": { + "chi-route-hierarchy-negative-01.json": "487ad2d0338b165d2f835c2bc0bea34a299132ccc14602c9540e6907e332d5f6", + "chi-route-hierarchy-negative-02.json": "4c2a59863ccc1abbbcd28ee0ea52b810dbbc8b0775258aa7cdeb27e26a588e84", + "chi-route-hierarchy-negative-03.json": "aa2ba8b6d0a170ce1d9b61916dcc9471bfcfa863c9db107064657b871cb8dc5f", + "mcp-panel-a-01/run.json": "af1f84bee444ea3ab05e2db839562e7e4b392f5f1b1da8cba7e91fca5aa5dd28", + "mcp-panel-a-02/run.json": "c001978913423a45102f74cd8f079cf78a12e1b425f40c9451ca8725b416ea91", + "mcp-panel-a-hub-source-audit-01.capture.json": "4429a6b4d024fcbf079143a09b31c0d5fc3992c2a1799b8d0f52184eebe85f46", + "mcp-panel-a-hub-source-audit-01.json": "9716c6036f6d6945573104c6ee5c1f2c744e11f7149a95e681d911c26f78365a", + "mcp-panel-a-hub-source-audit-02.capture.json": "1fcb887ec31d870ac5965d65e8dfa8dccc752722d898e65e1be7ac179a2e71cb", + "mcp-panel-a-hub-source-audit-02.json": "9336850fce9160bb279f90aa0b18b278282211108706293ef4d3c3758f16c771", + "mcp-panel-a-python-01.log": "5929e889d4946028b77b12e360bd7d58ad6647a59395dfbf0af795e848cc454f", + "route-hierarchy-clippy-01.log": "82866b969b6b661a2ab3ba7ef1ac68092a6d0877da9c7d8decb4f7a114fc9941", + "route-hierarchy-clippy-02.log": "51ff0ed8555a37a44dec965e9314732c8b97ebb4fec4a68455409edfa84b1a57", + "route-hierarchy-native-01.log": "3019788711eb5bc49a2f7e0eec25d17c68efdf73b4cba7644dad18be1fadc026", + "route-hierarchy-panel-a-delta-01.json": "475947f81502460731f2af67e93a4857064413fd88543229a8edbae763f0dbe4", + "route-hierarchy-panel-a-path-audit-01.json": "528a6546ff74891b19b8bdcff6867816d9d4d6901af9cab2a15587d562d61d6d", + "route-hierarchy-qualification-test-02.log": "161fd8e342e86b2da8325e6c4fc8163e364ac5fcf8ebe047d1d915227c3094bc", + "route-hierarchy-regression-after-01.log": "1b6eac01a41a13492e502428e4ba9870a794ab3e3993e720c64b2c8706fc7137", + "route-hierarchy-regression-before-01.log": "52dd5af345f849ee575ba1de94a5c7bceefa065c7a9a39a94387c23f45473bc2" + }, + "expectedQuestionMultisetVerified": true, + "findings": [ + "Both tools enumerate their selected largest stored communities completely. Partition sizes and identities differ; this does not compare cohesion.", + "Compass reports ambiguity for all five names but returns broad substring candidates, including documentation nodes. Graphify silently selects the Chi URLParam method and preserves the other four ambiguities.", + "Compass Chi route hub GET /users/1 has degree 59 from 68 unsupported cross-file containment records. A selected negative fails on both the frozen panel graph and the current Go-corrected graph. Graphify has no matching route identities; absence is not scored as a correct negative.", + "Compass raw neighbor text omits call occurrence sites; Graphify prints retained sites. Pair/direction agreement does not prove source occurrence completeness.", + "Largest community membership, degree, and connectivity summaries are self-graph checks. Source-precision and god-object or cohesion judgments remain open." + ], + "largestCommunities": [ + { + "communityId": 0, + "members": 96, + "repository": "chi", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "compass", + "topFiles": [ + [ + "mux_test.go", + 48 + ], + [ + "chi.go", + 27 + ], + [ + "tree.go", + 5 + ], + [ + "mux.go", + 5 + ], + [ + "tree_test.go", + 5 + ] + ] + }, + { + "communityId": 0, + "members": 108, + "repository": "chi", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "graphify", + "topFiles": [ + [ + "mux_test.go", + 48 + ], + [ + "tree_test.go", + 12 + ], + [ + "middleware/middleware_test.go", + 6 + ], + [ + "middleware/wrap_writer_test.go", + 6 + ], + [ + "", + 4 + ] + ] + }, + { + "communityId": 0, + "members": 389, + "repository": "click", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "compass", + "topFiles": [ + [ + "src/click/core.py", + 288 + ], + [ + "src/click/exceptions.py", + 36 + ], + [ + "src/click/types.py", + 29 + ], + [ + "src/click/parser.py", + 15 + ], + [ + "src/click/globals.py", + 11 + ] + ] + }, + { + "communityId": 0, + "members": 84, + "repository": "click", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "graphify", + "topFiles": [ + [ + "src/click/exceptions.py", + 16 + ], + [ + "", + 16 + ], + [ + "src/click/utils.py", + 15 + ], + [ + "src/click/termui.py", + 13 + ], + [ + "src/click/globals.py", + 7 + ] + ] + }, + { + "communityId": 0, + "members": 752, + "repository": "jsoup", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "compass", + "topFiles": [ + [ + "src/test/java/org/jsoup/parser/HtmlParserTest.java", + 207 + ], + [ + "src/test/java/org/jsoup/nodes/ElementTest.java", + 145 + ], + [ + "src/test/java/org/jsoup/select/SelectorTest.java", + 135 + ], + [ + "src/test/java/org/jsoup/select/ElementsTest.java", + 48 + ], + [ + "src/main/java/org/jsoup/select/Elements.java", + 25 + ] + ] + }, + { + "communityId": 0, + "members": 295, + "repository": "jsoup", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "graphify", + "topFiles": [ + [ + "src/test/java/org/jsoup/select/SelectorTest.java", + 150 + ], + [ + "src/test/java/org/jsoup/select/ElementsTest.java", + 44 + ], + [ + "src/test/java/org/jsoup/nodes/ElementTest.java", + 22 + ], + [ + "src/test/java/org/jsoup/select/XpathTest.java", + 16 + ], + [ + "src/test/java/org/jsoup/nodes/CommentTest.java", + 9 + ] + ] + }, + { + "communityId": 0, + "members": 271, + "repository": "redux", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "compass", + "topFiles": [ + [ + "test/createStore.spec.ts", + 156 + ], + [ + "test/helpers/reducers.ts", + 38 + ], + [ + "test/applyMiddleware.spec.ts", + 32 + ], + [ + "test/helpers/actionCreators.ts", + 23 + ], + [ + "test/helpers/actionTypes.ts", + 15 + ] + ] + }, + { + "communityId": 0, + "members": 71, + "repository": "redux", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "graphify", + "topFiles": [ + [ + "examples/shopping-cart/src/actions/index.js", + 6 + ], + [ + "", + 6 + ], + [ + "examples/todos/src/actions/index.js", + 5 + ], + [ + "examples/todos/src/containers/VisibleTodoList.js", + 4 + ], + [ + "examples/todos/src/containers/FilterLink.js", + 3 + ] + ] + }, + { + "communityId": 0, + "members": 116, + "repository": "walkdir", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "compass", + "topFiles": [ + [ + "src/lib.rs", + 55 + ], + [ + "src/dent.rs", + 31 + ], + [ + "src/error.rs", + 21 + ], + [ + "src/tests/util.rs", + 9 + ] + ] + }, + { + "communityId": 0, + "members": 47, + "repository": "walkdir", + "scope": "Stored-file distribution, not source-level functional cohesion.", + "tool": "graphify", + "topFiles": [ + [ + "src/tests/recursive.rs", + 45 + ], + [ + "", + 2 + ] + ] + } + ], + "provenanceLimits": "Compass and Graphify MCP server executable hashes are captured, with Graphify package files verified against the separate MCP environment manifest before/after execution. This does not retroactively attest CLI extraction dependencies. Timings under concurrent compilation are not performance evidence.", + "registrationCommit": "3ec3732a989e5d2cf51aa55438450faea7f84e76", + "requests": 60, + "schema": "compass.mcp-panel-a-review/1", + "scope": "Development MCP extension on panel A after its CLI outputs were observed. Use original frozen panel-A graphs and the hub-evidence Compass binary; commit these questions before MCP execution. Prepared IDs are not scored as node retrieval. Counts and membership measure stored-graph consistency, not source precision, functional community quality, or god-object diagnosis.", + "successfulRequests": 60, + "tools": { + "compass": { + "ambiguityPreserved": 5, + "hubIdentitiesKnown": 50, + "hubSummariesAvailable": 50, + "hubSummaryMatches": 50, + "hubTextBytes": 24401, + "hubWireResponseBytes": 69504, + "membershipMatches": 5, + "missingCommunityMatches": 5, + "neighborDisplayedTriplesMatch": 5, + "neighborSemanticDirectionsMatch": 5, + "sourceRoles": { + "callable": 7, + "documentation-tooling": 2, + "example-route": 1, + "source-module": 2, + "test-helper": 8, + "test-module": 5, + "test-route": 1, + "test-type": 2, + "type": 22 + }, + "statsMatches": 5, + "textBytes": 125033, + "wireResponseBytes": 174128 + }, + "graphify": { + "ambiguityPreserved": 4, + "hubIdentitiesKnown": 41, + "hubSummariesAvailable": 0, + "hubSummaryMatches": 0, + "hubTextBytes": 1473, + "hubWireResponseBytes": 1973, + "membershipMatches": 5, + "missingCommunityMatches": 5, + "neighborDisplayedTriplesMatch": 5, + "neighborSemanticDirectionsMatch": 5, + "sourceRoles": { + "callable": 5, + "example-callable": 2, + "example-type": 1, + "test-helper": 2, + "test-type": 5, + "type": 26, + "unverified-identity": 9 + }, + "statsMatches": 5, + "textBytes": 42550, + "wireResponseBytes": 45989 + } + } +} diff --git a/benchmarks/agent_query/mcp_path_audit.py b/benchmarks/agent_query/mcp_path_audit.py new file mode 100644 index 000000000..5ca63d51e --- /dev/null +++ b/benchmarks/agent_query/mcp_path_audit.py @@ -0,0 +1,195 @@ +"""Audit MCP navigation against stored topology and separate reviewed source paths.""" +import argparse +from collections import deque +import json +from pathlib import Path +import re +from types import SimpleNamespace + +from benchmarks.agent_query.mcp_audit import label, main as verify_capture +from benchmarks.agent_query.path_audit import read_bounded, MAX_GRAPH_BYTES +from benchmarks.agent_query.runner import _node_anchor, _sha256_file + +REL = r'[a-z_]+(?:/[a-z_]+)*' +CONF = r'(?: \[[A-Z_]+(?:/[A-Z_]+)*\])?' +EDGE = re.compile(r'--('+REL+')'+CONF+r'-->|<--('+REL+')'+CONF+r'--') + + +def shortest_distance(graph, source, target): + adjacency = {n['id']: set() for n in graph['nodes']} + for e in graph['links']: + adjacency[e['source']].add(e['target']) + adjacency[e['target']].add(e['source']) + if source not in adjacency or target not in adjacency: + return None + queue = deque([(source, 0)]) + seen = {source} + while queue: + node, distance = queue.popleft() + if node == target: + return distance + for other in adjacency[node]: + if other not in seen: + seen.add(other) + queue.append((other, distance+1)) + return None + + +def parse_path(text): + headers = list(re.finditer(r'^Shortest path \((\d+) hops\):\n (.+)$', text, re.M)) + if len(headers) != 1: + raise ValueError('expected one actual path body') + h = headers[0] + if text[h.end():].strip(): + raise ValueError('unexpected trailing answer') + hops = int(h[1]) + if hops > 64: + raise ValueError('hop count outside audit bound') + body = h[2]; labels = []; steps = []; offset = 0 + for match in EDGE.finditer(body): + labels.append(body[offset:match.start()].strip()) + steps.append({'relations': (match[1] or match[2]).split('/'), + 'direction': 'forward' if match[1] else 'reverse'}) + offset = match.end() + labels.append(body[offset:].strip()) + if hops != len(steps) or any(not x for x in labels): + raise ValueError('path body differs from printed hop count') + return labels, steps + + +def audit(row, graph, question): + tool = row['tool']; args = row['arguments']; expected = question['expected']['outcome'] + text = row.get('text', '') or row.get('response', {}).get('error', {}).get('message', '') + result = {'repository': row['repository'], 'tool': tool, 'question': row['question'], + 'expected': expected, 'matched': False, 'executionSucceeded': row['executionSucceeded']} + if 'captureError' in row: + result['failure'] = row['captureError']; return result + if not row['executionSucceeded']: + result['failure'] = 'RPC execution did not succeed'; return result + positive = 'Shortest path (' in text + if expected == 'unresolved': + result['matched'] = not positive and 'No node matching source' in text and args['source'] in text + return result + if expected == 'ambiguous': + result['matched'] = not positive and 'ambig' in text.lower() + result['selectedDespiteAmbiguity'] = positive + return result + source_id, target_id = question['expected'].get('endpointIds', {}).get(tool, [args['source'], args['target']]) + structured = row.get('response', {}).get('result', {}).get('structuredContent') + payload = None + if structured is not None: + payload = structured.get('result', {}) + if structured.get('schema') != 'compass.mcp.tool-result/1' or payload.get('schema') != 'compass.mcp.path/1': + raise ValueError('unsupported structured path response') + if (payload.get('source'), payload.get('target'), payload.get('maxHops')) != (source_id, target_id, args['max_hops']): + result['failure'] = 'structured request identity or bound differs'; return result + distance = shortest_distance(graph, source_id, target_id) + result['storedShortestHops'] = distance + if expected == 'depth-limit': + result['matched'] = distance is not None and distance > args['max_hops'] and not positive and 'max_hops' in text + if payload is not None and payload.get('status') != 'depth_limit': + result['matched'] = False + result['failure'] = 'structured status does not establish the required depth limit' + return result + if expected == 'disconnected': + nodes = {n['id']: n for n in graph['nodes']} + expected_text = f"No path found between '{label(nodes[source_id],tool)}' and '{label(nodes[target_id],tool)}'." + result['matched'] = distance is None and text == expected_text + if payload is not None and payload.get('status') != 'disconnected': + result['matched'] = False + result['failure'] = 'structured status does not establish global disconnection' + return result + try: + labels, steps = parse_path(text) + except ValueError as error: + result['failure'] = str(error); return result + names = {}; by_id = {} + for node in graph['nodes']: + names.setdefault(label(node, tool), []).append(node) + by_id[node['id']] = node + if payload is not None: + records = payload.get('nodes', []) + if payload.get('status') != 'found' or payload.get('hops') != len(steps) or len(records) != len(labels): + result['failure'] = 'structured path shape differs from text'; return result + nodes = [] + for record, displayed in zip(records, labels): + node = by_id.get(record.get('id')) + if node is None or record.get('label') != label(node, tool): + result['failure'] = 'unknown or mislabeled structured node identity'; return result + if displayed != re.sub(r'[\x00-\x1f\x7f-\x9f]', '', label(node,tool))[:256]: + result['failure'] = 'display label differs from structured identity'; return result + if (record.get('sourceFile'), record.get('startLine')) != _node_anchor(node,tool)[:2]: + result['failure'] = 'structured source anchor differs from graph'; return result + nodes.append(node) + result['explicitIdentities'] = len(nodes) + else: + if any(len(names.get(name, [])) != 1 for name in labels): + result['failure'] = 'path contains an unverified display identity'; return result + nodes = [names[name][0] for name in labels] + ids = [n['id'] for n in nodes] + result['nodeIds'] = ids + failures = [] + if ids[0] != source_id or ids[-1] != target_id: + failures.append('wrong endpoint identity') + if len(steps) != distance or len(steps) > args['max_hops']: + failures.append('path is not minimum-hop within the requested bound') + if payload is not None and len(payload.get('steps', [])) != len(steps): + result['failure'] = 'structured edge count differs'; return result + for position, (left, right, step) in enumerate(zip(ids, ids[1:], steps)): + source, target = (left, right) if step['direction'] == 'forward' else (right, left) + relations = set(); edge_ids = set() + for edge in graph['links']: + a, b = edge['source'], edge['target'] + if tool == 'graphify': + a, b = edge.get('_src', a), edge.get('_tgt', b) + if (a, b) == (source, target): + relations.add(edge.get('kind' if tool == 'compass' else 'relation') or 'related') + if (edge.get('kind' if tool == 'compass' else 'relation') or 'related') in step['relations']: + edge_ids.add(edge.get('id')) + if not set(step['relations']) <= relations: + failures.append('printed relation/direction lacks a stored witness') + if payload is not None: + record = payload['steps'][position] + if ((record.get('from'),record.get('to'),record.get('source'),record.get('target'),record.get('direction')) + != (left,right,source,target,step['direction']) or record.get('relation') not in step['relations'] + or record.get('edgeId') not in edge_ids): + failures.append('structured edge identity or direction differs from graph/text') + result.update(matched=not failures, failures=failures, steps=steps) + witness = question['expected'].get('sourceWitness') + if witness: + result['matchesReviewedSourceRoute'] = ( + not failures and len(nodes) == len(witness['nodes']) + and all(_node_anchor(n, tool)[:2] == (a['file'], a['line']) for n,a in zip(nodes,witness['nodes'])) + and all(s['direction'] == w['direction'] and set(s['relations']) <= set(w['relations']) + for s,w in zip(steps,witness['steps']))) + return result + + +def main(args): + verify_capture(SimpleNamespace(run=args.run, output=args.output.with_suffix('.capture.json'))) + run = json.loads(read_bounded(args.run/'run.json')) + inputs = json.loads(read_bounded(args.run/'inputs.json')) + source = json.loads(read_bounded(Path(run['sourceRun'])/'run.json')) + graphs = {}; results = [] + for row in run['results']: + key = row['repository'], row['tool'] + if key not in graphs: + repo = next(r for r in source['repositories'] if r['repository'] == key[0]) + graphs[key] = json.loads(read_bounded(Path(repo[key[1]+'Graph']), MAX_GRAPH_BYTES)) + spec = next(r for r in inputs['repositories'] if r['name'] == key[0]) + question = next(q for q in spec['pathQuestions'] if q['id'] == row['question']) + if row['arguments'] != question['arguments'][key[1]]: + raise ValueError('request arguments differ from captured inputs') + checked = audit(row, graphs[key], question); results.append(checked) + print(key, row['question'], checked['matched'], checked.get('failure', checked.get('failures', []))) + report = {'scope': __doc__, 'runSha256': _sha256_file(args.run/'run.json'), + 'auditorSha256': _sha256_file(Path(__file__)), 'results': results} + with args.output.open('x') as stream: + json.dump(report, stream, indent=2) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--run', type=Path, required=True) + parser.add_argument('--output', type=Path, required=True) + main(parser.parse_args()) diff --git a/benchmarks/agent_query/mcp_transport.py b/benchmarks/agent_query/mcp_transport.py new file mode 100644 index 000000000..b9541c561 --- /dev/null +++ b/benchmarks/agent_query/mcp_transport.py @@ -0,0 +1,123 @@ +"""Bounded, local stdio MCP client for developer-side comparisons.""" +from __future__ import annotations + +import json +import os +from pathlib import Path +import selectors +import signal +import subprocess +import time + +MAX_BYTES = 16 * 1024 * 1024 +MAX_SESSION_BYTES = 64 * 1024 * 1024 + + +class StdioMcp: + def __init__(self, argv: list[str], cwd: Path, directory: Path, + timeout: float = 60, max_bytes: int = MAX_BYTES): + self.argv, self.cwd, self.directory = argv, cwd, directory + self.timeout, self.max_bytes = timeout, max_bytes + self.sequence, self.total, self.errors = 0, 0, 0 + self.buffer = b"" + + def __enter__(self): + if os.name != "posix": + raise OSError("MCP comparison transport requires POSIX pipe selectors") + self.directory.mkdir(parents=True, exist_ok=False) + self.process = subprocess.Popen(self.argv, cwd=self.cwd, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + start_new_session=True) + self.selector = selectors.DefaultSelector() + self.selector.register(self.process.stdout, selectors.EVENT_READ, "stdout") + self.selector.register(self.process.stderr, selectors.EVENT_READ, "stderr") + self.error_file = (self.directory / "stderr").open("wb") + return self + + def __exit__(self, *_): + # Bound cleanup even if a server fails its handshake or ignores EOF. + if self.process.stdin: + self.process.stdin.close() + try: + self.process.wait(timeout=1) + except subprocess.TimeoutExpired: + try: + os.killpg(self.process.pid, signal.SIGTERM) + except ProcessLookupError: + pass + try: + self.process.wait(timeout=1) + except subprocess.TimeoutExpired: + try: + os.killpg(self.process.pid, signal.SIGKILL) + except ProcessLookupError: + pass + self.process.wait(timeout=2) + self.selector.close() + self.error_file.close() + self.process.stdout.close() + self.process.stderr.close() + + def send(self, method: str, params: dict, *, notification: bool = False): + self.sequence += 1 + request = {"jsonrpc": "2.0", "method": method, "params": params} + if not notification: + request["id"] = self.sequence + data = json.dumps(request, ensure_ascii=False).encode() + b"\n" + if len(data) > 4096: + raise ValueError("MCP evaluation request exceeds 4096 bytes") + (self.directory / f"{self.sequence:02}.request.json").write_bytes(data) + self.process.stdin.write(data) + self.process.stdin.flush() + if notification: + return None + deadline = time.monotonic() + self.timeout + received = 0 + notifications = 0 + with (self.directory / f"{self.sequence:02}.response.jsonl").open("wb") as capture: + while True: + if b"\n" in self.buffer: + line, self.buffer = self.buffer.split(b"\n", 1) + packet = json.loads(line) + if not isinstance(packet, dict) or packet.get("jsonrpc") != "2.0": + raise ValueError("invalid JSON-RPC response") + if "id" not in packet: + notifications += 1 + if notifications > 128: + raise ValueError("MCP notification bound exceeded") + continue + if packet["id"] != self.sequence: + raise ValueError("MCP response ID does not match request") + return packet + remaining = deadline - time.monotonic() + if remaining <= 0: + raise TimeoutError("MCP request deadline exceeded") + for key, _ in self.selector.select(remaining): + chunk = os.read(key.fd, 65536) + if not chunk: + self.selector.unregister(key.fileobj) + if key.data == "stdout": + raise RuntimeError("MCP server closed stdout before response") + continue + self.total += len(chunk) + if self.total > MAX_SESSION_BYTES: + raise ValueError("MCP session output bound exceeded") + if key.data == "stderr": + self.errors += len(chunk) + self.error_file.write(chunk[:max(0, self.max_bytes - self.errors + len(chunk))]) + if self.errors > self.max_bytes: + raise ValueError("MCP stderr bound exceeded") + else: + received += len(chunk) + capture.write(chunk[:max(0, self.max_bytes - received + len(chunk))]) + if received > self.max_bytes: + raise ValueError("MCP response byte bound exceeded") + self.buffer += chunk + + def initialize(self): + result = self.send("initialize", {"protocolVersion": "2025-03-26", "capabilities": {}, + "clientInfo": {"name": "compass-paired-evaluation", "version": "1"}}) + if "error" in result: + raise ValueError(f"MCP initialization failed: {result['error']}") + self.send("notifications/initialized", {}, notification=True) + return result diff --git a/benchmarks/agent_query/member_focus.py b/benchmarks/agent_query/member_focus.py new file mode 100644 index 000000000..970782e76 --- /dev/null +++ b/benchmarks/agent_query/member_focus.py @@ -0,0 +1,125 @@ +"""Frozen common name-focus policy for paired public-member evaluation. + +Both tools use these same functions. No source body, graph file, witness, +language-specific synonym, or tool-specific metadata is consulted to rank. +""" +from collections import defaultdict +import json +from pathlib import Path +import re +import unicodedata + +from benchmarks.agent_query.community_tasks import read_bounded +from benchmarks.agent_query.source_windows import MAX_ROWS + +_LEXICON = json.loads(read_bounded(Path(__file__).with_name('member_focus_lexicon.json'), 65536)) +if _LEXICON['schema'] != 'compass.member-focus-lexicon/1': + raise ValueError('unsupported member focus lexicon') +_STOP = frozenset(_LEXICON['stopwords']) +_CANONICAL = _LEXICON['canonicalTokens'] + + +def identifier_tokens(text): + text = ''.join(c for c in unicodedata.normalize('NFKD', text) + if unicodedata.category(c) not in {'Mn', 'Mc', 'Me'}) + out = [] + for i, character in enumerate(text): + previous = text[i - 1] if i else '' + following = text[i + 1] if i + 1 < len(text) else '' + if character.isupper() and previous and ( + previous.islower() or previous.isnumeric() + or (previous.isupper() and following.islower())): + out.append(' ') + out.append(character) + return re.findall(r'\w+', ''.join(out).lower()) + + +def _ending(stem): + if len(stem) > 1 and stem[-1] == stem[-2]: + stem = stem[:-1] + return stem + 'e' if stem.endswith(('at', 'abl', 'il', 'v')) else stem + + +def canonical(token): + if not token.isascii(): + return token + if token in _CANONICAL: + return _CANONICAL[token] + if token.endswith('ies') and len(token[:-3]) >= 2: + return token[:-3] + 'y' + if token.endswith(('sses', 'xes', 'zes', 'ches', 'shes', 'uses')): + return token[:-2] + if (token.endswith('s') and len(token[:-1]) >= 3 + and not token[:-1].endswith(('s', 'u', 'i', 'a'))): + return token[:-1] + if token.endswith('ing') and len(token[:-3]) >= 3: + return _ending(token[:-3]) + if token.endswith('ied') and len(token[:-3]) >= 2: + return token[:-3] + 'y' + if token.endswith('ed') and len(token[:-2]) >= 3: + return _ending(token[:-2]) + return token + + +def _searchable(token): + return not all('a' <= c <= 'z' for c in token) or len(token) > 2 + + +def focus_terms(question): + if not isinstance(question, str) or len(question.encode()) > 4096: + raise ValueError('focus must be text within 4096 bytes') + raw = [] + for word in question.split(): + if any('\u4e00' <= c <= '\u9fff' for c in word): + lowered = word.lower() + if len(lowered) < 2: + if _searchable(lowered): + raw.append(lowered) + else: + raw.extend(lowered[i:i + 2] for i in range(len(lowered) - 1) + if _searchable(lowered[i:i + 2])) + if _searchable(lowered) and lowered not in raw: + raw.append(lowered) + else: + raw.extend(t for t in identifier_tokens(word) if _searchable(t)) + content = [term for term in raw if term not in _STOP] + result = sorted({term if term in _STOP else canonical(term) for term in content or raw}) + if not 1 <= len(result) <= 32: + raise ValueError('focus requires 1 to 32 distinct searchable terms') + return result + + +def name_terms(name): + result = set() + for token in identifier_tokens(name): + result.add(canonical(token)) + if '_' in token: + result.update(canonical(part) for part in token.split('_') if part) + return result + + +def focus_groups(rows, question): + terms = focus_terms(question) + if not isinstance(rows, list) or len(rows) > MAX_ROWS: + raise ValueError('membership row limit exceeded') + groups = defaultdict(set) + total = 0 + for row in rows: + if not isinstance(row, dict): + raise ValueError('invalid membership row') + label, file, line = row.get('label'), row.get('file'), row.get('line') + if (not isinstance(label, str) or not label or len(label.encode()) > 4096 + or not isinstance(file, str) or not file or type(line) is not int or line < 1): + raise ValueError('invalid membership label or source anchor') + total += len(label.encode()) + len(file.encode()) + if total > 1048576: + raise ValueError('membership label metadata limit exceeded') + groups[file, line].add(label) + ranked = [] + for (file, line), labels in sorted(groups.items()): + matches = [dict(label=label, matchedTerms=sorted(name_terms(label) & set(terms))) + for label in sorted(labels)] + ranked.append(dict(file=file, line=line, score=max(len(m['matchedTerms']) for m in matches), + labels=matches)) + ranked.sort(key=lambda group: (-group['score'], group['file'], group['line'])) + return dict(focusTerms=terms, groups=ranked) diff --git a/benchmarks/agent_query/member_focus_lexicon.json b/benchmarks/agent_query/member_focus_lexicon.json new file mode 100644 index 000000000..253c39afe --- /dev/null +++ b/benchmarks/agent_query/member_focus_lexicon.json @@ -0,0 +1,236 @@ +{ + "schema": "compass.member-focus-lexicon/1", + "sourceCommit": "293582c38085a195b9a8272c8828196bc3724aaf", + "sourceSha256": { + "crates/compass-model/src/lexical.rs": "145f751ba0755c29adbb6498d206fbf729aa62a9559ad58d256a05b3e43f50ee", + "crates/compass-query/src/text.rs": "4df8680d3af04cc8be70c6f4279fda6a928b83c1a732d3d0f43132c7cf05e177" + }, + "stopwords": [ + "about", + "aendert", + "and", + "any", + "are", + "aus", + "avec", + "be", + "been", + "bei", + "being", + "but", + "can", + "cette", + "che", + "como", + "cosa", + "could", + "cu\u00e1l", + "cu\u00e1les", + "cu\u00e1ndo", + "c\u00f3mo", + "dans", + "das", + "della", + "dem", + "den", + "der", + "did", + "die", + "does", + "donde", + "dove", + "d\u00f3nde", + "ein", + "eine", + "es", + "est", + "est\u00e1", + "est\u00e1n", + "est\u00e3o", + "fonctionne", + "for", + "from", + "fuer", + "funciona", + "funktioniert", + "funziona", + "f\u00fcr", + "geaendert", + "ge\u00e4ndert", + "gibt", + "haben", + "had", + "has", + "hat", + "have", + "hay", + "here", + "how", + "implement", + "implementation", + "implemented", + "into", + "is", + "ist", + "its", + "kann", + "koennen", + "k\u00f6nnen", + "may", + "might", + "mit", + "muss", + "must", + "nach", + "nicht", + "not", + "n\u00e3o", + "oder", + "off", + "onde", + "onto", + "o\u00f9", + "para", + "perch\u00e9", + "por", + "porque", + "pourquoi", + "quais", + "qual", + "quale", + "quali", + "quand", + "quando", + "que", + "quel", + "quelle", + "quelles", + "quels", + "qui", + "quoi", + "qu\u00e9", + "shall", + "should", + "sich", + "sind", + "soll", + "some", + "sono", + "sont", + "s\u00e3o", + "tem", + "that", + "the", + "their", + "them", + "there", + "these", + "they", + "this", + "those", + "ueber", + "uma", + "und", + "von", + "wann", + "warum", + "was", + "welche", + "welcher", + "welches", + "wer", + "were", + "what", + "when", + "where", + "which", + "who", + "whom", + "whose", + "wie", + "wieso", + "will", + "wird", + "with", + "without", + "wo", + "work", + "working", + "works", + "would", + "wurde", + "\u00e4ndert", + "\u00fcber" + ], + "canonicalTokens": { + "added": "add", + "adding": "add", + "aliases": "alias", + "changed": "change", + "changing": "change", + "compacted": "compact", + "compacting": "compact", + "compiled": "compile", + "compiling": "compile", + "configured": "configure", + "configuring": "configure", + "converted": "convert", + "converting": "convert", + "created": "create", + "creating": "create", + "deleted": "delete", + "deleting": "delete", + "dispatched": "dispatch", + "dispatching": "dispatch", + "enabled": "enable", + "enabling": "enable", + "executed": "execute", + "executing": "execute", + "formatted": "format", + "formatting": "format", + "handled": "handle", + "handling": "handle", + "implemented": "implement", + "implementing": "implement", + "invoked": "invoke", + "invoking": "invoke", + "loaded": "load", + "loading": "load", + "mapped": "map", + "mapping": "map", + "merged": "merge", + "merging": "merge", + "opened": "open", + "opening": "open", + "optimized": "optimize", + "optimizing": "optimize", + "parsed": "parse", + "parsing": "parse", + "processed": "process", + "processing": "process", + "recognized": "recognize", + "recognizing": "recognize", + "registered": "register", + "registering": "register", + "represented": "represent", + "representing": "represent", + "resolution": "resolve", + "resolved": "resolve", + "resolver": "resolve", + "resolving": "resolve", + "restored": "restore", + "restoring": "restore", + "routing": "route", + "scheduled": "schedule", + "scheduling": "schedule", + "searched": "search", + "searching": "search", + "sending": "send", + "sent": "send", + "solved": "solve", + "solving": "solve", + "tracked": "track", + "tracking": "track", + "using": "use" + } +} diff --git a/benchmarks/agent_query/member_source_development_registration.json b/benchmarks/agent_query/member_source_development_registration.json new file mode 100644 index 000000000..0b9c7344a --- /dev/null +++ b/benchmarks/agent_query/member_source_development_registration.json @@ -0,0 +1,19 @@ +{ + "schema": "compass.member-source-development-registration/1", + "baselineCommit": "bf7bca6ea88f04febddf6253b9a2dcf93d54de2a", + "scope": "Known five-language responsibility subjects and 20 facts; source and prior outputs inspected. Evaluate a new opt-in member-source capability and a separate symmetric public-neighbor/source-window control. No held-out, synthesized explanation, or god-object quality claim.", + "parentRegistrationSha256": "374dfefbe715ed1a238b46d3b071c8177881e12d3687dbeaa0939fc86dd51b0b", + "graphRun": "rust-index-receiver-03/run.json", + "graphRunSha256": "9a6e670114f5be83773176e54bf0c4faf45582389164dea79ad17306eee1c50c", + "endpointPolicy": "Reuse the ten resolver responses captured under native-explanation-02/final. Apply the same unique file/startLine/symbol selector without changes. Compass Redux remains unavailable after bounded recall; no oracle-ID or kind substitution.", + "nativeMemberArm": "For each uniquely resolved Compass subject, run explain ID --source-members --budget 2000 --max-source-bytes 8000 with the frozen graph and source root. Member mode returns recorded callable implementations through directed containment, including nested type containers, under a shared source-byte budget. Order by source file/start byte/end byte/ID; no question-fact or post-output selection. Missing subjects remain in the denominator. Compare with the existing declaration-only native output; Graphify has no equivalent source-members flag, so do not present this feature delta as a new paired win.", + "symmetricControl": "For both tools, make one public get_neighbors call with the same previously selected root ID, no relation filter. Retain outgoing contains or method rows with source file/start-line anchors. Compass uses explicit returned target anchors; Graphify uses the displayed relation source site, checked afterward against the source declaration. Keep all ambiguities visible; source windows are not identity resolution. Source reads may only use returned anchors.", + "windowPolicy": "Group returned membership anchors by repository-relative file and start line, retaining every matching member row. Sort files and lines. For each group, read from its line start up to the next returned membership anchor in that file, or at most 4096 bytes for the last anchor, whichever comes first. A global 8000-byte payload budget applies, in that order. No next-page requests, retries, fact-guided ranking, end-line advantage or extra source reads. Record partial windows and groups omitted by the byte limit. This is one reproducible agent policy, not a best-possible workflow.", + "bounds": "MCP 60 seconds and 1 MiB per response. CLI 120 seconds and 16 MiB per stdout/stderr. Source files at most 4 MiB, confined beneath pinned read-only repository roots; verify whole-file/source/graph digests before and after. Report response, source payload and command bytes separately, not latency or equal-I/O efficiency.", + "scoring": "Review all 20 complete implementation facts against returned evidence. Exact witness coverage and any separately justified semantic sufficiency are distinct; no partial-fact credit by convenience. Check node identity, membership direction, actual source windows, all errors, ambiguous responses and explicit omissions. Keep the original native 7/20 versus 0/20 and previous symmetric source-read 11/20 versus 13/20 results separate; never construct a best-of-arms score.", + "limitations": [ + "Member source exposes code evidence; it does not itself author a responsibility explanation or diagnose a god object.", + "Full relationship precision, longer paths and fresh confirmation remain outstanding.", + "Same-agent review is not independent human adjudication." + ] +} diff --git a/benchmarks/agent_query/member_source_development_review.json b/benchmarks/agent_query/member_source_development_review.json new file mode 100644 index 000000000..8aef1675b --- /dev/null +++ b/benchmarks/agent_query/member_source_development_review.json @@ -0,0 +1,4607 @@ +{ + "schema": "compass.member-source-development-review/1", + "registration": "benchmarks/agent_query/member_source_development_registration.json", + "registrationSha256": "e95a8b9964a9b5482d66051bc533edb57f93ede59a0a576fb95a85f0460f3f76", + "productCommit": "6d4df99470df35f07b19a308311c4020ffe37e60", + "evaluatedBinarySha256": "25e59141988814e06ea005f14a4380145f18c545d9863f3d477eb0746dfc2693", + "sourceQuestionsSha256": "608314dcd5e0a9e40fc7c6b8dd9d44026ba6a9b001e881fa8504fe44cc1fc7b2", + "scope": "Five known development subjects; frozen source questions, graphs and public endpoint selection. No held-out evidence or broad superiority claim.", + "summary": { + "native-members": { + "compass": { + "subjects": 5, + "facts": 20, + "resolvedSubjects": 4, + "sourceEvidenceFacts": 13, + "literalWitnessFacts": 4, + "explicitNativeFacts": 0, + "sourceBytes": 23082, + "stdoutBytes": 48177, + "neighborTextBytes": 0, + "neighborWireBytes": 0 + } + }, + "neighbor-window-control": { + "compass": { + "subjects": 5, + "facts": 20, + "resolvedSubjects": 4, + "sourceEvidenceFacts": 11, + "literalWitnessFacts": 10, + "explicitNativeFacts": 0, + "sourceBytes": 27673, + "stdoutBytes": 0, + "neighborTextBytes": 26497, + "neighborWireBytes": 281242 + }, + "graphify": { + "subjects": 5, + "facts": 20, + "resolvedSubjects": 5, + "sourceEvidenceFacts": 15, + "literalWitnessFacts": 14, + "explicitNativeFacts": 0, + "sourceBytes": 35673, + "stdoutBytes": 0, + "neighborTextBytes": 6980, + "neighborWireBytes": 7534 + } + } + }, + "results": [ + { + "repository": "chi", + "tool": "compass", + "arm": "native-members", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "chi-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "chi-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "chi-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "chi-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 476, + "expected": "\tmethod, ok := methodMap[rctx.RouteMethod]", + "returned": null + }, + { + "line": 477, + "expected": "\tif !ok {", + "returned": null + }, + { + "line": 478, + "expected": "\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)", + "returned": null + }, + { + "line": 479, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 480, + "expected": "\t}", + "returned": null + }, + { + "line": 481, + "expected": "", + "returned": null + }, + { + "line": 482, + "expected": "\t// Find the route", + "returned": null + }, + { + "line": 483, + "expected": "\tif _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil {", + "returned": null + }, + { + "line": 484, + "expected": "\t\t// Set http.Request path values from our request context", + "returned": null + }, + { + "line": 485, + "expected": "\t\tfor i, key := range rctx.URLParams.Keys {", + "returned": null + }, + { + "line": 486, + "expected": "\t\t\tvalue := rctx.URLParams.Values[i]", + "returned": null + }, + { + "line": 487, + "expected": "\t\t\tr.SetPathValue(key, value)", + "returned": null + }, + { + "line": 488, + "expected": "\t\t}", + "returned": null + }, + { + "line": 489, + "expected": "\t\tr.Pattern = rctx.RoutePattern()", + "returned": null + }, + { + "line": 490, + "expected": "", + "returned": null + }, + { + "line": 491, + "expected": "\t\th.ServeHTTP(w, r)", + "returned": null + }, + { + "line": 492, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 493, + "expected": "\t}", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 18858, + "members": [ + { + "id": "sha256:0b03f729c4b4c93626eb48b705704c97e8d051ebb76354fdb1028644c0c003f3", + "name": ".ServeHTTP()", + "file": "mux.go", + "startLine": 63, + "lastReturnedLine": 92, + "sourceBytes": 1039, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f592c330a46544e8c614e234af51ff29c320c18c021fc1bc1b5410a58761786b", + "name": ".Use()", + "file": "mux.go", + "startLine": 100, + "lastReturnedLine": 105, + "sourceBytes": 225, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:b6f4933c875274b7724a57dc037f278cef17603b5a17c0123f74f09c4859ade3", + "name": ".Handle()", + "file": "mux.go", + "startLine": 109, + "lastReturnedLine": 117, + "sourceBytes": 268, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:00488c58ae8e3d2aea91ae763f174cddbcbfa1edb9fda7a9650119778dac1272", + "name": ".HandleFunc()", + "file": "mux.go", + "startLine": 121, + "lastReturnedLine": 123, + "sourceBytes": 104, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "name": ".Method()", + "file": "mux.go", + "startLine": 127, + "lastReturnedLine": 133, + "sourceBytes": 233, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "name": ".MethodFunc()", + "file": "mux.go", + "startLine": 137, + "lastReturnedLine": 139, + "sourceBytes": 120, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c68a79f08a92785f7b855336a541459e9fdc62201d4430b22c5a267720fe0e2e", + "name": ".Connect()", + "file": "mux.go", + "startLine": 143, + "lastReturnedLine": 145, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7eaf9ccc10f79e519444ce15ca5e733334b9706658f775085bcd446e28339098", + "name": ".Delete()", + "file": "mux.go", + "startLine": 149, + "lastReturnedLine": 151, + "sourceBytes": 109, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:cc338ab0fc91b15feee67ab6ef6b5cb5f32500ccb4011e5a672be9f91a09e728", + "name": ".Get()", + "file": "mux.go", + "startLine": 155, + "lastReturnedLine": 157, + "sourceBytes": 103, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f6e8a7560084fdf9a66af0e486fd6ceed76e6607c6ede28fdb1bf8c314ed4a19", + "name": ".Head()", + "file": "mux.go", + "startLine": 161, + "lastReturnedLine": 163, + "sourceBytes": 105, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:86384a3e1b4355bef88f940fa46a5af66a9ba09309b1555884da609ceabad4b5", + "name": ".Options()", + "file": "mux.go", + "startLine": 167, + "lastReturnedLine": 169, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:940225f9f7c63134e90084b0f543639b43293824ada2130d5aa1c37c6e3de01f", + "name": ".Patch()", + "file": "mux.go", + "startLine": 173, + "lastReturnedLine": 175, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:4dc5dca620fc82d5378b46e6646c03877017e141daa1474dab9ce69c1d4cfc56", + "name": ".Post()", + "file": "mux.go", + "startLine": 179, + "lastReturnedLine": 181, + "sourceBytes": 105, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:af7652f3b85f23544717c7555bffe88a5b3ee1fc645491c1dd5d6fd3e5367bbe", + "name": ".Put()", + "file": "mux.go", + "startLine": 185, + "lastReturnedLine": 187, + "sourceBytes": 103, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:e2015cff9c7be8cb29614b5a597580ec714c51b3a9bb8622c8a0c15674b79ade", + "name": ".Query()", + "file": "mux.go", + "startLine": 191, + "lastReturnedLine": 193, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:8fb9d62ca6fa95670412c09930734152e8175fa59cb9ba6e74c30eba422ed530", + "name": ".Trace()", + "file": "mux.go", + "startLine": 197, + "lastReturnedLine": 199, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:eb197ef3e44ebc05271156e9e59ec93db988e2df4ca08efea5788baa91401518", + "name": ".NotFound()", + "file": "mux.go", + "startLine": 203, + "lastReturnedLine": 219, + "sourceBytes": 419, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1ac18c4f1a692f25a73fdc98b240ed310b2c4a6cf5065ffde2524dd41b7a1f78", + "name": ".MethodNotAllowed()", + "file": "mux.go", + "startLine": 223, + "lastReturnedLine": 239, + "sourceBytes": 467, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:8b2e84e1fc793772014c2d4ab2775681cef7c9e3f005e37905794d12600d4162", + "name": ".With()", + "file": "mux.go", + "startLine": 242, + "lastReturnedLine": 263, + "sourceBytes": 682, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:0ac374940442cf9a4d0a0d3270546ca4b87d036fd9ec4aa8f8e48ca2d49e4407", + "name": ".Group()", + "file": "mux.go", + "startLine": 268, + "lastReturnedLine": 274, + "sourceBytes": 106, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:395cabe22892d311ed21d29bf7a01cb9d9d2eb1681c634bfd76121bdcf20b34f", + "name": ".Route()", + "file": "mux.go", + "startLine": 278, + "lastReturnedLine": 286, + "sourceBytes": 258, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:29cd93db4ec894393cf257f027b8988a07ee77181191167f3eb2037f2cfdf5be", + "name": ".Mount()", + "file": "mux.go", + "startLine": 295, + "lastReturnedLine": 354, + "sourceBytes": 1986, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:0fa43499c8e3e06b415a5fd6585b87c3fd541d6c883379d774c9247edeb94951", + "name": ".Routes()", + "file": "mux.go", + "startLine": 358, + "lastReturnedLine": 360, + "sourceBytes": 60, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:2e266536f77bb3848784eb117cb5935bce2575bba587e1653ce1e6f9c056ebef", + "name": ".Middlewares()", + "file": "mux.go", + "startLine": 363, + "lastReturnedLine": 365, + "sourceBytes": 67, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:f0a27beb5e2a6ff88e563c8dbed4dc6b6a697c1895287734f456edcb78d3ada3", + "name": ".Match()", + "file": "mux.go", + "startLine": 373, + "lastReturnedLine": 375, + "sourceBytes": 107, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:b84d22d8b0ff377822bcdc4cb0d4aaf092970f4a85c5e1107b4d09b1592c015d", + "name": ".Find()", + "file": "mux.go", + "startLine": 382, + "lastReturnedLine": 408, + "sourceBytes": 537, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1580e9037451fb2ed515953396059772522a762628fd281119ff95ef6389357a", + "name": ".NotFoundHandler()", + "file": "mux.go", + "startLine": 412, + "lastReturnedLine": 417, + "sourceBytes": 138, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:6d0c29b15fa70de4383c9685161ae0dea68e92fdbb120770c4a7315e8a2fc10b", + "name": ".MethodNotAllowedHandler()", + "file": "mux.go", + "startLine": 421, + "lastReturnedLine": 422, + "sourceBytes": 116, + "truncated": true, + "digestVerified": true + } + ], + "omittedMembers": 5, + "truncated": true, + "literalWitnessFacts": 3, + "sourceEvidenceFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "chi", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "chi-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "chi-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "chi-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "chi-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 476, + "expected": "\tmethod, ok := methodMap[rctx.RouteMethod]", + "returned": null + }, + { + "line": 477, + "expected": "\tif !ok {", + "returned": null + }, + { + "line": 478, + "expected": "\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)", + "returned": null + }, + { + "line": 479, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 480, + "expected": "\t}", + "returned": null + }, + { + "line": 481, + "expected": "", + "returned": null + }, + { + "line": 482, + "expected": "\t// Find the route", + "returned": null + }, + { + "line": 483, + "expected": "\tif _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil {", + "returned": null + }, + { + "line": 484, + "expected": "\t\t// Set http.Request path values from our request context", + "returned": null + }, + { + "line": 485, + "expected": "\t\tfor i, key := range rctx.URLParams.Keys {", + "returned": null + }, + { + "line": 486, + "expected": "\t\t\tvalue := rctx.URLParams.Values[i]", + "returned": null + }, + { + "line": 487, + "expected": "\t\t\tr.SetPathValue(key, value)", + "returned": null + }, + { + "line": 488, + "expected": "\t\t}", + "returned": null + }, + { + "line": 489, + "expected": "\t\tr.Pattern = rctx.RoutePattern()", + "returned": null + }, + { + "line": 490, + "expected": "", + "returned": null + }, + { + "line": 491, + "expected": "\t\th.ServeHTTP(w, r)", + "returned": null + }, + { + "line": 492, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 493, + "expected": "\t}", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 13154, + "neighborWireBytes": 147275, + "returnedMembershipRows": 33, + "windows": [ + { + "file": "mux.go", + "startLine": 63, + "lastReturnedLine": 99, + "sourceBytes": 1373, + "partial": false + }, + { + "file": "mux.go", + "startLine": 100, + "lastReturnedLine": 108, + "sourceBytes": 333, + "partial": false + }, + { + "file": "mux.go", + "startLine": 109, + "lastReturnedLine": 120, + "sourceBytes": 386, + "partial": false + }, + { + "file": "mux.go", + "startLine": 121, + "lastReturnedLine": 126, + "sourceBytes": 217, + "partial": false + }, + { + "file": "mux.go", + "startLine": 127, + "lastReturnedLine": 136, + "sourceBytes": 356, + "partial": false + }, + { + "file": "mux.go", + "startLine": 137, + "lastReturnedLine": 142, + "sourceBytes": 241, + "partial": false + }, + { + "file": "mux.go", + "startLine": 143, + "lastReturnedLine": 148, + "sourceBytes": 230, + "partial": false + }, + { + "file": "mux.go", + "startLine": 149, + "lastReturnedLine": 154, + "sourceBytes": 222, + "partial": false + }, + { + "file": "mux.go", + "startLine": 155, + "lastReturnedLine": 160, + "sourceBytes": 218, + "partial": false + }, + { + "file": "mux.go", + "startLine": 161, + "lastReturnedLine": 166, + "sourceBytes": 227, + "partial": false + }, + { + "file": "mux.go", + "startLine": 167, + "lastReturnedLine": 172, + "sourceBytes": 228, + "partial": false + }, + { + "file": "mux.go", + "startLine": 173, + "lastReturnedLine": 178, + "sourceBytes": 222, + "partial": false + }, + { + "file": "mux.go", + "startLine": 179, + "lastReturnedLine": 184, + "sourceBytes": 218, + "partial": false + }, + { + "file": "mux.go", + "startLine": 185, + "lastReturnedLine": 190, + "sourceBytes": 220, + "partial": false + }, + { + "file": "mux.go", + "startLine": 191, + "lastReturnedLine": 196, + "sourceBytes": 224, + "partial": false + }, + { + "file": "mux.go", + "startLine": 197, + "lastReturnedLine": 202, + "sourceBytes": 242, + "partial": false + }, + { + "file": "mux.go", + "startLine": 203, + "lastReturnedLine": 222, + "sourceBytes": 579, + "partial": false + }, + { + "file": "mux.go", + "startLine": 223, + "lastReturnedLine": 241, + "sourceBytes": 526, + "partial": false + }, + { + "file": "mux.go", + "startLine": 242, + "lastReturnedLine": 267, + "sourceBytes": 880, + "partial": false + }, + { + "file": "mux.go", + "startLine": 268, + "lastReturnedLine": 277, + "sourceBytes": 253, + "partial": false + }, + { + "file": "mux.go", + "startLine": 278, + "lastReturnedLine": 293, + "sourceBytes": 605, + "partial": true + } + ], + "omittedGroups": 12, + "literalWitnessFacts": 3, + "sourceEvidenceFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "chi", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "chi-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "chi-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "chi-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "chi-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 476, + "expected": "\tmethod, ok := methodMap[rctx.RouteMethod]", + "returned": null + }, + { + "line": 477, + "expected": "\tif !ok {", + "returned": null + }, + { + "line": 478, + "expected": "\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)", + "returned": null + }, + { + "line": 479, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 480, + "expected": "\t}", + "returned": null + }, + { + "line": 481, + "expected": "", + "returned": null + }, + { + "line": 482, + "expected": "\t// Find the route", + "returned": null + }, + { + "line": 483, + "expected": "\tif _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil {", + "returned": null + }, + { + "line": 484, + "expected": "\t\t// Set http.Request path values from our request context", + "returned": null + }, + { + "line": 485, + "expected": "\t\tfor i, key := range rctx.URLParams.Keys {", + "returned": null + }, + { + "line": 486, + "expected": "\t\t\tvalue := rctx.URLParams.Values[i]", + "returned": null + }, + { + "line": 487, + "expected": "\t\t\tr.SetPathValue(key, value)", + "returned": null + }, + { + "line": 488, + "expected": "\t\t}", + "returned": null + }, + { + "line": 489, + "expected": "\t\tr.Pattern = rctx.RoutePattern()", + "returned": null + }, + { + "line": 490, + "expected": "", + "returned": null + }, + { + "line": 491, + "expected": "\t\th.ServeHTTP(w, r)", + "returned": null + }, + { + "line": 492, + "expected": "\t\treturn", + "returned": null + }, + { + "line": 493, + "expected": "\t}", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 2189, + "neighborWireBytes": 2319, + "returnedMembershipRows": 33, + "windows": [ + { + "file": "mux.go", + "startLine": 63, + "lastReturnedLine": 99, + "sourceBytes": 1373, + "partial": false + }, + { + "file": "mux.go", + "startLine": 100, + "lastReturnedLine": 108, + "sourceBytes": 333, + "partial": false + }, + { + "file": "mux.go", + "startLine": 109, + "lastReturnedLine": 120, + "sourceBytes": 386, + "partial": false + }, + { + "file": "mux.go", + "startLine": 121, + "lastReturnedLine": 126, + "sourceBytes": 217, + "partial": false + }, + { + "file": "mux.go", + "startLine": 127, + "lastReturnedLine": 136, + "sourceBytes": 356, + "partial": false + }, + { + "file": "mux.go", + "startLine": 137, + "lastReturnedLine": 142, + "sourceBytes": 241, + "partial": false + }, + { + "file": "mux.go", + "startLine": 143, + "lastReturnedLine": 148, + "sourceBytes": 230, + "partial": false + }, + { + "file": "mux.go", + "startLine": 149, + "lastReturnedLine": 154, + "sourceBytes": 222, + "partial": false + }, + { + "file": "mux.go", + "startLine": 155, + "lastReturnedLine": 160, + "sourceBytes": 218, + "partial": false + }, + { + "file": "mux.go", + "startLine": 161, + "lastReturnedLine": 166, + "sourceBytes": 227, + "partial": false + }, + { + "file": "mux.go", + "startLine": 167, + "lastReturnedLine": 172, + "sourceBytes": 228, + "partial": false + }, + { + "file": "mux.go", + "startLine": 173, + "lastReturnedLine": 178, + "sourceBytes": 222, + "partial": false + }, + { + "file": "mux.go", + "startLine": 179, + "lastReturnedLine": 184, + "sourceBytes": 218, + "partial": false + }, + { + "file": "mux.go", + "startLine": 185, + "lastReturnedLine": 190, + "sourceBytes": 220, + "partial": false + }, + { + "file": "mux.go", + "startLine": 191, + "lastReturnedLine": 196, + "sourceBytes": 224, + "partial": false + }, + { + "file": "mux.go", + "startLine": 197, + "lastReturnedLine": 202, + "sourceBytes": 242, + "partial": false + }, + { + "file": "mux.go", + "startLine": 203, + "lastReturnedLine": 222, + "sourceBytes": 579, + "partial": false + }, + { + "file": "mux.go", + "startLine": 223, + "lastReturnedLine": 241, + "sourceBytes": 526, + "partial": false + }, + { + "file": "mux.go", + "startLine": 242, + "lastReturnedLine": 267, + "sourceBytes": 880, + "partial": false + }, + { + "file": "mux.go", + "startLine": 268, + "lastReturnedLine": 277, + "sourceBytes": 253, + "partial": false + }, + { + "file": "mux.go", + "startLine": 278, + "lastReturnedLine": 293, + "sourceBytes": 605, + "partial": true + } + ], + "omittedGroups": 12, + "literalWitnessFacts": 3, + "sourceEvidenceFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "click", + "tool": "compass", + "arm": "native-members", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "click-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 455, + "expected": "class _AtomicFile:", + "returned": null + }, + { + "line": 461, + "expected": "", + "returned": null + }, + { + "line": 462, + "expected": " @property", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Initialization and name getter bodies are present, but the recorded method spans omit @property. A method named name does not establish property semantics; deny the complete fact." + }, + { + "fact": "click-2", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "click-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "click-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + } + ], + "sourceBytes": 874, + "stdoutBytes": 3408, + "members": [ + { + "id": "sha256:f2973c383f7639367620131c87a5de0b9e0845a87f6dadebdf32160c1463a936", + "name": ".__init__()", + "file": "src/click/_compat.py", + "startLine": 456, + "lastReturnedLine": 460, + "sourceBytes": 216, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:e878c6438bdce958c03a089d80b07294ed83ae9ee2f0f0a633df5fbf50ae9e52", + "name": ".name()", + "file": "src/click/_compat.py", + "startLine": 463, + "lastReturnedLine": 464, + "sourceBytes": 57, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1e4e32dfcdfe036023e5c263eaba38bfe92eb391597b74fc5d70ab50a877cfa3", + "name": ".close()", + "file": "src/click/_compat.py", + "startLine": 466, + "lastReturnedLine": 471, + "sourceBytes": 200, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:5bb38e0f070dd04a772efc8c9ee16003caa1e687bc2c12cc19b86bef7e08349e", + "name": ".__getattr__()", + "file": "src/click/_compat.py", + "startLine": 473, + "lastReturnedLine": 474, + "sourceBytes": 80, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:bc6d909e3fad7e2cbc5726cdd962e543d80d2c22e04f4748a0c4a6a6df90301b", + "name": ".__enter__()", + "file": "src/click/_compat.py", + "startLine": 476, + "lastReturnedLine": 477, + "sourceBytes": 55, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7bf788bd87c967bb2c80b682108ca265ce1ea9c213b3c8d55931a267d73c15b4", + "name": ".__exit__()", + "file": "src/click/_compat.py", + "startLine": 479, + "lastReturnedLine": 485, + "sourceBytes": 211, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:1b6882765c798cf51eff1c70453ffc9687e893d38733a758d193bd1e6c7845f1", + "name": ".__repr__()", + "file": "src/click/_compat.py", + "startLine": 487, + "lastReturnedLine": 488, + "sourceBytes": 55, + "truncated": false, + "digestVerified": true + } + ], + "omittedMembers": 0, + "truncated": false, + "literalWitnessFacts": 0, + "sourceEvidenceFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "click", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "click-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 455, + "expected": "class _AtomicFile:", + "returned": null + } + ], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Only the class header is absent. The exact selected owner is already verified as _AtomicFile, while initialization, @property, and the complete name getter are returned." + }, + { + "fact": "click-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "click-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "click-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + } + ], + "sourceBytes": 3673, + "stdoutBytes": 0, + "neighborTextBytes": 2092, + "neighborWireBytes": 23086, + "returnedMembershipRows": 7, + "windows": [ + { + "file": "src/click/_compat.py", + "startLine": 456, + "lastReturnedLine": 462, + "sourceBytes": 236, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 463, + "lastReturnedLine": 465, + "sourceBytes": 63, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 466, + "lastReturnedLine": 472, + "sourceBytes": 206, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 473, + "lastReturnedLine": 475, + "sourceBytes": 86, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 476, + "lastReturnedLine": 478, + "sourceBytes": 61, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 479, + "lastReturnedLine": 486, + "sourceBytes": 217, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 487, + "lastReturnedLine": 590, + "sourceBytes": 2804, + "partial": false + } + ], + "omittedGroups": 0, + "literalWitnessFacts": 3, + "sourceEvidenceFacts": 4, + "explicitNativeFacts": 0 + }, + { + "repository": "click", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "click-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 455, + "expected": "class _AtomicFile:", + "returned": null + } + ], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Only the class header is absent. The exact selected owner is already verified as _AtomicFile, while initialization, @property, and the complete name getter are returned." + }, + { + "fact": "click-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "click-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "click-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + } + ], + "sourceBytes": 3673, + "stdoutBytes": 0, + "neighborTextBytes": 636, + "neighborWireBytes": 735, + "returnedMembershipRows": 7, + "windows": [ + { + "file": "src/click/_compat.py", + "startLine": 456, + "lastReturnedLine": 462, + "sourceBytes": 236, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 463, + "lastReturnedLine": 465, + "sourceBytes": 63, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 466, + "lastReturnedLine": 472, + "sourceBytes": 206, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 473, + "lastReturnedLine": 475, + "sourceBytes": 86, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 476, + "lastReturnedLine": 478, + "sourceBytes": 61, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 479, + "lastReturnedLine": 486, + "sourceBytes": 217, + "partial": false + }, + { + "file": "src/click/_compat.py", + "startLine": 487, + "lastReturnedLine": 590, + "sourceBytes": 2804, + "partial": false + } + ], + "omittedGroups": 0, + "literalWitnessFacts": 3, + "sourceEvidenceFacts": 4, + "explicitNativeFacts": 0 + }, + { + "repository": "jsoup", + "tool": "compass", + "arm": "native-members", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "jsoup-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "jsoup-2", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "jsoup-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "jsoup-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + } + ], + "sourceBytes": 6208, + "stdoutBytes": 12866, + "members": [ + { + "id": "sha256:66aaadb3479119cae227c0e51b5674eae36cb9b29e80428e2697aa7cb45518f0", + "name": "", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 50, + "lastReturnedLine": 53, + "sourceBytes": 111, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:d490451c6bf56501db666f0a6c3c143f1a6d8a90120632415cc739cbf1a8f034", + "name": ".clean()", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 62, + "lastReturnedLine": 70, + "sourceBytes": 319, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:817144c6469132780623c859650f3dbb59eef49b75108e12e8fd2efe7763b330", + "name": ".isValid()", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 94, + "lastReturnedLine": 101, + "sourceBytes": 441, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "name": ".isValidBodyHtml()", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 124, + "lastReturnedLine": 133, + "sourceBytes": 630, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:d82578355e71b0d55f68499706f70276db9cf44a16bf283bba6360df410deec5", + "name": "", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 143, + "lastReturnedLine": 146, + "sourceBytes": 144, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:65912eb3660f15092355589775d874a7a702efcf0336e9865cf93b4fb56aaa29", + "name": ".head()", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 148, + "lastReturnedLine": 173, + "sourceBytes": 1371, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:fb8588d79c5d9dcbd1a0c6a8e2f901d5c54be3050e7626a3b8f59a8c55bd025c", + "name": ".tail()", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 175, + "lastReturnedLine": 179, + "sourceBytes": 266, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3", + "name": ".copySafeNodes()", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 182, + "lastReturnedLine": 186, + "sourceBytes": 227, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:7ce3db44fb899d894dd900ab8808bd0fdc411323a6276f4164fede39e46f8157", + "name": ".createSafeElement()", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 188, + "lastReturnedLine": 235, + "sourceBytes": 2553, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:bd66755ef9e0f349f3e772c8d9b23a0441194bd6300a6431d51bc2f11650e890", + "name": "", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 241, + "lastReturnedLine": 244, + "sourceBytes": 146, + "truncated": false, + "digestVerified": true + } + ], + "omittedMembers": 0, + "truncated": false, + "literalWitnessFacts": 0, + "sourceEvidenceFacts": 4, + "explicitNativeFacts": 0 + }, + { + "repository": "jsoup", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "jsoup-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "jsoup-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "jsoup-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 206, + "expected": " Range.AttributeRange range = sourceAttrs.sourceRange(key);", + "returned": " Range.AttributeRange r" + }, + { + "line": 207, + "expected": " destAttrs.put(key, value);", + "returned": null + }, + { + "line": 208, + "expected": " NodeInternals.attributeRange(destAttrs, key, range);", + "returned": null + }, + { + "line": 209, + "expected": " } else", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "jsoup-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 7014, + "neighborWireBytes": 66437, + "returnedMembershipRows": 9, + "windows": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 44, + "lastReturnedLine": 49, + "sourceBytes": 180, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 50, + "lastReturnedLine": 61, + "sourceBytes": 541, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 62, + "lastReturnedLine": 93, + "sourceBytes": 1549, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 94, + "lastReturnedLine": 123, + "sourceBytes": 1625, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 124, + "lastReturnedLine": 137, + "sourceBytes": 748, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 138, + "lastReturnedLine": 181, + "sourceBytes": 2032, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 182, + "lastReturnedLine": 187, + "sourceBytes": 233, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 188, + "lastReturnedLine": 206, + "sourceBytes": 1092, + "partial": true + } + ], + "omittedGroups": 1, + "literalWitnessFacts": 3, + "sourceEvidenceFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "jsoup", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "jsoup-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "jsoup-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "jsoup-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "jsoup-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 1034, + "neighborWireBytes": 1135, + "returnedMembershipRows": 8, + "windows": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 50, + "lastReturnedLine": 61, + "sourceBytes": 541, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 62, + "lastReturnedLine": 93, + "sourceBytes": 1549, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 94, + "lastReturnedLine": 123, + "sourceBytes": 1625, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 124, + "lastReturnedLine": 137, + "sourceBytes": 748, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 138, + "lastReturnedLine": 181, + "sourceBytes": 2032, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 182, + "lastReturnedLine": 187, + "sourceBytes": 233, + "partial": false + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 188, + "lastReturnedLine": 210, + "sourceBytes": 1272, + "partial": true + } + ], + "omittedGroups": 1, + "literalWitnessFacts": 4, + "sourceEvidenceFacts": 4, + "explicitNativeFacts": 0 + }, + { + "repository": "redux", + "tool": "compass", + "arm": "native-members", + "resolverStatus": "truncated-or-unknown", + "judgments": [ + { + "fact": "redux-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 121, + "expected": " if (typeof enhancer !== 'undefined') {", + "returned": null + }, + { + "line": 122, + "expected": " if (typeof enhancer !== 'function') {", + "returned": null + }, + { + "line": 123, + "expected": " throw new Error(", + "returned": null + }, + { + "line": 124, + "expected": " `Expected the enhancer to be a function. Instead, received: '${kindOf(", + "returned": null + }, + { + "line": 125, + "expected": " enhancer", + "returned": null + }, + { + "line": 126, + "expected": " )}'`", + "returned": null + }, + { + "line": 127, + "expected": " )", + "returned": null + }, + { + "line": 128, + "expected": " }", + "returned": null + }, + { + "line": 129, + "expected": "", + "returned": null + }, + { + "line": 130, + "expected": " return enhancer(createStore)(", + "returned": null + }, + { + "line": 131, + "expected": " reducer,", + "returned": null + }, + { + "line": 132, + "expected": " preloadedState as PreloadedState | undefined", + "returned": null + }, + { + "line": 133, + "expected": " )", + "returned": null + }, + { + "line": 134, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "No uniquely selected owner after bounded recall; retain all four facts in the denominator." + }, + { + "fact": "redux-2", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 293, + "expected": " if (isDispatching) {", + "returned": null + }, + { + "line": 294, + "expected": " throw new Error('Reducers may not dispatch actions.')", + "returned": null + }, + { + "line": 295, + "expected": " }", + "returned": null + }, + { + "line": 296, + "expected": "", + "returned": null + }, + { + "line": 297, + "expected": " try {", + "returned": null + }, + { + "line": 298, + "expected": " isDispatching = true", + "returned": null + }, + { + "line": 299, + "expected": " currentState = currentReducer(currentState, action)", + "returned": null + }, + { + "line": 300, + "expected": " } finally {", + "returned": null + }, + { + "line": 301, + "expected": " isDispatching = false", + "returned": null + }, + { + "line": 302, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "No uniquely selected owner after bounded recall; retain all four facts in the denominator." + }, + { + "fact": "redux-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 152, + "expected": " function ensureCanMutateNextListeners() {", + "returned": null + }, + { + "line": 153, + "expected": " if (nextListeners === currentListeners) {", + "returned": null + }, + { + "line": 154, + "expected": " nextListeners = new Map()", + "returned": null + }, + { + "line": 155, + "expected": " currentListeners.forEach((listener, key) => {", + "returned": null + }, + { + "line": 156, + "expected": " nextListeners.set(key, listener)", + "returned": null + }, + { + "line": 157, + "expected": " })", + "returned": null + }, + { + "line": 158, + "expected": " }", + "returned": null + }, + { + "line": 159, + "expected": " }", + "returned": null + }, + { + "line": 221, + "expected": " ensureCanMutateNextListeners()", + "returned": null + }, + { + "line": 222, + "expected": " const listenerId = listenerIdCounter++", + "returned": null + }, + { + "line": 223, + "expected": " nextListeners.set(listenerId, listener)", + "returned": null + }, + { + "line": 224, + "expected": "", + "returned": null + }, + { + "line": 225, + "expected": " return function unsubscribe() {", + "returned": null + }, + { + "line": 226, + "expected": " if (!isSubscribed) {", + "returned": null + }, + { + "line": 227, + "expected": " return", + "returned": null + }, + { + "line": 228, + "expected": " }", + "returned": null + }, + { + "line": 229, + "expected": "", + "returned": null + }, + { + "line": 230, + "expected": " if (isDispatching) {", + "returned": null + }, + { + "line": 231, + "expected": " throw new Error(", + "returned": null + }, + { + "line": 232, + "expected": " 'You may not unsubscribe from a store listener while the reducer is executing. ' +", + "returned": null + }, + { + "line": 233, + "expected": " 'See https://redux.js.org/api/store#subscribelistener for more details.'", + "returned": null + }, + { + "line": 234, + "expected": " )", + "returned": null + }, + { + "line": 235, + "expected": " }", + "returned": null + }, + { + "line": 236, + "expected": "", + "returned": null + }, + { + "line": 237, + "expected": " isSubscribed = false", + "returned": null + }, + { + "line": 238, + "expected": "", + "returned": null + }, + { + "line": 239, + "expected": " ensureCanMutateNextListeners()", + "returned": null + }, + { + "line": 240, + "expected": " nextListeners.delete(listenerId)", + "returned": null + }, + { + "line": 241, + "expected": " currentListeners = null", + "returned": null + }, + { + "line": 242, + "expected": " }", + "returned": null + }, + { + "line": 243, + "expected": " }", + "returned": null + }, + { + "line": 304, + "expected": " const listeners = (currentListeners = nextListeners)", + "returned": null + }, + { + "line": 305, + "expected": " listeners.forEach(listener => {", + "returned": null + }, + { + "line": 306, + "expected": " listener()", + "returned": null + }, + { + "line": 307, + "expected": " })", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "No uniquely selected owner after bounded recall; retain all four facts in the denominator." + }, + { + "fact": "redux-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 344, + "expected": " function observable() {", + "returned": null + }, + { + "line": 345, + "expected": " const outerSubscribe = subscribe", + "returned": null + }, + { + "line": 346, + "expected": " return {", + "returned": null + }, + { + "line": 347, + "expected": " /**", + "returned": null + }, + { + "line": 348, + "expected": " * The minimal observable subscription method.", + "returned": null + }, + { + "line": 349, + "expected": " * @param observer Any object that can be used as an observer.", + "returned": null + }, + { + "line": 350, + "expected": " * The observer object should have a `next` method.", + "returned": null + }, + { + "line": 351, + "expected": " * @returns An object with an `unsubscribe` method that can", + "returned": null + }, + { + "line": 352, + "expected": " * be used to unsubscribe the observable from the store, and prevent further", + "returned": null + }, + { + "line": 353, + "expected": " * emission of values from the observable.", + "returned": null + }, + { + "line": 354, + "expected": " */", + "returned": null + }, + { + "line": 355, + "expected": " subscribe(observer: unknown) {", + "returned": null + }, + { + "line": 356, + "expected": " if (typeof observer !== 'object' || observer === null) {", + "returned": null + }, + { + "line": 357, + "expected": " throw new TypeError(", + "returned": null + }, + { + "line": 358, + "expected": " `Expected the observer to be an object. Instead, received: '${kindOf(", + "returned": null + }, + { + "line": 359, + "expected": " observer", + "returned": null + }, + { + "line": 360, + "expected": " )}'`", + "returned": null + }, + { + "line": 361, + "expected": " )", + "returned": null + }, + { + "line": 362, + "expected": " }", + "returned": null + }, + { + "line": 363, + "expected": "", + "returned": null + }, + { + "line": 364, + "expected": " function observeState() {", + "returned": null + }, + { + "line": 365, + "expected": " const observerAsObserver = observer as Observer", + "returned": null + }, + { + "line": 366, + "expected": " if (observerAsObserver.next) {", + "returned": null + }, + { + "line": 367, + "expected": " observerAsObserver.next(getState())", + "returned": null + }, + { + "line": 368, + "expected": " }", + "returned": null + }, + { + "line": 369, + "expected": " }", + "returned": null + }, + { + "line": 370, + "expected": "", + "returned": null + }, + { + "line": 371, + "expected": " observeState()", + "returned": null + }, + { + "line": 372, + "expected": " const unsubscribe = outerSubscribe(observeState)", + "returned": null + }, + { + "line": 373, + "expected": " return { unsubscribe }", + "returned": null + }, + { + "line": 374, + "expected": " },", + "returned": null + }, + { + "line": 375, + "expected": "", + "returned": null + }, + { + "line": 376, + "expected": " [$$observable]() {", + "returned": null + }, + { + "line": 377, + "expected": " return this", + "returned": null + }, + { + "line": 378, + "expected": " }", + "returned": null + }, + { + "line": 379, + "expected": " }", + "returned": null + }, + { + "line": 380, + "expected": " }", + "returned": null + }, + { + "line": 381, + "expected": "", + "returned": null + }, + { + "line": 382, + "expected": " // When a store is created, an \"INIT\" action is dispatched so that every", + "returned": null + }, + { + "line": 383, + "expected": " // reducer returns their initial state. This effectively populates", + "returned": null + }, + { + "line": 384, + "expected": " // the initial state tree.", + "returned": null + }, + { + "line": 385, + "expected": " dispatch({ type: ActionTypes.INIT } as A)", + "returned": null + }, + { + "line": 386, + "expected": "", + "returned": null + }, + { + "line": 387, + "expected": " const store = {", + "returned": null + }, + { + "line": 388, + "expected": " dispatch: dispatch as Dispatch,", + "returned": null + }, + { + "line": 389, + "expected": " subscribe,", + "returned": null + }, + { + "line": 390, + "expected": " getState,", + "returned": null + }, + { + "line": 391, + "expected": " replaceReducer,", + "returned": null + }, + { + "line": 392, + "expected": " [$$observable]: observable", + "returned": null + }, + { + "line": 393, + "expected": " } as unknown as Store & Ext", + "returned": null + }, + { + "line": 394, + "expected": " return store", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "No uniquely selected owner after bounded recall; retain all four facts in the denominator." + } + ], + "sourceBytes": 0, + "stdoutBytes": 0, + "members": [], + "literalWitnessFacts": 0, + "sourceEvidenceFacts": 0, + "explicitNativeFacts": 0 + }, + { + "repository": "redux", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "truncated-or-unknown", + "judgments": [ + { + "fact": "redux-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 121, + "expected": " if (typeof enhancer !== 'undefined') {", + "returned": null + }, + { + "line": 122, + "expected": " if (typeof enhancer !== 'function') {", + "returned": null + }, + { + "line": 123, + "expected": " throw new Error(", + "returned": null + }, + { + "line": 124, + "expected": " `Expected the enhancer to be a function. Instead, received: '${kindOf(", + "returned": null + }, + { + "line": 125, + "expected": " enhancer", + "returned": null + }, + { + "line": 126, + "expected": " )}'`", + "returned": null + }, + { + "line": 127, + "expected": " )", + "returned": null + }, + { + "line": 128, + "expected": " }", + "returned": null + }, + { + "line": 129, + "expected": "", + "returned": null + }, + { + "line": 130, + "expected": " return enhancer(createStore)(", + "returned": null + }, + { + "line": 131, + "expected": " reducer,", + "returned": null + }, + { + "line": 132, + "expected": " preloadedState as PreloadedState | undefined", + "returned": null + }, + { + "line": 133, + "expected": " )", + "returned": null + }, + { + "line": 134, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "No uniquely selected owner after bounded recall; retain all four facts in the denominator." + }, + { + "fact": "redux-2", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 293, + "expected": " if (isDispatching) {", + "returned": null + }, + { + "line": 294, + "expected": " throw new Error('Reducers may not dispatch actions.')", + "returned": null + }, + { + "line": 295, + "expected": " }", + "returned": null + }, + { + "line": 296, + "expected": "", + "returned": null + }, + { + "line": 297, + "expected": " try {", + "returned": null + }, + { + "line": 298, + "expected": " isDispatching = true", + "returned": null + }, + { + "line": 299, + "expected": " currentState = currentReducer(currentState, action)", + "returned": null + }, + { + "line": 300, + "expected": " } finally {", + "returned": null + }, + { + "line": 301, + "expected": " isDispatching = false", + "returned": null + }, + { + "line": 302, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "No uniquely selected owner after bounded recall; retain all four facts in the denominator." + }, + { + "fact": "redux-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 152, + "expected": " function ensureCanMutateNextListeners() {", + "returned": null + }, + { + "line": 153, + "expected": " if (nextListeners === currentListeners) {", + "returned": null + }, + { + "line": 154, + "expected": " nextListeners = new Map()", + "returned": null + }, + { + "line": 155, + "expected": " currentListeners.forEach((listener, key) => {", + "returned": null + }, + { + "line": 156, + "expected": " nextListeners.set(key, listener)", + "returned": null + }, + { + "line": 157, + "expected": " })", + "returned": null + }, + { + "line": 158, + "expected": " }", + "returned": null + }, + { + "line": 159, + "expected": " }", + "returned": null + }, + { + "line": 221, + "expected": " ensureCanMutateNextListeners()", + "returned": null + }, + { + "line": 222, + "expected": " const listenerId = listenerIdCounter++", + "returned": null + }, + { + "line": 223, + "expected": " nextListeners.set(listenerId, listener)", + "returned": null + }, + { + "line": 224, + "expected": "", + "returned": null + }, + { + "line": 225, + "expected": " return function unsubscribe() {", + "returned": null + }, + { + "line": 226, + "expected": " if (!isSubscribed) {", + "returned": null + }, + { + "line": 227, + "expected": " return", + "returned": null + }, + { + "line": 228, + "expected": " }", + "returned": null + }, + { + "line": 229, + "expected": "", + "returned": null + }, + { + "line": 230, + "expected": " if (isDispatching) {", + "returned": null + }, + { + "line": 231, + "expected": " throw new Error(", + "returned": null + }, + { + "line": 232, + "expected": " 'You may not unsubscribe from a store listener while the reducer is executing. ' +", + "returned": null + }, + { + "line": 233, + "expected": " 'See https://redux.js.org/api/store#subscribelistener for more details.'", + "returned": null + }, + { + "line": 234, + "expected": " )", + "returned": null + }, + { + "line": 235, + "expected": " }", + "returned": null + }, + { + "line": 236, + "expected": "", + "returned": null + }, + { + "line": 237, + "expected": " isSubscribed = false", + "returned": null + }, + { + "line": 238, + "expected": "", + "returned": null + }, + { + "line": 239, + "expected": " ensureCanMutateNextListeners()", + "returned": null + }, + { + "line": 240, + "expected": " nextListeners.delete(listenerId)", + "returned": null + }, + { + "line": 241, + "expected": " currentListeners = null", + "returned": null + }, + { + "line": 242, + "expected": " }", + "returned": null + }, + { + "line": 243, + "expected": " }", + "returned": null + }, + { + "line": 304, + "expected": " const listeners = (currentListeners = nextListeners)", + "returned": null + }, + { + "line": 305, + "expected": " listeners.forEach(listener => {", + "returned": null + }, + { + "line": 306, + "expected": " listener()", + "returned": null + }, + { + "line": 307, + "expected": " })", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "No uniquely selected owner after bounded recall; retain all four facts in the denominator." + }, + { + "fact": "redux-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 344, + "expected": " function observable() {", + "returned": null + }, + { + "line": 345, + "expected": " const outerSubscribe = subscribe", + "returned": null + }, + { + "line": 346, + "expected": " return {", + "returned": null + }, + { + "line": 347, + "expected": " /**", + "returned": null + }, + { + "line": 348, + "expected": " * The minimal observable subscription method.", + "returned": null + }, + { + "line": 349, + "expected": " * @param observer Any object that can be used as an observer.", + "returned": null + }, + { + "line": 350, + "expected": " * The observer object should have a `next` method.", + "returned": null + }, + { + "line": 351, + "expected": " * @returns An object with an `unsubscribe` method that can", + "returned": null + }, + { + "line": 352, + "expected": " * be used to unsubscribe the observable from the store, and prevent further", + "returned": null + }, + { + "line": 353, + "expected": " * emission of values from the observable.", + "returned": null + }, + { + "line": 354, + "expected": " */", + "returned": null + }, + { + "line": 355, + "expected": " subscribe(observer: unknown) {", + "returned": null + }, + { + "line": 356, + "expected": " if (typeof observer !== 'object' || observer === null) {", + "returned": null + }, + { + "line": 357, + "expected": " throw new TypeError(", + "returned": null + }, + { + "line": 358, + "expected": " `Expected the observer to be an object. Instead, received: '${kindOf(", + "returned": null + }, + { + "line": 359, + "expected": " observer", + "returned": null + }, + { + "line": 360, + "expected": " )}'`", + "returned": null + }, + { + "line": 361, + "expected": " )", + "returned": null + }, + { + "line": 362, + "expected": " }", + "returned": null + }, + { + "line": 363, + "expected": "", + "returned": null + }, + { + "line": 364, + "expected": " function observeState() {", + "returned": null + }, + { + "line": 365, + "expected": " const observerAsObserver = observer as Observer", + "returned": null + }, + { + "line": 366, + "expected": " if (observerAsObserver.next) {", + "returned": null + }, + { + "line": 367, + "expected": " observerAsObserver.next(getState())", + "returned": null + }, + { + "line": 368, + "expected": " }", + "returned": null + }, + { + "line": 369, + "expected": " }", + "returned": null + }, + { + "line": 370, + "expected": "", + "returned": null + }, + { + "line": 371, + "expected": " observeState()", + "returned": null + }, + { + "line": 372, + "expected": " const unsubscribe = outerSubscribe(observeState)", + "returned": null + }, + { + "line": 373, + "expected": " return { unsubscribe }", + "returned": null + }, + { + "line": 374, + "expected": " },", + "returned": null + }, + { + "line": 375, + "expected": "", + "returned": null + }, + { + "line": 376, + "expected": " [$$observable]() {", + "returned": null + }, + { + "line": 377, + "expected": " return this", + "returned": null + }, + { + "line": 378, + "expected": " }", + "returned": null + }, + { + "line": 379, + "expected": " }", + "returned": null + }, + { + "line": 380, + "expected": " }", + "returned": null + }, + { + "line": 381, + "expected": "", + "returned": null + }, + { + "line": 382, + "expected": " // When a store is created, an \"INIT\" action is dispatched so that every", + "returned": null + }, + { + "line": 383, + "expected": " // reducer returns their initial state. This effectively populates", + "returned": null + }, + { + "line": 384, + "expected": " // the initial state tree.", + "returned": null + }, + { + "line": 385, + "expected": " dispatch({ type: ActionTypes.INIT } as A)", + "returned": null + }, + { + "line": 386, + "expected": "", + "returned": null + }, + { + "line": 387, + "expected": " const store = {", + "returned": null + }, + { + "line": 388, + "expected": " dispatch: dispatch as Dispatch,", + "returned": null + }, + { + "line": 389, + "expected": " subscribe,", + "returned": null + }, + { + "line": 390, + "expected": " getState,", + "returned": null + }, + { + "line": 391, + "expected": " replaceReducer,", + "returned": null + }, + { + "line": 392, + "expected": " [$$observable]: observable", + "returned": null + }, + { + "line": 393, + "expected": " } as unknown as Store & Ext", + "returned": null + }, + { + "line": 394, + "expected": " return store", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "No uniquely selected owner after bounded recall; retain all four facts in the denominator." + } + ], + "sourceBytes": 0, + "stdoutBytes": 0, + "literalWitnessFacts": 0, + "sourceEvidenceFacts": 0, + "explicitNativeFacts": 0 + }, + { + "repository": "redux", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "redux-1", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 121, + "expected": " if (typeof enhancer !== 'undefined') {", + "returned": null + }, + { + "line": 122, + "expected": " if (typeof enhancer !== 'function') {", + "returned": null + }, + { + "line": 123, + "expected": " throw new Error(", + "returned": null + }, + { + "line": 124, + "expected": " `Expected the enhancer to be a function. Instead, received: '${kindOf(", + "returned": null + }, + { + "line": 125, + "expected": " enhancer", + "returned": null + }, + { + "line": 126, + "expected": " )}'`", + "returned": null + }, + { + "line": 127, + "expected": " )", + "returned": null + }, + { + "line": 128, + "expected": " }", + "returned": null + }, + { + "line": 129, + "expected": "", + "returned": null + }, + { + "line": 130, + "expected": " return enhancer(createStore)(", + "returned": null + }, + { + "line": 131, + "expected": " reducer,", + "returned": null + }, + { + "line": 132, + "expected": " preloadedState as PreloadedState | undefined", + "returned": null + }, + { + "line": 133, + "expected": " )", + "returned": null + }, + { + "line": 134, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "redux-2", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "redux-3", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "redux-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 365, + "expected": " const observerAsObserver = observer as Observer", + "returned": " const observerAsObserver = observer a" + }, + { + "line": 366, + "expected": " if (observerAsObserver.next) {", + "returned": null + }, + { + "line": 367, + "expected": " observerAsObserver.next(getState())", + "returned": null + }, + { + "line": 368, + "expected": " }", + "returned": null + }, + { + "line": 369, + "expected": " }", + "returned": null + }, + { + "line": 370, + "expected": "", + "returned": null + }, + { + "line": 371, + "expected": " observeState()", + "returned": null + }, + { + "line": 372, + "expected": " const unsubscribe = outerSubscribe(observeState)", + "returned": null + }, + { + "line": 373, + "expected": " return { unsubscribe }", + "returned": null + }, + { + "line": 374, + "expected": " },", + "returned": null + }, + { + "line": 375, + "expected": "", + "returned": null + }, + { + "line": 376, + "expected": " [$$observable]() {", + "returned": null + }, + { + "line": 377, + "expected": " return this", + "returned": null + }, + { + "line": 378, + "expected": " }", + "returned": null + }, + { + "line": 379, + "expected": " }", + "returned": null + }, + { + "line": 380, + "expected": " }", + "returned": null + }, + { + "line": 381, + "expected": "", + "returned": null + }, + { + "line": 382, + "expected": " // When a store is created, an \"INIT\" action is dispatched so that every", + "returned": null + }, + { + "line": 383, + "expected": " // reducer returns their initial state. This effectively populates", + "returned": null + }, + { + "line": 384, + "expected": " // the initial state tree.", + "returned": null + }, + { + "line": 385, + "expected": " dispatch({ type: ActionTypes.INIT } as A)", + "returned": null + }, + { + "line": 386, + "expected": "", + "returned": null + }, + { + "line": 387, + "expected": " const store = {", + "returned": null + }, + { + "line": 388, + "expected": " dispatch: dispatch as Dispatch,", + "returned": null + }, + { + "line": 389, + "expected": " subscribe,", + "returned": null + }, + { + "line": 390, + "expected": " getState,", + "returned": null + }, + { + "line": 391, + "expected": " replaceReducer,", + "returned": null + }, + { + "line": 392, + "expected": " [$$observable]: observable", + "returned": null + }, + { + "line": 393, + "expected": " } as unknown as Store & Ext", + "returned": null + }, + { + "line": 394, + "expected": " return store", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 1785, + "neighborWireBytes": 1897, + "returnedMembershipRows": 2, + "windows": [ + { + "file": "src/createStore.ts", + "startLine": 152, + "lastReturnedLine": 269, + "sourceBytes": 4521, + "partial": false + }, + { + "file": "src/createStore.ts", + "startLine": 270, + "lastReturnedLine": 365, + "sourceBytes": 3479, + "partial": true + } + ], + "omittedGroups": 0, + "literalWitnessFacts": 2, + "sourceEvidenceFacts": 2, + "explicitNativeFacts": 0 + }, + { + "repository": "walkdir", + "tool": "compass", + "arm": "native-members", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "walkdir-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "walkdir-2", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "walkdir-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 972, + "expected": "", + "returned": null + }, + { + "line": 976, + "expected": " for ancestor in self.stack_path.iter().rev() {", + "returned": " for ancestor in" + }, + { + "line": 977, + "expected": " let is_same = ancestor", + "returned": null + }, + { + "line": 978, + "expected": " .is_same(&hchild)", + "returned": null + }, + { + "line": 979, + "expected": " .map_err(|err| Error::from_io(self.depth, err))?;", + "returned": null + }, + { + "line": 980, + "expected": " if is_same {", + "returned": null + }, + { + "line": 981, + "expected": " return Err(Error::from_loop(", + "returned": null + }, + { + "line": 982, + "expected": " self.depth,", + "returned": null + }, + { + "line": 983, + "expected": " &ancestor.path,", + "returned": null + }, + { + "line": 984, + "expected": " child.as_ref(),", + "returned": null + }, + { + "line": 985, + "expected": " ));", + "returned": null + }, + { + "line": 986, + "expected": " }", + "returned": null + }, + { + "line": 987, + "expected": " }", + "returned": null + }, + { + "line": 988, + "expected": " Ok(())", + "returned": null + }, + { + "line": 989, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "walkdir-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 883, + "expected": "", + "returned": null + } + ], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "Only blank separator lines between verified callable spans are missing; both complete implementation bodies establishing the fact are returned." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 13045, + "members": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "name": ".next()", + "file": "src/lib.rs", + "startLine": 687, + "lastReturnedLine": 734, + "sourceBytes": 1812, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c3fe8fc9e9d0038d0c1191e7cf0d4ee7783cebd55c755a07c627023b60a3d188", + "name": ".skip_current_dir()", + "file": "src/lib.rs", + "startLine": 781, + "lastReturnedLine": 785, + "sourceBytes": 117, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:5704b7023e55533acf5164ddd3ae50467aea1abf4c19866f3e143ae7bf09d370", + "name": ".filter_entry()", + "file": "src/lib.rs", + "startLine": 833, + "lastReturnedLine": 838, + "sourceBytes": 169, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "name": ".handle_entry()", + "file": "src/lib.rs", + "startLine": 840, + "lastReturnedLine": 882, + "sourceBytes": 1726, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:219c38f772358d6f0cd42cd06b879fe706b6672b0deee9461f8f7ec785618867", + "name": ".get_deferred_dir()", + "file": "src/lib.rs", + "startLine": 884, + "lastReturnedLine": 899, + "sourceBytes": 607, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:c4870d899db4c0d3e82cf28916d9cadef5b8d7b249ea6fe7aa97bc7d465dfe45", + "name": ".push()", + "file": "src/lib.rs", + "startLine": 901, + "lastReturnedLine": 948, + "sourceBytes": 2459, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:3d843599c82e0cf88d7512278cc2b4f2ffc87c5797785e0c9caad89ab4af8f98", + "name": ".pop()", + "file": "src/lib.rs", + "startLine": 950, + "lastReturnedLine": 959, + "sourceBytes": 484, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "name": ".follow()", + "file": "src/lib.rs", + "startLine": 961, + "lastReturnedLine": 971, + "sourceBytes": 431, + "truncated": false, + "digestVerified": true + }, + { + "id": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "name": ".check_loop()", + "file": "src/lib.rs", + "startLine": 973, + "lastReturnedLine": 976, + "sourceBytes": 195, + "truncated": true, + "digestVerified": true + } + ], + "omittedMembers": 2, + "truncated": true, + "literalWitnessFacts": 1, + "sourceEvidenceFacts": 3, + "explicitNativeFacts": 0 + }, + { + "repository": "walkdir", + "tool": "compass", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "walkdir-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "walkdir-2", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 901, + "expected": " fn push(&mut self, dent: &DirEntry) -> Result<()> {", + "returned": null + }, + { + "line": 902, + "expected": " // Make room for another open file descriptor if we've hit the max.", + "returned": null + }, + { + "line": 903, + "expected": " let free =", + "returned": null + }, + { + "line": 904, + "expected": " self.stack_list.len().checked_sub(self.oldest_opened).unwrap();", + "returned": null + }, + { + "line": 905, + "expected": " if free == self.opts.max_open {", + "returned": null + }, + { + "line": 906, + "expected": " self.stack_list[self.oldest_opened].close();", + "returned": null + }, + { + "line": 907, + "expected": " }", + "returned": null + }, + { + "line": 908, + "expected": " // Open a handle to reading the directory's entries.", + "returned": null + }, + { + "line": 909, + "expected": " let rd = fs::read_dir(dent.path()).map_err(|err| {", + "returned": null + }, + { + "line": 910, + "expected": " Some(Error::from_path(self.depth, dent.path().to_path_buf(), err))", + "returned": null + }, + { + "line": 911, + "expected": " });", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "walkdir-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 961, + "expected": " fn follow(&self, mut dent: DirEntry) -> Result {", + "returned": null + }, + { + "line": 962, + "expected": " dent =", + "returned": null + }, + { + "line": 963, + "expected": " DirEntry::from_path(self.depth, dent.path().to_path_buf(), true)?;", + "returned": null + }, + { + "line": 964, + "expected": " // The only way a symlink can cause a loop is if it points", + "returned": null + }, + { + "line": 965, + "expected": " // to a directory. Otherwise, it always points to a leaf", + "returned": null + }, + { + "line": 966, + "expected": " // and we can omit any loop checks.", + "returned": null + }, + { + "line": 967, + "expected": " if dent.is_dir() {", + "returned": null + }, + { + "line": 968, + "expected": " self.check_loop(dent.path())?;", + "returned": null + }, + { + "line": 969, + "expected": " }", + "returned": null + }, + { + "line": 970, + "expected": " Ok(dent)", + "returned": null + }, + { + "line": 971, + "expected": " }", + "returned": null + }, + { + "line": 972, + "expected": "", + "returned": null + }, + { + "line": 973, + "expected": " fn check_loop>(&self, child: P) -> Result<()> {", + "returned": null + }, + { + "line": 974, + "expected": " let hchild = Handle::from_path(&child)", + "returned": null + }, + { + "line": 975, + "expected": " .map_err(|err| Error::from_io(self.depth, err))?;", + "returned": null + }, + { + "line": 976, + "expected": " for ancestor in self.stack_path.iter().rev() {", + "returned": null + }, + { + "line": 977, + "expected": " let is_same = ancestor", + "returned": null + }, + { + "line": 978, + "expected": " .is_same(&hchild)", + "returned": null + }, + { + "line": 979, + "expected": " .map_err(|err| Error::from_io(self.depth, err))?;", + "returned": null + }, + { + "line": 980, + "expected": " if is_same {", + "returned": null + }, + { + "line": 981, + "expected": " return Err(Error::from_loop(", + "returned": null + }, + { + "line": 982, + "expected": " self.depth,", + "returned": null + }, + { + "line": 983, + "expected": " &ancestor.path,", + "returned": null + }, + { + "line": 984, + "expected": " child.as_ref(),", + "returned": null + }, + { + "line": 985, + "expected": " ));", + "returned": null + }, + { + "line": 986, + "expected": " }", + "returned": null + }, + { + "line": 987, + "expected": " }", + "returned": null + }, + { + "line": 988, + "expected": " Ok(())", + "returned": null + }, + { + "line": 989, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "walkdir-4", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 873, + "expected": " }", + "returned": null + }, + { + "line": 874, + "expected": " if is_normal_dir && self.opts.contents_first {", + "returned": null + }, + { + "line": 875, + "expected": " self.deferred_dirs.push(dent);", + "returned": null + }, + { + "line": 876, + "expected": " None", + "returned": null + }, + { + "line": 877, + "expected": " } else if self.skippable() {", + "returned": null + }, + { + "line": 878, + "expected": " None", + "returned": null + }, + { + "line": 879, + "expected": " } else {", + "returned": null + }, + { + "line": 880, + "expected": " Some(Ok(dent))", + "returned": null + }, + { + "line": 881, + "expected": " }", + "returned": null + }, + { + "line": 882, + "expected": " }", + "returned": null + }, + { + "line": 883, + "expected": "", + "returned": null + }, + { + "line": 884, + "expected": " fn get_deferred_dir(&mut self) -> Option {", + "returned": null + }, + { + "line": 885, + "expected": " if self.opts.contents_first {", + "returned": null + }, + { + "line": 886, + "expected": " if self.depth < self.deferred_dirs.len() {", + "returned": null + }, + { + "line": 887, + "expected": " // Unwrap is safe here because we've guaranteed that", + "returned": null + }, + { + "line": 888, + "expected": " // `self.deferred_dirs.len()` can never be less than 1", + "returned": null + }, + { + "line": 889, + "expected": " let deferred: DirEntry = self", + "returned": null + }, + { + "line": 890, + "expected": " .deferred_dirs", + "returned": null + }, + { + "line": 891, + "expected": " .pop()", + "returned": null + }, + { + "line": 892, + "expected": " .expect(\"BUG: deferred_dirs should be non-empty\");", + "returned": null + }, + { + "line": 893, + "expected": " if !self.skippable() {", + "returned": null + }, + { + "line": 894, + "expected": " return Some(deferred);", + "returned": null + }, + { + "line": 895, + "expected": " }", + "returned": null + }, + { + "line": 896, + "expected": " }", + "returned": null + }, + { + "line": 897, + "expected": " }", + "returned": null + }, + { + "line": 898, + "expected": " None", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 4237, + "neighborWireBytes": 44444, + "returnedMembershipRows": 20, + "windows": [ + { + "file": "src/lib.rs", + "startLine": 568, + "lastReturnedLine": 572, + "sourceBytes": 167, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 573, + "lastReturnedLine": 578, + "sourceBytes": 348, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 579, + "lastReturnedLine": 585, + "sourceBytes": 253, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 586, + "lastReturnedLine": 590, + "sourceBytes": 283, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 591, + "lastReturnedLine": 593, + "sourceBytes": 135, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 594, + "lastReturnedLine": 597, + "sourceBytes": 207, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 598, + "lastReturnedLine": 604, + "sourceBytes": 318, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 605, + "lastReturnedLine": 679, + "sourceBytes": 2788, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 680, + "lastReturnedLine": 686, + "sourceBytes": 273, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 687, + "lastReturnedLine": 776, + "sourceBytes": 3228, + "partial": true + } + ], + "omittedGroups": 10, + "literalWitnessFacts": 1, + "sourceEvidenceFacts": 1, + "explicitNativeFacts": 0 + }, + { + "repository": "walkdir", + "tool": "graphify", + "arm": "neighbor-window-control", + "resolverStatus": "resolved", + "judgments": [ + { + "fact": "walkdir-1", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + }, + { + "fact": "walkdir-2", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 902, + "expected": " // Make room for another open file descriptor if we've hit the max.", + "returned": " // Make room for another open file descriptor if we" + }, + { + "line": 903, + "expected": " let free =", + "returned": null + }, + { + "line": 904, + "expected": " self.stack_list.len().checked_sub(self.oldest_opened).unwrap();", + "returned": null + }, + { + "line": 905, + "expected": " if free == self.opts.max_open {", + "returned": null + }, + { + "line": 906, + "expected": " self.stack_list[self.oldest_opened].close();", + "returned": null + }, + { + "line": 907, + "expected": " }", + "returned": null + }, + { + "line": 908, + "expected": " // Open a handle to reading the directory's entries.", + "returned": null + }, + { + "line": 909, + "expected": " let rd = fs::read_dir(dent.path()).map_err(|err| {", + "returned": null + }, + { + "line": 910, + "expected": " Some(Error::from_path(self.depth, dent.path().to_path_buf(), err))", + "returned": null + }, + { + "line": 911, + "expected": " });", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "walkdir-3", + "literalWitnessCoverage": false, + "missingAfterIndentNormalization": [ + { + "line": 961, + "expected": " fn follow(&self, mut dent: DirEntry) -> Result {", + "returned": null + }, + { + "line": 962, + "expected": " dent =", + "returned": null + }, + { + "line": 963, + "expected": " DirEntry::from_path(self.depth, dent.path().to_path_buf(), true)?;", + "returned": null + }, + { + "line": 964, + "expected": " // The only way a symlink can cause a loop is if it points", + "returned": null + }, + { + "line": 965, + "expected": " // to a directory. Otherwise, it always points to a leaf", + "returned": null + }, + { + "line": 966, + "expected": " // and we can omit any loop checks.", + "returned": null + }, + { + "line": 967, + "expected": " if dent.is_dir() {", + "returned": null + }, + { + "line": 968, + "expected": " self.check_loop(dent.path())?;", + "returned": null + }, + { + "line": 969, + "expected": " }", + "returned": null + }, + { + "line": 970, + "expected": " Ok(dent)", + "returned": null + }, + { + "line": 971, + "expected": " }", + "returned": null + }, + { + "line": 972, + "expected": "", + "returned": null + }, + { + "line": 973, + "expected": " fn check_loop>(&self, child: P) -> Result<()> {", + "returned": null + }, + { + "line": 974, + "expected": " let hchild = Handle::from_path(&child)", + "returned": null + }, + { + "line": 975, + "expected": " .map_err(|err| Error::from_io(self.depth, err))?;", + "returned": null + }, + { + "line": 976, + "expected": " for ancestor in self.stack_path.iter().rev() {", + "returned": null + }, + { + "line": 977, + "expected": " let is_same = ancestor", + "returned": null + }, + { + "line": 978, + "expected": " .is_same(&hchild)", + "returned": null + }, + { + "line": 979, + "expected": " .map_err(|err| Error::from_io(self.depth, err))?;", + "returned": null + }, + { + "line": 980, + "expected": " if is_same {", + "returned": null + }, + { + "line": 981, + "expected": " return Err(Error::from_loop(", + "returned": null + }, + { + "line": 982, + "expected": " self.depth,", + "returned": null + }, + { + "line": 983, + "expected": " &ancestor.path,", + "returned": null + }, + { + "line": 984, + "expected": " child.as_ref(),", + "returned": null + }, + { + "line": 985, + "expected": " ));", + "returned": null + }, + { + "line": 986, + "expected": " }", + "returned": null + }, + { + "line": 987, + "expected": " }", + "returned": null + }, + { + "line": 988, + "expected": " Ok(())", + "returned": null + }, + { + "line": 989, + "expected": " }", + "returned": null + } + ], + "sufficientSourceEvidence": false, + "explicitNativeAssertion": false, + "reason": "Required implementation code is absent or partial; no partial-fact credit." + }, + { + "fact": "walkdir-4", + "literalWitnessCoverage": true, + "missingAfterIndentNormalization": [], + "sufficientSourceEvidence": true, + "explicitNativeAssertion": false, + "reason": "All required source lines are returned; differences from literal witnesses, if any, are only leading indentation at recorded span starts." + } + ], + "sourceBytes": 8000, + "stdoutBytes": 0, + "neighborTextBytes": 1336, + "neighborWireBytes": 1448, + "returnedMembershipRows": 11, + "windows": [ + { + "file": "src/lib.rs", + "startLine": 687, + "lastReturnedLine": 780, + "sourceBytes": 3391, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 781, + "lastReturnedLine": 832, + "sourceBytes": 1974, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 833, + "lastReturnedLine": 839, + "sourceBytes": 175, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 840, + "lastReturnedLine": 883, + "sourceBytes": 1732, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 884, + "lastReturnedLine": 900, + "sourceBytes": 613, + "partial": false + }, + { + "file": "src/lib.rs", + "startLine": 901, + "lastReturnedLine": 902, + "sourceBytes": 115, + "partial": true + } + ], + "omittedGroups": 5, + "literalWitnessFacts": 2, + "sourceEvidenceFacts": 2, + "explicitNativeFacts": 0 + } + ], + "adjudication": { + "reviewer": "Same agent, separate verification script and post-capture semantic review; not independent human adjudication.", + "literalPolicy": "Exact complete witness line text and line locations. Leading indentation differences and omitted blank separators make literal coverage fail; this is a strict formatting/coverage measure, not a semantic quality score.", + "semanticPolicy": "Complete implementation fact only. Leading indentation and blank separator differences do not remove code meaning. The class header may be supplied by the independently verified exact owner identity, but decorator semantics require the decorator in the evidence. No credit for absent code, partial statements or guessed property/ownership behavior.", + "nativeClaims": "The new mode renders node, relationship and source evidence. It authors zero task-specific responsibility explanations.", + "anchorReview": "All 130 returned membership anchors were inspected against source declarations (69 Compass, 61 Graphify). Graphify sites match displayed member declarations in this sample; this does not establish general relation-site identity safety, full relationship precision, or complete membership recall.", + "nativeVerification": "54 displayed member IDs match the independently recomputed directed containment traversal and source order. All 54 complete stored span digests match pinned bytes; rendered prefixes match their shared 8000-byte quota. Nested jsoup methods are reached through type containers. No unavailable members in this sample.", + "controlVerification": "Nine recorded get_neighbors calls, with unchanged root IDs and no filters or pagination. Recompute all windows from captured returned anchors only. No printed Graphify truncation marker was observed; this does not prove complete graph membership. Compass reports no neighbor or transport truncation. Omitted source-window groups remain explicit." + }, + "comparison": { + "previousNativeDeclarationEvidence": { + "compass": 7, + "graphify": 0, + "facts": 20 + }, + "previousQueryPlusSourceRead": { + "compass": 11, + "graphify": 13, + "facts": 20 + }, + "nativeDelta": "Seven gained facts and one lost fact: Chi +3, jsoup +1, WalkDir +3, Click -1; Redux unchanged unresolved. No equivalent Graphify member-mode operation is asserted.", + "controlDifference": "Graphify gains one jsoup fact, two Redux facts and one WalkDir fact over Compass under this policy. Returned field anchors consume Compass window budget; Graphify exposes fewer such anchors. Both follow the same source-window algorithm.", + "noAggregation": "Keep all three workflows and the declaration baseline separate. No best-of-arms score, latency, equal-I/O efficiency, synthesized-explanation or god-object-quality claim." + }, + "validation": { + "baseCommit": "bac936f9eae3890e23f0776a692c145409134550", + "sourceSha256": { + "crates/compass-query/src/explanation_members.rs": "c6b9581d44012f8d4218c2d79408f2527702e56ce0ea0d6c967922c5daff2081", + "crates/compass-query/src/neighbors.rs": "20988f2ac56bd6e077a4bcbc317fc7a21f20e9ae705afcd642def1e507c271c9", + "crates/compass-query/src/traversal.rs": "d7d581ecfa1a32bbd76c3be6e2ba1dd4db1bcf3b1a316263b50c93a4052def16", + "crates/compass-query/src/lib.rs": "6009f8ba46df2aeefc6a01a92ae749a2bf6e7b06fb4022136c9e84f6c83d2b65", + "crates/compass-query/tests/explanation_members.rs": "e5bd2a42b81314a847212dc5af877700adf0d9b3d79f804cbca1e2e109e6c0fb", + "crates/compass-query/tests/explanation_source.rs": "34186c0a032ee576f587d1302d78f07959270ab9e139737414529b7781c869b6", + "crates/compass-cli/src/lib.rs": "057e9325c6cc85fe5da0f0f8dfafecbcd2e85e257f6d9355af15462308e7a002", + "crates/compass-cli/src/help.rs": "1887ad3a201c7bf3c35eb18677f26f8d6a573948ce90f41d81234856978e3f57", + "crates/compass-cli/tests/code_query_cli.rs": "72b9ede4e56262328636c08e7f4666e7f859d592edd71377c3cc45f0b7005c63" + }, + "steps": [ + { + "name": "fmt", + "argv": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "seconds": 3.71 + }, + { + "name": "query-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-query", + "--test", + "explanation_source", + "--test", + "explanation_members", + "--locked" + ], + "exitCode": 0, + "seconds": 5.09 + }, + { + "name": "cli-query-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "code_query_cli", + "--locked" + ], + "exitCode": 0, + "seconds": 59.87 + }, + { + "name": "mcp-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-mcp", + "--locked" + ], + "exitCode": 0, + "seconds": 38.96 + }, + { + "name": "clippy", + "argv": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 14.21 + }, + { + "name": "workspace-tests", + "argv": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "seconds": 90.29 + }, + { + "name": "product-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "seconds": 9.2 + }, + { + "name": "product-boundary", + "argv": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "seconds": 0.08 + }, + { + "name": "build", + "argv": [ + "cargo", + "build", + "--locked", + "-p", + "compass-cli", + "--bin", + "compass" + ], + "exitCode": 0, + "seconds": 1.87 + } + ] + }, + "validationScope": { + "passed": "fmt; 13 focused query tests; 40 CLI query tests; 60 MCP tests; workspace Clippy; 1106 workspace tests, 2 ignored; 9 product tests; product boundary; CLI build.", + "notRun": "JS/viewer and extraction/resolution publication qualification gates were not rerun because only source retrieval, CLI rendering and documentation changed. The general benchmark harness was not modified.", + "binaryBinding": "Final CLI build bytes match the frozen evaluated binary; every recorded Rust source hash matches productCommit." + }, + "attempts": [ + "Initial collector failed before any public requests because its hash helper passed an unsupported read bound. Preserve capture.log, collect-attempt-01.py; corrected streaming hashing and used fresh capture-02 directory.", + "First verifier split the MEMBER SOURCES heading as a member. Preserve verification-01.log and verify-capture-attempt-01.py. Corrected parsing; verification-02 passed. Final verifier also checks source byte-to-line consistency and passes." + ], + "artifacts": { + "member-source-02/build-final.log": "9c112f5e179b81b74ab3c14ed843179185008da9475637274660aed074d421a5", + "member-source-02/capture-02/capture.json": "96a88b74d425287525311c647b97ef7daa0c659ada56c31645be83def3e3c4a5", + "member-source-02/capture-02/collect.py": "7a95e6dddb8a8b69ea21082163d5125783816f5ebb460dfcf3f691f9a608da69", + "member-source-02/capture-02/community_identity.py": "5bc3d1c574211aa3180a2334fe6c758043f384651948b7077aba3ea879de4503", + "member-source-02/capture-02/community_navigation.py": "808df1c7b15c8c2afc86ac1ed09dc4f339c98a77d7a7b14eb4866e3da1c8c0f8", + "member-source-02/capture-02/community_tasks.py": "77f599ff7ee7eebfe4b590fee6c771ecfb3ed475d1944e37bcabc110634d3660", + "member-source-02/capture-02/graphify-mcp-environment.json": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "member-source-02/capture-02/mcp_compare.py": "d23f093a1300fcf825457f917694097f0f8b8dc8ee8d671946032f5e4e89a5dc", + "member-source-02/capture-02/mcp_transport.py": "daaad69c554f824a1df94f0ef93cb9d4c6e9b4f4b712d1611323d524e10d44ee", + "member-source-02/capture-02/member_source_development_registration.json": "e95a8b9964a9b5482d66051bc533edb57f93ede59a0a576fb95a85f0460f3f76", + "member-source-02/capture-02/raw/chi/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "member-source-02/capture-02/raw/chi/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "member-source-02/capture-02/raw/chi/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "member-source-02/capture-02/raw/chi/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "member-source-02/capture-02/raw/chi/compass/mcp/03.response.jsonl": "64d26fe612b4c19a3c88ba6d5548476cf5322cf118de8d206b2698ce99b02a65", + "member-source-02/capture-02/raw/chi/compass/mcp/04.request.json": "fa0a888eb5b3c0af33258fcda7dd5fda8d8524b58106a73dd14a5a5ce751a653", + "member-source-02/capture-02/raw/chi/compass/mcp/04.response.jsonl": "bee27b222019288810fb48facfe2f2ce43153b8e3f1d88f3cb6bc37bb628e1b5", + "member-source-02/capture-02/raw/chi/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/chi/compass/members.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/chi/compass/members.stdout": "a827aea6e1c28e363d972da58943349455dd43154d162d5adecfffaaf2bcd41f", + "member-source-02/capture-02/raw/chi/compass/windows/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "member-source-02/capture-02/raw/chi/compass/windows/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "member-source-02/capture-02/raw/chi/compass/windows/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "member-source-02/capture-02/raw/chi/compass/windows/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "member-source-02/capture-02/raw/chi/compass/windows/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "member-source-02/capture-02/raw/chi/compass/windows/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "member-source-02/capture-02/raw/chi/compass/windows/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "member-source-02/capture-02/raw/chi/compass/windows/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "member-source-02/capture-02/raw/chi/compass/windows/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "member-source-02/capture-02/raw/chi/compass/windows/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "member-source-02/capture-02/raw/chi/compass/windows/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "member-source-02/capture-02/raw/chi/compass/windows/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "member-source-02/capture-02/raw/chi/compass/windows/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "member-source-02/capture-02/raw/chi/compass/windows/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "member-source-02/capture-02/raw/chi/compass/windows/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "member-source-02/capture-02/raw/chi/compass/windows/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "member-source-02/capture-02/raw/chi/compass/windows/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "member-source-02/capture-02/raw/chi/compass/windows/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "member-source-02/capture-02/raw/chi/compass/windows/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "member-source-02/capture-02/raw/chi/compass/windows/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "member-source-02/capture-02/raw/chi/compass/windows/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "member-source-02/capture-02/raw/chi/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "member-source-02/capture-02/raw/chi/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "member-source-02/capture-02/raw/chi/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "member-source-02/capture-02/raw/chi/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "member-source-02/capture-02/raw/chi/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "member-source-02/capture-02/raw/chi/graphify/mcp/04.request.json": "099de0bb0962487971342d734b860bc412719fd1469fddc833ba46ec7c7fee98", + "member-source-02/capture-02/raw/chi/graphify/mcp/04.response.jsonl": "07cf8f5c1e427dedccf1f84b1388c0969e74a1f2c08c7b628ee7443f36dc7d0c", + "member-source-02/capture-02/raw/chi/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/chi/graphify/windows/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "member-source-02/capture-02/raw/chi/graphify/windows/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "member-source-02/capture-02/raw/chi/graphify/windows/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "member-source-02/capture-02/raw/chi/graphify/windows/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "member-source-02/capture-02/raw/chi/graphify/windows/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "member-source-02/capture-02/raw/chi/graphify/windows/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "member-source-02/capture-02/raw/chi/graphify/windows/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "member-source-02/capture-02/raw/chi/graphify/windows/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "member-source-02/capture-02/raw/chi/graphify/windows/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "member-source-02/capture-02/raw/chi/graphify/windows/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "member-source-02/capture-02/raw/chi/graphify/windows/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "member-source-02/capture-02/raw/chi/graphify/windows/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "member-source-02/capture-02/raw/chi/graphify/windows/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "member-source-02/capture-02/raw/chi/graphify/windows/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "member-source-02/capture-02/raw/chi/graphify/windows/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "member-source-02/capture-02/raw/chi/graphify/windows/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "member-source-02/capture-02/raw/chi/graphify/windows/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "member-source-02/capture-02/raw/chi/graphify/windows/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "member-source-02/capture-02/raw/chi/graphify/windows/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "member-source-02/capture-02/raw/chi/graphify/windows/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "member-source-02/capture-02/raw/chi/graphify/windows/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "member-source-02/capture-02/raw/click/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "member-source-02/capture-02/raw/click/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "member-source-02/capture-02/raw/click/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "member-source-02/capture-02/raw/click/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "member-source-02/capture-02/raw/click/compass/mcp/03.response.jsonl": "64d26fe612b4c19a3c88ba6d5548476cf5322cf118de8d206b2698ce99b02a65", + "member-source-02/capture-02/raw/click/compass/mcp/04.request.json": "fb8d2bc88ad1880a6ce22d99a63be7cd8d08ab0871a9f8622424a0304542a4aa", + "member-source-02/capture-02/raw/click/compass/mcp/04.response.jsonl": "a59049551958eb6a2914b0f4987029b33770f8cf4e5a688b67863c6beba8835d", + "member-source-02/capture-02/raw/click/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/click/compass/members.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/click/compass/members.stdout": "c12fa7fd7a03bcdf46578c982de39a5d539d41846e69dd3a93bd5a8b59bfcba2", + "member-source-02/capture-02/raw/click/compass/windows/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "member-source-02/capture-02/raw/click/compass/windows/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "member-source-02/capture-02/raw/click/compass/windows/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "member-source-02/capture-02/raw/click/compass/windows/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "member-source-02/capture-02/raw/click/compass/windows/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "member-source-02/capture-02/raw/click/compass/windows/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "member-source-02/capture-02/raw/click/compass/windows/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "member-source-02/capture-02/raw/click/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "member-source-02/capture-02/raw/click/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "member-source-02/capture-02/raw/click/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "member-source-02/capture-02/raw/click/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "member-source-02/capture-02/raw/click/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "member-source-02/capture-02/raw/click/graphify/mcp/04.request.json": "45d70070999af8bb5dac2cc3539f70fe83e41d5c898f53cd1fac42b55187988a", + "member-source-02/capture-02/raw/click/graphify/mcp/04.response.jsonl": "2e2b8b5d78de91e357e8a741b3959ee11bb1e48cfcbc71de6dd101570561c5fa", + "member-source-02/capture-02/raw/click/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/click/graphify/windows/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "member-source-02/capture-02/raw/click/graphify/windows/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "member-source-02/capture-02/raw/click/graphify/windows/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "member-source-02/capture-02/raw/click/graphify/windows/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "member-source-02/capture-02/raw/click/graphify/windows/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "member-source-02/capture-02/raw/click/graphify/windows/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "member-source-02/capture-02/raw/click/graphify/windows/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "member-source-02/capture-02/raw/jsoup/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "member-source-02/capture-02/raw/jsoup/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "member-source-02/capture-02/raw/jsoup/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "member-source-02/capture-02/raw/jsoup/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "member-source-02/capture-02/raw/jsoup/compass/mcp/03.response.jsonl": "64d26fe612b4c19a3c88ba6d5548476cf5322cf118de8d206b2698ce99b02a65", + "member-source-02/capture-02/raw/jsoup/compass/mcp/04.request.json": "a1e85cbdc8e510db04097cad55c25814a93c38b7b1f0372227e93481236d429b", + "member-source-02/capture-02/raw/jsoup/compass/mcp/04.response.jsonl": "baa465652b18341c09d564600481e0110f0e1e63079c5522540f83b90e7a5d4a", + "member-source-02/capture-02/raw/jsoup/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/jsoup/compass/members.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/jsoup/compass/members.stdout": "c4ef7ef86f96a867ab3b4bdafab8826ae1c940a34a9872fff0068dab32d73ed1", + "member-source-02/capture-02/raw/jsoup/compass/windows/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "member-source-02/capture-02/raw/jsoup/compass/windows/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "member-source-02/capture-02/raw/jsoup/compass/windows/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "member-source-02/capture-02/raw/jsoup/compass/windows/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "member-source-02/capture-02/raw/jsoup/compass/windows/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "member-source-02/capture-02/raw/jsoup/compass/windows/005.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "member-source-02/capture-02/raw/jsoup/compass/windows/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "member-source-02/capture-02/raw/jsoup/compass/windows/007.source": "c80f32af2fa6b5b37f6a6b6aed035cc318e7d4e6bda0580a428bff234b2ac17a", + "member-source-02/capture-02/raw/jsoup/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "member-source-02/capture-02/raw/jsoup/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "member-source-02/capture-02/raw/jsoup/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "member-source-02/capture-02/raw/jsoup/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "member-source-02/capture-02/raw/jsoup/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "member-source-02/capture-02/raw/jsoup/graphify/mcp/04.request.json": "a5d8506f70b3490e64d4cc9ed5e594dc9c3142343ab0ea47ef2f627e63c4ac51", + "member-source-02/capture-02/raw/jsoup/graphify/mcp/04.response.jsonl": "de51e58563a7882c32c0729aa8574535fd5f4c2464ab1fcacb4f0a548aca5c51", + "member-source-02/capture-02/raw/jsoup/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/jsoup/graphify/windows/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "member-source-02/capture-02/raw/jsoup/graphify/windows/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "member-source-02/capture-02/raw/jsoup/graphify/windows/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "member-source-02/capture-02/raw/jsoup/graphify/windows/003.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "member-source-02/capture-02/raw/jsoup/graphify/windows/004.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "member-source-02/capture-02/raw/jsoup/graphify/windows/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "member-source-02/capture-02/raw/jsoup/graphify/windows/006.source": "655f66ae9b5a39084ace665e8c4bc2908062931d8d7a8d4370ae0af6e4792230", + "member-source-02/capture-02/raw/redux/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "member-source-02/capture-02/raw/redux/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "member-source-02/capture-02/raw/redux/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "member-source-02/capture-02/raw/redux/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "member-source-02/capture-02/raw/redux/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "member-source-02/capture-02/raw/redux/graphify/mcp/04.request.json": "e68cdb047d4c46a669be395ce3f665e42bc05be7aff7eaab19a3834b6ff51df1", + "member-source-02/capture-02/raw/redux/graphify/mcp/04.response.jsonl": "7fc2c10f6ad01773cef5d5d0a8f420a6fd05da5405af40e6dea393245f165dbc", + "member-source-02/capture-02/raw/redux/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/redux/graphify/windows/000.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "member-source-02/capture-02/raw/redux/graphify/windows/001.source": "104842ff0af72b77928d0a849bc5aa5e5bf080e95aeca8f8bc0baacd3dd90aa1", + "member-source-02/capture-02/raw/walkdir/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "member-source-02/capture-02/raw/walkdir/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "member-source-02/capture-02/raw/walkdir/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "member-source-02/capture-02/raw/walkdir/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "member-source-02/capture-02/raw/walkdir/compass/mcp/03.response.jsonl": "64d26fe612b4c19a3c88ba6d5548476cf5322cf118de8d206b2698ce99b02a65", + "member-source-02/capture-02/raw/walkdir/compass/mcp/04.request.json": "88007595c05c740812b9033f2ee95b791edf9b2707d4f7ade7b768f046d1d612", + "member-source-02/capture-02/raw/walkdir/compass/mcp/04.response.jsonl": "894892461013ff8ea0bf43d1fdd32cc5fb97e101ded12eaf24dd45200fa98d97", + "member-source-02/capture-02/raw/walkdir/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/walkdir/compass/members.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/walkdir/compass/members.stdout": "a29d756672a534873059500754d482cc21f60c69b525a206e8a42e65f1176e62", + "member-source-02/capture-02/raw/walkdir/compass/windows/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "member-source-02/capture-02/raw/walkdir/compass/windows/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "member-source-02/capture-02/raw/walkdir/compass/windows/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "member-source-02/capture-02/raw/walkdir/compass/windows/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "member-source-02/capture-02/raw/walkdir/compass/windows/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "member-source-02/capture-02/raw/walkdir/compass/windows/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "member-source-02/capture-02/raw/walkdir/compass/windows/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "member-source-02/capture-02/raw/walkdir/compass/windows/007.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "member-source-02/capture-02/raw/walkdir/compass/windows/008.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "member-source-02/capture-02/raw/walkdir/compass/windows/009.source": "907ef6bd190a9985da364ec084579cacae6b06067d5a3bdfa8d98a2c3256eb9b", + "member-source-02/capture-02/raw/walkdir/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "member-source-02/capture-02/raw/walkdir/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "member-source-02/capture-02/raw/walkdir/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "member-source-02/capture-02/raw/walkdir/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "member-source-02/capture-02/raw/walkdir/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "member-source-02/capture-02/raw/walkdir/graphify/mcp/04.request.json": "24caf98a41faa25bd5103d2d458f36b9be08bc70a408ee37a1f35594325ff78a", + "member-source-02/capture-02/raw/walkdir/graphify/mcp/04.response.jsonl": "dd345c5346476f0054a0c8ba1f4b4fcc552a63f79701d2f9de1328bb9ef44650", + "member-source-02/capture-02/raw/walkdir/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/capture-02/raw/walkdir/graphify/windows/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "member-source-02/capture-02/raw/walkdir/graphify/windows/001.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "member-source-02/capture-02/raw/walkdir/graphify/windows/002.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "member-source-02/capture-02/raw/walkdir/graphify/windows/003.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "member-source-02/capture-02/raw/walkdir/graphify/windows/004.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "member-source-02/capture-02/raw/walkdir/graphify/windows/005.source": "b0c0b5e23f7d4cf98d355ff7f08101ea772f51b09b278f51ab7bb66ad2aaf4a6", + "member-source-02/capture-02/runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "member-source-02/capture-02.log": "4262aa9f199672649ef280bca6511a6e59b9f3651611d0f80c4ae25c422a9a54", + "member-source-02/capture.log": "2950ab87049f66e57a977f54b24c4c7bf960b48d8055022a4635885f565d135e", + "member-source-02/cli-query-tests-final.log": "ed725935bcfd27883a6b77d6f9e318f19e2a7f4e893e026fd78c90541f13e503", + "member-source-02/clippy-final.log": "55d20891684ab855b3f0830e781ad502f9b9c47a3e1ac044016769a262f6f787", + "member-source-02/collect-attempt-01.py": "e6178c5ccb4da9e81d555864fe86cc45df41840cc9a9d771d00729ce7a6d20c2", + "member-source-02/collect.py": "7a95e6dddb8a8b69ea21082163d5125783816f5ebb460dfcf3f691f9a608da69", + "member-source-02/fmt-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/mcp-tests-final.log": "daad87200738aca3825b27790a5fddf6f163844b3748fb116e06ba7819dfb4a9", + "member-source-02/product-boundary-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "member-source-02/product-tests-final.log": "40548fd0bd61eafef2d25ca799ca5ac271b0ea033ff79bbc4553e451622ab30b", + "member-source-02/query-tests-final.log": "04df29746e74c5916a094b6635bae03d1be38679ddf0af035e6da8dc46b00f86", + "member-source-02/validate.py": "a13b0ba21ca5e370e78249348902480215907f28b691176cd5f63db91e393ca9", + "member-source-02/validation.json": "5e5fdb61fa4d1b802055f7a9dc2ecde0698a351e1232b59530430f0ade6f5cab", + "member-source-02/verification-01.log": "675e592251fe1b4f9261ae61cdf120a3b0026564eed6ed21d6b860d1c7667ce0", + "member-source-02/verification-02.log": "a06d655d6c58ea073baa191515e8651598736eb02ba8e29363603beec0d8501c", + "member-source-02/verification-final.log": "a06d655d6c58ea073baa191515e8651598736eb02ba8e29363603beec0d8501c", + "member-source-02/verified-summary.json": "a75c2d706cece1fc4ba02886ebebd243b30fd0c0d4195bbbbd4e1a70a364e522", + "member-source-02/verify-capture-attempt-01.py": "d4faee604c4efcf677a20f0fb0f5aac51f8d1145f3b7198510046515d796d97c", + "member-source-02/verify-capture-attempt-02.py": "3b1a1530806b803c2f568954d0a8b191b4ab7a40eb209aa34c9f9678d837c5cd", + "member-source-02/verify_capture.py": "570a2513f5b4941b3baf0d6a466971c272eecf45d1bee44f982ea5429c275bc1", + "member-source-02/workspace-tests-final.log": "06e06019ba7db6dbb909788ad6597ac8f9394708c964f25276c82efbe288edb9", + "member-source-02/write_review.py": "c4451376ec967f7589561fd12f60d543c2f6d90bc552a089c2ecf29d9a37f4ba" + }, + "limitations": [ + "Known purposive development panel, one subject per language, no representative precision estimate.", + "Whole-file verification and MCP/CLI metadata bytes differ; a shared source payload budget is not equal compute or disk I/O.", + "Member mode can omit annotations/decorators outside stored callable spans, even when source truncation is false.", + "Compass Redux candidate recall remains unresolved at the registered bound of 256.", + "Chi routeHTTP and WalkDir check_loop remain omitted or incomplete under native source budget.", + "Actual responsibility synthesis, god-object defect diagnosis, full caller/callee precision, longer walks, community task quality, and fresh confirmation remain outstanding." + ] +} diff --git a/benchmarks/agent_query/mlcq_access_relations_registration.json b/benchmarks/agent_query/mlcq_access_relations_registration.json new file mode 100644 index 000000000..7f716a233 --- /dev/null +++ b/benchmarks/agent_query/mlcq_access_relations_registration.json @@ -0,0 +1,34 @@ +{ + "schema": "compass.mlcq-access-relations-registration/1", + "declaredBeforeExecution": true, + "purpose": "Determine the endpoint kinds and unique-class-owner coverage of reads/writes edges in the frozen CloudStack Java graph. Do not combine these edges with references, infer source truth or score god objects.", + "priorRelationReviewSha256": "8271f1777fbeaa81e51cdcaf551b009d8eec0cc231805e0eabc57e4f7baef8d3", + "graph": { + "repository": "apache/cloudstack", + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "graphBytes": 671502979, + "producerBinarySha256": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4", + "producerNote": "Original release extraction; one omitted node and 45 omitted edges. No new extraction." + }, + "bounds": { + "graphBytes": 1073741824, + "recordBytes": 8388608, + "maxNodes": 1000000, + "maxEdges": 1000000, + "maxClasses": 100000, + "maxOwnerCandidates": 1000000, + "maxSeconds": 300 + }, + "method": { + "input": "Read the frozen typed graph only; verify graph, producer and prior-review hashes before and after. Do not modify source or graph.", + "ownership": "The direct directed contains edge from class to method or field supplies owner candidates. Only one distinct class owner is usable; zero or multiple owners are unavailable. Do not choose a first owner.", + "relations": "For every reads or writes edge, count its exact source-kind/target-kind pair, evidence-confidence category and exact AST source anchor. Count missing endpoints separately. For method-to-field edges only, split field targets into same-class, other uniquely owned class, and unavailable owner; preserve record multiplicity and distinct source methods/field targets.", + "samples": "Reuse all 55 prior reviewed class joins unchanged. Report observed own, foreign and unresolved method-to-field reads/writes by each uniquely joined class; keep seven unavailable joins unavailable." + }, + "outputs": "Full endpoint-kind and evidence totals for reads and writes, all 13,001-class source cohort only where applicable, all 55 unchanged sample joins, exact source-anchor counts, ambiguity and limit outcomes, raw graph and producer SHA-256s, repeated verification. Do not calculate ATFD, TCC, WMC, a ranking or Graphify score.", + "interpretation": [ + "The preceding inventory observed 1,042 reads and 6,161 writes edges in this CloudStack artifact and none in the older Eclipse artifact; their endpoint semantics and source coverage are unknown at registration.", + "A stored edge is producer evidence, not an independent source oracle. Missing edges are not evidence that a class has no foreign-state access or is cohesive.", + "This remains known Java development data; no independent holdout or cross-language conclusion." + ] +} diff --git a/benchmarks/agent_query/mlcq_access_relations_review.json b/benchmarks/agent_query/mlcq_access_relations_review.json new file mode 100644 index 000000000..806633ba6 --- /dev/null +++ b/benchmarks/agent_query/mlcq_access_relations_review.json @@ -0,0 +1,693 @@ +{ + "all55Cases": [ + { + "accessMetrics": null, + "accessStatus": "unavailable-join", + "classId": null, + "classification": "minor-or-disagreement", + "exactMatchCount": 0, + "repository": "apache/cloudstack", + "sampleId": 8491397 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:573ca6bffd3ba6ab9674f7020f46fe0e521dd0556d47eba62176ed527bcbd661", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:573ca6bffd3ba6ab9674f7020f46fe0e521dd0556d47eba62176ed527bcbd661", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8494605 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:bd754c67c67ff00c49b8a3345ce718a9942e740cbabe61a8b82e28b75d2dd65a", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:bd754c67c67ff00c49b8a3345ce718a9942e740cbabe61a8b82e28b75d2dd65a", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8497585 + }, + { + "accessMetrics": null, + "accessStatus": "unavailable-join", + "classId": null, + "classification": "minor-or-disagreement", + "exactMatchCount": 0, + "repository": "apache/cloudstack", + "sampleId": 8497687 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:c9fada4684df3357d595d7faee6b94bb5562315fea986bb64b5a0e1fbe4c0546", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:c9fada4684df3357d595d7faee6b94bb5562315fea986bb64b5a0e1fbe4c0546", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8501968 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:e03e64f9267706722b55e0379e95642fab191daa0d5c88b2e26a8acefbed35ab", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:e03e64f9267706722b55e0379e95642fab191daa0d5c88b2e26a8acefbed35ab", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8501970 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:537bff8f8df4c26e3b05bf3fe3b3d062a2fe023abaf5ca52f9256cc919e9ffc6", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:537bff8f8df4c26e3b05bf3fe3b3d062a2fe023abaf5ca52f9256cc919e9ffc6", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8502684 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:f7d514eb3a61774eaca9b30dd4a696f8185aba895d2549a6acaf3fb03a480998", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:f7d514eb3a61774eaca9b30dd4a696f8185aba895d2549a6acaf3fb03a480998", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8507718 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:75cb162c933e8f5af2fb399d12a0321c6542fddfc6221867f91241c5fea5cded", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:75cb162c933e8f5af2fb399d12a0321c6542fddfc6221867f91241c5fea5cded", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8510347 + }, + { + "accessMetrics": null, + "accessStatus": "unavailable-join", + "classId": null, + "classification": "single-reviewer", + "exactMatchCount": 0, + "repository": "apache/cloudstack", + "sampleId": 8511088 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:ce5c5c31323f4bbc799721eeb6d1fa982389170f9785543ae48cee675163e15e", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:ce5c5c31323f4bbc799721eeb6d1fa982389170f9785543ae48cee675163e15e", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8514954 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:8f5e5100ee2d79560887b1d71680e14dba3d232397ff445a4ce32ca24834de9b", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:8f5e5100ee2d79560887b1d71680e14dba3d232397ff445a4ce32ca24834de9b", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8515776 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:606a6c28e5ee9445e7985f5e6206d1cc38dd6d7ec94cacf513151aff6b33bd27", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:606a6c28e5ee9445e7985f5e6206d1cc38dd6d7ec94cacf513151aff6b33bd27", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8516029 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:36b7814c82d66c65752bbc58bd537d5c9368bb439151f166c4d6ce67da7bc225", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:36b7814c82d66c65752bbc58bd537d5c9368bb439151f166c4d6ce67da7bc225", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8517396 + }, + { + "accessMetrics": null, + "accessStatus": "unavailable-join", + "classId": null, + "classification": "minor-or-disagreement", + "exactMatchCount": 0, + "repository": "apache/cloudstack", + "sampleId": 8522716 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:66538b3ff66a54fd545c41ad0c13be759817922ba4cfa3e042255e4aa1768472", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:66538b3ff66a54fd545c41ad0c13be759817922ba4cfa3e042255e4aa1768472", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8526483 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:52eababd34521216fdc02c142906b15574e8694a0a665c50bcc2fdbfb83376c8", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:52eababd34521216fdc02c142906b15574e8694a0a665c50bcc2fdbfb83376c8", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8526485 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8528735 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:60b26f62e27fc38e52f1a746d0d942f8f8429abf9dbe3ec505dc3df530e8e499", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:60b26f62e27fc38e52f1a746d0d942f8f8429abf9dbe3ec505dc3df530e8e499", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8533230 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:be771a36dbfcb422759048a55605d35b173fc670bc55be210b99431a408de6c1", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:be771a36dbfcb422759048a55605d35b173fc670bc55be210b99431a408de6c1", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8533645 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:248c456ccd43a03c3d8d38141f3af6015fc84b7bb734ad0e215061fa36cd3cf8", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:248c456ccd43a03c3d8d38141f3af6015fc84b7bb734ad0e215061fa36cd3cf8", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8533750 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:3babcd2c278f7348ac8e458c30364ae96ef6f7943f471073ddd9f52aa3793b45", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:3babcd2c278f7348ac8e458c30364ae96ef6f7943f471073ddd9f52aa3793b45", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8533873 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "classification": "unanimous-none", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8537138 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8538037 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:38284587360b3b49dbb4f5a62e61da7265017e65e4d0f3273483c38fd6f59413", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:38284587360b3b49dbb4f5a62e61da7265017e65e4d0f3273483c38fd6f59413", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8539540 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "classification": "unanimous-none", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8539645 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:3eae3eb896a5e0a9672beb7055286b500afc83cd6866887b6e488daf7e55d780", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:3eae3eb896a5e0a9672beb7055286b500afc83cd6866887b6e488daf7e55d780", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8541418 + }, + { + "accessMetrics": { + "distinctSourceMethodCounts": {}, + "distinctTargetFieldCounts": {}, + "id": "sha256:944a1b36f5b23ad222434d66733c9f991275aa0eab16d898496504878196a5e6", + "recordCounts": {} + }, + "accessStatus": "available", + "classId": "sha256:944a1b36f5b23ad222434d66733c9f991275aa0eab16d898496504878196a5e6", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "apache/cloudstack", + "sampleId": 8547261 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": null, + "classification": "single-reviewer", + "exactMatchCount": 0, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6369779 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:2406de0a7d6d60a3285ffd6c08255cbb1ca0caea9758a152269cdb77a148add1", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6371049 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:314148a91f14e6961b357cb5e4f4aa5a81b1be65c8ca726d4baf6afae561b9c5", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6372633 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6374724 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:37b79ae353d248eb203600de85dbe7573454fa88e5f8ae97e546f195609f7a42", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6375252 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:b60c2c635e95ea09774e70e6ffb28c8ebc5471b8a071c2b1a05ef74b56d697e0", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6375517 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:21e5eebc28b2d54b59d725c18a9d2adb26cb0dd025665f9d7d320e6cb8e769c2", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6379553 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:1245c6c02e5ce0dcef7062094ffc5e2e96059a0e49a4414cc079477bff4d1dc2", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6383930 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:c3a2696121c376e47b8b56df142dcff6fa5964482ec4134c70d6f19f6d8f8c50", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6385711 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": null, + "classification": "single-reviewer", + "exactMatchCount": 0, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6387077 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:a54c43d61dfb3df58ff9b6eb356070ef5040b5bbe3cc5c91c930c1ff37aead83", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6387249 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:8a79b8fecfc7cf66c5c6ee96ca37e92a9ca966b1de0fd7ddefc70622de492c43", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6388458 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "classification": "unanimous-none", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6391534 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:95081c0a06121da3dd58decd200efa14a67b6861f98ccec889aee3c97f8400eb", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6393486 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:eb1072f20cf2738fde7929fac849f050d3968f449c5fca0ba8a5076db6a66791", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6398820 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:1e001562f35ebf96d35bebfca21ec5d7e7dae156b0922bd27d95b23abf91dcc1", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6404028 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "classification": "unanimous-none", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6406137 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:7331c00a4419b1f8fc817a09d1b99688d726761df40bfcf00cc0f206d99ac476", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6412439 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:f2e1191484f82d8827e3b7b16753cdc9307dd2845dde8ad64ad1ada6627dbffd", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413248 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413795 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:47855833c826f9b124f009509d3ddf8d44e7b28eb237602dd130d3974195c5f8", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6414719 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:b4a4369d4e5d88bd8e5b458550726d0c510a7bf908e58870afc48af059400aa1", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6416620 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:8b309073c5c35c6b478e7e619d60e7a65a1ea7630ad30fbd09d737a14d109b94", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6424656 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": null, + "classification": "single-reviewer", + "exactMatchCount": 0, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6424683 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:b32f905b4ac8fb166f2d336fbbd11277610b2580af4ab5dffd204eed05f14784", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6425142 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:5df25a82acf0b628680b19b4a5f5880a41a7dde448d2a42fb10aaeb3f5b3f817", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6427227 + }, + { + "accessMetrics": null, + "accessStatus": "graph-not-evaluated", + "classId": "sha256:12bd289af06352482c17a07e499d1b592b21d7d4a31b4915bfe9dcf25938aae0", + "classification": "single-reviewer", + "exactMatchCount": 1, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6428158 + } + ], + "classCount": 6373, + "conclusion": "All reads/writes edges in this frozen graph connect SQL nodes to database tables; no method-to-field reads/writes edges were observed. Do not combine these categories with Java field references.", + "endpointKindCounts": [ + { + "count": 1, + "relation": "reads", + "sourceKind": "database_procedure", + "targetKind": "database_table" + }, + { + "count": 863, + "relation": "reads", + "sourceKind": "database_view", + "targetKind": "database_table" + }, + { + "count": 178, + "relation": "reads", + "sourceKind": "query", + "targetKind": "database_table" + }, + { + "count": 1, + "relation": "writes", + "sourceKind": "database_procedure", + "targetKind": "database_table" + }, + { + "count": 6160, + "relation": "writes", + "sourceKind": "query", + "targetKind": "database_table" + } + ], + "evidenceCounts": [ + { + "confidence": "exact", + "count": 1042, + "relation": "reads" + }, + { + "confidence": "exact", + "count": 6161, + "relation": "writes" + } + ], + "exactAnchoredCounts": [ + { + "count": 1042, + "exactAnchored": false, + "relation": "reads" + }, + { + "count": 6161, + "exactAnchored": false, + "relation": "writes" + } + ], + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "limits": [ + "These reads/writes are stored SQL-to-table relationships, not Java method-to-field access evidence.", + "Exact relation confidence here does not supply an exact AST relationship-site anchor or independent source verification.", + "No field-reference completeness, WMC, ATFD, TCC, god-object ranking, Graphify score, or held-out result is established.", + "The source graph has the previously recorded one omitted node and 45 omitted edges." + ], + "methodFieldStatusCounts": [], + "missingEndpointCounts": {}, + "rawRunSha256": "73c42b565d496c322aa0adc6c9d9714edacde36ce98c48d29ceaee6d66d8704d", + "registrationSha256": "8f9488d637f6d6043f1bde7895e55b6b0ae06717b95c514af26a1dc73248c6c7", + "repeatedVerificationByteIdentical": true, + "schema": "compass.mlcq-access-relations-review/1", + "scope": "Frozen CloudStack typed graph only; known Java development cohort and older Eclipse graph not re-extracted.", + "verifiedRunSha256": "78b17b447a567f44b1e387edbf4c634d0f818c55cc9fab02ab60fb6738c34cfa", + "verifierSha256": "bc28f27a8c9b4e2cf01c90ab31f488b6bcd95e27a947dba46d49a16735582eed" +} diff --git a/benchmarks/agent_query/mlcq_admission_followup_registration.json b/benchmarks/agent_query/mlcq_admission_followup_registration.json new file mode 100644 index 000000000..8cccdbe37 --- /dev/null +++ b/benchmarks/agent_query/mlcq_admission_followup_registration.json @@ -0,0 +1,56 @@ +{ + "schema": "compass.mlcq-admission-followup-registration/1", + "originalRegistrationSha256": "a08e6a0970c605154b329acbfebaa0d9684859f1fad2fa0ed8e8717772866ef1", + "purpose": "Complete a larger-artifact diagnostic of the same externally rated classes after the original Compass admission failures. Original run remains unchanged.", + "disclosure": "Original Graphify ranking outputs and all original extraction outcomes were inspected before this follow-up. This is development evidence, not held-out evaluation or an unchanged original protocol.", + "maxGraphBytes": 1073741824, + "otherLimits": { + "maxSourceFileBytes": 4194304, + "maxGraphBytes": 1073741824, + "maxExtractSeconds": 1200, + "maxExtractStreamBytes": 16777216, + "maxMcpSessionBytes": 67108864 + }, + "nativeHubCapture": { + "method": "god_nodes", + "arguments": { + "top_n": 100 + }, + "timeoutSeconds": 120, + "maxResponseBytes": 16777216 + }, + "primarySampleIds": [ + 6374724, + 6391534, + 6406137, + 6413795, + 8528735, + 8537138, + 8538037, + 8539645 + ], + "frozenSuccessfulGraphs": [ + { + "repository": "apache/cloudstack", + "tool": "graphify", + "graphBytes": 227334534, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72" + }, + { + "repository": "eclipse/eclipse.platform.ui", + "tool": "compass", + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74" + }, + { + "repository": "eclipse/eclipse.platform.ui", + "tool": "graphify", + "graphBytes": 189557807, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef" + } + ], + "compassCloudStack": "Use only the pending SQL-prefix-fix whole-repository follow-up on the original exact clean source, with original 1200-second timeout. Freeze its binary/build and graph digests before any query. Preserve timeout, oversize or MCP loading failures without fallback extraction.", + "requests": "Fresh MCP sessions: same god_nodes(top_n=100), same public exact source-coordinate resolvers and one unfiltered neighbor call per resolved primary class. Graphify neighbor token_budget=262144; both tools retain the same 16 MiB response and 64 MiB session caps.", + "judgment": "At fixed cutoffs 10/50/100 report consensus-positive class retrieval out of four and consensus-none class retrieval out of four separately. Nonreturned, missing extraction and unresolved output identity remain distinct. Unlabeled hubs cannot become false positives or true negatives. No precision-at-k, population accuracy or classifier score from this partial label set. Preserve every candidate and rating disagreement.", + "forbiddenClaims": "Do not replace original failed outcomes, tune on these eight classes and call them held-out, substitute source-assisted neighbors for the ranking score, or claim population precision/overall superiority." +} diff --git a/benchmarks/agent_query/mlcq_admission_followup_review.json b/benchmarks/agent_query/mlcq_admission_followup_review.json new file mode 100644 index 000000000..8e4f57aeb --- /dev/null +++ b/benchmarks/agent_query/mlcq_admission_followup_review.json @@ -0,0 +1,4918 @@ +{ + "schema": "compass.mlcq-admission-review/1", + "scope": "Declared development follow-up on the same externally rated Java classes, using a 1 GiB graph cap. Original 256 MiB outcomes remain unchanged.", + "externalRun": "sql-prefix-scan-01/admission-followup", + "originalReviewSha256": "59d6b22c908e7c7872b46caaac39d49aedbb277fc8b4f1766f23a6885f07258f", + "registrationSha256": "1fc72b0ef22d980041eebeb104124ffdf23efd4e53e5eecc39a602f67160ee5d", + "sourceWitnessesSha256": "c35e4202703599acca6f96a807c72f598345d7d764d88cfc3b13f9340e01e675", + "sourceReviewSha256": "c126379ccdbdfe0991ac28205b06ee6d92f40e5bc5713ca7f45ab1778e2853f7", + "dataset": { + "title": "MLCQ: Industry-relevant code smell data set", + "authors": [ + "Lech Madeyski", + "Tomasz Lewowski" + ], + "version": "1.1", + "doi": "10.5281/zenodo.3666840", + "paperDoi": "10.1145/3383219.3383264", + "recordUrl": "https://zenodo.org/records/3666840", + "license": "CC-BY-4.0", + "file": "MLCQCodeSmellSamples.csv", + "sha256": "8e05db55150a984f0b08ab211f5f612374790ea918ba08afc290cf122b63551b", + "publishedMd5": "9019beae88089838d2d13dc12e69241b" + }, + "maxGraphBytes": 1073741824, + "candidateBinarySha256": "9375271e6718e780daede034534bd6b5676e0e1385718aed2fcec16946df25df", + "candidateBuildCommit": "bbc6a419c389829a98aa69971fafb9d29fe21aaa", + "verification": { + "auditorCorrectionSha256": "672dd1b848d3c4cad1d36513fe0a6366dcc870a806b37ad89cd88851cc9eef5d", + "captureSha256": "213774c2e901a012b4ab22f594c4edac2e49c373d30fffb3212756d415bc07cc", + "neighborAuditorSha256": "fef9268b1f88d8c46d0d6dda6d6acbb5fa576cddedeea992b374984bcd6111d8", + "results": [ + { + "build": { + "exitCode": -9, + "graphBytes": null, + "graphSha256": null, + "timedOut": true, + "withinRegisteredGraphBound": false + }, + "captureError": null, + "captureStatus": "build-or-artifact-bound-failure", + "cases": [ + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-major-critical", + "graphIds": null, + "rank": null, + "sampleId": 8528735 + }, + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-none", + "graphIds": null, + "rank": null, + "sampleId": 8537138 + }, + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-major-critical", + "graphIds": null, + "rank": null, + "sampleId": 8538037 + }, + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-none", + "graphIds": null, + "rank": null, + "sampleId": 8539645 + } + ], + "connectivityChecks": [], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "capture-unavailable": 2 + }, + "unanimous-none": { + "capture-unavailable": 2 + } + }, + "100": { + "unanimous-major-critical": { + "capture-unavailable": 2 + }, + "unanimous-none": { + "capture-unavailable": 2 + } + }, + "50": { + "unanimous-major-critical": { + "capture-unavailable": 2 + }, + "unanimous-none": { + "capture-unavailable": 2 + } + } + }, + "extractionDiagnostics": [], + "graphConsistency": null, + "omittedDiagnosticLines": 0, + "repository": "apache/cloudstack", + "secondary": [], + "tool": "compass" + }, + { + "build": { + "exitCode": 0, + "graphBytes": 227334534, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72", + "timedOut": false, + "withinRegisteredGraphBound": true + }, + "captureError": null, + "captureStatus": "completed", + "cases": [ + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl" + ], + "rank": null, + "sampleId": 8528735 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand" + ], + "rank": null, + "sampleId": 8537138 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi" + ], + "rank": null, + "sampleId": 8538037 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse" + ], + "rank": null, + "sampleId": 8539645 + } + ], + "connectivityChecks": [], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + } + }, + "extractionDiagnostics": [ + { + "stream": "stderr", + "text": " warning: skill at /.claude/skills/graphify is from graphify 0.9.30, package is 0.9.67. Run 'graphify install --platform claude' to update it (a plain 'graphify install' refreshes only the detected platform).", + "textTruncated": false + }, + { + "stream": "stderr", + "text": " warning: 119 .sql file(s) contributed nothing to the graph because a dependency is missing: tree_sitter_sql not installed. Install it with: pip install \"graphifyy[sql]\" (#1745)", + "textTruncated": false + }, + { + "stream": "stderr", + "text": " warning: 3 file(s) had syntax errors and may be partially extracted: scripts/vm/hypervisor/xenserver/cloudlog (first error at line 26, no symbols extracted), test/integration/component/test_acl_isolatednetwork.py (first error at line 17, 76 symbol(s) extracted), test/integration/component/test_acl_isolatednetwork_delete.py (first error at line 17, 28 symbol(s) extracted)", + "textTruncated": false + } + ], + "graphConsistency": { + "executionSucceeded": true, + "explicitIdentities": 0, + "hubs": [ + { + "degree": 2273, + "identityCandidates": 3, + "label": "CloudRuntimeException", + "rank": 1 + }, + { + "degree": 1458, + "degreeMatches": true, + "expectedDegree": 1458, + "file": "api/src/main/java/com/cloud/agent/api/Answer.java", + "id": "api_src_main_java_com_cloud_agent_api_answer_answer", + "identityCandidates": 1, + "label": "Answer", + "line": 21, + "rank": 2 + }, + { + "degree": 1332, + "degreeMatches": true, + "expectedDegree": 1332, + "file": "api/src/main/java/org/apache/cloudstack/api/APICommand.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apicommand_apicommand", + "identityCandidates": 1, + "label": "APICommand", + "line": 28, + "rank": 3 + }, + { + "degree": 1293, + "identityCandidates": 9, + "label": "Network", + "rank": 4 + }, + { + "degree": 1149, + "identityCandidates": 10, + "label": "Account", + "rank": 5 + }, + { + "degree": 932, + "identityCandidates": 2, + "label": "cleanup_resources()", + "rank": 6 + }, + { + "degree": 799, + "degreeMatches": true, + "expectedDegree": 799, + "file": "framework/db/src/main/java/com/cloud/utils/db/DB.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_db_db", + "identityCandidates": 1, + "label": "DB", + "line": 40, + "rank": 7 + }, + { + "degree": 798, + "identityCandidates": 2, + "label": "Pair", + "rank": 8 + }, + { + "degree": 780, + "degreeMatches": true, + "expectedDegree": 780, + "file": "api/src/main/java/org/apache/cloudstack/api/ApiConstants.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apiconstants_apiconstants", + "identityCandidates": 1, + "label": "ApiConstants", + "line": 19, + "rank": 9 + }, + { + "degree": 758, + "degreeMatches": true, + "expectedDegree": 758, + "file": "framework/db/src/main/java/com/cloud/utils/db/GenericDao.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_genericdao_genericdao", + "identityCandidates": 1, + "label": "GenericDao", + "line": 30, + "rank": 10 + }, + { + "degree": 711, + "identityCandidates": 8, + "label": "Host", + "rank": 11 + }, + { + "degree": 683, + "identityCandidates": 4, + "label": "Command", + "rank": 12 + }, + { + "degree": 663, + "degreeMatches": true, + "expectedDegree": 663, + "file": "framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_genericdaobase_genericdaobase", + "identityCandidates": 1, + "label": "GenericDaoBase", + "line": 116, + "rank": 13 + }, + { + "degree": 657, + "degreeMatches": true, + "expectedDegree": 657, + "file": "engine/schema/src/main/java/com/cloud/host/HostVO.java", + "id": "engine_schema_src_main_java_com_cloud_host_hostvo_hostvo", + "identityCandidates": 1, + "label": "HostVO", + "line": 47, + "rank": 14 + }, + { + "degree": 639, + "degreeMatches": true, + "expectedDegree": 639, + "file": "api/src/main/java/com/cloud/vm/VirtualMachineProfile.java", + "id": "api_src_main_java_com_cloud_vm_virtualmachineprofile_virtualmachineprofile", + "identityCandidates": 1, + "label": "VirtualMachineProfile", + "line": 35, + "rank": 15 + }, + { + "degree": 587, + "degreeMatches": true, + "expectedDegree": 587, + "file": "api/src/main/java/org/apache/cloudstack/api/Parameter.java", + "id": "api_src_main_java_org_apache_cloudstack_api_parameter_parameter", + "identityCandidates": 1, + "label": "Parameter", + "line": 28, + "rank": 16 + }, + { + "degree": 582, + "degreeMatches": true, + "expectedDegree": 582, + "file": "api/src/main/java/com/cloud/hypervisor/Hypervisor.java", + "id": "api_src_main_java_com_cloud_hypervisor_hypervisor_hypervisortype", + "identityCandidates": 1, + "label": "HypervisorType", + "line": 23, + "rank": 17 + }, + { + "degree": 578, + "identityCandidates": 9, + "label": "VirtualMachine", + "rank": 18 + }, + { + "degree": 560, + "degreeMatches": true, + "expectedDegree": 560, + "file": "framework/db/src/main/java/com/cloud/utils/db/SearchBuilder.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_searchbuilder_searchbuilder", + "identityCandidates": 1, + "label": "SearchBuilder", + "line": 56, + "rank": 19 + }, + { + "degree": 540, + "degreeMatches": true, + "expectedDegree": 540, + "file": "api/src/main/java/org/apache/cloudstack/api/ServerApiException.java", + "id": "api_src_main_java_org_apache_cloudstack_api_serverapiexception_serverapiexception", + "identityCandidates": 1, + "label": "ServerApiException", + "line": 26, + "rank": 20 + }, + { + "degree": 523, + "degreeMatches": true, + "expectedDegree": 523, + "file": "api/src/main/java/com/cloud/vm/NicProfile.java", + "id": "api_src_main_java_com_cloud_vm_nicprofile_nicprofile", + "identityCandidates": 1, + "label": "NicProfile", + "line": 31, + "rank": 21 + }, + { + "degree": 521, + "degreeMatches": true, + "expectedDegree": 521, + "file": "tools/marvin/marvin/cloudstackTestCase.py", + "id": "tools_marvin_marvin_cloudstacktestcase_cloudstacktestcase", + "identityCandidates": 1, + "label": "cloudstackTestCase", + "line": 37, + "rank": 22 + }, + { + "degree": 521, + "degreeMatches": true, + "expectedDegree": 521, + "file": "engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java", + "id": "engine_api_src_main_java_org_apache_cloudstack_engine_subsystem_api_storage_datastore_datastore", + "identityCandidates": 1, + "label": "DataStore", + "line": 22, + "rank": 23 + }, + { + "degree": 512, + "degreeMatches": true, + "expectedDegree": 512, + "file": "api/src/main/java/org/apache/cloudstack/api/BaseCmd.java", + "id": "api_src_main_java_org_apache_cloudstack_api_basecmd_basecmd", + "identityCandidates": 1, + "label": "BaseCmd", + "line": 85, + "rank": 24 + }, + { + "degree": 507, + "degreeMatches": true, + "expectedDegree": 507, + "file": "api/src/main/java/org/apache/cloudstack/api/ApiErrorCode.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apierrorcode_apierrorcode", + "identityCandidates": 1, + "label": "ApiErrorCode", + "line": 23, + "rank": 25 + }, + { + "degree": 505, + "degreeMatches": true, + "expectedDegree": 505, + "file": "api/src/main/java/com/cloud/exception/ResourceUnavailableException.java", + "id": "api_src_main_java_com_cloud_exception_resourceunavailableexception_resourceunavailableexception", + "identityCandidates": 1, + "label": "ResourceUnavailableException", + "line": 21, + "rank": 26 + }, + { + "degree": 499, + "degreeMatches": true, + "expectedDegree": 499, + "file": "api/src/main/java/com/cloud/exception/InvalidParameterValueException.java", + "id": "api_src_main_java_com_cloud_exception_invalidparametervalueexception_invalidparametervalueexception", + "identityCandidates": 1, + "label": "InvalidParameterValueException", + "line": 21, + "rank": 27 + }, + { + "degree": 494, + "identityCandidates": 2, + "label": "get_zone()", + "rank": 28 + }, + { + "degree": 489, + "degreeMatches": true, + "expectedDegree": 489, + "file": "api/src/main/java/org/apache/cloudstack/api/InternalIdentity.java", + "id": "api_src_main_java_org_apache_cloudstack_api_internalidentity_internalidentity", + "identityCandidates": 1, + "label": "InternalIdentity", + "line": 26, + "rank": 29 + }, + { + "degree": 478, + "degreeMatches": true, + "expectedDegree": 478, + "file": "api/src/main/java/org/apache/cloudstack/context/CallContext.java", + "id": "api_src_main_java_org_apache_cloudstack_context_callcontext_callcontext", + "identityCandidates": 1, + "label": "CallContext", + "line": 42, + "rank": 30 + }, + { + "degree": 457, + "degreeMatches": true, + "expectedDegree": 457, + "file": "framework/db/src/main/java/com/cloud/utils/db/SearchCriteria.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_searchcriteria_searchcriteria", + "identityCandidates": 1, + "label": "SearchCriteria", + "line": 33, + "rank": 31 + }, + { + "degree": 455, + "identityCandidates": 3, + "label": "get_domain()", + "rank": 32 + }, + { + "degree": 454, + "identityCandidates": 10, + "label": "Account", + "rank": 33 + }, + { + "degree": 454, + "degreeMatches": true, + "expectedDegree": 454, + "file": "api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java", + "id": "api_src_main_java_org_apache_cloudstack_api_baseasynccmd_baseasynccmd", + "identityCandidates": 1, + "label": "BaseAsyncCmd", + "line": 25, + "rank": 34 + }, + { + "degree": 434, + "degreeMatches": true, + "expectedDegree": 434, + "file": "api/src/main/java/com/cloud/vm/ReservationContext.java", + "id": "api_src_main_java_com_cloud_vm_reservationcontext_reservationcontext", + "identityCandidates": 1, + "label": "ReservationContext", + "line": 28, + "rank": 35 + }, + { + "degree": 434, + "degreeMatches": true, + "expectedDegree": 434, + "file": "api/src/main/java/org/apache/cloudstack/api/BaseResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_baseresponse_baseresponse", + "identityCandidates": 1, + "label": "BaseResponse", + "line": 23, + "rank": 36 + }, + { + "degree": 433, + "identityCandidates": 9, + "label": "VirtualMachine", + "rank": 37 + }, + { + "degree": 431, + "degreeMatches": true, + "expectedDegree": 431, + "file": "api/src/main/java/org/apache/cloudstack/api/response/ListResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_listresponse_listresponse", + "identityCandidates": 1, + "label": "ListResponse", + "line": 24, + "rank": 38 + }, + { + "degree": 415, + "degreeMatches": true, + "expectedDegree": 415, + "file": "plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java", + "id": "plugins_hypervisors_kvm_src_main_java_com_cloud_hypervisor_kvm_resource_libvirtcomputingresource_libvirtcomputingresource", + "identityCandidates": 1, + "label": "LibvirtComputingResource", + "line": 198, + "rank": 39 + }, + { + "degree": 409, + "identityCandidates": 2, + "label": "Config", + "rank": 40 + }, + { + "degree": 408, + "degreeMatches": true, + "expectedDegree": 408, + "file": "engine/schema/src/main/java/com/cloud/host/dao/HostDao.java", + "id": "engine_schema_src_main_java_com_cloud_host_dao_hostdao_hostdao", + "identityCandidates": 1, + "label": "HostDao", + "line": 37, + "rank": 41 + }, + { + "degree": 408, + "degreeMatches": true, + "expectedDegree": 408, + "file": "plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java", + "id": "plugins_hypervisors_xenserver_src_main_java_com_cloud_hypervisor_xenserver_resource_citrixresourcebase_citrixresourcebase", + "identityCandidates": 1, + "label": "CitrixResourceBase", + "line": 173, + "rank": 42 + }, + { + "degree": 406, + "degreeMatches": true, + "expectedDegree": 406, + "file": "api/src/main/java/com/cloud/deploy/DeployDestination.java", + "id": "api_src_main_java_com_cloud_deploy_deploydestination_deploydestination", + "identityCandidates": 1, + "label": "DeployDestination", + "line": 30, + "rank": 43 + }, + { + "degree": 403, + "identityCandidates": 4, + "label": "ServiceOffering", + "rank": 44 + }, + { + "degree": 400, + "degreeMatches": true, + "expectedDegree": 400, + "file": "tools/marvin/marvin/lib/utils.py", + "id": "tools_marvin_marvin_lib_utils_validatelist", + "identityCandidates": 1, + "label": "validateList()", + "line": 386, + "rank": 45 + }, + { + "degree": 390, + "degreeMatches": true, + "expectedDegree": 390, + "file": "framework/config/src/main/java/org/apache/cloudstack/framework/config/dao/ConfigurationDao.java", + "id": "framework_config_src_main_java_org_apache_cloudstack_framework_config_dao_configurationdao_configurationdao", + "identityCandidates": 1, + "label": "ConfigurationDao", + "line": 25, + "rank": 46 + }, + { + "degree": 382, + "identityCandidates": 2, + "label": "get_template()", + "rank": 47 + }, + { + "degree": 379, + "degreeMatches": true, + "expectedDegree": 379, + "file": "server/src/main/java/com/cloud/api/ApiDBUtils.java", + "id": "server_src_main_java_com_cloud_api_apidbutils_apidbutils", + "identityCandidates": 1, + "label": "ApiDBUtils", + "line": 318, + "rank": 48 + }, + { + "degree": 376, + "degreeMatches": true, + "expectedDegree": 376, + "file": "core/src/main/java/com/cloud/resource/ResourceWrapper.java", + "id": "core_src_main_java_com_cloud_resource_resourcewrapper_resourcewrapper", + "identityCandidates": 1, + "label": "ResourceWrapper", + "line": 29, + "rank": 49 + }, + { + "degree": 359, + "identityCandidates": 6, + "label": "Service", + "rank": 50 + }, + { + "degree": 354, + "identityCandidates": 3, + "label": "NetworkOffering", + "rank": 51 + }, + { + "degree": 353, + "degreeMatches": true, + "expectedDegree": 353, + "file": "core/src/main/java/com/cloud/resource/CommandWrapper.java", + "id": "core_src_main_java_com_cloud_resource_commandwrapper_commandwrapper", + "identityCandidates": 1, + "label": "CommandWrapper", + "line": 25, + "rank": 52 + }, + { + "degree": 352, + "degreeMatches": true, + "expectedDegree": 352, + "file": "engine/schema/src/main/java/com/cloud/network/dao/NetworkVO.java", + "id": "engine_schema_src_main_java_com_cloud_network_dao_networkvo_networkvo", + "identityCandidates": 1, + "label": "NetworkVO", + "line": 46, + "rank": 53 + }, + { + "degree": 345, + "degreeMatches": true, + "expectedDegree": 345, + "file": "api/src/main/java/com/cloud/event/EventTypes.java", + "id": "api_src_main_java_com_cloud_event_eventtypes_eventtypes", + "identityCandidates": 1, + "label": "EventTypes", + "line": 79, + "rank": 54 + }, + { + "degree": 340, + "degreeMatches": true, + "expectedDegree": 340, + "file": "services/console-proxy/rdpconsole/src/main/java/streamer/ByteBuffer.java", + "id": "services_console_proxy_rdpconsole_src_main_java_streamer_bytebuffer_bytebuffer", + "identityCandidates": 1, + "label": "ByteBuffer", + "line": 29, + "rank": 55 + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "file": "api/src/main/java/com/cloud/event/ActionEvent.java", + "id": "api_src_main_java_com_cloud_event_actionevent_actionevent", + "identityCandidates": 1, + "label": "ActionEvent", + "line": 26, + "rank": 56 + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "file": "engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java", + "id": "engine_schema_src_main_java_com_cloud_vm_vminstancevo_vminstancevo", + "identityCandidates": 1, + "label": "VMInstanceVO", + "line": 48, + "rank": 57 + }, + { + "degree": 336, + "degreeMatches": true, + "expectedDegree": 336, + "file": "engine/components-api/src/main/java/com/cloud/agent/AgentManager.java", + "id": "engine_components_api_src_main_java_com_cloud_agent_agentmanager_agentmanager", + "identityCandidates": 1, + "label": "AgentManager", + "line": 37, + "rank": 58 + }, + { + "degree": 329, + "degreeMatches": true, + "expectedDegree": 329, + "file": "core/src/main/java/com/cloud/agent/api/StartupCommand.java", + "id": "core_src_main_java_com_cloud_agent_api_startupcommand_startupcommand", + "identityCandidates": 1, + "label": "StartupCommand", + "line": 24, + "rank": 59 + }, + { + "degree": 329, + "degreeMatches": true, + "expectedDegree": 329, + "file": "api/src/main/java/com/cloud/exception/ConcurrentOperationException.java", + "id": "api_src_main_java_com_cloud_exception_concurrentoperationexception_concurrentoperationexception", + "identityCandidates": 1, + "label": "ConcurrentOperationException", + "line": 22, + "rank": 60 + }, + { + "degree": 321, + "degreeMatches": true, + "expectedDegree": 321, + "file": "engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDao.java", + "id": "engine_schema_src_main_java_com_cloud_dc_dao_datacenterdao_datacenterdao", + "identityCandidates": 1, + "label": "DataCenterDao", + "line": 26, + "rank": 61 + }, + { + "degree": 321, + "identityCandidates": 5, + "label": "StoragePool", + "rank": 62 + }, + { + "degree": 317, + "degreeMatches": true, + "expectedDegree": 317, + "file": "api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apicommandjobtype_apicommandjobtype", + "identityCandidates": 1, + "label": "ApiCommandJobType", + "line": 19, + "rank": 63 + }, + { + "degree": 316, + "degreeMatches": true, + "expectedDegree": 316, + "file": "api/src/main/java/org/apache/cloudstack/api/response/SuccessResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_successresponse_successresponse", + "identityCandidates": 1, + "label": "SuccessResponse", + "line": 25, + "rank": 64 + }, + { + "degree": 313, + "degreeMatches": true, + "expectedDegree": 313, + "file": "api/src/main/java/com/cloud/network/NetworkModel.java", + "id": "api_src_main_java_com_cloud_network_networkmodel_networkmodel", + "identityCandidates": 1, + "label": "NetworkModel", + "line": 52, + "rank": 65 + }, + { + "degree": 307, + "degreeMatches": true, + "expectedDegree": 307, + "file": "engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java", + "id": "engine_api_src_main_java_org_apache_cloudstack_engine_subsystem_api_storage_dataobject_dataobject", + "identityCandidates": 1, + "label": "DataObject", + "line": 25, + "rank": 66 + }, + { + "degree": 294, + "identityCandidates": 2, + "label": "InsufficientCapacityException", + "rank": 67 + }, + { + "degree": 292, + "degreeMatches": true, + "expectedDegree": 292, + "file": "api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_uservmresponse_uservmresponse", + "identityCandidates": 1, + "label": "UserVmResponse", + "line": 36, + "rank": 68 + }, + { + "degree": 289, + "identityCandidates": 18, + "label": "TrafficType", + "rank": 69 + }, + { + "degree": 286, + "degreeMatches": true, + "expectedDegree": 286, + "file": "engine/schema/src/main/java/com/cloud/user/AccountVO.java", + "id": "engine_schema_src_main_java_com_cloud_user_accountvo_accountvo", + "identityCandidates": 1, + "label": "AccountVO", + "line": 33, + "rank": 70 + }, + { + "degree": 285, + "degreeMatches": true, + "expectedDegree": 285, + "file": "server/src/main/java/com/cloud/user/AccountManager.java", + "id": "server_src_main_java_com_cloud_user_accountmanager_accountmanager", + "identityCandidates": 1, + "label": "AccountManager", + "line": 44, + "rank": 71 + }, + { + "degree": 280, + "degreeMatches": true, + "expectedDegree": 280, + "file": "engine/schema/src/main/java/com/cloud/network/dao/NetworkDao.java", + "id": "engine_schema_src_main_java_com_cloud_network_dao_networkdao_networkdao", + "identityCandidates": 1, + "label": "NetworkDao", + "line": 30, + "rank": 72 + }, + { + "degree": 278, + "degreeMatches": true, + "expectedDegree": 278, + "file": "engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java", + "id": "engine_schema_src_main_java_com_cloud_vm_dao_vminstancedao_vminstancedao", + "identityCandidates": 1, + "label": "VMInstanceDao", + "line": 34, + "rank": 73 + }, + { + "degree": 275, + "identityCandidates": 7, + "label": "Volume", + "rank": 74 + }, + { + "degree": 272, + "degreeMatches": true, + "expectedDegree": 272, + "file": "engine/schema/src/main/java/com/cloud/storage/VolumeVO.java", + "id": "engine_schema_src_main_java_com_cloud_storage_volumevo_volumevo", + "identityCandidates": 1, + "label": "VolumeVO", + "line": 40, + "rank": 75 + }, + { + "degree": 266, + "degreeMatches": true, + "expectedDegree": 266, + "file": "plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/IntegrationTestConfiguration.java", + "id": "plugins_network_elements_juniper_contrail_src_test_java_org_apache_cloudstack_network_contrail_management_integrationtestconfiguration_integrationtestconfiguration", + "identityCandidates": 1, + "label": "IntegrationTestConfiguration", + "line": 304, + "rank": 76 + }, + { + "degree": 264, + "degreeMatches": true, + "expectedDegree": 264, + "file": "utils/src/main/java/com/cloud/utils/component/ManagerBase.java", + "id": "utils_src_main_java_com_cloud_utils_component_managerbase_managerbase", + "identityCandidates": 1, + "label": "ManagerBase", + "line": 22, + "rank": 77 + }, + { + "degree": 262, + "identityCandidates": 2, + "label": "VolumeInfo", + "rank": 78 + }, + { + "degree": 262, + "degreeMatches": true, + "expectedDegree": 262, + "file": "api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java", + "id": "api_src_main_java_com_cloud_agent_api_to_virtualmachineto_virtualmachineto", + "identityCandidates": 1, + "label": "VirtualMachineTO", + "line": 27, + "rank": 79 + }, + { + "degree": 260, + "identityCandidates": 2, + "label": "VirtualRouter", + "rank": 80 + }, + { + "degree": 260, + "degreeMatches": true, + "expectedDegree": 260, + "file": "engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java", + "id": "engine_schema_src_main_java_com_cloud_storage_vmtemplatevo_vmtemplatevo", + "identityCandidates": 1, + "label": "VMTemplateVO", + "line": 40, + "rank": 81 + }, + { + "degree": 260, + "degreeMatches": true, + "expectedDegree": 260, + "file": "api/src/main/java/com/cloud/exception/ResourceAllocationException.java", + "id": "api_src_main_java_com_cloud_exception_resourceallocationexception_resourceallocationexception", + "identityCandidates": 1, + "label": "ResourceAllocationException", + "line": 21, + "rank": 82 + }, + { + "degree": 258, + "identityCandidates": 2, + "label": "Filter", + "rank": 83 + }, + { + "degree": 257, + "degreeMatches": true, + "expectedDegree": 257, + "file": "engine/components-api/src/main/java/com/cloud/resource/ResourceManager.java", + "id": "engine_components_api_src_main_java_com_cloud_resource_resourcemanager_resourcemanager", + "identityCandidates": 1, + "label": "ResourceManager", + "line": 48, + "rank": 84 + }, + { + "degree": 256, + "degreeMatches": true, + "expectedDegree": 256, + "file": "framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java", + "id": "framework_config_src_main_java_org_apache_cloudstack_framework_config_configkey_configkey", + "identityCandidates": 1, + "label": "ConfigKey", + "line": 31, + "rank": 85 + }, + { + "degree": 255, + "degreeMatches": true, + "expectedDegree": 255, + "file": "framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_transactionlegacy_transactionlegacy", + "identityCandidates": 1, + "label": "TransactionLegacy", + "line": 65, + "rank": 86 + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "file": "api/src/main/java/com/cloud/dc/DataCenter.java", + "id": "api_src_main_java_com_cloud_dc_datacenter_datacenter", + "identityCandidates": 1, + "label": "DataCenter", + "line": 28, + "rank": 87 + }, + { + "degree": 249, + "identityCandidates": 10, + "label": "User", + "rank": 88 + }, + { + "degree": 243, + "degreeMatches": true, + "expectedDegree": 243, + "file": "utils/src/main/java/com/cloud/utils/net/NetUtils.java", + "id": "utils_src_main_java_com_cloud_utils_net_netutils_netutils", + "identityCandidates": 1, + "label": "NetUtils", + "line": 59, + "rank": 89 + }, + { + "degree": 241, + "degreeMatches": true, + "expectedDegree": 241, + "file": "utils/src/main/java/com/cloud/utils/script/Script.java", + "id": "utils_src_main_java_com_cloud_utils_script_script_script", + "identityCandidates": 1, + "label": "Script", + "line": 49, + "rank": 90 + }, + { + "degree": 240, + "degreeMatches": true, + "expectedDegree": 240, + "file": "engine/schema/src/main/java/com/cloud/vm/DomainRouterVO.java", + "id": "engine_schema_src_main_java_com_cloud_vm_domainroutervo_domainroutervo", + "identityCandidates": 1, + "label": "DomainRouterVO", + "line": 32, + "rank": 91 + }, + { + "degree": 239, + "identityCandidates": 5, + "label": "Provider", + "rank": 92 + }, + { + "degree": 235, + "degreeMatches": true, + "expectedDegree": 235, + "file": "api/src/main/java/org/apache/cloudstack/api/EntityReference.java", + "id": "api_src_main_java_org_apache_cloudstack_api_entityreference_entityreference", + "identityCandidates": 1, + "label": "EntityReference", + "line": 25, + "rank": 93 + }, + { + "degree": 233, + "degreeMatches": true, + "expectedDegree": 233, + "file": "engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java", + "id": "engine_schema_src_main_java_org_apache_cloudstack_storage_datastore_db_storagepoolvo_storagepoolvo", + "identityCandidates": 1, + "label": "StoragePoolVO", + "line": 40, + "rank": 94 + }, + { + "degree": 232, + "identityCandidates": 8, + "label": "Param", + "rank": 95 + }, + { + "degree": 232, + "degreeMatches": true, + "expectedDegree": 232, + "file": "api/src/main/java/org/apache/cloudstack/acl/RoleType.java", + "id": "api_src_main_java_org_apache_cloudstack_acl_roletype_roletype", + "identityCandidates": 1, + "label": "RoleType", + "line": 24, + "rank": 96 + }, + { + "degree": 231, + "degreeMatches": true, + "expectedDegree": 231, + "file": "tools/marvin/marvin/sshClient.py", + "id": "tools_marvin_marvin_sshclient_sshclient", + "identityCandidates": 1, + "label": "SshClient", + "line": 38, + "rank": 97 + }, + { + "degree": 231, + "degreeMatches": true, + "expectedDegree": 231, + "file": "engine/schema/src/main/java/com/cloud/dc/DataCenterVO.java", + "id": "engine_schema_src_main_java_com_cloud_dc_datacentervo_datacentervo", + "identityCandidates": 1, + "label": "DataCenterVO", + "line": 38, + "rank": 98 + }, + { + "degree": 227, + "identityCandidates": 36, + "label": "Status", + "rank": 99 + }, + { + "degree": 225, + "degreeMatches": true, + "expectedDegree": 225, + "file": "engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java", + "id": "engine_schema_src_main_java_com_cloud_storage_dao_volumedao_volumedao", + "identityCandidates": 1, + "label": "VolumeDao", + "line": 31, + "rank": 100 + } + ], + "matchingDegrees": 72, + "matchingSourceAnchors": 0, + "question": "hubs", + "repository": "apache/cloudstack", + "returned": 100, + "tool": "graphify", + "verifiedIdentities": 72 + }, + "graphCounts": { + "edges": 340129, + "nodes": 93793 + }, + "omittedDiagnosticLines": 0, + "repository": "apache/cloudstack", + "secondary": [ + { + "projection": { + "expectedRows": 71, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 71 + }, + "sampleId": 8528735, + "selection": { + "matchedIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl" + ], + "returnedAnchors": [ + { + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl", + "line": 141, + "symbols": [ + "ExternalLoadBalancerDeviceManagerImpl" + ] + } + ], + "selector": "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 21, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 21 + }, + "sampleId": 8537138, + "selection": { + "matchedIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand" + ], + "returnedAnchors": [ + { + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand", + "line": 24, + "symbols": [ + "HandleConfigDriveIsoCommand" + ] + } + ], + "selector": "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 32, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 32 + }, + "sampleId": 8538037, + "selection": { + "matchedIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi" + ], + "returnedAnchors": [ + { + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi", + "line": 63, + "symbols": [ + "BrocadeVcsApi" + ] + } + ], + "selector": "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 6, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 6 + }, + "sampleId": 8539645, + "selection": { + "matchedIds": [ + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse" + ], + "returnedAnchors": [ + { + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse", + "line": 26, + "symbols": [ + "DeploymentPlannersResponse" + ] + } + ], + "selector": "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse", + "status": "resolved" + } + } + ], + "tool": "graphify" + }, + { + "build": { + "exitCode": 0, + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "timedOut": false, + "withinRegisteredGraphBound": true + }, + "captureError": null, + "captureStatus": "completed", + "cases": [ + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8" + ], + "rank": null, + "sampleId": 6374724 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d" + ], + "rank": null, + "sampleId": 6391534 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06" + ], + "rank": null, + "sampleId": 6406137 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6" + ], + "rank": null, + "sampleId": 6413795 + } + ], + "connectivityChecks": [ + { + "id": "sha256:e708d23db81026e47a3683017b15d54b1eaa2c1ca677527dafc26deff961503d", + "rank": 1, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:b84640502ab95f464f9337fffdd1aa7392c167ec6b006e6d3c454998426050a6", + "rank": 2, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:3eba7652c207818ec7caaa3eead51ac5e3c087665d590ddee15eee5f940b8ffe", + "rank": 3, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7451e9761b6ce2a86af5dd8de99b564a8ba3fc72421a7ee65c08221d141ab99b", + "rank": 4, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2620a7c3781366a2d1276ef4b554b77cc8f4f84ee7ac3254250de7af34d93969", + "rank": 5, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a0f264b2c9d2fa65c5cf4880c8c0cecc1555e7ab38d259293480b11b7c2e710b", + "rank": 6, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:bf77b18db427cf4b42a323d3e11a5ead2b27b5a0e65f955984653a2bfabeef41", + "rank": 7, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:cee1e8f5ab5069a690bef638b5159a81d8edf07bc27a8bfaded753df3e6a6a23", + "rank": 8, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:55306c98f61017cbb2a220a64723fa8f09ab59de840f0ab992d36265a717d78d", + "rank": 9, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:74344eda53a7d47347cd9bd13f967e70c3771afd51ee38034ebbf348db80d2d8", + "rank": 10, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:91afa88ca73a1d57f151d5aab5167c510f727ef4af89084b16bd87a2fa2776a6", + "rank": 11, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:774d346f96292c326ecbb42ba284600276f9e0774f018fb44c730602070ca7f2", + "rank": 12, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d08454cf2c5868bba7ea19f84d7e8e8b8407278861ae1ca96d7e8e7623a47281", + "rank": 13, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:20ac60d4cdc9aa29c2943d7482e8e94b6df6ff77f109bbf070ec7a38c2893403", + "rank": 14, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a4b36f85b9ae732ded5738492c19f5b1923e0e772d9f9b16fc6501869f5282e1", + "rank": 15, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:6cb77036c4c8fbc14a9d23519c561cb5c3f468b55b21ef6e19566b31c24971bf", + "rank": 16, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:b3fe27fa216e8438ddccfa03579b4144feb1f867a9f57ab536b9bf8ac6fa1d02", + "rank": 17, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:b3c51212ee203aa6ff27a86e7d44aa55f3b6398471108fdc90af6a3606c5788d", + "rank": 18, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:9401ba758eaf69803275e812d10a4d61d249592cba57e6314616f21f5259c8e8", + "rank": 19, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:edcbe9b6897dd81bb68a9709b23087522fbabfa5ac5a9deb6ae811ddf4276c9f", + "rank": 20, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:f807e1c07ff282e258c15090403807cd10ab391601ddab9e78033e60fd78b155", + "rank": 21, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:32c9771a6001d723382486823a763213098b88e19dd1dd695025556dcb7b4125", + "rank": 22, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:ee9f3c4d4d27137c86977e778f28a929631361e3944b09a0960974d33f85483a", + "rank": 23, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:0e0c6001e76e806395a9a9b38dd20da576525c3a1305aec4cdcdc94d8994f153", + "rank": 24, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7f20223794302f0189dcfdb7886d8f38c6724f999e7340899b3626730aacf114", + "rank": 25, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:724280c5c7fe8eacedef9bcfb993b9bbf47457b517fc1f74e1ec8ccc770b4a05", + "rank": 26, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:65ad1e155299d8c1cf7b9415cc10eb275a94f81808ab562fd9a6094213873107", + "rank": 27, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:40cf47719df3ebf54a53033264c75399e17ddad7a935bbcb374018c43b2b404c", + "rank": 28, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1da175605d586860e51bc85ee9bd4686633fb854d137dfd0c4fcc783293842a5", + "rank": 29, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:db9247db35614e289a6cdd4615731180d5635529056f34d144e1aa05f9a97e6e", + "rank": 30, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:bdba1aab396f78d00a7065136d8136f5d06c89e7ac46275bf235aeb8349891c9", + "rank": 31, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d4ad81e44fc72e2c6954e1cd5c4a04a77f8515ff16731fadb12cb688ee5abb7c", + "rank": 32, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:553ba9ee8afab8528ee471a486c27b57b80448e0e04180623c5612b56389d065", + "rank": 33, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:884b8a6fb733feb2a5913f0628b2f528b5883924eef084e86aa5d4eebbbccd55", + "rank": 34, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:8f5cb44a08875b1e47fed07565b56506d2ae8b8b2ab295e94cee4b197ab39a23", + "rank": 35, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c69536f954af627d483bfd26b20e99a72f10a53ef5cd69b5d69c0ec8fbd2f013", + "rank": 36, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e0689a83391d963ad5b91ef843ca01b2076a4efbf8ee44448d960bb361ad78b6", + "rank": 37, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:328e69d3dc5ff0575f88655ef4c8ed5227d97e607778a07ea5f61b9260505d32", + "rank": 38, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2144a08c2fe8633b6c879681f2726f207c2238a61760184f62780fbc8aec3361", + "rank": 39, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e86b0fc90680d443d42802935829da0048c7cf4e85dc2429251f48708c337837", + "rank": 40, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:3705418aa7840cd0e692b03b35f3b7338e34e7c93434efe5d5a57ef7ae26ed0f", + "rank": 41, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2e44e2ca5c515fbeb4222d90fa4959a9001b2ef2cb9c3ca13bb66ca73633122c", + "rank": 42, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:dd11feaec62906800dd12f296e67a7b3492cfcde88bd30dacbf2916a238f49fe", + "rank": 43, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2d6e8401b36ceb51113a9e12c2eda76842ee3fa0fbeb563ba0426b7b798d4ee0", + "rank": 44, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:43ddf535c64365c6c96965a5729cc2dc5e26c9d8b43547fa67b62ab76be07477", + "rank": 45, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:52aed01d2c5bb5190b3fe6efd3a4024f714f2970db56a254c4a56ee93dfddcda", + "rank": 46, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:515d43b2052b51f6ddd0c2ae6b6e897472e81040888a7cc3f086cfa8a870782b", + "rank": 47, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:12d448dc45726abd47dfdc481c7f01cadce0728dc9703a3e82fc5b8d1f57ef2f", + "rank": 48, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:4920e82df7fb817efdd474384dc9cc042ffe250f81fd99f04a84a56a8aa40ca0", + "rank": 49, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1c909424d4f5af37a74e0f5091631f9f4426346c725cbbfac3462f870b14172a", + "rank": 50, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:4167fc9fbe5397d99fce9e603495437ec2759585ce3f1fcf5f0f21357076ed56", + "rank": 51, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:069bcf281ffa217e26014d054d078dd68b7c332c5f89043d88703f5712a2f110", + "rank": 52, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a34e2c2c097c0e1584b8cdcbaefb87114d3ee8bbc3f3d824e586319b5d8704cd", + "rank": 53, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:81006a81c4064a6437e259811ba1915d026548f9e55c053a1ad56f04c1d2efa3", + "rank": 54, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e7946022aee266e2d86dc590024f07dc6f90ecb62237d027d3547868649c8646", + "rank": 55, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5401dbacf52c3dda2755bbd86ba079ef4ea911c7f3397cb191f0b83d23e4a355", + "rank": 56, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c93aa39a5672eb10c304644f48012b2b1a0f2bc1c8021a423e8e4dcac680bf19", + "rank": 57, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:ad960c23afffc73291728ffc36b3e7535dd1a9ebc6986e1e01056ca8aa8b7598", + "rank": 58, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5482eb5f5b38e03617d265adae8b3de6d682cd7e7249c303739351af3ad7cecc", + "rank": 59, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:0056868a827fc246abb5196f9af85e7771ef93cfeca9aef2568748e4a6237610", + "rank": 60, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:6fe18933cedcea17b94e51019bd24d790c42f92367e750adc6c09181e2e3f5e7", + "rank": 61, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c1555c70b9cdbe93a2df8e9bbf7be66b566da2c47d25fcc88ea60409383c761b", + "rank": 62, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:79d4dae71825770407d2d015e74c615f65f36e4264dfd9f3a161854d4d9172f6", + "rank": 63, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c04f495994a3a6498d744466134c2528ac7e371921dc54f62198271e3f8571b1", + "rank": 64, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:fef9a21a0608ed8f8d6d72c0a1affb936733cc3c2f724dae3385a3de557150c6", + "rank": 65, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:09da78c53b02ef732ec00767705a8d7e302780f87cc123c88979697f1e3c3a96", + "rank": 66, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2683b9c93c202fc1f13e91f7c475fb01f14b625d15c8a302ec152288af084a40", + "rank": 67, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:70c4dbe8c5037d26794dca9dcbca06078b58ca6982863f2f74cf1f9207ab9ccd", + "rank": 68, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1922835f9250dde6db45183b75dc0e77bb5b3880f20b1f4620cf00f5680e15da", + "rank": 69, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1acdcdfa2c098a2d56d6cb2f77461aa5424be3b94be2045cb297e5a5eb4eacdb", + "rank": 70, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:26b9445eadccbc738a827c34d94ed3b4820b36ea50b3724b24c2a60d4c4abd5c", + "rank": 71, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:782e0cd6b50d0dd717c15bdb665e9298227d5b75c47f6489c9f7220f40f6700b", + "rank": 72, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:59666be57da810f7e744c3306acfb059252daa9c0ef410373562be803b4a5074", + "rank": 73, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5301854e28157e543726e5be1b8f7e679fbfc58a205318b3fd3e6e32cea9d2ba", + "rank": 74, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:b2c96c07db3cbb8c76f8aa9d18ca030f08747e929c20f69998382d04be40beee", + "rank": 75, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:81715cb5f7559463bb87e6b72b22eab2fa918bab82b287c82326539f7b3d8afd", + "rank": 76, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c1706fc8f66c30bb51d4631963bde0b36e9f4a5f34a3ff0ae3faf66227209604", + "rank": 77, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:555be66ebc85385891d9bb834536482b809d7f4d0be821df42591f726d5f08a9", + "rank": 78, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:6260d986754766a771e68e20ab1a68afd83deae64bde14b9cf7f0adfed4e16a6", + "rank": 79, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:28e8cb6682a5215d0e948a7ef0f4fdab0a4cb065b028bf31cca35e5054b3a33a", + "rank": 80, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:572a32ed5656052add7dc357f752fe4b5a27256f4cdffa181b0a32d099964368", + "rank": 81, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7f0c2ba27e47866c5663d709cbf0b973fa66c6311075ba9c6484706711a274b0", + "rank": 82, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:be9e97427e2bd09dd5f21601b023225b3244084ea4fa21f7e2caf98b5edd5406", + "rank": 83, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:780cf788cd9144d2ff990eb7bde9effc4d200d098e662bbee6123ab9b3cbe47b", + "rank": 84, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:8255b2e95176dd2dee5b8d4d3b2a85c60ef7e8bfef41d37e9c10dde388c1f18e", + "rank": 85, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:af235bb0b5c3d3af5c83eb3fbc3a742725d059ea8e251baf2eea255f8c3e8002", + "rank": 86, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:32dfc39a27677a81d5dcacd87cf0df87c5c38c3b6bf885c2f50e4ded58b3dd45", + "rank": 87, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:ff8e7d8cb93ce00fd7a0276f4249ad8fa4a1bddcd5a5404cbf3bb4bfc15c0516", + "rank": 88, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a5ae4aacf5a11eb239f566ad2c9586ad1ef882a6c107315fbe026a96c380e820", + "rank": 89, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7c15aadaa0152a60282aacfe9a5f98acc19069a48ec705250949ef7c05c9ba47", + "rank": 90, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d347c5f6948b1d1a2391b401bf250d94b23de72c5b51dbf6a98fcd9d9f4bb817", + "rank": 91, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a0fb2887d7e48ac6c3d58e2c232c70b484056f08540f31913f9b4a0218bbe2ba", + "rank": 92, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:444cd6aa50c27f4099e110fc194e5ef9a90d31e46a88faa3353ed5d9cdf2a5fb", + "rank": 93, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:4dea947c761dd00b49fa13ee403853d3ab4cff263012fac92a4daf57bcee4e5b", + "rank": 94, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5e8a23b3a9dc5de336ed846da8b4c94222de821930fd76a7669e896e642a4eca", + "rank": 95, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:059a811c9a7cd528f570d50749bc8f1cbd39db48a3f97528f75a99dae4d0e1bf", + "rank": 96, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5b059637fb7ae01c546b6af2c8438935600f598662efeced21dac62b6f356501", + "rank": 97, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7e70d4db7cc2eb0eb7aa0cc8932cf38f7ea0ce7886c11e6e20176bbb7d3179b0", + "rank": 98, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:51dd50ef136297b31c010eb4995f10138bc31f38f2921c286c6785e7496370fc", + "rank": 99, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:cef0e0438f1e55e5fb7c73943f4f41bff352edc21fb3734197cba5c3bccef2c5", + "rank": 100, + "summaryMatches": true, + "textRowsMatch": true + } + ], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + } + }, + "extractionDiagnostics": [ + { + "stream": "stderr", + "text": "warning: Compass published a partial graph after omitting 0 nodes and 62 edges; 0 identity collisions quarantined.", + "textTruncated": false + } + ], + "graphConsistency": { + "executionSucceeded": true, + "explicitIdentities": 100, + "hubs": [ + { + "degree": 988, + "degreeMatches": true, + "expectedDegree": 988, + "explicitId": "sha256:e708d23db81026e47a3683017b15d54b1eaa2c1ca677527dafc26deff961503d", + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java", + "id": "sha256:e708d23db81026e47a3683017b15d54b1eaa2c1ca677527dafc26deff961503d", + "identityCandidates": 1, + "label": "IDEWorkbenchMessages", + "line": 34, + "rank": 1, + "sourceAnchorMatches": true + }, + { + "degree": 920, + "degreeMatches": true, + "expectedDegree": 920, + "explicitId": "sha256:b84640502ab95f464f9337fffdd1aa7392c167ec6b006e6d3c454998426050a6", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/PlatformUI.java", + "id": "sha256:b84640502ab95f464f9337fffdd1aa7392c167ec6b006e6d3c454998426050a6", + "identityCandidates": 1, + "label": ".getWorkbench()", + "line": 92, + "rank": 2, + "sourceAnchorMatches": true + }, + { + "degree": 904, + "degreeMatches": true, + "expectedDegree": 904, + "explicitId": "sha256:3eba7652c207818ec7caaa3eead51ac5e3c087665d590ddee15eee5f940b8ffe", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java", + "id": "sha256:3eba7652c207818ec7caaa3eead51ac5e3c087665d590ddee15eee5f940b8ffe", + "identityCandidates": 1, + "label": "WorkbenchMessages", + "line": 33, + "rank": 3, + "sourceAnchorMatches": true + }, + { + "degree": 891, + "degreeMatches": true, + "expectedDegree": 891, + "explicitId": "sha256:7451e9761b6ce2a86af5dd8de99b564a8ba3fc72421a7ee65c08221d141ab99b", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchWindow.java", + "id": "sha256:7451e9761b6ce2a86af5dd8de99b564a8ba3fc72421a7ee65c08221d141ab99b", + "identityCandidates": 1, + "label": "IWorkbenchWindow", + "line": 59, + "rank": 4, + "sourceAnchorMatches": true + }, + { + "degree": 725, + "degreeMatches": true, + "expectedDegree": 725, + "explicitId": "sha256:2620a7c3781366a2d1276ef4b554b77cc8f4f84ee7ac3254250de7af34d93969", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/ImageDescriptor.java", + "id": "sha256:2620a7c3781366a2d1276ef4b554b77cc8f4f84ee7ac3254250de7af34d93969", + "identityCandidates": 1, + "label": "ImageDescriptor", + "line": 59, + "rank": 5, + "sourceAnchorMatches": true + }, + { + "degree": 706, + "degreeMatches": true, + "expectedDegree": 706, + "explicitId": "sha256:a0f264b2c9d2fa65c5cf4880c8c0cecc1555e7ab38d259293480b11b7c2e710b", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/engine/CSSEngine.java", + "id": "sha256:a0f264b2c9d2fa65c5cf4880c8c0cecc1555e7ab38d259293480b11b7c2e710b", + "identityCandidates": 1, + "label": "CSSEngine", + "line": 41, + "rank": 6, + "sourceAnchorMatches": true + }, + { + "degree": 682, + "degreeMatches": true, + "expectedDegree": 682, + "explicitId": "sha256:bf77b18db427cf4b42a323d3e11a5ead2b27b5a0e65f955984653a2bfabeef41", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/PlatformUI.java", + "id": "sha256:bf77b18db427cf4b42a323d3e11a5ead2b27b5a0e65f955984653a2bfabeef41", + "identityCandidates": 1, + "label": "PlatformUI", + "line": 38, + "rank": 7, + "sourceAnchorMatches": true + }, + { + "degree": 663, + "degreeMatches": true, + "expectedDegree": 663, + "explicitId": "sha256:cee1e8f5ab5069a690bef638b5159a81d8edf07bc27a8bfaded753df3e6a6a23", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuPackageImpl.java", + "id": "sha256:cee1e8f5ab5069a690bef638b5159a81d8edf07bc27a8bfaded753df3e6a6a23", + "identityCandidates": 1, + "label": "MenuPackageImpl", + "line": 71, + "rank": 8, + "sourceAnchorMatches": true + }, + { + "degree": 637, + "degreeMatches": true, + "expectedDegree": 637, + "explicitId": "sha256:55306c98f61017cbb2a220a64723fa8f09ab59de840f0ab992d36265a717d78d", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/IObservableValue.java", + "id": "sha256:55306c98f61017cbb2a220a64723fa8f09ab59de840f0ab992d36265a717d78d", + "identityCandidates": 1, + "label": "IObservableValue", + "line": 38, + "rank": 9, + "sourceAnchorMatches": true + }, + { + "degree": 610, + "degreeMatches": true, + "expectedDegree": 610, + "explicitId": "sha256:74344eda53a7d47347cd9bd13f967e70c3771afd51ee38034ebbf348db80d2d8", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPage.java", + "id": "sha256:74344eda53a7d47347cd9bd13f967e70c3771afd51ee38034ebbf348db80d2d8", + "identityCandidates": 1, + "label": "IWorkbenchPage", + "line": 46, + "rank": 10, + "sourceAnchorMatches": true + }, + { + "degree": 609, + "degreeMatches": true, + "expectedDegree": 609, + "explicitId": "sha256:91afa88ca73a1d57f151d5aab5167c510f727ef4af89084b16bd87a2fa2776a6", + "file": "tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java", + "id": "sha256:91afa88ca73a1d57f151d5aab5167c510f727ef4af89084b16bd87a2fa2776a6", + "identityCandidates": 1, + "label": "EPartServiceTest", + "line": 56, + "rank": 11, + "sourceAnchorMatches": true + }, + { + "degree": 602, + "degreeMatches": true, + "expectedDegree": 602, + "explicitId": "sha256:774d346f96292c326ecbb42ba284600276f9e0774f018fb44c730602070ca7f2", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MUIElement.java", + "id": "sha256:774d346f96292c326ecbb42ba284600276f9e0774f018fb44c730602070ca7f2", + "identityCandidates": 1, + "label": "MUIElement", + "line": 54, + "rank": 12, + "sourceAnchorMatches": true + }, + { + "degree": 563, + "degreeMatches": true, + "expectedDegree": 563, + "explicitId": "sha256:d08454cf2c5868bba7ea19f84d7e8e8b8407278861ae1ca96d7e8e7623a47281", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPart.java", + "id": "sha256:d08454cf2c5868bba7ea19f84d7e8e8b8407278861ae1ca96d7e8e7623a47281", + "identityCandidates": 1, + "label": "IWorkbenchPart", + "line": 99, + "rank": 13, + "sourceAnchorMatches": true + }, + { + "degree": 556, + "degreeMatches": true, + "expectedDegree": 556, + "explicitId": "sha256:20ac60d4cdc9aa29c2943d7482e8e94b6df6ff77f109bbf070ec7a38c2893403", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/Realm.java", + "id": "sha256:20ac60d4cdc9aa29c2943d7482e8e94b6df6ff77f109bbf070ec7a38c2893403", + "identityCandidates": 1, + "label": "Realm", + "line": 84, + "rank": 14, + "sourceAnchorMatches": true + }, + { + "degree": 517, + "degreeMatches": true, + "expectedDegree": 517, + "explicitId": "sha256:a4b36f85b9ae732ded5738492c19f5b1923e0e772d9f9b16fc6501869f5282e1", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IMemento.java", + "id": "sha256:a4b36f85b9ae732ded5738492c19f5b1923e0e772d9f9b16fc6501869f5282e1", + "identityCandidates": 1, + "label": "IMemento", + "line": 57, + "rank": 15, + "sourceAnchorMatches": true + }, + { + "degree": 509, + "degreeMatches": true, + "expectedDegree": 509, + "explicitId": "sha256:6cb77036c4c8fbc14a9d23519c561cb5c3f468b55b21ef6e19566b31c24971bf", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/IStructuredSelection.java", + "id": "sha256:6cb77036c4c8fbc14a9d23519c561cb5c3f468b55b21ef6e19566b31c24971bf", + "identityCandidates": 1, + "label": "IStructuredSelection", + "line": 22, + "rank": 16, + "sourceAnchorMatches": true + }, + { + "degree": 507, + "degreeMatches": true, + "expectedDegree": 507, + "explicitId": "sha256:b3fe27fa216e8438ddccfa03579b4144feb1f867a9f57ab536b9bf8ac6fa1d02", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/Viewer.java", + "id": "sha256:b3fe27fa216e8438ddccfa03579b4144feb1f867a9f57ab536b9bf8ac6fa1d02", + "identityCandidates": 1, + "label": "Viewer", + "line": 43, + "rank": 17, + "sourceAnchorMatches": true + }, + { + "degree": 503, + "degreeMatches": true, + "expectedDegree": 503, + "explicitId": "sha256:b3c51212ee203aa6ff27a86e7d44aa55f3b6398471108fdc90af6a3606c5788d", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/impl/BasicPackageImpl.java", + "id": "sha256:b3c51212ee203aa6ff27a86e7d44aa55f3b6398471108fdc90af6a3606c5788d", + "identityCandidates": 1, + "label": "BasicPackageImpl", + "line": 60, + "rank": 18, + "sourceAnchorMatches": true + }, + { + "degree": 485, + "degreeMatches": true, + "expectedDegree": 485, + "explicitId": "sha256:9401ba758eaf69803275e812d10a4d61d249592cba57e6314616f21f5259c8e8", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredSelection.java", + "id": "sha256:9401ba758eaf69803275e812d10a4d61d249592cba57e6314616f21f5259c8e8", + "identityCandidates": 1, + "label": "StructuredSelection", + "line": 33, + "rank": 19, + "sourceAnchorMatches": true + }, + { + "degree": 464, + "degreeMatches": true, + "expectedDegree": 464, + "explicitId": "sha256:edcbe9b6897dd81bb68a9709b23087522fbabfa5ac5a9deb6ae811ddf4276c9f", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelection.java", + "id": "sha256:edcbe9b6897dd81bb68a9709b23087522fbabfa5ac5a9deb6ae811ddf4276c9f", + "identityCandidates": 1, + "label": "ISelection", + "line": 23, + "rank": 20, + "sourceAnchorMatches": true + }, + { + "degree": 438, + "degreeMatches": true, + "expectedDegree": 438, + "explicitId": "sha256:f807e1c07ff282e258c15090403807cd10ab391601ddab9e78033e60fd78b155", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IAction.java", + "id": "sha256:f807e1c07ff282e258c15090403807cd10ab391601ddab9e78033e60fd78b155", + "identityCandidates": 1, + "label": "IAction", + "line": 47, + "rank": 21, + "sourceAnchorMatches": true + }, + { + "degree": 427, + "degreeMatches": true, + "expectedDegree": 427, + "explicitId": "sha256:32c9771a6001d723382486823a763213098b88e19dd1dd695025556dcb7b4125", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/Action.java", + "id": "sha256:32c9771a6001d723382486823a763213098b88e19dd1dd695025556dcb7b4125", + "identityCandidates": 1, + "label": "Action", + "line": 29, + "rank": 22, + "sourceAnchorMatches": true + }, + { + "degree": 421, + "degreeMatches": true, + "expectedDegree": 421, + "explicitId": "sha256:ee9f3c4d4d27137c86977e778f28a929631361e3944b09a0960974d33f85483a", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MPart.java", + "id": "sha256:ee9f3c4d4d27137c86977e778f28a929631361e3944b09a0960974d33f85483a", + "identityCandidates": 1, + "label": "MPart", + "line": 56, + "rank": 23, + "sourceAnchorMatches": true + }, + { + "degree": 413, + "degreeMatches": true, + "expectedDegree": 413, + "explicitId": "sha256:0e0c6001e76e806395a9a9b38dd20da576525c3a1305aec4cdcdc94d8994f153", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/MenuManager.java", + "id": "sha256:0e0c6001e76e806395a9a9b38dd20da576525c3a1305aec4cdcdc94d8994f153", + "identityCandidates": 1, + "label": "MenuManager", + "line": 48, + "rank": 24, + "sourceAnchorMatches": true + }, + { + "degree": 404, + "degreeMatches": true, + "expectedDegree": 404, + "explicitId": "sha256:7f20223794302f0189dcfdb7886d8f38c6724f999e7340899b3626730aacf114", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableViewer.java", + "id": "sha256:7f20223794302f0189dcfdb7886d8f38c6724f999e7340899b3626730aacf114", + "identityCandidates": 1, + "label": "TableViewer", + "line": 69, + "rank": 25, + "sourceAnchorMatches": true + }, + { + "degree": 394, + "degreeMatches": true, + "expectedDegree": 394, + "explicitId": "sha256:724280c5c7fe8eacedef9bcfb993b9bbf47457b517fc1f74e1ec8ccc770b4a05", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/IWorkbenchRegistryConstants.java", + "id": "sha256:724280c5c7fe8eacedef9bcfb993b9bbf47457b517fc1f74e1ec8ccc770b4a05", + "identityCandidates": 1, + "label": "IWorkbenchRegistryConstants", + "line": 29, + "rank": 26, + "sourceAnchorMatches": true + }, + { + "degree": 389, + "degreeMatches": true, + "expectedDegree": 389, + "explicitId": "sha256:65ad1e155299d8c1cf7b9415cc10eb275a94f81808ab562fd9a6094213873107", + "file": "tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/UITestCase.java", + "id": "sha256:65ad1e155299d8c1cf7b9415cc10eb275a94f81808ab562fd9a6094213873107", + "identityCandidates": 1, + "label": "UITestCase", + "line": 49, + "rank": 27, + "sourceAnchorMatches": true + }, + { + "degree": 386, + "degreeMatches": true, + "expectedDegree": 386, + "explicitId": "sha256:40cf47719df3ebf54a53033264c75399e17ddad7a935bbcb374018c43b2b404c", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ExecutionEvent.java", + "id": "sha256:40cf47719df3ebf54a53033264c75399e17ddad7a935bbcb374018c43b2b404c", + "identityCandidates": 1, + "label": "ExecutionEvent", + "line": 36, + "rank": 28, + "sourceAnchorMatches": true + }, + { + "degree": 364, + "degreeMatches": true, + "expectedDegree": 364, + "explicitId": "sha256:1da175605d586860e51bc85ee9bd4686633fb854d137dfd0c4fcc783293842a5", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java", + "id": "sha256:1da175605d586860e51bc85ee9bd4686633fb854d137dfd0c4fcc783293842a5", + "identityCandidates": 1, + "label": "WorkbenchPlugin", + "line": 111, + "rank": 29, + "sourceAnchorMatches": true + }, + { + "degree": 363, + "degreeMatches": true, + "expectedDegree": 363, + "explicitId": "sha256:db9247db35614e289a6cdd4615731180d5635529056f34d144e1aa05f9a97e6e", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeViewer.java", + "id": "sha256:db9247db35614e289a6cdd4615731180d5635529056f34d144e1aa05f9a97e6e", + "identityCandidates": 1, + "label": "TreeViewer", + "line": 69, + "rank": 30, + "sourceAnchorMatches": true + }, + { + "degree": 362, + "degreeMatches": true, + "expectedDegree": 362, + "explicitId": "sha256:bdba1aab396f78d00a7065136d8136f5d06c89e7ac46275bf235aeb8349891c9", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java", + "id": "sha256:bdba1aab396f78d00a7065136d8136f5d06c89e7ac46275bf235aeb8349891c9", + "identityCandidates": 1, + "label": "WorkbenchPage", + "line": 197, + "rank": 31, + "sourceAnchorMatches": true + }, + { + "degree": 345, + "degreeMatches": true, + "expectedDegree": 345, + "explicitId": "sha256:d4ad81e44fc72e2c6954e1cd5c4a04a77f8515ff16731fadb12cb688ee5abb7c", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbench.java", + "id": "sha256:d4ad81e44fc72e2c6954e1cd5c4a04a77f8515ff16731fadb12cb688ee5abb7c", + "identityCandidates": 1, + "label": "IWorkbench", + "line": 86, + "rank": 32, + "sourceAnchorMatches": true + }, + { + "degree": 342, + "degreeMatches": true, + "expectedDegree": 342, + "explicitId": "sha256:553ba9ee8afab8528ee471a486c27b57b80448e0e04180623c5612b56389d065", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/IObservable.java", + "id": "sha256:553ba9ee8afab8528ee471a486c27b57b80448e0e04180623c5612b56389d065", + "identityCandidates": 1, + "label": "IObservable", + "line": 36, + "rank": 33, + "sourceAnchorMatches": true + }, + { + "degree": 323, + "degreeMatches": true, + "expectedDegree": 323, + "explicitId": "sha256:884b8a6fb733feb2a5913f0628b2f528b5883924eef084e86aa5d4eebbbccd55", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/IPropertyChangeListener.java", + "id": "sha256:884b8a6fb733feb2a5913f0628b2f528b5883924eef084e86aa5d4eebbbccd55", + "identityCandidates": 1, + "label": "IPropertyChangeListener", + "line": 37, + "rank": 34, + "sourceAnchorMatches": true + }, + { + "degree": 322, + "degreeMatches": true, + "expectedDegree": 322, + "explicitId": "sha256:8f5cb44a08875b1e47fed07565b56506d2ae8b8b2ab295e94cee4b197ab39a23", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorPart.java", + "id": "sha256:8f5cb44a08875b1e47fed07565b56506d2ae8b8b2ab295e94cee4b197ab39a23", + "identityCandidates": 1, + "label": "IEditorPart", + "line": 55, + "rank": 35, + "sourceAnchorMatches": true + }, + { + "degree": 320, + "degreeMatches": true, + "expectedDegree": 320, + "explicitId": "sha256:c69536f954af627d483bfd26b20e99a72f10a53ef5cd69b5d69c0ec8fbd2f013", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java", + "id": "sha256:c69536f954af627d483bfd26b20e99a72f10a53ef5cd69b5d69c0ec8fbd2f013", + "identityCandidates": 1, + "label": ".getDefault()", + "line": 462, + "rank": 36, + "sourceAnchorMatches": true + }, + { + "degree": 316, + "degreeMatches": true, + "expectedDegree": 316, + "explicitId": "sha256:e0689a83391d963ad5b91ef843ca01b2076a4efbf8ee44448d960bb361ad78b6", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IContributionItem.java", + "id": "sha256:e0689a83391d963ad5b91ef843ca01b2076a4efbf8ee44448d960bb361ad78b6", + "identityCandidates": 1, + "label": "IContributionItem", + "line": 42, + "rank": 37, + "sourceAnchorMatches": true + }, + { + "degree": 312, + "degreeMatches": true, + "expectedDegree": 312, + "explicitId": "sha256:328e69d3dc5ff0575f88655ef4c8ed5227d97e607778a07ea5f61b9260505d32", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java", + "id": "sha256:328e69d3dc5ff0575f88655ef4c8ed5227d97e607778a07ea5f61b9260505d32", + "identityCandidates": 1, + "label": "StructuredViewer", + "line": 65, + "rank": 38, + "sourceAnchorMatches": true + }, + { + "degree": 308, + "degreeMatches": true, + "expectedDegree": 308, + "explicitId": "sha256:2144a08c2fe8633b6c879681f2726f207c2238a61760184f62780fbc8aec3361", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ParameterizedCommand.java", + "id": "sha256:2144a08c2fe8633b6c879681f2726f207c2238a61760184f62780fbc8aec3361", + "identityCandidates": 1, + "label": "ParameterizedCommand", + "line": 41, + "rank": 39, + "sourceAnchorMatches": true + }, + { + "degree": 305, + "degreeMatches": true, + "expectedDegree": 305, + "explicitId": "sha256:e86b0fc90680d443d42802935829da0048c7cf4e85dc2429251f48708c337837", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/IObservableList.java", + "id": "sha256:e86b0fc90680d443d42802935829da0048c7cf4e85dc2429251f48708c337837", + "identityCandidates": 1, + "label": "IObservableList", + "line": 44, + "rank": 40, + "sourceAnchorMatches": true + }, + { + "degree": 304, + "degreeMatches": true, + "expectedDegree": 304, + "explicitId": "sha256:3705418aa7840cd0e692b03b35f3b7338e34e7c93434efe5d5a57ef7ae26ed0f", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplication.java", + "id": "sha256:3705418aa7840cd0e692b03b35f3b7338e34e7c93434efe5d5a57ef7ae26ed0f", + "identityCandidates": 1, + "label": "MApplication", + "line": 70, + "rank": 41, + "sourceAnchorMatches": true + }, + { + "degree": 286, + "degreeMatches": true, + "expectedDegree": 286, + "explicitId": "sha256:2e44e2ca5c515fbeb4222d90fa4959a9001b2ef2cb9c3ca13bb66ca73633122c", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkingSet.java", + "id": "sha256:2e44e2ca5c515fbeb4222d90fa4959a9001b2ef2cb9c3ca13bb66ca73633122c", + "identityCandidates": 1, + "label": "IWorkingSet", + "line": 29, + "rank": 42, + "sourceAnchorMatches": true + }, + { + "degree": 284, + "degreeMatches": true, + "expectedDegree": 284, + "explicitId": "sha256:dd11feaec62906800dd12f296e67a7b3492cfcde88bd30dacbf2916a238f49fe", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/impl/UiPackageImpl.java", + "id": "sha256:dd11feaec62906800dd12f296e67a7b3492cfcde88bd30dacbf2916a238f49fe", + "identityCandidates": 1, + "label": "UiPackageImpl", + "line": 63, + "rank": 43, + "sourceAnchorMatches": true + }, + { + "degree": 283, + "degreeMatches": true, + "expectedDegree": 283, + "explicitId": "sha256:2d6e8401b36ceb51113a9e12c2eda76842ee3fa0fbeb563ba0426b7b798d4ee0", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java", + "id": "sha256:2d6e8401b36ceb51113a9e12c2eda76842ee3fa0fbeb563ba0426b7b798d4ee0", + "identityCandidates": 1, + "label": "WorkbenchWindow", + "line": 209, + "rank": 44, + "sourceAnchorMatches": true + }, + { + "degree": 279, + "degreeMatches": true, + "expectedDegree": 279, + "explicitId": "sha256:43ddf535c64365c6c96965a5729cc2dc5e26c9d8b43547fa67b62ab76be07477", + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java", + "id": "sha256:43ddf535c64365c6c96965a5729cc2dc5e26c9d8b43547fa67b62ab76be07477", + "identityCandidates": 1, + "label": "MarkerMessages", + "line": 23, + "rank": 45, + "sourceAnchorMatches": true + }, + { + "degree": 270, + "degreeMatches": true, + "expectedDegree": 270, + "explicitId": "sha256:52aed01d2c5bb5190b3fe6efd3a4024f714f2970db56a254c4a56ee93dfddcda", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java", + "id": "sha256:52aed01d2c5bb5190b3fe6efd3a4024f714f2970db56a254c4a56ee93dfddcda", + "identityCandidates": 1, + "label": "IPreferenceStore", + "line": 59, + "rank": 46, + "sourceAnchorMatches": true + }, + { + "degree": 269, + "degreeMatches": true, + "expectedDegree": 269, + "explicitId": "sha256:515d43b2052b51f6ddd0c2ae6b6e897472e81040888a7cc3f086cfa8a870782b", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/set/IObservableSet.java", + "id": "sha256:515d43b2052b51f6ddd0c2ae6b6e897472e81040888a7cc3f086cfa8a870782b", + "identityCandidates": 1, + "label": "IObservableSet", + "line": 43, + "rank": 47, + "sourceAnchorMatches": true + }, + { + "degree": 268, + "degreeMatches": true, + "expectedDegree": 268, + "explicitId": "sha256:12d448dc45726abd47dfdc481c7f01cadce0728dc9703a3e82fc5b8d1f57ef2f", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IMenuManager.java", + "id": "sha256:12d448dc45726abd47dfdc481c7f01cadce0728dc9703a3e82fc5b8d1f57ef2f", + "identityCandidates": 1, + "label": "IMenuManager", + "line": 32, + "rank": 48, + "sourceAnchorMatches": true + }, + { + "degree": 259, + "degreeMatches": true, + "expectedDegree": 259, + "explicitId": "sha256:4920e82df7fb817efdd474384dc9cc042ffe250f81fd99f04a84a56a8aa40ca0", + "file": "bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/EModelService.java", + "id": "sha256:4920e82df7fb817efdd474384dc9cc042ffe250f81fd99f04a84a56a8aa40ca0", + "identityCandidates": 1, + "label": "EModelService", + "line": 41, + "rank": 49, + "sourceAnchorMatches": true + }, + { + "degree": 258, + "degreeMatches": true, + "expectedDegree": 258, + "explicitId": "sha256:1c909424d4f5af37a74e0f5091631f9f4426346c725cbbfac3462f870b14172a", + "file": "tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java", + "id": "sha256:1c909424d4f5af37a74e0f5091631f9f4426346c725cbbfac3462f870b14172a", + "identityCandidates": 1, + "label": ".testSaveAll()", + "line": 4043, + "rank": 50, + "sourceAnchorMatches": true + }, + { + "degree": 256, + "degreeMatches": true, + "expectedDegree": 256, + "explicitId": "sha256:4167fc9fbe5397d99fce9e603495437ec2759585ce3f1fcf5f0f21357076ed56", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java", + "id": "sha256:4167fc9fbe5397d99fce9e603495437ec2759585ce3f1fcf5f0f21357076ed56", + "identityCandidates": 1, + "label": "Workbench", + "line": 279, + "rank": 51, + "sourceAnchorMatches": true + }, + { + "degree": 252, + "degreeMatches": true, + "expectedDegree": 252, + "explicitId": "sha256:069bcf281ffa217e26014d054d078dd68b7c332c5f89043d88703f5712a2f110", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MWindow.java", + "id": "sha256:069bcf281ffa217e26014d054d078dd68b7c332c5f89043d88703f5712a2f110", + "identityCandidates": 1, + "label": "MWindow", + "line": 56, + "rank": 52, + "sourceAnchorMatches": true + }, + { + "degree": 252, + "degreeMatches": true, + "expectedDegree": 252, + "explicitId": "sha256:a34e2c2c097c0e1584b8cdcbaefb87114d3ee8bbc3f3d824e586319b5d8704cd", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorInput.java", + "id": "sha256:a34e2c2c097c0e1584b8cdcbaefb87114d3ee8bbc3f3d824e586319b5d8704cd", + "identityCandidates": 1, + "label": "IEditorInput", + "line": 54, + "rank": 53, + "sourceAnchorMatches": true + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "explicitId": "sha256:81006a81c4064a6437e259811ba1915d026548f9e55c053a1ad56f04c1d2efa3", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSS2PropertiesImpl.java", + "id": "sha256:81006a81c4064a6437e259811ba1915d026548f9e55c053a1ad56f04c1d2efa3", + "identityCandidates": 1, + "label": "CSS2PropertiesImpl", + "line": 24, + "rank": 54, + "sourceAnchorMatches": true + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "explicitId": "sha256:e7946022aee266e2d86dc590024f07dc6f90ecb62237d027d3547868649c8646", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/MessageDialog.java", + "id": "sha256:e7946022aee266e2d86dc590024f07dc6f90ecb62237d027d3547868649c8646", + "identityCandidates": 1, + "label": "MessageDialog", + "line": 40, + "rank": 55, + "sourceAnchorMatches": true + }, + { + "degree": 242, + "degreeMatches": true, + "expectedDegree": 242, + "explicitId": "sha256:5401dbacf52c3dda2755bbd86ba079ef4ea911c7f3397cb191f0b83d23e4a355", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/LabelProvider.java", + "id": "sha256:5401dbacf52c3dda2755bbd86ba079ef4ea911c7f3397cb191f0b83d23e4a355", + "identityCandidates": 1, + "label": "LabelProvider", + "line": 32, + "rank": 56, + "sourceAnchorMatches": true + }, + { + "degree": 227, + "degreeMatches": true, + "expectedDegree": 227, + "explicitId": "sha256:c93aa39a5672eb10c304644f48012b2b1a0f2bc1c8021a423e8e4dcac680bf19", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchWindow.java", + "id": "sha256:c93aa39a5672eb10c304644f48012b2b1a0f2bc1c8021a423e8e4dcac680bf19", + "identityCandidates": 1, + "label": ".getActivePage()", + "line": 78, + "rank": 57, + "sourceAnchorMatches": true + }, + { + "degree": 224, + "degreeMatches": true, + "expectedDegree": 224, + "explicitId": "sha256:ad960c23afffc73291728ffc36b3e7535dd1a9ebc6986e1e01056ca8aa8b7598", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/Dialog.java", + "id": "sha256:ad960c23afffc73291728ffc36b3e7535dd1a9ebc6986e1e01056ca8aa8b7598", + "identityCandidates": 1, + "label": "Dialog", + "line": 65, + "rank": 58, + "sourceAnchorMatches": true + }, + { + "degree": 222, + "degreeMatches": true, + "expectedDegree": 222, + "explicitId": "sha256:5482eb5f5b38e03617d265adae8b3de6d682cd7e7249c303739351af3ad7cecc", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ITreeContentProvider.java", + "id": "sha256:5482eb5f5b38e03617d265adae8b3de6d682cd7e7249c303739351af3ad7cecc", + "identityCandidates": 1, + "label": "ITreeContentProvider", + "line": 22, + "rank": 59, + "sourceAnchorMatches": true + }, + { + "degree": 221, + "degreeMatches": true, + "expectedDegree": 221, + "explicitId": "sha256:0056868a827fc246abb5196f9af85e7771ef93cfeca9aef2568748e4a6237610", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/JFaceResources.java", + "id": "sha256:0056868a827fc246abb5196f9af85e7771ef93cfeca9aef2568748e4a6237610", + "identityCandidates": 1, + "label": "JFaceResources", + "line": 57, + "rank": 60, + "sourceAnchorMatches": true + }, + { + "degree": 221, + "degreeMatches": true, + "expectedDegree": 221, + "explicitId": "sha256:6fe18933cedcea17b94e51019bd24d790c42f92367e750adc6c09181e2e3f5e7", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/AbstractHandler.java", + "id": "sha256:6fe18933cedcea17b94e51019bd24d790c42f92367e750adc6c09181e2e3f5e7", + "identityCandidates": 1, + "label": "AbstractHandler", + "line": 31, + "rank": 61, + "sourceAnchorMatches": true + }, + { + "degree": 221, + "degreeMatches": true, + "expectedDegree": 221, + "explicitId": "sha256:c1555c70b9cdbe93a2df8e9bbf7be66b566da2c47d25fcc88ea60409383c761b", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPerspectiveDescriptor.java", + "id": "sha256:c1555c70b9cdbe93a2df8e9bbf7be66b566da2c47d25fcc88ea60409383c761b", + "identityCandidates": 1, + "label": "IPerspectiveDescriptor", + "line": 49, + "rank": 62, + "sourceAnchorMatches": true + }, + { + "degree": 220, + "degreeMatches": true, + "expectedDegree": 220, + "explicitId": "sha256:79d4dae71825770407d2d015e74c615f65f36e4264dfd9f3a161854d4d9172f6", + "file": "bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/helpers/URI.java", + "id": "sha256:79d4dae71825770407d2d015e74c615f65f36e4264dfd9f3a161854d4d9172f6", + "identityCandidates": 1, + "label": "URI", + "line": 141, + "rank": 63, + "sourceAnchorMatches": true + }, + { + "degree": 209, + "degreeMatches": true, + "expectedDegree": 209, + "explicitId": "sha256:c04f495994a3a6498d744466134c2528ac7e371921dc54f62198271e3f8571b1", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java", + "id": "sha256:c04f495994a3a6498d744466134c2528ac7e371921dc54f62198271e3f8571b1", + "identityCandidates": 1, + "label": "WizardDialog", + "line": 85, + "rank": 64, + "sourceAnchorMatches": true + }, + { + "degree": 209, + "degreeMatches": true, + "expectedDegree": 209, + "explicitId": "sha256:fef9a21a0608ed8f8d6d72c0a1affb936733cc3c2f724dae3385a3de557150c6", + "file": "bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/E4Workbench.java", + "id": "sha256:fef9a21a0608ed8f8d6d72c0a1affb936733cc3c2f724dae3385a3de557150c6", + "identityCandidates": 1, + "label": "E4Workbench", + "line": 42, + "rank": 65, + "sourceAnchorMatches": true + }, + { + "degree": 208, + "degreeMatches": true, + "expectedDegree": 208, + "explicitId": "sha256:09da78c53b02ef732ec00767705a8d7e302780f87cc123c88979697f1e3c3a96", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/PartInitException.java", + "id": "sha256:09da78c53b02ef732ec00767705a8d7e302780f87cc123c88979697f1e3c3a96", + "identityCandidates": 1, + "label": "PartInitException", + "line": 26, + "rank": 66, + "sourceAnchorMatches": true + }, + { + "degree": 207, + "degreeMatches": true, + "expectedDegree": 207, + "explicitId": "sha256:2683b9c93c202fc1f13e91f7c475fb01f14b625d15c8a302ec152288af084a40", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/CellEditor.java", + "id": "sha256:2683b9c93c202fc1f13e91f7c475fb01f14b625d15c8a302ec152288af084a40", + "identityCandidates": 1, + "label": "CellEditor", + "line": 45, + "rank": 67, + "sourceAnchorMatches": true + }, + { + "degree": 206, + "degreeMatches": true, + "expectedDegree": 206, + "explicitId": "sha256:70c4dbe8c5037d26794dca9dcbca06078b58ca6982863f2f74cf1f9207ab9ccd", + "file": "bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/EModelService.java", + "id": "sha256:70c4dbe8c5037d26794dca9dcbca06078b58ca6982863f2f74cf1f9207ab9ccd", + "identityCandidates": 1, + "label": ".createModelElement()", + "line": 131, + "rank": 68, + "sourceAnchorMatches": true + }, + { + "degree": 204, + "degreeMatches": true, + "expectedDegree": 204, + "explicitId": "sha256:1922835f9250dde6db45183b75dc0e77bb5b3880f20b1f4620cf00f5680e15da", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ExecutionException.java", + "id": "sha256:1922835f9250dde6db45183b75dc0e77bb5b3880f20b1f4620cf00f5680e15da", + "identityCandidates": 1, + "label": "ExecutionException", + "line": 26, + "rank": 69, + "sourceAnchorMatches": true + }, + { + "degree": 202, + "degreeMatches": true, + "expectedDegree": 202, + "explicitId": "sha256:1acdcdfa2c098a2d56d6cb2f77461aa5424be3b94be2045cb297e5a5eb4eacdb", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ActionFactory.java", + "id": "sha256:1acdcdfa2c098a2d56d6cb2f77461aa5424be3b94be2045cb297e5a5eb4eacdb", + "identityCandidates": 1, + "label": "ActionFactory", + "line": 59, + "rank": 70, + "sourceAnchorMatches": true + }, + { + "degree": 202, + "degreeMatches": true, + "expectedDegree": 202, + "explicitId": "sha256:26b9445eadccbc738a827c34d94ed3b4820b36ea50b3724b24c2a60d4c4abd5c", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/commands/impl/CommandsPackageImpl.java", + "id": "sha256:26b9445eadccbc738a827c34d94ed3b4820b36ea50b3724b24c2a60d4c4abd5c", + "identityCandidates": 1, + "label": "CommandsPackageImpl", + "line": 58, + "rank": 71, + "sourceAnchorMatches": true + }, + { + "degree": 200, + "degreeMatches": true, + "expectedDegree": 200, + "explicitId": "sha256:782e0cd6b50d0dd717c15bdb665e9298227d5b75c47f6489c9f7220f40f6700b", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/IValueProperty.java", + "id": "sha256:782e0cd6b50d0dd717c15bdb665e9298227d5b75c47f6489c9f7220f40f6700b", + "identityCandidates": 1, + "label": "IValueProperty", + "line": 47, + "rank": 72, + "sourceAnchorMatches": true + }, + { + "degree": 198, + "degreeMatches": true, + "expectedDegree": 198, + "explicitId": "sha256:59666be57da810f7e744c3306acfb059252daa9c0ef410373562be803b4a5074", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogConstants.java", + "id": "sha256:59666be57da810f7e744c3306acfb059252daa9c0ef410373562be803b4a5074", + "identityCandidates": 1, + "label": "IDialogConstants", + "line": 45, + "rank": 73, + "sourceAnchorMatches": true + }, + { + "degree": 197, + "degreeMatches": true, + "expectedDegree": 197, + "explicitId": "sha256:5301854e28157e543726e5be1b8f7e679fbfc58a205318b3fd3e6e32cea9d2ba", + "file": "bundles/org.eclipse.core.databinding/src/org/eclipse/core/databinding/DataBindingContext.java", + "id": "sha256:5301854e28157e543726e5be1b8f7e679fbfc58a205318b3fd3e6e32cea9d2ba", + "identityCandidates": 1, + "label": "DataBindingContext", + "line": 58, + "rank": 74, + "sourceAnchorMatches": true + }, + { + "degree": 196, + "degreeMatches": true, + "expectedDegree": 196, + "explicitId": "sha256:b2c96c07db3cbb8c76f8aa9d18ca030f08747e929c20f69998382d04be40beee", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java", + "id": "sha256:b2c96c07db3cbb8c76f8aa9d18ca030f08747e929c20f69998382d04be40beee", + "identityCandidates": 1, + "label": "AbstractTreeViewer", + "line": 73, + "rank": 75, + "sourceAnchorMatches": true + }, + { + "degree": 195, + "degreeMatches": true, + "expectedDegree": 195, + "explicitId": "sha256:81715cb5f7559463bb87e6b72b22eab2fa918bab82b287c82326539f7b3d8afd", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISharedImages.java", + "id": "sha256:81715cb5f7559463bb87e6b72b22eab2fa918bab82b287c82326539f7b3d8afd", + "identityCandidates": 1, + "label": "ISharedImages", + "line": 37, + "rank": 76, + "sourceAnchorMatches": true + }, + { + "degree": 193, + "degreeMatches": true, + "expectedDegree": 193, + "explicitId": "sha256:c1706fc8f66c30bb51d4631963bde0b36e9f4a5f34a3ff0ae3faf66227209604", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/SafeRunnable.java", + "id": "sha256:c1706fc8f66c30bb51d4631963bde0b36e9f4a5f34a3ff0ae3faf66227209604", + "identityCandidates": 1, + "label": "SafeRunnable", + "line": 31, + "rank": 77, + "sourceAnchorMatches": true + }, + { + "degree": 191, + "degreeMatches": true, + "expectedDegree": 191, + "explicitId": "sha256:555be66ebc85385891d9bb834536482b809d7f4d0be821df42591f726d5f08a9", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/Command.java", + "id": "sha256:555be66ebc85385891d9bb834536482b809d7f4d0be821df42591f726d5f08a9", + "identityCandidates": 1, + "label": "Command", + "line": 57, + "rank": 78, + "sourceAnchorMatches": true + }, + { + "degree": 190, + "degreeMatches": true, + "expectedDegree": 190, + "explicitId": "sha256:6260d986754766a771e68e20ab1a68afd83deae64bde14b9cf7f0adfed4e16a6", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/PropertyChangeEvent.java", + "id": "sha256:6260d986754766a771e68e20ab1a68afd83deae64bde14b9cf7f0adfed4e16a6", + "identityCandidates": 1, + "label": "PropertyChangeEvent", + "line": 36, + "rank": 79, + "sourceAnchorMatches": true + }, + { + "degree": 189, + "degreeMatches": true, + "expectedDegree": 189, + "explicitId": "sha256:28e8cb6682a5215d0e948a7ef0f4fdab0a4cb065b028bf31cca35e5054b3a33a", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IViewPart.java", + "id": "sha256:28e8cb6682a5215d0e948a7ef0f4fdab0a4cb065b028bf31cca35e5054b3a33a", + "identityCandidates": 1, + "label": "IViewPart", + "line": 58, + "rank": 80, + "sourceAnchorMatches": true + }, + { + "degree": 188, + "degreeMatches": true, + "expectedDegree": 188, + "explicitId": "sha256:572a32ed5656052add7dc357f752fe4b5a27256f4cdffa181b0a32d099964368", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ILabelProviderListener.java", + "id": "sha256:572a32ed5656052add7dc357f752fe4b5a27256f4cdffa181b0a32d099964368", + "identityCandidates": 1, + "label": "ILabelProviderListener", + "line": 23, + "rank": 81, + "sourceAnchorMatches": true + }, + { + "degree": 186, + "degreeMatches": true, + "expectedDegree": 186, + "explicitId": "sha256:7f0c2ba27e47866c5663d709cbf0b973fa66c6311075ba9c6484706711a274b0", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MElementContainer.java", + "id": "sha256:7f0c2ba27e47866c5663d709cbf0b973fa66c6311075ba9c6484706711a274b0", + "identityCandidates": 1, + "label": "MElementContainer", + "line": 50, + "rank": 82, + "sourceAnchorMatches": true + }, + { + "degree": 186, + "degreeMatches": true, + "expectedDegree": 186, + "explicitId": "sha256:be9e97427e2bd09dd5f21601b023225b3244084ea4fa21f7e2caf98b5edd5406", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogSettings.java", + "id": "sha256:be9e97427e2bd09dd5f21601b023225b3244084ea4fa21f7e2caf98b5edd5406", + "identityCandidates": 1, + "label": "IDialogSettings", + "line": 28, + "rank": 83, + "sourceAnchorMatches": true + }, + { + "degree": 185, + "degreeMatches": true, + "expectedDegree": 185, + "explicitId": "sha256:780cf788cd9144d2ff990eb7bde9effc4d200d098e662bbee6123ab9b3cbe47b", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IWorkbenchHelpContextIds.java", + "id": "sha256:780cf788cd9144d2ff990eb7bde9effc4d200d098e662bbee6123ab9b3cbe47b", + "identityCandidates": 1, + "label": "IWorkbenchHelpContextIds", + "line": 31, + "rank": 84, + "sourceAnchorMatches": true + }, + { + "degree": 184, + "degreeMatches": true, + "expectedDegree": 184, + "explicitId": "sha256:8255b2e95176dd2dee5b8d4d3b2a85c60ef7e8bfef41d37e9c10dde388c1f18e", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPartReference.java", + "id": "sha256:8255b2e95176dd2dee5b8d4d3b2a85c60ef7e8bfef41d37e9c10dde388c1f18e", + "identityCandidates": 1, + "label": "IWorkbenchPartReference", + "line": 29, + "rank": 85, + "sourceAnchorMatches": true + }, + { + "degree": 182, + "degreeMatches": true, + "expectedDegree": 182, + "explicitId": "sha256:af235bb0b5c3d3af5c83eb3fbc3a742725d059ea8e251baf2eea255f8c3e8002", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerCell.java", + "id": "sha256:af235bb0b5c3d3af5c83eb3fbc3a742725d059ea8e251baf2eea255f8c3e8002", + "identityCandidates": 1, + "label": "ViewerCell", + "line": 34, + "rank": 86, + "sourceAnchorMatches": true + }, + { + "degree": 179, + "degreeMatches": true, + "expectedDegree": 179, + "explicitId": "sha256:32dfc39a27677a81d5dcacd87cf0df87c5c38c3b6bf885c2f50e4ded58b3dd45", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java", + "id": "sha256:32dfc39a27677a81d5dcacd87cf0df87c5c38c3b6bf885c2f50e4ded58b3dd45", + "identityCandidates": 1, + "label": "ColumnViewer", + "line": 47, + "rank": 87, + "sourceAnchorMatches": true + }, + { + "degree": 179, + "degreeMatches": true, + "expectedDegree": 179, + "explicitId": "sha256:ff8e7d8cb93ce00fd7a0276f4249ad8fa4a1bddcd5a5404cbf3bb4bfc15c0516", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/map/IObservableMap.java", + "id": "sha256:ff8e7d8cb93ce00fd7a0276f4249ad8fa4a1bddcd5a5404cbf3bb4bfc15c0516", + "identityCandidates": 1, + "label": "IObservableMap", + "line": 45, + "rank": 88, + "sourceAnchorMatches": true + }, + { + "degree": 178, + "degreeMatches": true, + "expectedDegree": 178, + "explicitId": "sha256:a5ae4aacf5a11eb239f566ad2c9586ad1ef882a6c107315fbe026a96c380e820", + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/DataTransferMessages.java", + "id": "sha256:a5ae4aacf5a11eb239f566ad2c9586ad1ef882a6c107315fbe026a96c380e820", + "identityCandidates": 1, + "label": "DataTransferMessages", + "line": 19, + "rank": 89, + "sourceAnchorMatches": true + }, + { + "degree": 175, + "degreeMatches": true, + "expectedDegree": 175, + "explicitId": "sha256:7c15aadaa0152a60282aacfe9a5f98acc19069a48ec705250949ef7c05c9ba47", + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java", + "id": "sha256:7c15aadaa0152a60282aacfe9a5f98acc19069a48ec705250949ef7c05c9ba47", + "identityCandidates": 1, + "label": "IDEWorkbenchPlugin", + "line": 65, + "rank": 90, + "sourceAnchorMatches": true + }, + { + "degree": 173, + "degreeMatches": true, + "expectedDegree": 173, + "explicitId": "sha256:d347c5f6948b1d1a2391b401bf250d94b23de72c5b51dbf6a98fcd9d9f4bb817", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/IObservableValue.java", + "id": "sha256:d347c5f6948b1d1a2391b401bf250d94b23de72c5b51dbf6a98fcd9d9f4bb817", + "identityCandidates": 1, + "label": ".getValue()", + "line": 55, + "rank": 91, + "sourceAnchorMatches": true + }, + { + "degree": 170, + "degreeMatches": true, + "expectedDegree": 170, + "explicitId": "sha256:a0fb2887d7e48ac6c3d58e2c232c70b484056f08540f31913f9b4a0218bbe2ba", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IWorkbenchConstants.java", + "id": "sha256:a0fb2887d7e48ac6c3d58e2c232c70b484056f08540f31913f9b4a0218bbe2ba", + "identityCandidates": 1, + "label": "IWorkbenchConstants", + "line": 23, + "rank": 92, + "sourceAnchorMatches": true + }, + { + "degree": 169, + "degreeMatches": true, + "expectedDegree": 169, + "explicitId": "sha256:444cd6aa50c27f4099e110fc194e5ef9a90d31e46a88faa3353ed5d9cdf2a5fb", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/WritableList.java", + "id": "sha256:444cd6aa50c27f4099e110fc194e5ef9a90d31e46a88faa3353ed5d9cdf2a5fb", + "identityCandidates": 1, + "label": "WritableList", + "line": 46, + "rank": 93, + "sourceAnchorMatches": true + }, + { + "degree": 169, + "degreeMatches": true, + "expectedDegree": 169, + "explicitId": "sha256:4dea947c761dd00b49fa13ee403853d3ab4cff263012fac92a4daf57bcee4e5b", + "file": "tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java", + "id": "sha256:4dea947c761dd00b49fa13ee403853d3ab4cff263012fac92a4daf57bcee4e5b", + "identityCandidates": 1, + "label": "AbstractDefaultRealmTestCase", + "line": 30, + "rank": 94, + "sourceAnchorMatches": true + }, + { + "degree": 169, + "degreeMatches": true, + "expectedDegree": 169, + "explicitId": "sha256:5e8a23b3a9dc5de336ed846da8b4c94222de821930fd76a7669e896e642a4eca", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorDescriptor.java", + "id": "sha256:5e8a23b3a9dc5de336ed846da8b4c94222de821930fd76a7669e896e642a4eca", + "identityCandidates": 1, + "label": "IEditorDescriptor", + "line": 36, + "rank": 95, + "sourceAnchorMatches": true + }, + { + "degree": 168, + "degreeMatches": true, + "expectedDegree": 168, + "explicitId": "sha256:059a811c9a7cd528f570d50749bc8f1cbd39db48a3f97528f75a99dae4d0e1bf", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplicationElement.java", + "id": "sha256:059a811c9a7cd528f570d50749bc8f1cbd39db48a3f97528f75a99dae4d0e1bf", + "identityCandidates": 1, + "label": "MApplicationElement", + "line": 57, + "rank": 96, + "sourceAnchorMatches": true + }, + { + "degree": 168, + "degreeMatches": true, + "expectedDegree": 168, + "explicitId": "sha256:5b059637fb7ae01c546b6af2c8438935600f598662efeced21dac62b6f356501", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IActionBars.java", + "id": "sha256:5b059637fb7ae01c546b6af2c8438935600f598662efeced21dac62b6f356501", + "identityCandidates": 1, + "label": "IActionBars", + "line": 61, + "rank": 97, + "sourceAnchorMatches": true + }, + { + "degree": 168, + "degreeMatches": true, + "expectedDegree": 168, + "explicitId": "sha256:7e70d4db7cc2eb0eb7aa0cc8932cf38f7ea0ce7886c11e6e20176bbb7d3179b0", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/services/IServiceLocator.java", + "id": "sha256:7e70d4db7cc2eb0eb7aa0cc8932cf38f7ea0ce7886c11e6e20176bbb7d3179b0", + "identityCandidates": 1, + "label": "IServiceLocator", + "line": 35, + "rank": 98, + "sourceAnchorMatches": true + }, + { + "degree": 166, + "degreeMatches": true, + "expectedDegree": 166, + "explicitId": "sha256:51dd50ef136297b31c010eb4995f10138bc31f38f2921c286c6785e7496370fc", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/WritableValue.java", + "id": "sha256:51dd50ef136297b31c010eb4995f10138bc31f38f2921c286c6785e7496370fc", + "identityCandidates": 1, + "label": "WritableValue", + "line": 38, + "rank": 99, + "sourceAnchorMatches": true + }, + { + "degree": 162, + "degreeMatches": true, + "expectedDegree": 162, + "explicitId": "sha256:cef0e0438f1e55e5fb7c73943f4f41bff352edc21fb3734197cba5c3bccef2c5", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Binding.java", + "id": "sha256:cef0e0438f1e55e5fb7c73943f4f41bff352edc21fb3734197cba5c3bccef2c5", + "identityCandidates": 1, + "label": "Binding", + "line": 78, + "rank": 100, + "sourceAnchorMatches": true + } + ], + "matchingDegrees": 100, + "matchingSourceAnchors": 100, + "question": "hubs", + "repository": "eclipse/eclipse.platform.ui", + "returned": 100, + "tool": "compass", + "verifiedIdentities": 100 + }, + "graphCounts": { + "edges": 347974, + "nodes": 95084 + }, + "omittedDiagnosticLines": 0, + "repository": "eclipse/eclipse.platform.ui", + "secondary": [ + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 36, + "returnedRecordAppearances": 36, + "status": "checked" + }, + "sampleId": 6374724, + "selection": { + "matchedIds": [ + "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "line": 41, + "symbols": [ + "BindingModel" + ] + } + ], + "selector": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "status": "resolved" + } + }, + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 54, + "returnedRecordAppearances": 54, + "status": "checked" + }, + "sampleId": 6391534, + "selection": { + "matchedIds": [ + "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "line": 54, + "symbols": [ + "SimpleValueProperty" + ] + } + ], + "selector": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "status": "resolved" + } + }, + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 11, + "returnedRecordAppearances": 11, + "status": "checked" + }, + "sampleId": 6406137, + "selection": { + "matchedIds": [ + "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "line": 24, + "symbols": [ + "CSSValueListImpl" + ] + } + ], + "selector": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "status": "resolved" + } + }, + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 21, + "returnedRecordAppearances": 21, + "status": "checked" + }, + "sampleId": 6413795, + "selection": { + "matchedIds": [ + "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6" + ], + "returnedAnchors": [ + { + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "line": 45, + "symbols": [ + "DeprecatedUIWizardsAuto" + ] + } + ], + "selector": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "status": "resolved" + } + } + ], + "tool": "compass" + }, + { + "build": { + "exitCode": 0, + "graphBytes": 189557807, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef", + "timedOut": false, + "withinRegisteredGraphBound": true + }, + "captureError": null, + "captureStatus": "completed", + "cases": [ + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel" + ], + "rank": null, + "sampleId": 6374724 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty" + ], + "rank": null, + "sampleId": 6391534 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl" + ], + "rank": null, + "sampleId": 6406137 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto" + ], + "rank": null, + "sampleId": 6413795 + } + ], + "connectivityChecks": [], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + } + }, + "extractionDiagnostics": [ + { + "stream": "stderr", + "text": " warning: skill at /.claude/skills/graphify is from graphify 0.9.30, package is 0.9.67. Run 'graphify install --platform claude' to update it (a plain 'graphify install' refreshes only the detected platform).", + "textTruncated": false + } + ], + "graphConsistency": { + "executionSucceeded": true, + "explicitIdentities": 0, + "hubs": [ + { + "degree": 770, + "degreeMatches": true, + "expectedDegree": 770, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchWindow.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchwindow_iworkbenchwindow", + "identityCandidates": 1, + "label": "IWorkbenchWindow", + "line": 59, + "rank": 1 + }, + { + "degree": 677, + "identityCandidates": 2, + "label": "PlatformUI", + "rank": 2 + }, + { + "degree": 663, + "degreeMatches": true, + "expectedDegree": 663, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/engine/CSSEngine.java", + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_engine_cssengine_cssengine", + "identityCandidates": 1, + "label": "CSSEngine", + "line": 41, + "rank": 3 + }, + { + "degree": 652, + "degreeMatches": true, + "expectedDegree": 652, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/ImageDescriptor.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_resource_imagedescriptor_imagedescriptor", + "identityCandidates": 1, + "label": "ImageDescriptor", + "line": 59, + "rank": 4 + }, + { + "degree": 601, + "degreeMatches": true, + "expectedDegree": 601, + "file": "tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java", + "id": "tests_org_eclipse_e4_ui_tests_src_org_eclipse_e4_ui_tests_application_epartservicetest_epartservicetest", + "identityCandidates": 1, + "label": "EPartServiceTest", + "line": 56, + "rank": 5 + }, + { + "degree": 584, + "degreeMatches": true, + "expectedDegree": 584, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/IObservableValue.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_value_iobservablevalue_iobservablevalue", + "identityCandidates": 1, + "label": "IObservableValue", + "line": 38, + "rank": 6 + }, + { + "degree": 569, + "degreeMatches": true, + "expectedDegree": 569, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MUIElement.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_muielement_muielement", + "identityCandidates": 1, + "label": "MUIElement", + "line": 54, + "rank": 7 + }, + { + "degree": 556, + "degreeMatches": true, + "expectedDegree": 556, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPage.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpage_iworkbenchpage", + "identityCandidates": 1, + "label": "IWorkbenchPage", + "line": 46, + "rank": 8 + }, + { + "degree": 530, + "degreeMatches": true, + "expectedDegree": 530, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpart_iworkbenchpart", + "identityCandidates": 1, + "label": "IWorkbenchPart", + "line": 99, + "rank": 9 + }, + { + "degree": 522, + "degreeMatches": true, + "expectedDegree": 522, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/Realm.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_realm_realm", + "identityCandidates": 1, + "label": "Realm", + "line": 84, + "rank": 10 + }, + { + "degree": 508, + "degreeMatches": true, + "expectedDegree": 508, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/IStructuredSelection.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_istructuredselection_istructuredselection", + "identityCandidates": 1, + "label": "IStructuredSelection", + "line": 22, + "rank": 11 + }, + { + "degree": 501, + "degreeMatches": true, + "expectedDegree": 501, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/Viewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewer_viewer", + "identityCandidates": 1, + "label": "Viewer", + "line": 43, + "rank": 12 + }, + { + "degree": 496, + "degreeMatches": true, + "expectedDegree": 496, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IMemento.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_imemento_imemento", + "identityCandidates": 1, + "label": "IMemento", + "line": 57, + "rank": 13 + }, + { + "degree": 456, + "degreeMatches": true, + "expectedDegree": 456, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredSelection.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_structuredselection_structuredselection", + "identityCandidates": 1, + "label": "StructuredSelection", + "line": 33, + "rank": 14 + }, + { + "degree": 454, + "degreeMatches": true, + "expectedDegree": 454, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelection.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselection_iselection", + "identityCandidates": 1, + "label": "ISelection", + "line": 23, + "rank": 15 + }, + { + "degree": 402, + "degreeMatches": true, + "expectedDegree": 402, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IAction.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_iaction_iaction", + "identityCandidates": 1, + "label": "IAction", + "line": 47, + "rank": 16 + }, + { + "degree": 388, + "degreeMatches": true, + "expectedDegree": 388, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MPart.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_basic_mpart_mpart", + "identityCandidates": 1, + "label": "MPart", + "line": 56, + "rank": 17 + }, + { + "degree": 387, + "degreeMatches": true, + "expectedDegree": 387, + "file": "tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/UITestCase.java", + "id": "tests_org_eclipse_ui_tests_harness_src_org_eclipse_ui_tests_harness_util_uitestcase_uitestcase", + "identityCandidates": 1, + "label": "UITestCase", + "line": 49, + "rank": 18 + }, + { + "degree": 363, + "degreeMatches": true, + "expectedDegree": 363, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ExecutionEvent.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_executionevent_executionevent", + "identityCandidates": 1, + "label": "ExecutionEvent", + "line": 36, + "rank": 19 + }, + { + "degree": 342, + "degreeMatches": true, + "expectedDegree": 342, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/Action.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_action_action", + "identityCandidates": 1, + "label": "Action", + "line": 29, + "rank": 20 + }, + { + "degree": 342, + "degreeMatches": true, + "expectedDegree": 342, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchplugin_workbenchplugin", + "identityCandidates": 1, + "label": "WorkbenchPlugin", + "line": 111, + "rank": 21 + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/MenuManager.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_menumanager_menumanager", + "identityCandidates": 1, + "label": "MenuManager", + "line": 48, + "rank": 22 + }, + { + "degree": 338, + "identityCandidates": 4, + "label": "IWorkbench", + "rank": 23 + }, + { + "degree": 330, + "degreeMatches": true, + "expectedDegree": 330, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/IObservable.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_iobservable_iobservable", + "identityCandidates": 1, + "label": "IObservable", + "line": 36, + "rank": 24 + }, + { + "degree": 318, + "degreeMatches": true, + "expectedDegree": 318, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_tableviewer_tableviewer", + "identityCandidates": 1, + "label": "TableViewer", + "line": 69, + "rank": 25 + }, + { + "degree": 310, + "degreeMatches": true, + "expectedDegree": 310, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/IPropertyChangeListener.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_ipropertychangelistener_ipropertychangelistener", + "identityCandidates": 1, + "label": "IPropertyChangeListener", + "line": 37, + "rank": 26 + }, + { + "degree": 308, + "degreeMatches": true, + "expectedDegree": 308, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_treeviewer_treeviewer", + "identityCandidates": 1, + "label": "TreeViewer", + "line": 69, + "rank": 27 + }, + { + "degree": 308, + "degreeMatches": true, + "expectedDegree": 308, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchpage_workbenchpage", + "identityCandidates": 1, + "label": "WorkbenchPage", + "line": 197, + "rank": 28 + }, + { + "degree": 302, + "degreeMatches": true, + "expectedDegree": 302, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplication.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_mapplication_mapplication", + "identityCandidates": 1, + "label": "MApplication", + "line": 70, + "rank": 29 + }, + { + "degree": 297, + "degreeMatches": true, + "expectedDegree": 297, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditorpart_ieditorpart", + "identityCandidates": 1, + "label": "IEditorPart", + "line": 55, + "rank": 30 + }, + { + "degree": 295, + "degreeMatches": true, + "expectedDegree": 295, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IContributionItem.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_icontributionitem_icontributionitem", + "identityCandidates": 1, + "label": "IContributionItem", + "line": 42, + "rank": 31 + }, + { + "degree": 294, + "degreeMatches": true, + "expectedDegree": 294, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_structuredviewer_structuredviewer", + "identityCandidates": 1, + "label": "StructuredViewer", + "line": 65, + "rank": 32 + }, + { + "degree": 268, + "degreeMatches": true, + "expectedDegree": 268, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkingSet.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkingset_iworkingset", + "identityCandidates": 1, + "label": "IWorkingSet", + "line": 29, + "rank": 33 + }, + { + "degree": 263, + "degreeMatches": true, + "expectedDegree": 263, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IMenuManager.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_imenumanager_imenumanager", + "identityCandidates": 1, + "label": "IMenuManager", + "line": 32, + "rank": 34 + }, + { + "degree": 262, + "degreeMatches": true, + "expectedDegree": 262, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/IObservableList.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_list_iobservablelist_iobservablelist", + "identityCandidates": 1, + "label": "IObservableList", + "line": 44, + "rank": 35 + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSS2PropertiesImpl.java", + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_css2propertiesimpl_css2propertiesimpl", + "identityCandidates": 1, + "label": "CSS2PropertiesImpl", + "line": 24, + "rank": 36 + }, + { + "degree": 248, + "degreeMatches": true, + "expectedDegree": 248, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MWindow.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_basic_mwindow_mwindow", + "identityCandidates": 1, + "label": "MWindow", + "line": 56, + "rank": 37 + }, + { + "degree": 243, + "degreeMatches": true, + "expectedDegree": 243, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ParameterizedCommand.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_parameterizedcommand_parameterizedcommand", + "identityCandidates": 1, + "label": "ParameterizedCommand", + "line": 41, + "rank": 38 + }, + { + "degree": 242, + "degreeMatches": true, + "expectedDegree": 242, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorInput.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditorinput_ieditorinput", + "identityCandidates": 1, + "label": "IEditorInput", + "line": 54, + "rank": 39 + }, + { + "degree": 237, + "degreeMatches": true, + "expectedDegree": 237, + "file": "bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/EModelService.java", + "id": "bundles_org_eclipse_e4_ui_workbench_src_org_eclipse_e4_ui_workbench_modeling_emodelservice_emodelservice", + "identityCandidates": 1, + "label": "EModelService", + "line": 41, + "rank": 40 + }, + { + "degree": 237, + "degreeMatches": true, + "expectedDegree": 237, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchwindow_workbenchwindow", + "identityCandidates": 1, + "label": "WorkbenchWindow", + "line": 209, + "rank": 41 + }, + { + "degree": 237, + "degreeMatches": true, + "expectedDegree": 237, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_preference_ipreferencestore_ipreferencestore", + "identityCandidates": 1, + "label": "IPreferenceStore", + "line": 59, + "rank": 42 + }, + { + "degree": 233, + "identityCandidates": 5, + "label": "LabelProvider", + "rank": 43 + }, + { + "degree": 226, + "degreeMatches": true, + "expectedDegree": 226, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ITreeContentProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_itreecontentprovider_itreecontentprovider", + "identityCandidates": 1, + "label": "ITreeContentProvider", + "line": 22, + "rank": 44 + }, + { + "degree": 226, + "degreeMatches": true, + "expectedDegree": 226, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/set/IObservableSet.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_set_iobservableset_iobservableset", + "identityCandidates": 1, + "label": "IObservableSet", + "line": 43, + "rank": 45 + }, + { + "degree": 218, + "identityCandidates": 2, + "label": "AbstractHandler", + "rank": 46 + }, + { + "degree": 218, + "degreeMatches": true, + "expectedDegree": 218, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbench_workbench", + "identityCandidates": 1, + "label": "Workbench", + "line": 279, + "rank": 47 + }, + { + "degree": 213, + "degreeMatches": true, + "expectedDegree": 213, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/JFaceResources.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_resource_jfaceresources_jfaceresources", + "identityCandidates": 1, + "label": "JFaceResources", + "line": 57, + "rank": 48 + }, + { + "degree": 207, + "degreeMatches": true, + "expectedDegree": 207, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/MessageDialog.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_messagedialog_messagedialog", + "identityCandidates": 1, + "label": "MessageDialog", + "line": 40, + "rank": 49 + }, + { + "degree": 203, + "degreeMatches": true, + "expectedDegree": 203, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPerspectiveDescriptor.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iperspectivedescriptor_iperspectivedescriptor", + "identityCandidates": 1, + "label": "IPerspectiveDescriptor", + "line": 49, + "rank": 50 + }, + { + "degree": 193, + "degreeMatches": true, + "expectedDegree": 193, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/Dialog.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_dialog_dialog", + "identityCandidates": 1, + "label": "Dialog", + "line": 65, + "rank": 51 + }, + { + "degree": 193, + "identityCandidates": 2, + "label": "BindingTestSuite", + "rank": 52 + }, + { + "degree": 190, + "degreeMatches": true, + "expectedDegree": 190, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/CellEditor.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_celleditor_celleditor", + "identityCandidates": 1, + "label": "CellEditor", + "line": 45, + "rank": 53 + }, + { + "degree": 184, + "degreeMatches": true, + "expectedDegree": 184, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ILabelProviderListener.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_ilabelproviderlistener_ilabelproviderlistener", + "identityCandidates": 1, + "label": "ILabelProviderListener", + "line": 23, + "rank": 54 + }, + { + "degree": 183, + "degreeMatches": true, + "expectedDegree": 183, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IViewPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iviewpart_iviewpart", + "identityCandidates": 1, + "label": "IViewPart", + "line": 58, + "rank": 55 + }, + { + "degree": 178, + "identityCandidates": 2, + "label": "Command", + "rank": 56 + }, + { + "degree": 173, + "degreeMatches": true, + "expectedDegree": 173, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogSettings.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_idialogsettings_idialogsettings", + "identityCandidates": 1, + "label": "IDialogSettings", + "line": 28, + "rank": 57 + }, + { + "degree": 172, + "degreeMatches": true, + "expectedDegree": 172, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MElementContainer.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_melementcontainer_melementcontainer", + "identityCandidates": 1, + "label": "MElementContainer", + "line": 50, + "rank": 58 + }, + { + "degree": 170, + "degreeMatches": true, + "expectedDegree": 170, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchmessages_workbenchmessages", + "identityCandidates": 1, + "label": "WorkbenchMessages", + "line": 33, + "rank": 59 + }, + { + "degree": 169, + "degreeMatches": true, + "expectedDegree": 169, + "file": "tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java", + "id": "tests_org_eclipse_jface_tests_databinding_src_org_eclipse_jface_tests_databinding_abstractdefaultrealmtestcase_abstractdefaultrealmtestcase", + "identityCandidates": 1, + "label": "AbstractDefaultRealmTestCase", + "line": 30, + "rank": 60 + }, + { + "degree": 167, + "degreeMatches": true, + "expectedDegree": 167, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_columnviewer_columnviewer", + "identityCandidates": 1, + "label": "ColumnViewer", + "line": 47, + "rank": 61 + }, + { + "degree": 166, + "degreeMatches": true, + "expectedDegree": 166, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_abstracttreeviewer_abstracttreeviewer", + "identityCandidates": 1, + "label": "AbstractTreeViewer", + "line": 73, + "rank": 62 + }, + { + "degree": 165, + "degreeMatches": true, + "expectedDegree": 165, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IActionBars.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iactionbars_iactionbars", + "identityCandidates": 1, + "label": "IActionBars", + "line": 61, + "rank": 63 + }, + { + "degree": 164, + "degreeMatches": true, + "expectedDegree": 164, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/PartInitException.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_partinitexception_partinitexception", + "identityCandidates": 1, + "label": "PartInitException", + "line": 26, + "rank": 64 + }, + { + "degree": 164, + "degreeMatches": true, + "expectedDegree": 164, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPartReference.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpartreference_iworkbenchpartreference", + "identityCandidates": 1, + "label": "IWorkbenchPartReference", + "line": 29, + "rank": 65 + }, + { + "degree": 162, + "degreeMatches": true, + "expectedDegree": 162, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerCell.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewercell_viewercell", + "identityCandidates": 1, + "label": "ViewerCell", + "line": 34, + "rank": 66 + }, + { + "degree": 161, + "degreeMatches": true, + "expectedDegree": 161, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/services/IServiceLocator.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_services_iservicelocator_iservicelocator", + "identityCandidates": 1, + "label": "IServiceLocator", + "line": 35, + "rank": 67 + }, + { + "degree": 161, + "degreeMatches": true, + "expectedDegree": 161, + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java", + "id": "bundles_org_eclipse_ui_ide_src_org_eclipse_ui_internal_ide_ideworkbenchplugin_ideworkbenchplugin", + "identityCandidates": 1, + "label": "IDEWorkbenchPlugin", + "line": 65, + "rank": 68 + }, + { + "degree": 155, + "identityCandidates": 2, + "label": "ExecutionException", + "rank": 69 + }, + { + "degree": 154, + "degreeMatches": true, + "expectedDegree": 154, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ILabelProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_ilabelprovider_ilabelprovider", + "identityCandidates": 1, + "label": "ILabelProvider", + "line": 23, + "rank": 70 + }, + { + "degree": 154, + "degreeMatches": true, + "expectedDegree": 154, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselectionprovider_iselectionprovider", + "identityCandidates": 1, + "label": "ISelectionProvider", + "line": 23, + "rank": 71 + }, + { + "degree": 153, + "degreeMatches": true, + "expectedDegree": 153, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplicationElement.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_mapplicationelement_mapplicationelement", + "identityCandidates": 1, + "label": "MApplicationElement", + "line": 57, + "rank": 72 + }, + { + "degree": 153, + "degreeMatches": true, + "expectedDegree": 153, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_wizard_wizarddialog_wizarddialog", + "identityCandidates": 1, + "label": "WizardDialog", + "line": 85, + "rank": 73 + }, + { + "degree": 150, + "degreeMatches": true, + "expectedDegree": 150, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionChangedListener.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselectionchangedlistener_iselectionchangedlistener", + "identityCandidates": 1, + "label": "ISelectionChangedListener", + "line": 24, + "rank": 74 + }, + { + "degree": 149, + "degreeMatches": true, + "expectedDegree": 149, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerComparator.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewercomparator_viewercomparator", + "identityCandidates": 1, + "label": "ViewerComparator", + "line": 49, + "rank": 75 + }, + { + "degree": 148, + "degreeMatches": true, + "expectedDegree": 148, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/IObservableCollection.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_iobservablecollection_iobservablecollection", + "identityCandidates": 1, + "label": "IObservableCollection", + "line": 41, + "rank": 76 + }, + { + "degree": 146, + "degreeMatches": true, + "expectedDegree": 146, + "file": "bundles/org.eclipse.core.databinding/src/org/eclipse/core/databinding/DataBindingContext.java", + "id": "bundles_org_eclipse_core_databinding_src_org_eclipse_core_databinding_databindingcontext_databindingcontext", + "identityCandidates": 1, + "label": "DataBindingContext", + "line": 58, + "rank": 77 + }, + { + "degree": 146, + "degreeMatches": true, + "expectedDegree": 146, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/SafeRunnable.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_saferunnable_saferunnable", + "identityCandidates": 1, + "label": "SafeRunnable", + "line": 31, + "rank": 78 + }, + { + "degree": 145, + "degreeMatches": true, + "expectedDegree": 145, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/advanced/MPerspective.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_advanced_mperspective_mperspective", + "identityCandidates": 1, + "label": "MPerspective", + "line": 52, + "rank": 79 + }, + { + "degree": 144, + "degreeMatches": true, + "expectedDegree": 144, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/map/IObservableMap.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_map_iobservablemap_iobservablemap", + "identityCandidates": 1, + "label": "IObservableMap", + "line": 45, + "rank": 80 + }, + { + "degree": 144, + "identityCandidates": 4, + "label": "Binding", + "rank": 81 + }, + { + "degree": 142, + "degreeMatches": true, + "expectedDegree": 142, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerFilter.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewerfilter_viewerfilter", + "identityCandidates": 1, + "label": "ViewerFilter", + "line": 30, + "rank": 82 + }, + { + "degree": 141, + "degreeMatches": true, + "expectedDegree": 141, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogConstants.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_idialogconstants_idialogconstants", + "identityCandidates": 1, + "label": "IDialogConstants", + "line": 45, + "rank": 83 + }, + { + "degree": 140, + "degreeMatches": true, + "expectedDegree": 140, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/TriggerSequence.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_bindings_triggersequence_triggersequence", + "identityCandidates": 1, + "label": "TriggerSequence", + "line": 28, + "rank": 84 + }, + { + "degree": 139, + "degreeMatches": true, + "expectedDegree": 139, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/IValueProperty.java", + "id": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_ivalueproperty_ivalueproperty", + "identityCandidates": 1, + "label": "IValueProperty", + "line": 47, + "rank": 85 + }, + { + "degree": 137, + "degreeMatches": true, + "expectedDegree": 137, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/MMenu.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_menu_mmenu_mmenu", + "identityCandidates": 1, + "label": "MMenu", + "line": 41, + "rank": 86 + }, + { + "degree": 135, + "degreeMatches": true, + "expectedDegree": 135, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/PropertyChangeEvent.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_propertychangeevent_propertychangeevent", + "identityCandidates": 1, + "label": "PropertyChangeEvent", + "line": 36, + "rank": 87 + }, + { + "degree": 135, + "identityCandidates": 2, + "label": "Window", + "rank": 88 + }, + { + "degree": 134, + "degreeMatches": true, + "expectedDegree": 134, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorDescriptor.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditordescriptor_ieditordescriptor", + "identityCandidates": 1, + "label": "IEditorDescriptor", + "line": 36, + "rank": 89 + }, + { + "degree": 132, + "degreeMatches": true, + "expectedDegree": 132, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/IStructuredContentProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_istructuredcontentprovider_istructuredcontentprovider", + "identityCandidates": 1, + "label": "IStructuredContentProvider", + "line": 21, + "rank": 90 + }, + { + "degree": 128, + "degreeMatches": true, + "expectedDegree": 128, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/WritableValue.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_value_writablevalue_writablevalue", + "identityCandidates": 1, + "label": "WritableValue", + "line": 38, + "rank": 91 + }, + { + "degree": 127, + "degreeMatches": true, + "expectedDegree": 127, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/plugin/AbstractUIPlugin.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_plugin_abstractuiplugin_abstractuiplugin", + "identityCandidates": 1, + "label": "AbstractUIPlugin", + "line": 126, + "rank": 92 + }, + { + "degree": 125, + "degreeMatches": true, + "expectedDegree": 125, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/IUndoContext.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_operations_iundocontext_iundocontext", + "identityCandidates": 1, + "label": "IUndoContext", + "line": 37, + "rank": 93 + }, + { + "degree": 125, + "degreeMatches": true, + "expectedDegree": 125, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_bindings_bindingmanager_bindingmanager", + "identityCandidates": 1, + "label": "BindingManager", + "line": 70, + "rank": 94 + }, + { + "degree": 124, + "degreeMatches": true, + "expectedDegree": 124, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/operation/IRunnableWithProgress.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_operation_irunnablewithprogress_irunnablewithprogress", + "identityCandidates": 1, + "label": "IRunnableWithProgress", + "line": 33, + "rank": 95 + }, + { + "degree": 123, + "degreeMatches": true, + "expectedDegree": 123, + "file": "bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentService.java", + "id": "bundles_org_eclipse_ui_navigator_src_org_eclipse_ui_internal_navigator_navigatorcontentservice_navigatorcontentservice", + "identityCandidates": 1, + "label": "NavigatorContentService", + "line": 85, + "rank": 96 + }, + { + "degree": 121, + "degreeMatches": true, + "expectedDegree": 121, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/IUndoableOperation.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_operations_iundoableoperation_iundoableoperation", + "identityCandidates": 1, + "label": "IUndoableOperation", + "line": 37, + "rank": 97 + }, + { + "degree": 121, + "degreeMatches": true, + "expectedDegree": 121, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/ViewPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_part_viewpart_viewpart", + "identityCandidates": 1, + "label": "ViewPart", + "line": 69, + "rank": 98 + }, + { + "degree": 119, + "degreeMatches": true, + "expectedDegree": 119, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ArrayContentProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_arraycontentprovider_arraycontentprovider", + "identityCandidates": 1, + "label": "ArrayContentProvider", + "line": 30, + "rank": 99 + }, + { + "degree": 119, + "degreeMatches": true, + "expectedDegree": 119, + "file": "bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java", + "id": "bundles_org_eclipse_ui_navigator_src_org_eclipse_ui_navigator_inavigatorcontentservice_inavigatorcontentservice", + "identityCandidates": 1, + "label": "INavigatorContentService", + "line": 104, + "rank": 100 + } + ], + "matchingDegrees": 91, + "matchingSourceAnchors": 0, + "question": "hubs", + "repository": "eclipse/eclipse.platform.ui", + "returned": 100, + "tool": "graphify", + "verifiedIdentities": 91 + }, + "graphCounts": { + "edges": 258146, + "nodes": 70420 + }, + "omittedDiagnosticLines": 0, + "repository": "eclipse/eclipse.platform.ui", + "secondary": [ + { + "projection": { + "expectedRows": 22, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 22 + }, + "sampleId": 6374724, + "selection": { + "matchedIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel", + "line": 41, + "symbols": [ + "BindingModel" + ] + } + ], + "selector": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 52, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 52 + }, + "sampleId": 6391534, + "selection": { + "matchedIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty", + "line": 54, + "symbols": [ + "SimpleValueProperty" + ] + } + ], + "selector": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 11, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 11 + }, + "sampleId": 6406137, + "selection": { + "matchedIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl", + "line": 24, + "symbols": [ + "CSSValueListImpl" + ] + } + ], + "selector": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 19, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 19 + }, + "sampleId": 6413795, + "selection": { + "matchedIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto" + ], + "returnedAnchors": [ + { + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto", + "line": 45, + "symbols": [ + "DeprecatedUIWizardsAuto" + ] + } + ], + "selector": "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto", + "status": "resolved" + } + } + ], + "tool": "graphify" + } + ], + "schema": "compass.mlcq-admission-verification/1", + "scorerSha256": "efecb4fe026e464addb385c312766b5f58fbf8b4cb8b47eb3d43409602511202", + "verifiedToolCalls": 27, + "verifierSha256": "c1ed4c4bf2893e8931124ed67fdd6136b3c4e207396b920165b5d626d28c8dc2" + }, + "repeat": { + "byteIdentical": true, + "sha256": "a659988abe0c9e64449b8265f06e066425fb6963e340176ccfde8f0a1e258d3d" + }, + "artifacts": { + "inputs.json": "adcce8096f5b67d4e7638feccdfeed03a7d082cd494f1bc51f317893d59b7647", + "capture.py": "9994930b85f41cbd606a6a4c49b4e9bc674238ed8381b4befe9e1e9d0e8bba96", + "verify_capture.py": "c1ed4c4bf2893e8931124ed67fdd6136b3c4e207396b920165b5d626d28c8dc2", + "write_report.py": "628bcea04978d9a05c2da424b56379c4b6cacbf58f333417dbc9e124a386a191", + "capture/capture.json": "213774c2e901a012b4ab22f594c4edac2e49c373d30fffb3212756d415bc07cc", + "verified-capture.json": "4d22eaea1f90aede85e40f308dbe8cad89e624c6e4dcc39cbf5cd8b542d8670c", + "verified-capture-repeat.json": "4d22eaea1f90aede85e40f308dbe8cad89e624c6e4dcc39cbf5cd8b542d8670c", + "verified-capture-corrected.json": "a659988abe0c9e64449b8265f06e066425fb6963e340176ccfde8f0a1e258d3d", + "verified-capture-corrected-repeat.json": "a659988abe0c9e64449b8265f06e066425fb6963e340176ccfde8f0a1e258d3d", + "verify_capture-before-neighbor-fix.py": "47524eafd3ee9dbe149172612e761897f7cf659935b74e10fa1eb3e43b08cf76", + "neighbor-auditor-correction.json": "672dd1b848d3c4cad1d36513fe0a6366dcc870a806b37ad89cd88851cc9eef5d", + "neighbor-regression-before.log": "8802f756f7a994523015cc692d725a4a0b0cf2fc3dc5372c3ac422b6930f2bc4", + "neighbor-regression-after.log": "83166b089fbcb82fac63f22522fa6ae99bb5e46368cd35d756277fd463dd6346", + "benchmark-tests.log": "e9a25c8ab7ebe73f3149cb5921cbecd7dbc9a797aa9d35abb14038323e91d221", + "product-boundary.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "primaryTotals": { + "compass": { + "10": { + "unanimous-major-critical": { + "capture-unavailable": 2, + "not-returned": 2 + }, + "unanimous-none": { + "capture-unavailable": 2, + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "capture-unavailable": 2, + "not-returned": 2 + }, + "unanimous-none": { + "capture-unavailable": 2, + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "capture-unavailable": 2, + "not-returned": 2 + }, + "unanimous-none": { + "capture-unavailable": 2, + "not-returned": 2 + } + } + }, + "graphify": { + "10": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + } + } + }, + "extractionObservations": [ + { + "repository": "apache/cloudstack", + "tool": "compass", + "exit_code": -9, + "timed_out": true, + "wall_ms": 1200448, + "graphBytes": null, + "graphSha256": null, + "originalWithinRegisteredGraphBound": null, + "withinRegisteredGraphBound": false + }, + { + "repository": "apache/cloudstack", + "tool": "graphify", + "exit_code": 0, + "timed_out": false, + "wall_ms": 88899, + "graphBytes": 227334534, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72", + "originalWithinRegisteredGraphBound": true, + "withinRegisteredGraphBound": true + }, + { + "repository": "eclipse/eclipse.platform.ui", + "tool": "compass", + "exit_code": 0, + "timed_out": false, + "wall_ms": 671990, + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "originalWithinRegisteredGraphBound": false, + "withinRegisteredGraphBound": true + }, + { + "repository": "eclipse/eclipse.platform.ui", + "tool": "graphify", + "exit_code": 0, + "timed_out": false, + "wall_ms": 65246, + "graphBytes": 189557807, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef", + "originalWithinRegisteredGraphBound": true, + "withinRegisteredGraphBound": true + } + ], + "limitations": [ + "The larger artifact limit was declared after inspecting original failures and Graphify results; this is not the original protocol or held-out evidence.", + "God-node retrieval measures a native hub ranking, not validated god-object classification. The four positive and four none judgments are partial external labels, not population precision.", + "The original Compass CloudStack timeout and Eclipse artifact-limit failure remain visible in mlcq_god_audit_review.json.", + "Compass Eclipse reuses a frozen partial graph with 62 omitted edges. Source-assisted public resolution and neighbor checks do not replace ranking retrieval.", + "Compass uses unoptimized development builds; timings do not establish release performance or a controlled Graphify speed ranking.", + "Graph counts, graph consistency and source-coordinate coverage do not establish semantic edge precision, responsibility synthesis, authored explanation quality, functional communities or overall superiority." + ], + "wholeRepositoryProfiling": { + "durationSeconds": 2, + "intervalMilliseconds": 10, + "captureSha256": "bbda8ed6b4e73e9bde4572cd152d6f4575507611cbd2078c96c556ca3896a121", + "sampleSha256": "bc9e8775bb782cea3ba4a28bd53a69b598ec050fa12d2aecbac6962499b84eef", + "interpretation": "The full CloudStack follow-up wall time includes a two-second process sample. It is an operational observation, not a controlled speed comparison. The separately completed 24 SQL file timings were not sampled or changed." + }, + "auditorCorrection": { + "schema": "compass.neighbor-auditor-correction/1", + "firstVerificationSha256": "4d22eaea1f90aede85e40f308dbe8cad89e624c6e4dcc39cbf5cd8b542d8670c", + "oldAuditorSha256": "b7a3412f371cf3bcbe9ac507e7a32210ee83fefbc102db7204fa31c05ae1c3ed", + "nativeContract": "Omitted MCP relation_filter is converted to the empty string and serialized as relationFilter: \"\" in compass.query.neighbors/1.", + "defect": "The unfiltered audit test mocked null and the auditor compared its Python None directly with the string field, incorrectly marking all four successful Compass Eclipse neighbor responses invalid.", + "preservation": "Keep both first verification files and their verifier, every captured request/response and all original extraction failures. Correct only the audit comparison and its tests. Native ranking retrieval is unchanged; no new tool requests or output-driven metric changes.", + "status": "Corrected replay completed twice with byte-identical output; original captures and invalid first audit remain preserved.", + "correctedAuditorSha256": "fef9268b1f88d8c46d0d6dda6d6acbb5fa576cddedeea992b374984bcd6111d8", + "testSha256": "ac64515af7a078f53be6a2f12997293f291bdf4047e0d5314dad672add9797aa", + "beforeRegressionLogSha256": "8802f756f7a994523015cc692d725a4a0b0cf2fc3dc5372c3ac422b6930f2bc4", + "afterRegressionLogSha256": "83166b089fbcb82fac63f22522fa6ae99bb5e46368cd35d756277fd463dd6346", + "preReplayStatus": "Two native-contract regressions failed before the auditor correction; corrected replay pending." + }, + "diagnosticPathRedaction": "Only diagnostic text replaces the current user home prefix with ; original logs and verifier outputs remain hash-bound external artifacts." +} diff --git a/benchmarks/agent_query/mlcq_class_degree_probe.py b/benchmarks/agent_query/mlcq_class_degree_probe.py new file mode 100644 index 000000000..08f1616e4 --- /dev/null +++ b/benchmarks/agent_query/mlcq_class_degree_probe.py @@ -0,0 +1,174 @@ +"""Run the registered class-only degree diagnostic on frozen Java graphs. + +Each graph is processed in a separate bounded process. This is a development +retrieval diagnostic, not a god-object classifier or native tool comparison. +""" + +from __future__ import annotations + +import argparse +from collections import Counter +import hashlib +import json +from pathlib import Path +import re +import subprocess +import sys + + +def digest(path: Path) -> str: + result = hashlib.sha256() + with path.open("rb") as stream: + for block in iter(lambda: stream.read(1024 * 1024), b""): + result.update(block) + return result.hexdigest() + + +def graph_worker(path: Path, record: dict, rules: dict, cases: list[dict]) -> dict: + if path.stat().st_size != record["graphBytes"] or path.stat().st_size > rules["graphByteLimit"]: + raise ValueError("graph size differs from registered bound") + if digest(path) != record["graphSha256"]: + raise ValueError("graph digest differs from registration") + graph = json.loads(path.read_bytes()) + nodes, edges = graph["nodes"], graph["links"] + if len(nodes) > rules["maxNodes"] or len(edges) > rules["maxEdges"]: + raise ValueError("graph item bound exceeded") + ids = [node["id"] for node in nodes] + if any(not isinstance(identifier, str) for identifier in ids) or len(ids) != len(set(ids)): + raise ValueError("invalid or repeated graph node ID") + by_id = {node["id"]: node for node in nodes} + pairs = {(edge["source"], edge["target"]) for edge in edges} + degrees = Counter() + dangling = 0 + for source, target in pairs: + dangling += source not in by_id or target not in by_id + degrees[source] += 1 + degrees[target] += 1 + tool = record["tool"] + if tool == "compass": + def eligible(node: dict) -> bool: + source = node.get("source") + return (node.get("kind") == "class" and isinstance(source, dict) + and isinstance(source.get("file"), str) and bool(source["file"]) + and type(source.get("startLine")) is int and source["startLine"] > 0) + elif tool == "graphify": + def eligible(node: dict) -> bool: + return (node.get("_callable_class") is True + and isinstance(node.get("source_file"), str) and bool(node["source_file"]) + and isinstance(node.get("source_location"), str) + and re.fullmatch(r"L[1-9][0-9]*", node["source_location"]) is not None) + else: + raise ValueError("unsupported tool") + pool = [node for node in nodes if eligible(node)] + if len(pool) > rules["maxClassCandidates"]: + raise ValueError("class candidate bound exceeded") + pool.sort(key=lambda node: (-degrees[node["id"]], node["id"])) + ranks = {node["id"]: rank for rank, node in enumerate(pool, 1)} + selected = [] + for case in cases: + matches = case["graphIds"] + if len(matches) != 1: + selected.append({"sampleId": case["sampleId"], "classification": case["classification"], + "status": "unavailable-prior-identity", "graphIds": matches}) + continue + identifier = matches[0] + node = by_id.get(identifier) + if node is None or identifier not in ranks: + selected.append({"sampleId": case["sampleId"], "classification": case["classification"], + "status": "unavailable-not-eligible", "graphId": identifier}) + continue + selected.append({"sampleId": case["sampleId"], "classification": case["classification"], + "status": "ranked", "graphId": identifier, "rank": ranks[identifier], + "degree": degrees[identifier]}) + return {"repository": record["repository"], "tool": tool, + "graphSha256": record["graphSha256"], "directed": graph["directed"], + "nodeCount": len(nodes), "edgeRecordCount": len(edges), + "distinctEndpointPairs": len(pairs), "danglingPairs": dangling, + "classCandidates": len(pool), + "top100": [{"rank": rank, "id": node["id"], + "label": node.get("name", node.get("label", "")), + "degree": degrees[node["id"]]} + for rank, node in enumerate(pool[:100], 1)], + "cases": selected} + + +def main(args: argparse.Namespace) -> None: + registration = json.loads(args.registration.read_text()) + if registration["schema"] != "compass.mlcq-class-degree-registration/1": + raise ValueError("unsupported registration") + if digest(args.inputs) != registration["priorInputsSha256"] or digest(args.prior_review) != registration["priorReleaseReviewSha256"]: + raise ValueError("prior input or review changed") + inputs = json.loads(args.inputs.read_text()) + prior = json.loads(args.prior_review.read_text()) + if not inputs["complete"]: + raise ValueError("prior capture incomplete") + expected = {(r["repository"], r["tool"], c["sampleId"]): c["graphIds"] + for r in prior["verification"]["results"] for c in r["cases"]} + registered = {(r["repository"], r["tool"], r["sampleId"]): r["graphIds"] + for r in registration["cases"]} + if expected != registered or len(registered) != 16: + raise ValueError("registered primary identities differ from prior review") + args.raw.mkdir(parents=True, exist_ok=False) + results = [] + for index, record in enumerate(registration["graphs"]): + repository, tool = record["repository"], record["tool"] + build = next(r for r in inputs["builds"][repository]["results"] if r["tool"] == tool) + if any(build[key] != record[key] for key in ("graphBytes", "graphSha256")): + raise ValueError("registered graph differs from prior input") + cases = [case for case in registration["cases"] + if case["repository"] == repository and case["tool"] == tool] + command = [sys.executable, "-m", "benchmarks.agent_query.mlcq_class_degree_probe", + "--worker", "--graph", build["graphPath"], + "--registration", str(args.registration), "--graph-index", str(index)] + try: + process = subprocess.run(command, check=False, capture_output=True, text=True, + timeout=registration["maxSecondsPerGraph"]) + if process.returncode != 0 or len(process.stdout.encode()) > 1024 * 1024 or len(process.stderr.encode()) > 1024 * 1024: + raise ValueError(f"graph worker failed or exceeded output bound: {process.returncode}: {process.stderr[:500]}") + result = json.loads(process.stdout) + except subprocess.TimeoutExpired as error: + raise ValueError(f"graph worker timed out: {repository}/{tool}") from error + if (result["repository"], result["tool"], result["graphSha256"]) != (repository, tool, record["graphSha256"]): + raise ValueError("worker returned a different graph") + raw_path = args.raw / f"{index:02}-{tool}.json" + raw_path.write_text(json.dumps(result, indent=2, sort_keys=True) + "\n") + result["rawSha256"] = digest(raw_path) + results.append(result) + print(repository, tool, [(c["sampleId"], c.get("rank")) for c in result["cases"]], flush=True) + totals = {} + for tool in ("compass", "graphify"): + for cutoff in registration["method"]["cutoffs"]: + cases = [case for result in results if result["tool"] == tool for case in result["cases"]] + totals[f"{tool}@{cutoff}"] = { + label: sum(case.get("rank", cutoff + 1) <= cutoff and case["classification"] == label + for case in cases) + for label in ("unanimous-major-critical", "unanimous-none")} + output = {"schema": "compass.mlcq-class-degree-review/1", + "registrationSha256": digest(args.registration), + "priorReviewSha256": digest(args.prior_review), + "probeSha256": digest(Path(__file__)), + "scope": __doc__, "results": results, "cutoffs": totals} + args.output.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--inputs", type=Path) + parser.add_argument("--prior-review", type=Path) + parser.add_argument("--raw", type=Path) + parser.add_argument("--output", type=Path) + parser.add_argument("--worker", action="store_true") + parser.add_argument("--graph", type=Path) + parser.add_argument("--graph-index", type=int) + args = parser.parse_args() + if args.worker: + registration = json.loads(args.registration.read_text()) + record = registration["graphs"][args.graph_index] + cases = [case for case in registration["cases"] if + case["repository"] == record["repository"] and case["tool"] == record["tool"]] + print(json.dumps(graph_worker(args.graph, record, registration, cases), sort_keys=True)) + else: + if any(value is None for value in (args.inputs, args.prior_review, args.raw, args.output)): + parser.error("--inputs, --prior-review, --raw and --output are required") + main(args) diff --git a/benchmarks/agent_query/mlcq_class_degree_registration.json b/benchmarks/agent_query/mlcq_class_degree_registration.json new file mode 100644 index 000000000..0cad17bc7 --- /dev/null +++ b/benchmarks/agent_query/mlcq_class_degree_registration.json @@ -0,0 +1,203 @@ +{ + "cases": [ + { + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d" + ], + "repository": "apache/cloudstack", + "sampleId": 8528735, + "tool": "compass" + }, + { + "classification": "unanimous-none", + "graphIds": [ + "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6" + ], + "repository": "apache/cloudstack", + "sampleId": 8537138, + "tool": "compass" + }, + { + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819" + ], + "repository": "apache/cloudstack", + "sampleId": 8538037, + "tool": "compass" + }, + { + "classification": "unanimous-none", + "graphIds": [ + "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e" + ], + "repository": "apache/cloudstack", + "sampleId": 8539645, + "tool": "compass" + }, + { + "classification": "unanimous-major-critical", + "graphIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl" + ], + "repository": "apache/cloudstack", + "sampleId": 8528735, + "tool": "graphify" + }, + { + "classification": "unanimous-none", + "graphIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand" + ], + "repository": "apache/cloudstack", + "sampleId": 8537138, + "tool": "graphify" + }, + { + "classification": "unanimous-major-critical", + "graphIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi" + ], + "repository": "apache/cloudstack", + "sampleId": 8538037, + "tool": "graphify" + }, + { + "classification": "unanimous-none", + "graphIds": [ + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse" + ], + "repository": "apache/cloudstack", + "sampleId": 8539645, + "tool": "graphify" + }, + { + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8" + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6374724, + "tool": "compass" + }, + { + "classification": "unanimous-none", + "graphIds": [ + "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d" + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6391534, + "tool": "compass" + }, + { + "classification": "unanimous-none", + "graphIds": [ + "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06" + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6406137, + "tool": "compass" + }, + { + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6" + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413795, + "tool": "compass" + }, + { + "classification": "unanimous-major-critical", + "graphIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel" + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6374724, + "tool": "graphify" + }, + { + "classification": "unanimous-none", + "graphIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty" + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6391534, + "tool": "graphify" + }, + { + "classification": "unanimous-none", + "graphIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl" + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6406137, + "tool": "graphify" + }, + { + "classification": "unanimous-major-critical", + "graphIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto" + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413795, + "tool": "graphify" + } + ], + "disclosure": "The eight external ratings and previous native hub misses were inspected before this registration. This is known-data exploration, not held-out testing or classifier validation.", + "graphByteLimit": 1073741824, + "graphs": [ + { + "graphBytes": 671502979, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "repository": "apache/cloudstack", + "tool": "compass" + }, + { + "graphBytes": 227334534, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72", + "repository": "apache/cloudstack", + "tool": "graphify" + }, + { + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "repository": "eclipse/eclipse.platform.ui", + "tool": "compass" + }, + { + "graphBytes": 189557807, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef", + "repository": "eclipse/eclipse.platform.ui", + "tool": "graphify" + } + ], + "limitations": [ + "The two extracted graphs have different coverage and producer versions; this isolates neither extraction nor ranking quality.", + "The primary panel is purposively enriched, contains a positive-rated test class, and is too small for population precision.", + "Degree and class type are not source-verified responsibility, cohesion, or god-object severity.", + "A better class-only retrieval count would not justify a classifier or broad superiority claim." + ], + "maxClassCandidates": 100000, + "maxEdges": 2000000, + "maxNodes": 1000000, + "maxSecondsPerGraph": 300, + "method": { + "compassPool": "Node kind exactly class, with a nonempty source.file and positive integer source.startLine.", + "cutoffs": [ + 10, + 50, + 100 + ], + "degree": "Count distinct stored (source,target) endpoint pairs. Each pair contributes one to each endpoint, including two to a self-loop, matching the previously audited native directed-degree convention. Ignore parallel edge records for this ranking.", + "graphifyPool": "Node _callable_class exactly true, with a nonempty source_file and source_location matching L followed by a positive decimal line.", + "identity": "Use only exact graph IDs already verified for the eight primary source classes by the prior release follow-up; recheck each ID exists uniquely and qualifies for the pool. No label guessing.", + "order": "Descending degree, then ascending exact node ID. Do not exclude test or generated classes or tune a weight or threshold.", + "output": "Retain pool sizes, graph counts, full primary ranks/degrees, retrieved positive and none counts by cutoff, tool differences and all unavailable/error conditions. Native public god_nodes results stay separate." + }, + "priorInputsSha256": "663beb33e986c695ec4a6ae8864651f9838baa4c0d183a2da021d8d3197b951e", + "priorReleaseReviewSha256": "0db695b5722e741d4d740707ad69888141152ae69e4af02622254293d4e4680b", + "purpose": "Development diagnostic: apply a common class-only distinct endpoint-pair degree ranking to both frozen Java graphs, before considering any new Compass ranking option. Neither tool exposes this exact filter in the registered native god_nodes control.", + "schema": "compass.mlcq-class-degree-registration/1" +} diff --git a/benchmarks/agent_query/mlcq_class_degree_review.json b/benchmarks/agent_query/mlcq_class_degree_review.json new file mode 100644 index 000000000..ece10e5c6 --- /dev/null +++ b/benchmarks/agent_query/mlcq_class_degree_review.json @@ -0,0 +1,2627 @@ +{ + "cutoffs": { + "compass@10": { + "unanimous-major-critical": 0, + "unanimous-none": 0 + }, + "compass@100": { + "unanimous-major-critical": 0, + "unanimous-none": 0 + }, + "compass@50": { + "unanimous-major-critical": 0, + "unanimous-none": 0 + }, + "graphify@10": { + "unanimous-major-critical": 0, + "unanimous-none": 0 + }, + "graphify@100": { + "unanimous-major-critical": 0, + "unanimous-none": 0 + }, + "graphify@50": { + "unanimous-major-critical": 0, + "unanimous-none": 0 + } + }, + "priorReviewSha256": "0db695b5722e741d4d740707ad69888141152ae69e4af02622254293d4e4680b", + "probeSha256": "bf0f386c2e87bed146efd14043dad9ecd3534375791cde72870d4164d1696904", + "registrationSha256": "e3fe9693c3458606e07b9b721a4f1a896819614e22c0845b25e921b097301875", + "results": [ + { + "cases": [ + { + "classification": "unanimous-major-critical", + "degree": 75, + "graphId": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "rank": 340, + "sampleId": 8528735, + "status": "ranked" + }, + { + "classification": "unanimous-none", + "degree": 25, + "graphId": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "rank": 1600, + "sampleId": 8537138, + "status": "ranked" + }, + { + "classification": "unanimous-major-critical", + "degree": 36, + "graphId": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "rank": 999, + "sampleId": 8538037, + "status": "ranked" + }, + { + "classification": "unanimous-none", + "degree": 7, + "graphId": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "rank": 4668, + "sampleId": 8539645, + "status": "ranked" + } + ], + "classCandidates": 6373, + "danglingPairs": 0, + "directed": true, + "distinctEndpointPairs": 420494, + "edgeRecordCount": 502158, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "nodeCount": 173689, + "rawSha256": "4252af4b94153eeee9bb008b64a687352a6735c1a225e22a2d0df7e92eb7c6a2", + "repository": "apache/cloudstack", + "tool": "compass", + "top100": [ + { + "degree": 2260, + "id": "sha256:d2e4ecb92cae98091789e380fbfda0cdee48c13f08249e454173bb711a973128", + "label": "CloudRuntimeException", + "rank": 1 + }, + { + "degree": 1564, + "id": "sha256:dc197decba7245aff13d90baed5b68a2ad59f52e18d66d127a383066e212b8d3", + "label": "Answer", + "rank": 2 + }, + { + "degree": 1471, + "id": "sha256:763394e17767bbba6c021b7d8ebcdb376421bc8d3660877062abb0888486083c", + "label": "ApiConstants", + "rank": 3 + }, + { + "degree": 1207, + "id": "sha256:adee8751183e501ac47e2022d9c9e46123b42b1deb21dd691fb6864484c6ea42", + "label": "InvalidParameterValueException", + "rank": 4 + }, + { + "degree": 1103, + "id": "sha256:63cb3dc1370942ae6e187a052bc43c9417d2408e1b2ab904700b34a01cc6b21a", + "label": "SearchBuilder", + "rank": 5 + }, + { + "degree": 1088, + "id": "sha256:a5ea55a556d396b69c16b9c89fe1156916f77dca567af963af3d839bb3a496fb", + "label": "ServerApiException", + "rank": 6 + }, + { + "degree": 902, + "id": "sha256:10b9d8e53eb9370004ad21a5ee78d23b80775d88248d96bf3838b9c4565a8eb9", + "label": "Pair", + "rank": 7 + }, + { + "degree": 768, + "id": "sha256:15acf633b82e4b42cd27198c6e400b343125e30139ffedd1c83eb60801d5d8d8", + "label": "HostVO", + "rank": 8 + }, + { + "degree": 746, + "id": "sha256:fb8c6a60cd2b0e582c49204f6b74e98f53da5a9174e24bcc4f1edb27849b6671", + "label": "Command", + "rank": 9 + }, + { + "degree": 715, + "id": "sha256:5a5135111ba0801a036179946307b20e13f20f038fd93b09efb3b44f8cb79069", + "label": "GenericDaoBase", + "rank": 10 + }, + { + "degree": 698, + "id": "sha256:58e92219053a7a4ec0bcacc7e40693f084eaab31fdb5fc1eccc3c31e46778b06", + "label": "EventTypes", + "rank": 11 + }, + { + "degree": 592, + "id": "sha256:f7b64de19f8747ae1369d9a4f7e44772215eb58e44e041ec7179b3516c1683b3", + "label": "NicProfile", + "rank": 12 + }, + { + "degree": 521, + "id": "sha256:fbf0db418043d6398967ee1db20335abc5d40ad12c92e2b2cc6d187303bbf107", + "label": "BaseCmd", + "rank": 13 + }, + { + "degree": 518, + "id": "sha256:933b27661896271af12acc470bc715ceabf8d18c89fe75f5a45dd397436af1d9", + "label": "ConfigKey", + "rank": 14 + }, + { + "degree": 505, + "id": "sha256:2ed7f5aace287679efe47403d9d61c57a9562e436319d2c27a776d0a87dd96d7", + "label": "ResourceUnavailableException", + "rank": 15 + }, + { + "degree": 504, + "id": "sha256:353f4ca113c738e9bb88c1ac824bb7abea4625d81d78f91526883cc71e4d7a03", + "label": "CallContext", + "rank": 16 + }, + { + "degree": 494, + "id": "sha256:d57faa2beb351dcd84d28054dea60837fd40033c116880fa44f562a55de29080", + "label": "ApiDBUtils", + "rank": 17 + }, + { + "degree": 490, + "id": "sha256:0ae9d940f53705ad60e7093a3828aad76965ad7ef5ce168e06c9cef81a5535c4", + "label": "SearchCriteria", + "rank": 18 + }, + { + "degree": 463, + "id": "sha256:18201c7e9cf9f42f86178640bd75833c2a133cc4205c866b232500e266cd1645", + "label": "BaseAsyncCmd", + "rank": 19 + }, + { + "degree": 459, + "id": "sha256:79ba46da4eb85850bb2bbf4715f932ab4df40367c139b0e45be3f0a9d7e5e020", + "label": "NetworkVO", + "rank": 20 + }, + { + "degree": 456, + "id": "sha256:21f6207563d28461d137d67e34a47288d63ee58bee4baa6432c2475870eefc8e", + "label": "LibvirtComputingResource", + "rank": 21 + }, + { + "degree": 437, + "id": "sha256:556308c59cf4f77ee190f0bb1b1dfb87b040593e5e200648e3937498dcb830d9", + "label": "ByteBuffer", + "rank": 22 + }, + { + "degree": 436, + "id": "sha256:7be03978054b8014d10c2aae1fff9d6fbae51f554e759fc9d52d4e5e8160bd94", + "label": "DeployDestination", + "rank": 23 + }, + { + "degree": 434, + "id": "sha256:f0272e08f8faa43a509719e7de9501b28467d6900c98cb2327a4c5e3656d8242", + "label": "ListResponse", + "rank": 24 + }, + { + "degree": 431, + "id": "sha256:5833adad689f6c0e3a8c3acc6067edf49b75d122e4da180f72a41fd1fc3987cc", + "label": "BaseResponse", + "rank": 25 + }, + { + "degree": 403, + "id": "sha256:f0f2ef902a83a335e0235910beaf3984af13f8d4a4a7f0fe2ffeddbbbe585883", + "label": "CitrixResourceBase", + "rank": 26 + }, + { + "degree": 398, + "id": "sha256:d07ab21e064202572dbddd6a6a8675015466c5d348882fc09a5dbde0ab74242d", + "label": "VMInstanceVO", + "rank": 27 + }, + { + "degree": 358, + "id": "sha256:5702f1c2714190594468642d9275cce5562320f29dbf33e8d9d02c1a67f632ef", + "label": "CommandWrapper", + "rank": 28 + }, + { + "degree": 357, + "id": "sha256:eff992aae2f3de5d7a20c97fbcfafe3ae8c93924e5b1bce5d12020058598aacd", + "label": "StartupCommand", + "rank": 29 + }, + { + "degree": 352, + "id": "sha256:7a3cbed27a8b0fdb2801dd6ddd0d9252dd4928cf62484a85fc08593a63b8194d", + "label": "ConcurrentOperationException", + "rank": 30 + }, + { + "degree": 336, + "id": "sha256:33998566769537dad04ce6725d0e8a562614f6cef98e854292ebd2eafb80bbce", + "label": "AccountVO", + "rank": 31 + }, + { + "degree": 333, + "id": "sha256:502ae1e063bf5a3e1eff2b5b71b709f102b1272da14edf7ac6743d59df273fe9", + "label": "Filter", + "rank": 32 + }, + { + "degree": 330, + "id": "sha256:10e2e80ddb963db6f803b02411636819efcc1bff86264eb6251c4d7c27cf8d0b", + "label": "VolumeVO", + "rank": 33 + }, + { + "degree": 319, + "id": "sha256:a8f7679e45858762cd10b2796d5236f35d41a15e417e83434891c5fdcdd77466", + "label": "VMTemplateVO", + "rank": 34 + }, + { + "degree": 318, + "id": "sha256:98aac0dac14671d4064646fcf5a844cbbde3b9da98b2e1e84baeab0e5d33c339", + "label": "SuccessResponse", + "rank": 35 + }, + { + "degree": 312, + "id": "sha256:88cd2c67e4d8d4b7561861d11ead74870f367cad2e520c1ff3bcebde23a4d068", + "label": "UserVmResponse", + "rank": 36 + }, + { + "degree": 303, + "id": "sha256:31d2d0cdc8750e9e44261c0f8ebe9cf9192797db3411f8fd5dbce4f8950dbd8f", + "label": "VirtualMachineTO", + "rank": 37 + }, + { + "degree": 300, + "id": "sha256:d179f9cd5d77e95070fad023a5d5892967cf2536050a517a675c91646be055a1", + "label": "TransactionLegacy", + "rank": 38 + }, + { + "degree": 298, + "id": "sha256:47f0b827831b89461f03228e939d787748c50f64262587383c25697939f1dda7", + "label": "InsufficientCapacityException", + "rank": 39 + }, + { + "degree": 285, + "id": "sha256:89958b30a68c0d0e26fcf92a9ed7d41013ec332bda1ed95598a8432d7174aaaf", + "label": "DataCenterVO", + "rank": 40 + }, + { + "degree": 280, + "id": "sha256:d6ebd1fbb0c3a1320e5ef4acc6ecfececfb9b2f48c6752f2568613c5446ffeca", + "label": "StoragePoolVO", + "rank": 41 + }, + { + "degree": 279, + "id": "sha256:928e095f1a9a31412f81ec8da219b952ccc5798e3082e3b4d4a5511f9614406c", + "label": "IPAddressVO", + "rank": 42 + }, + { + "degree": 276, + "id": "sha256:17e101b0825609ef7758d7f591d9d36e798a6852348ddbc7c87ec1d87ae778f3", + "label": "NetUtils", + "rank": 43 + }, + { + "degree": 265, + "id": "sha256:6fa47d4d6da728a86910b6ad86ea18b54a2bd08a5334d7bbfe205178d7e26838", + "label": "Script", + "rank": 44 + }, + { + "degree": 265, + "id": "sha256:83c9978d3790a4d384ee8629104a1bc83735af9f6769f52939dbf156eb3e9aab", + "label": "ResourceAllocationException", + "rank": 45 + }, + { + "degree": 264, + "id": "sha256:dc722217a1893cd761ecd6d13f2cbad87dd4c1df1ab488ee69047b4849264d31", + "label": "DomainRouterVO", + "rank": 46 + }, + { + "degree": 264, + "id": "sha256:e4cf52b34260f87920a861db248903dcbff8a860da6d8ac6801ffba7765d1cd0", + "label": "ManagerBase", + "rank": 47 + }, + { + "degree": 255, + "id": "sha256:3372aaeb7a8660273353fbc096acda7e2da66dcbcffa6ac3d3d868d57caeea0a", + "label": "UserVmManagerImpl", + "rank": 48 + }, + { + "degree": 253, + "id": "sha256:58313e5807d22a93c2887853652f38ae6206b130fc5fe47635b839fe836dd15a", + "label": "VolumeObjectTO", + "rank": 49 + }, + { + "degree": 249, + "id": "sha256:8b1fb4d48f1ca89243c008c2ac1dfbd358f52f448f30ea1e01b6c9920be5c20b", + "label": "NicVO", + "rank": 50 + }, + { + "degree": 247, + "id": "sha256:12fd3849be2ee9a5bf533d71c5791e6c51c47180391845b0c4462e256f77d310", + "label": "UserVmJoinVO", + "rank": 51 + }, + { + "degree": 241, + "id": "sha256:37d219588cdf8d2cedeed0912030dba4af95e105df8c78bd961389d41013017f", + "label": "VmwareResource", + "rank": 52 + }, + { + "degree": 237, + "id": "sha256:2694c6d5b82d189bc3b3a936754be2b39a738d986bf1f6d6bc7820d2e23fab3c", + "label": "VirtualMachineManagerImpl", + "rank": 53 + }, + { + "degree": 237, + "id": "sha256:4f2eb7becaeaad8d9ea7add0028c7d2a92bb12b1c8e999ba83bd10d8cbb8cfa3", + "label": "VirtualMachineMO", + "rank": 54 + }, + { + "degree": 234, + "id": "sha256:1042ba9435b94c9afaa280e984726351d3449a1647e432e32898d5f9f3458788", + "label": "HostResponse", + "rank": 55 + }, + { + "degree": 232, + "id": "sha256:089e5f44d5127c05cd0c3bf58f2941cece3c80db7b520b484445362596161fbd", + "label": "VolumeResponse", + "rank": 56 + }, + { + "degree": 221, + "id": "sha256:90ce8ab25d1b2753dfc9d7ed386915c7c4d676bb38eea8d0974e8e99c3af2f77", + "label": "EngineHostVO", + "rank": 57 + }, + { + "degree": 220, + "id": "sha256:c22b779521fcc8a338c39ede759e64570dd5f7b261277382c85da4d87cfc4b9f", + "label": "GenericSearchBuilder", + "rank": 58 + }, + { + "degree": 215, + "id": "sha256:edf421e1c632472a47397bc2dc0de286fda02a1db1ded529a3e5f3f171fc5059", + "label": "UserVO", + "rank": 59 + }, + { + "degree": 210, + "id": "sha256:cb8374198eda686d58e7a1145a8cf407d5b563a339e10625254d67ee5f4cdafe", + "label": "ElastistorUtil", + "rank": 60 + }, + { + "degree": 209, + "id": "sha256:20cb6531bbccad3a9b422deca88e80ec421a3d846b0e8b57d2faa1e6b4b41363", + "label": "CloudStackTypes", + "rank": 61 + }, + { + "degree": 205, + "id": "sha256:9774fdec448d8c54c8d756129248df2716bf794d149e6ff43adf339ddb1cf8fa", + "label": "BaseListCmd", + "rank": 62 + }, + { + "degree": 205, + "id": "sha256:b3e319ee0129f0815059f938155db1af69766aa117a52e193f84d65b902ccc73", + "label": "DomainResponse", + "rank": 63 + }, + { + "degree": 205, + "id": "sha256:ddee23d7950f95811d5c9e2593c99012b214819651358539f6a6a4147855a00f", + "label": "AdapterBase", + "rank": 64 + }, + { + "degree": 204, + "id": "sha256:d6b39f0d635a23922dd23b9c84e56429443cc4bb4eba896ab8ed733d7b3cd2bb", + "label": "VmwareContext", + "rank": 65 + }, + { + "degree": 201, + "id": "sha256:b28bca73a88ea7a2f92ea7e72aad8007cd0f0447a65ea20c1066319856833782", + "label": "Commands", + "rank": 66 + }, + { + "degree": 199, + "id": "sha256:b5aee3850c939c36318912e62042f283e730ce9ee5a31bb842e672180c4b7a70", + "label": "StorageManagerImpl", + "rank": 67 + }, + { + "degree": 197, + "id": "sha256:bfc3981a540f7e24fbc04ebe6ef97335490a31ccf1949881526c7074aec24499", + "label": "NetworkOfferingVO", + "rank": 68 + }, + { + "degree": 194, + "id": "sha256:ac1a5592b379c483f1c0fe90e9f7e48307dffb4e854443373386e81c43e5f7a4", + "label": "ManagementServerImpl", + "rank": 69 + }, + { + "degree": 188, + "id": "sha256:14f73cde2db4a6d9c420149e6d32c85984bbb564dd87c06d4b186e9e1aca4266", + "label": "UserVmVO", + "rank": 70 + }, + { + "degree": 187, + "id": "sha256:7a856584ffc0970338f1d29cee370a1bda4bb6feeb414b42aa909b017a77e08b", + "label": "ZoneResponse", + "rank": 71 + }, + { + "degree": 185, + "id": "sha256:a9d2a051a3731dd0119885fe2caf626e142c9387507144e6ffbe08c2152b42e7", + "label": "ConfigurationManagerImpl", + "rank": 72 + }, + { + "degree": 183, + "id": "sha256:55173996b84b4716c070500a6436ad52d89d21923a3d39dad25f34d8fbfb7705", + "label": "TransactionCallbackNoReturn", + "rank": 73 + }, + { + "degree": 182, + "id": "sha256:50897be43ce7733cfda83b5ab8a849cc4612ad311146f564f75ac0aa708ccc11", + "label": "NetworkOrchestrator", + "rank": 74 + }, + { + "degree": 182, + "id": "sha256:5b635ac3a0e8a04f7754a5be91b8fc40077de3a75302150e522dcf92c6e80f48", + "label": "NicTO", + "rank": 75 + }, + { + "degree": 181, + "id": "sha256:553aaaca9a517a8bca513748989b396fadb95c284a64acbb44e1b01b2f6d59ce", + "label": "VolumeJoinVO", + "rank": 76 + }, + { + "degree": 178, + "id": "sha256:4346a9ecc54affd64e471d70288f0d8a5115e68fe2c6990c0abb217ce6d046f5", + "label": "QueryManagerImpl", + "rank": 77 + }, + { + "degree": 177, + "id": "sha256:064509b4b983fea555c42a79b8f709ed16862a76d0bf444b99228b43b4e5f042", + "label": "TemplateResponse", + "rank": 78 + }, + { + "degree": 177, + "id": "sha256:6737aa6905178f7c2c2593a72ad66f82415728e39a52637f59e7987b11a1b30e", + "label": "JuniperSrxResource", + "rank": 79 + }, + { + "degree": 177, + "id": "sha256:8c9ed4ba046fe6e515e5d9481bd78bdc283edbde78d333dc6827b4411a6c6912", + "label": "NetworkModelImpl", + "rank": 80 + }, + { + "degree": 176, + "id": "sha256:a16f931e51c4750800b37f3ba43a9cdf56c3dd4c47d41e491923e73db7972862", + "label": "DiskOfferingVO", + "rank": 81 + }, + { + "degree": 176, + "id": "sha256:c65f51dea54d452b3a7c61643db9a3ec2ccaef85987c707307a79551d7540cf9", + "label": "TemplateDataStoreVO", + "rank": 82 + }, + { + "degree": 176, + "id": "sha256:de0d096bbbdb8b3086752ca08a7eee55250934eb14f290074730dd42a0b4ffec", + "label": "ResourceManagerImpl", + "rank": 83 + }, + { + "degree": 174, + "id": "sha256:c2849cb7bfef25238ba5b84478e08ea41650d0fb73ffde52c6fc7b329d788605", + "label": "NetworkServiceImpl", + "rank": 84 + }, + { + "degree": 173, + "id": "sha256:594f2211dce1c0d40e5ab1f06ef95b4800a81b8b9c1f5b61cbe2909538a3f483", + "label": "TemplateJoinVO", + "rank": 85 + }, + { + "degree": 172, + "id": "sha256:0c587dad43b75ac19f21634882d87ef9d95f4c56e8507889d2eed4bb64bf4346", + "label": "NetworkElementCommand", + "rank": 86 + }, + { + "degree": 170, + "id": "sha256:0220099a0532cfb7eb51e8edc4864402241425615deccc9b118357f0974351da", + "label": "DomainVO", + "rank": 87 + }, + { + "degree": 170, + "id": "sha256:22de97ca49df9973c49597ace8549768ff88b56006a0af52665c0845b9d05711", + "label": "Ovm3Configuration", + "rank": 88 + }, + { + "degree": 169, + "id": "sha256:c7f26b60d19cf79bf3231efc2ec47bff55347432d0cabae89277eb0d0dd20181", + "label": "NfsSecondaryStorageResource", + "rank": 89 + }, + { + "degree": 168, + "id": "sha256:ec0e88626015fc3b2570cf14ad0776141d3392e1512acb47cf59517567dea0ca", + "label": "StatsCollector", + "rank": 90 + }, + { + "degree": 167, + "id": "sha256:1b1c4d2d746062d55e497732e762de1bce538b978871b30faf567bd008207b8b", + "label": "UserVmData", + "rank": 91 + }, + { + "degree": 166, + "id": "sha256:307ca6ce65525268cc9a26047acecce3f0862044f21ce2741ca57c21c8a35c9d", + "label": "LibvirtComputingResourceTest", + "rank": 92 + }, + { + "degree": 166, + "id": "sha256:c03d567c786b7be42c2889377f46837eb1255c1c2fc7ca45b77f4cf853055154", + "label": "ExecutionException", + "rank": 93 + }, + { + "degree": 164, + "id": "sha256:4087e3837385780f2c28ce3a5bdf19e6b9ac52a73ff84e5c3f052d4a4a88da76", + "label": "AccountResponse", + "rank": 94 + }, + { + "degree": 163, + "id": "sha256:4f6ae1e700662e8d085e8a26d0461a69034c1afd65f1682c5c3186d3e72c6262", + "label": "PermissionDeniedException", + "rank": 95 + }, + { + "degree": 162, + "id": "sha256:35534b2fc5e1b18d6a889c5274c588010c9ab5e1aecc01e932bb0c66eb75c732", + "label": "Ip", + "rank": 96 + }, + { + "degree": 162, + "id": "sha256:b88f9f6fb6d8b75a3ae088332e339ede3114563f1f1f989f23850bade25049c4", + "label": "ServiceOfferingVO", + "rank": 97 + }, + { + "degree": 161, + "id": "sha256:64b1ddeff133c22eb93ec4b96c5a6dddee8f22354bcf11148ecae90e0c60b19a", + "label": "VirtualNetworkApplianceManagerImpl", + "rank": 98 + }, + { + "degree": 161, + "id": "sha256:c65cd58ac152078a416d32c49297baabb01422b0db972608568f04e6770e56f6", + "label": "ProjectResponse", + "rank": 99 + }, + { + "degree": 161, + "id": "sha256:dc460950324fc045331be240f3fea40bc4909897b81bc28d5f34ff5f5f79e223", + "label": "ApiResponseHelper", + "rank": 100 + } + ] + }, + { + "cases": [ + { + "classification": "unanimous-major-critical", + "degree": 71, + "graphId": "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl", + "rank": 463, + "sampleId": 8528735, + "status": "ranked" + }, + { + "classification": "unanimous-none", + "degree": 21, + "graphId": "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand", + "rank": 2238, + "sampleId": 8537138, + "status": "ranked" + }, + { + "classification": "unanimous-major-critical", + "degree": 32, + "graphId": "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi", + "rank": 1315, + "sampleId": 8538037, + "status": "ranked" + }, + { + "classification": "unanimous-none", + "degree": 6, + "graphId": "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse", + "rank": 6242, + "sampleId": 8539645, + "status": "ranked" + } + ], + "classCandidates": 7700, + "danglingPairs": 0, + "directed": false, + "distinctEndpointPairs": 340129, + "edgeRecordCount": 340129, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72", + "nodeCount": 93793, + "rawSha256": "e2a9167b206928d68d891e2413a5231493b8bd8b5aa4ab6ebd64b560577729df", + "repository": "apache/cloudstack", + "tool": "graphify", + "top100": [ + { + "degree": 2273, + "id": "utils_src_main_java_com_cloud_utils_exception_cloudruntimeexception_cloudruntimeexception", + "label": "CloudRuntimeException", + "rank": 1 + }, + { + "degree": 1458, + "id": "api_src_main_java_com_cloud_agent_api_answer_answer", + "label": "Answer", + "rank": 2 + }, + { + "degree": 1332, + "id": "api_src_main_java_org_apache_cloudstack_api_apicommand_apicommand", + "label": "APICommand", + "rank": 3 + }, + { + "degree": 1293, + "id": "api_src_main_java_com_cloud_network_network_network", + "label": "Network", + "rank": 4 + }, + { + "degree": 1149, + "id": "api_src_main_java_com_cloud_user_account_account", + "label": "Account", + "rank": 5 + }, + { + "degree": 799, + "id": "framework_db_src_main_java_com_cloud_utils_db_db_db", + "label": "DB", + "rank": 6 + }, + { + "degree": 798, + "id": "utils_src_main_java_com_cloud_utils_pair_pair", + "label": "Pair", + "rank": 7 + }, + { + "degree": 780, + "id": "api_src_main_java_org_apache_cloudstack_api_apiconstants_apiconstants", + "label": "ApiConstants", + "rank": 8 + }, + { + "degree": 758, + "id": "framework_db_src_main_java_com_cloud_utils_db_genericdao_genericdao", + "label": "GenericDao", + "rank": 9 + }, + { + "degree": 711, + "id": "api_src_main_java_com_cloud_host_host_host", + "label": "Host", + "rank": 10 + }, + { + "degree": 683, + "id": "api_src_main_java_com_cloud_agent_api_command_command", + "label": "Command", + "rank": 11 + }, + { + "degree": 663, + "id": "framework_db_src_main_java_com_cloud_utils_db_genericdaobase_genericdaobase", + "label": "GenericDaoBase", + "rank": 12 + }, + { + "degree": 657, + "id": "engine_schema_src_main_java_com_cloud_host_hostvo_hostvo", + "label": "HostVO", + "rank": 13 + }, + { + "degree": 639, + "id": "api_src_main_java_com_cloud_vm_virtualmachineprofile_virtualmachineprofile", + "label": "VirtualMachineProfile", + "rank": 14 + }, + { + "degree": 587, + "id": "api_src_main_java_org_apache_cloudstack_api_parameter_parameter", + "label": "Parameter", + "rank": 15 + }, + { + "degree": 582, + "id": "api_src_main_java_com_cloud_hypervisor_hypervisor_hypervisortype", + "label": "HypervisorType", + "rank": 16 + }, + { + "degree": 578, + "id": "api_src_main_java_com_cloud_vm_virtualmachine_virtualmachine", + "label": "VirtualMachine", + "rank": 17 + }, + { + "degree": 560, + "id": "framework_db_src_main_java_com_cloud_utils_db_searchbuilder_searchbuilder", + "label": "SearchBuilder", + "rank": 18 + }, + { + "degree": 540, + "id": "api_src_main_java_org_apache_cloudstack_api_serverapiexception_serverapiexception", + "label": "ServerApiException", + "rank": 19 + }, + { + "degree": 523, + "id": "api_src_main_java_com_cloud_vm_nicprofile_nicprofile", + "label": "NicProfile", + "rank": 20 + }, + { + "degree": 521, + "id": "engine_api_src_main_java_org_apache_cloudstack_engine_subsystem_api_storage_datastore_datastore", + "label": "DataStore", + "rank": 21 + }, + { + "degree": 521, + "id": "tools_marvin_marvin_cloudstacktestcase_cloudstacktestcase", + "label": "cloudstackTestCase", + "rank": 22 + }, + { + "degree": 512, + "id": "api_src_main_java_org_apache_cloudstack_api_basecmd_basecmd", + "label": "BaseCmd", + "rank": 23 + }, + { + "degree": 507, + "id": "api_src_main_java_org_apache_cloudstack_api_apierrorcode_apierrorcode", + "label": "ApiErrorCode", + "rank": 24 + }, + { + "degree": 505, + "id": "api_src_main_java_com_cloud_exception_resourceunavailableexception_resourceunavailableexception", + "label": "ResourceUnavailableException", + "rank": 25 + }, + { + "degree": 499, + "id": "api_src_main_java_com_cloud_exception_invalidparametervalueexception_invalidparametervalueexception", + "label": "InvalidParameterValueException", + "rank": 26 + }, + { + "degree": 489, + "id": "api_src_main_java_org_apache_cloudstack_api_internalidentity_internalidentity", + "label": "InternalIdentity", + "rank": 27 + }, + { + "degree": 478, + "id": "api_src_main_java_org_apache_cloudstack_context_callcontext_callcontext", + "label": "CallContext", + "rank": 28 + }, + { + "degree": 457, + "id": "framework_db_src_main_java_com_cloud_utils_db_searchcriteria_searchcriteria", + "label": "SearchCriteria", + "rank": 29 + }, + { + "degree": 454, + "id": "api_src_main_java_org_apache_cloudstack_api_baseasynccmd_baseasynccmd", + "label": "BaseAsyncCmd", + "rank": 30 + }, + { + "degree": 454, + "id": "tools_marvin_marvin_lib_base_account", + "label": "Account", + "rank": 31 + }, + { + "degree": 434, + "id": "api_src_main_java_com_cloud_vm_reservationcontext_reservationcontext", + "label": "ReservationContext", + "rank": 32 + }, + { + "degree": 434, + "id": "api_src_main_java_org_apache_cloudstack_api_baseresponse_baseresponse", + "label": "BaseResponse", + "rank": 33 + }, + { + "degree": 433, + "id": "tools_marvin_marvin_lib_base_virtualmachine", + "label": "VirtualMachine", + "rank": 34 + }, + { + "degree": 431, + "id": "api_src_main_java_org_apache_cloudstack_api_response_listresponse_listresponse", + "label": "ListResponse", + "rank": 35 + }, + { + "degree": 415, + "id": "plugins_hypervisors_kvm_src_main_java_com_cloud_hypervisor_kvm_resource_libvirtcomputingresource_libvirtcomputingresource", + "label": "LibvirtComputingResource", + "rank": 36 + }, + { + "degree": 409, + "id": "server_src_main_java_com_cloud_configuration_config_config", + "label": "Config", + "rank": 37 + }, + { + "degree": 408, + "id": "engine_schema_src_main_java_com_cloud_host_dao_hostdao_hostdao", + "label": "HostDao", + "rank": 38 + }, + { + "degree": 408, + "id": "plugins_hypervisors_xenserver_src_main_java_com_cloud_hypervisor_xenserver_resource_citrixresourcebase_citrixresourcebase", + "label": "CitrixResourceBase", + "rank": 39 + }, + { + "degree": 406, + "id": "api_src_main_java_com_cloud_deploy_deploydestination_deploydestination", + "label": "DeployDestination", + "rank": 40 + }, + { + "degree": 403, + "id": "tools_marvin_marvin_lib_base_serviceoffering", + "label": "ServiceOffering", + "rank": 41 + }, + { + "degree": 390, + "id": "framework_config_src_main_java_org_apache_cloudstack_framework_config_dao_configurationdao_configurationdao", + "label": "ConfigurationDao", + "rank": 42 + }, + { + "degree": 379, + "id": "server_src_main_java_com_cloud_api_apidbutils_apidbutils", + "label": "ApiDBUtils", + "rank": 43 + }, + { + "degree": 376, + "id": "core_src_main_java_com_cloud_resource_resourcewrapper_resourcewrapper", + "label": "ResourceWrapper", + "rank": 44 + }, + { + "degree": 359, + "id": "api_src_main_java_com_cloud_network_network_service", + "label": "Service", + "rank": 45 + }, + { + "degree": 354, + "id": "api_src_main_java_com_cloud_offering_networkoffering_networkoffering", + "label": "NetworkOffering", + "rank": 46 + }, + { + "degree": 353, + "id": "core_src_main_java_com_cloud_resource_commandwrapper_commandwrapper", + "label": "CommandWrapper", + "rank": 47 + }, + { + "degree": 352, + "id": "engine_schema_src_main_java_com_cloud_network_dao_networkvo_networkvo", + "label": "NetworkVO", + "rank": 48 + }, + { + "degree": 345, + "id": "api_src_main_java_com_cloud_event_eventtypes_eventtypes", + "label": "EventTypes", + "rank": 49 + }, + { + "degree": 340, + "id": "services_console_proxy_rdpconsole_src_main_java_streamer_bytebuffer_bytebuffer", + "label": "ByteBuffer", + "rank": 50 + }, + { + "degree": 339, + "id": "api_src_main_java_com_cloud_event_actionevent_actionevent", + "label": "ActionEvent", + "rank": 51 + }, + { + "degree": 339, + "id": "engine_schema_src_main_java_com_cloud_vm_vminstancevo_vminstancevo", + "label": "VMInstanceVO", + "rank": 52 + }, + { + "degree": 336, + "id": "engine_components_api_src_main_java_com_cloud_agent_agentmanager_agentmanager", + "label": "AgentManager", + "rank": 53 + }, + { + "degree": 329, + "id": "api_src_main_java_com_cloud_exception_concurrentoperationexception_concurrentoperationexception", + "label": "ConcurrentOperationException", + "rank": 54 + }, + { + "degree": 329, + "id": "core_src_main_java_com_cloud_agent_api_startupcommand_startupcommand", + "label": "StartupCommand", + "rank": 55 + }, + { + "degree": 321, + "id": "api_src_main_java_com_cloud_storage_storagepool_storagepool", + "label": "StoragePool", + "rank": 56 + }, + { + "degree": 321, + "id": "engine_schema_src_main_java_com_cloud_dc_dao_datacenterdao_datacenterdao", + "label": "DataCenterDao", + "rank": 57 + }, + { + "degree": 317, + "id": "api_src_main_java_org_apache_cloudstack_api_apicommandjobtype_apicommandjobtype", + "label": "ApiCommandJobType", + "rank": 58 + }, + { + "degree": 316, + "id": "api_src_main_java_org_apache_cloudstack_api_response_successresponse_successresponse", + "label": "SuccessResponse", + "rank": 59 + }, + { + "degree": 313, + "id": "api_src_main_java_com_cloud_network_networkmodel_networkmodel", + "label": "NetworkModel", + "rank": 60 + }, + { + "degree": 307, + "id": "engine_api_src_main_java_org_apache_cloudstack_engine_subsystem_api_storage_dataobject_dataobject", + "label": "DataObject", + "rank": 61 + }, + { + "degree": 294, + "id": "api_src_main_java_com_cloud_exception_insufficientcapacityexception_insufficientcapacityexception", + "label": "InsufficientCapacityException", + "rank": 62 + }, + { + "degree": 292, + "id": "api_src_main_java_org_apache_cloudstack_api_response_uservmresponse_uservmresponse", + "label": "UserVmResponse", + "rank": 63 + }, + { + "degree": 289, + "id": "api_src_main_java_com_cloud_network_networks_traffictype", + "label": "TrafficType", + "rank": 64 + }, + { + "degree": 286, + "id": "engine_schema_src_main_java_com_cloud_user_accountvo_accountvo", + "label": "AccountVO", + "rank": 65 + }, + { + "degree": 285, + "id": "server_src_main_java_com_cloud_user_accountmanager_accountmanager", + "label": "AccountManager", + "rank": 66 + }, + { + "degree": 280, + "id": "engine_schema_src_main_java_com_cloud_network_dao_networkdao_networkdao", + "label": "NetworkDao", + "rank": 67 + }, + { + "degree": 278, + "id": "engine_schema_src_main_java_com_cloud_vm_dao_vminstancedao_vminstancedao", + "label": "VMInstanceDao", + "rank": 68 + }, + { + "degree": 275, + "id": "api_src_main_java_com_cloud_storage_volume_volume", + "label": "Volume", + "rank": 69 + }, + { + "degree": 272, + "id": "engine_schema_src_main_java_com_cloud_storage_volumevo_volumevo", + "label": "VolumeVO", + "rank": 70 + }, + { + "degree": 266, + "id": "plugins_network_elements_juniper_contrail_src_test_java_org_apache_cloudstack_network_contrail_management_integrationtestconfiguration_integrationtestconfiguration", + "label": "IntegrationTestConfiguration", + "rank": 71 + }, + { + "degree": 264, + "id": "utils_src_main_java_com_cloud_utils_component_managerbase_managerbase", + "label": "ManagerBase", + "rank": 72 + }, + { + "degree": 262, + "id": "api_src_main_java_com_cloud_agent_api_to_virtualmachineto_virtualmachineto", + "label": "VirtualMachineTO", + "rank": 73 + }, + { + "degree": 262, + "id": "engine_api_src_main_java_org_apache_cloudstack_engine_subsystem_api_storage_volumeinfo_volumeinfo", + "label": "VolumeInfo", + "rank": 74 + }, + { + "degree": 260, + "id": "api_src_main_java_com_cloud_exception_resourceallocationexception_resourceallocationexception", + "label": "ResourceAllocationException", + "rank": 75 + }, + { + "degree": 260, + "id": "api_src_main_java_com_cloud_network_router_virtualrouter_virtualrouter", + "label": "VirtualRouter", + "rank": 76 + }, + { + "degree": 260, + "id": "engine_schema_src_main_java_com_cloud_storage_vmtemplatevo_vmtemplatevo", + "label": "VMTemplateVO", + "rank": 77 + }, + { + "degree": 258, + "id": "framework_db_src_main_java_com_cloud_utils_db_filter_filter", + "label": "Filter", + "rank": 78 + }, + { + "degree": 257, + "id": "engine_components_api_src_main_java_com_cloud_resource_resourcemanager_resourcemanager", + "label": "ResourceManager", + "rank": 79 + }, + { + "degree": 256, + "id": "framework_config_src_main_java_org_apache_cloudstack_framework_config_configkey_configkey", + "label": "ConfigKey", + "rank": 80 + }, + { + "degree": 255, + "id": "framework_db_src_main_java_com_cloud_utils_db_transactionlegacy_transactionlegacy", + "label": "TransactionLegacy", + "rank": 81 + }, + { + "degree": 250, + "id": "api_src_main_java_com_cloud_dc_datacenter_datacenter", + "label": "DataCenter", + "rank": 82 + }, + { + "degree": 249, + "id": "api_src_main_java_com_cloud_user_user_user", + "label": "User", + "rank": 83 + }, + { + "degree": 243, + "id": "utils_src_main_java_com_cloud_utils_net_netutils_netutils", + "label": "NetUtils", + "rank": 84 + }, + { + "degree": 241, + "id": "utils_src_main_java_com_cloud_utils_script_script_script", + "label": "Script", + "rank": 85 + }, + { + "degree": 240, + "id": "engine_schema_src_main_java_com_cloud_vm_domainroutervo_domainroutervo", + "label": "DomainRouterVO", + "rank": 86 + }, + { + "degree": 239, + "id": "api_src_main_java_com_cloud_network_network_provider", + "label": "Provider", + "rank": 87 + }, + { + "degree": 235, + "id": "api_src_main_java_org_apache_cloudstack_api_entityreference_entityreference", + "label": "EntityReference", + "rank": 88 + }, + { + "degree": 233, + "id": "engine_schema_src_main_java_org_apache_cloudstack_storage_datastore_db_storagepoolvo_storagepoolvo", + "label": "StoragePoolVO", + "rank": 89 + }, + { + "degree": 232, + "id": "api_src_main_java_com_cloud_serializer_param_param", + "label": "Param", + "rank": 90 + }, + { + "degree": 232, + "id": "api_src_main_java_org_apache_cloudstack_acl_roletype_roletype", + "label": "RoleType", + "rank": 91 + }, + { + "degree": 231, + "id": "engine_schema_src_main_java_com_cloud_dc_datacentervo_datacentervo", + "label": "DataCenterVO", + "rank": 92 + }, + { + "degree": 231, + "id": "tools_marvin_marvin_sshclient_sshclient", + "label": "SshClient", + "rank": 93 + }, + { + "degree": 227, + "id": "api_src_main_java_com_cloud_host_status_status", + "label": "Status", + "rank": 94 + }, + { + "degree": 225, + "id": "engine_schema_src_main_java_com_cloud_storage_dao_volumedao_volumedao", + "label": "VolumeDao", + "rank": 95 + }, + { + "degree": 224, + "id": "engine_schema_src_main_java_com_cloud_network_dao_ipaddressvo_ipaddressvo", + "label": "IPAddressVO", + "rank": 96 + }, + { + "degree": 222, + "id": "core_src_main_java_com_cloud_resource_serverresource_serverresource", + "label": "ServerResource", + "rank": 97 + }, + { + "degree": 222, + "id": "server_src_main_java_com_cloud_vm_uservmmanagerimpl_uservmmanagerimpl", + "label": "UserVmManagerImpl", + "rank": 98 + }, + { + "degree": 221, + "id": "engine_schema_src_main_java_org_apache_cloudstack_storage_datastore_db_primarydatastoredao_primarydatastoredao", + "label": "PrimaryDataStoreDao", + "rank": 99 + }, + { + "degree": 217, + "id": "engine_schema_src_main_java_com_cloud_user_dao_accountdao_accountdao", + "label": "AccountDao", + "rank": 100 + } + ] + }, + { + "cases": [ + { + "classification": "unanimous-major-critical", + "degree": 36, + "graphId": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "rank": 728, + "sampleId": 6374724, + "status": "ranked" + }, + { + "classification": "unanimous-none", + "degree": 54, + "graphId": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "rank": 366, + "sampleId": 6391534, + "status": "ranked" + }, + { + "classification": "unanimous-none", + "degree": 11, + "graphId": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "rank": 3076, + "sampleId": 6406137, + "status": "ranked" + }, + { + "classification": "unanimous-major-critical", + "degree": 21, + "graphId": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "rank": 1529, + "sampleId": 6413795, + "status": "ranked" + } + ], + "classCandidates": 6628, + "danglingPairs": 0, + "directed": true, + "distinctEndpointPairs": 283130, + "edgeRecordCount": 347974, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "nodeCount": 95084, + "rawSha256": "eea4710ddd035468f9a9ffb286cc8cfdb7a01ee569641507e9dc98bf8137ffcb", + "repository": "eclipse/eclipse.platform.ui", + "tool": "compass", + "top100": [ + { + "degree": 988, + "id": "sha256:e708d23db81026e47a3683017b15d54b1eaa2c1ca677527dafc26deff961503d", + "label": "IDEWorkbenchMessages", + "rank": 1 + }, + { + "degree": 904, + "id": "sha256:3eba7652c207818ec7caaa3eead51ac5e3c087665d590ddee15eee5f940b8ffe", + "label": "WorkbenchMessages", + "rank": 2 + }, + { + "degree": 725, + "id": "sha256:2620a7c3781366a2d1276ef4b554b77cc8f4f84ee7ac3254250de7af34d93969", + "label": "ImageDescriptor", + "rank": 3 + }, + { + "degree": 682, + "id": "sha256:bf77b18db427cf4b42a323d3e11a5ead2b27b5a0e65f955984653a2bfabeef41", + "label": "PlatformUI", + "rank": 4 + }, + { + "degree": 663, + "id": "sha256:cee1e8f5ab5069a690bef638b5159a81d8edf07bc27a8bfaded753df3e6a6a23", + "label": "MenuPackageImpl", + "rank": 5 + }, + { + "degree": 609, + "id": "sha256:91afa88ca73a1d57f151d5aab5167c510f727ef4af89084b16bd87a2fa2776a6", + "label": "EPartServiceTest", + "rank": 6 + }, + { + "degree": 556, + "id": "sha256:20ac60d4cdc9aa29c2943d7482e8e94b6df6ff77f109bbf070ec7a38c2893403", + "label": "Realm", + "rank": 7 + }, + { + "degree": 507, + "id": "sha256:b3fe27fa216e8438ddccfa03579b4144feb1f867a9f57ab536b9bf8ac6fa1d02", + "label": "Viewer", + "rank": 8 + }, + { + "degree": 503, + "id": "sha256:b3c51212ee203aa6ff27a86e7d44aa55f3b6398471108fdc90af6a3606c5788d", + "label": "BasicPackageImpl", + "rank": 9 + }, + { + "degree": 485, + "id": "sha256:9401ba758eaf69803275e812d10a4d61d249592cba57e6314616f21f5259c8e8", + "label": "StructuredSelection", + "rank": 10 + }, + { + "degree": 427, + "id": "sha256:32c9771a6001d723382486823a763213098b88e19dd1dd695025556dcb7b4125", + "label": "Action", + "rank": 11 + }, + { + "degree": 413, + "id": "sha256:0e0c6001e76e806395a9a9b38dd20da576525c3a1305aec4cdcdc94d8994f153", + "label": "MenuManager", + "rank": 12 + }, + { + "degree": 404, + "id": "sha256:7f20223794302f0189dcfdb7886d8f38c6724f999e7340899b3626730aacf114", + "label": "TableViewer", + "rank": 13 + }, + { + "degree": 389, + "id": "sha256:65ad1e155299d8c1cf7b9415cc10eb275a94f81808ab562fd9a6094213873107", + "label": "UITestCase", + "rank": 14 + }, + { + "degree": 386, + "id": "sha256:40cf47719df3ebf54a53033264c75399e17ddad7a935bbcb374018c43b2b404c", + "label": "ExecutionEvent", + "rank": 15 + }, + { + "degree": 364, + "id": "sha256:1da175605d586860e51bc85ee9bd4686633fb854d137dfd0c4fcc783293842a5", + "label": "WorkbenchPlugin", + "rank": 16 + }, + { + "degree": 363, + "id": "sha256:db9247db35614e289a6cdd4615731180d5635529056f34d144e1aa05f9a97e6e", + "label": "TreeViewer", + "rank": 17 + }, + { + "degree": 362, + "id": "sha256:bdba1aab396f78d00a7065136d8136f5d06c89e7ac46275bf235aeb8349891c9", + "label": "WorkbenchPage", + "rank": 18 + }, + { + "degree": 312, + "id": "sha256:328e69d3dc5ff0575f88655ef4c8ed5227d97e607778a07ea5f61b9260505d32", + "label": "StructuredViewer", + "rank": 19 + }, + { + "degree": 308, + "id": "sha256:2144a08c2fe8633b6c879681f2726f207c2238a61760184f62780fbc8aec3361", + "label": "ParameterizedCommand", + "rank": 20 + }, + { + "degree": 284, + "id": "sha256:dd11feaec62906800dd12f296e67a7b3492cfcde88bd30dacbf2916a238f49fe", + "label": "UiPackageImpl", + "rank": 21 + }, + { + "degree": 283, + "id": "sha256:2d6e8401b36ceb51113a9e12c2eda76842ee3fa0fbeb563ba0426b7b798d4ee0", + "label": "WorkbenchWindow", + "rank": 22 + }, + { + "degree": 279, + "id": "sha256:43ddf535c64365c6c96965a5729cc2dc5e26c9d8b43547fa67b62ab76be07477", + "label": "MarkerMessages", + "rank": 23 + }, + { + "degree": 256, + "id": "sha256:4167fc9fbe5397d99fce9e603495437ec2759585ce3f1fcf5f0f21357076ed56", + "label": "Workbench", + "rank": 24 + }, + { + "degree": 250, + "id": "sha256:81006a81c4064a6437e259811ba1915d026548f9e55c053a1ad56f04c1d2efa3", + "label": "CSS2PropertiesImpl", + "rank": 25 + }, + { + "degree": 250, + "id": "sha256:e7946022aee266e2d86dc590024f07dc6f90ecb62237d027d3547868649c8646", + "label": "MessageDialog", + "rank": 26 + }, + { + "degree": 242, + "id": "sha256:5401dbacf52c3dda2755bbd86ba079ef4ea911c7f3397cb191f0b83d23e4a355", + "label": "LabelProvider", + "rank": 27 + }, + { + "degree": 224, + "id": "sha256:ad960c23afffc73291728ffc36b3e7535dd1a9ebc6986e1e01056ca8aa8b7598", + "label": "Dialog", + "rank": 28 + }, + { + "degree": 221, + "id": "sha256:0056868a827fc246abb5196f9af85e7771ef93cfeca9aef2568748e4a6237610", + "label": "JFaceResources", + "rank": 29 + }, + { + "degree": 221, + "id": "sha256:6fe18933cedcea17b94e51019bd24d790c42f92367e750adc6c09181e2e3f5e7", + "label": "AbstractHandler", + "rank": 30 + }, + { + "degree": 220, + "id": "sha256:79d4dae71825770407d2d015e74c615f65f36e4264dfd9f3a161854d4d9172f6", + "label": "URI", + "rank": 31 + }, + { + "degree": 209, + "id": "sha256:c04f495994a3a6498d744466134c2528ac7e371921dc54f62198271e3f8571b1", + "label": "WizardDialog", + "rank": 32 + }, + { + "degree": 209, + "id": "sha256:fef9a21a0608ed8f8d6d72c0a1affb936733cc3c2f724dae3385a3de557150c6", + "label": "E4Workbench", + "rank": 33 + }, + { + "degree": 208, + "id": "sha256:09da78c53b02ef732ec00767705a8d7e302780f87cc123c88979697f1e3c3a96", + "label": "PartInitException", + "rank": 34 + }, + { + "degree": 207, + "id": "sha256:2683b9c93c202fc1f13e91f7c475fb01f14b625d15c8a302ec152288af084a40", + "label": "CellEditor", + "rank": 35 + }, + { + "degree": 204, + "id": "sha256:1922835f9250dde6db45183b75dc0e77bb5b3880f20b1f4620cf00f5680e15da", + "label": "ExecutionException", + "rank": 36 + }, + { + "degree": 202, + "id": "sha256:1acdcdfa2c098a2d56d6cb2f77461aa5424be3b94be2045cb297e5a5eb4eacdb", + "label": "ActionFactory", + "rank": 37 + }, + { + "degree": 202, + "id": "sha256:26b9445eadccbc738a827c34d94ed3b4820b36ea50b3724b24c2a60d4c4abd5c", + "label": "CommandsPackageImpl", + "rank": 38 + }, + { + "degree": 197, + "id": "sha256:5301854e28157e543726e5be1b8f7e679fbfc58a205318b3fd3e6e32cea9d2ba", + "label": "DataBindingContext", + "rank": 39 + }, + { + "degree": 196, + "id": "sha256:b2c96c07db3cbb8c76f8aa9d18ca030f08747e929c20f69998382d04be40beee", + "label": "AbstractTreeViewer", + "rank": 40 + }, + { + "degree": 193, + "id": "sha256:c1706fc8f66c30bb51d4631963bde0b36e9f4a5f34a3ff0ae3faf66227209604", + "label": "SafeRunnable", + "rank": 41 + }, + { + "degree": 191, + "id": "sha256:555be66ebc85385891d9bb834536482b809d7f4d0be821df42591f726d5f08a9", + "label": "Command", + "rank": 42 + }, + { + "degree": 190, + "id": "sha256:6260d986754766a771e68e20ab1a68afd83deae64bde14b9cf7f0adfed4e16a6", + "label": "PropertyChangeEvent", + "rank": 43 + }, + { + "degree": 182, + "id": "sha256:af235bb0b5c3d3af5c83eb3fbc3a742725d059ea8e251baf2eea255f8c3e8002", + "label": "ViewerCell", + "rank": 44 + }, + { + "degree": 179, + "id": "sha256:32dfc39a27677a81d5dcacd87cf0df87c5c38c3b6bf885c2f50e4ded58b3dd45", + "label": "ColumnViewer", + "rank": 45 + }, + { + "degree": 178, + "id": "sha256:a5ae4aacf5a11eb239f566ad2c9586ad1ef882a6c107315fbe026a96c380e820", + "label": "DataTransferMessages", + "rank": 46 + }, + { + "degree": 175, + "id": "sha256:7c15aadaa0152a60282aacfe9a5f98acc19069a48ec705250949ef7c05c9ba47", + "label": "IDEWorkbenchPlugin", + "rank": 47 + }, + { + "degree": 169, + "id": "sha256:444cd6aa50c27f4099e110fc194e5ef9a90d31e46a88faa3353ed5d9cdf2a5fb", + "label": "WritableList", + "rank": 48 + }, + { + "degree": 169, + "id": "sha256:4dea947c761dd00b49fa13ee403853d3ab4cff263012fac92a4daf57bcee4e5b", + "label": "AbstractDefaultRealmTestCase", + "rank": 49 + }, + { + "degree": 166, + "id": "sha256:51dd50ef136297b31c010eb4995f10138bc31f38f2921c286c6785e7496370fc", + "label": "WritableValue", + "rank": 50 + }, + { + "degree": 162, + "id": "sha256:cef0e0438f1e55e5fb7c73943f4f41bff352edc21fb3734197cba5c3bccef2c5", + "label": "Binding", + "rank": 51 + }, + { + "degree": 159, + "id": "sha256:bb4910e3e896d682f45d29aeb47f8b82e2c9b8f5b95fa4e1eff959aaab47b082", + "label": "TriggerSequence", + "rank": 52 + }, + { + "degree": 157, + "id": "sha256:5de2151919f2ae216efb5a32b7f720163c4fe1b06db24f5bcfb94d79f7ff68ad", + "label": "LogView", + "rank": 53 + }, + { + "degree": 154, + "id": "sha256:0f14966ccc8b5897cf1352d3cbdab62b0f8c9ad8a13de60808629b4f07c0f47a", + "label": "ApplicationPackageImpl", + "rank": 54 + }, + { + "degree": 153, + "id": "sha256:e3b7bbd8bb443bb9d62349af81dc92a2369c0fa3a7ccc09d17f632a5d2030887", + "label": "ViewerComparator", + "rank": 55 + }, + { + "degree": 150, + "id": "sha256:fdd8e8344a0b022ed92c282d8549eb227a1c16aabd0d8aaf9b6b26519a5cd9cc", + "label": "BindingManager", + "rank": 56 + }, + { + "degree": 149, + "id": "sha256:442165de6e8beead15ee3adcb06cd6e288e87b977981fd5a27b19a6d768126f9", + "label": "AdvancedPackageImpl", + "rank": 57 + }, + { + "degree": 149, + "id": "sha256:c0c371f756b063274efac61bc1660d29e56d97e30a15484a8cbe4b4bdce67f20", + "label": "NavigatorContentService", + "rank": 58 + }, + { + "degree": 148, + "id": "sha256:947cf51470bc41174754c59b66fd466fd1d27981b3958f6930b1a608d4097e1c", + "label": "Window", + "rank": 59 + }, + { + "degree": 147, + "id": "sha256:ce439174f42b61ff2328ef784c55ff33f0f15875fbcee4c4c5c690967e2676bc", + "label": "ViewerFilter", + "rank": 60 + }, + { + "degree": 140, + "id": "sha256:efe658bf3c14b10f83b9427a80f29b876bff702f58b6fddfe0f1f143658c22b2", + "label": "TestHarnessImpl", + "rank": 61 + }, + { + "degree": 138, + "id": "sha256:eab305f2191dff03032ffa5379723de17e3584cea26fa2494f6dd3bc7b9370c7", + "label": "Util", + "rank": 62 + }, + { + "degree": 136, + "id": "sha256:8e94399a6ac7aa40c4d39db871c1fa56c43b1d191548fbc98a8b15035e926753", + "label": "Separator", + "rank": 63 + }, + { + "degree": 134, + "id": "sha256:2311b73fdec3e49d6dd37c292de92a15b83766d14b26f364137b9bcc175275a8", + "label": "ExtendedMarkersView", + "rank": 64 + }, + { + "degree": 134, + "id": "sha256:4ac549a8390b25a60b3290cbb46d9bdd7190c1e926ecb9680b15315631063903", + "label": "ActionContributionItem", + "rank": 65 + }, + { + "degree": 134, + "id": "sha256:841bf6084184a9073a89b37a2900f213723a8a1dd8be63799b64b78bf32af7fe", + "label": "StyledString", + "rank": 66 + }, + { + "degree": 134, + "id": "sha256:997ea88274a4335167e7e1d0163adf7e653151665f586541a1681d4be0a4b44e", + "label": "StatusAdapter", + "rank": 67 + }, + { + "degree": 134, + "id": "sha256:bceb9ca97076cc364452f1338992ca30bbabe1482cdcf4b69cde41b4bc9b3048", + "label": "ColorsAndFontsPreferencePage", + "rank": 68 + }, + { + "degree": 133, + "id": "sha256:c49d13970391df90254f2a3db893641fac5a241456c93afd647432d8e28f41aa", + "label": "WorkspaceOperationsTests", + "rank": 69 + }, + { + "degree": 132, + "id": "sha256:4257330e946793ca0e224bf56294b8ed504f5cd7dd34e83c717f4f9dc16747db", + "label": "IDE", + "rank": 70 + }, + { + "degree": 131, + "id": "sha256:7656486c2879fb3397dfece3dd595a332fb6755edd9f6acd82e833575bd0f537", + "label": "Bean", + "rank": 71 + }, + { + "degree": 131, + "id": "sha256:8644408dc6c5982b1367738e458dfd962b68ec83fd336784d0f40f986c47749b", + "label": "FormToolkit", + "rank": 72 + }, + { + "degree": 128, + "id": "sha256:1d7c3eca70eaff72f711def10eb3b5be5211438224d9ffa9fefdbb9375577031", + "label": "SelectionChangedEvent", + "rank": 73 + }, + { + "degree": 128, + "id": "sha256:708e8713c03d58ed1e974ba4df0bf5f01ea21bf8d8c2b8dbb16ee089dfc11b38", + "label": "TaskListMessages", + "rank": 74 + }, + { + "degree": 128, + "id": "sha256:d1ef42aba5cc93625c2d06adf84ce3bca8f3b655af60b8065febde2bdba716e3", + "label": "PreferenceDialog", + "rank": 75 + }, + { + "degree": 127, + "id": "sha256:41b14fcf762b109e0c764d79afe866917024d6723a6be62af6536aa7f3c6f955", + "label": "TestElement", + "rank": 76 + }, + { + "degree": 127, + "id": "sha256:7dc62df9aa22ec920e5f9d8c0df0a2e5de79a2d76db24bcdd323b718e7660c28", + "label": "CommandManager", + "rank": 77 + }, + { + "degree": 127, + "id": "sha256:d3118394564ea379639c47aaa3c69a1e89ddbde32dcc8b61f000a33b52f455a6", + "label": "TextCellEditor", + "rank": 78 + }, + { + "degree": 126, + "id": "sha256:bfc19ca0f33b9cab17bd0bb2eca59bdb3999be1c5e393b5356002795c9965787", + "label": "AbstractUIPlugin", + "rank": 79 + }, + { + "degree": 124, + "id": "sha256:a70d6b16617098538dc7da861d077719634f1a27326ff7ef761611f8cb8d409a", + "label": "CustomizePerspectiveDialog", + "rank": 80 + }, + { + "degree": 123, + "id": "sha256:d05af660f6d90918db922c71cf3f326e7e30aa5fc8adc40e71ff56ff795d7b51", + "label": "WorkbenchActionBuilder", + "rank": 81 + }, + { + "degree": 122, + "id": "sha256:3a1de870969848db6a05a6e595557c3aaf51545b2bb0e09b637101afe3bbf640", + "label": "Saveable", + "rank": 82 + }, + { + "degree": 122, + "id": "sha256:3b75f2d6e3478466207f32707a32621f466ee84d0c600bf4432600ec6cb9edfd", + "label": "ViewPart", + "rank": 83 + }, + { + "degree": 122, + "id": "sha256:e2fe9878588796c7dfd07d661ee42bbe9f2ad5dd2e67cc0a11d9fbede792621c", + "label": "ArrayContentProvider", + "rank": 84 + }, + { + "degree": 121, + "id": "sha256:4fa6cfceffbc4c99dcc73d25ddbe99c413d4fd83f4bec8129be2078b88739530", + "label": "NavigatorTestBase", + "rank": 85 + }, + { + "degree": 121, + "id": "sha256:56ef9e981d8fcc9ce406cdde542cb1c3348d8b81fac4998de2ee7737b2339155", + "label": "ListDiff", + "rank": 86 + }, + { + "degree": 121, + "id": "sha256:7cea715cadd9f1bee09a1806693d01a14fff6ab8c69c29a406489331041a2f51", + "label": "CommandContributionItem", + "rank": 87 + }, + { + "degree": 120, + "id": "sha256:fcc13f81d62ce61813b17ab751cb98c96d32f1e64b577c3b31f05a6b313c8b3e", + "label": "TreePath", + "rank": 88 + }, + { + "degree": 119, + "id": "sha256:2e7d7c9ec4327f5283c20ac1fb9e50558e29a00ba9aad868810980e947f2bbcd", + "label": "FileEditorInput", + "rank": 89 + }, + { + "degree": 119, + "id": "sha256:753f6edc36ea53425db056e6845257139f0508b13217b1dc814665a697a99b95", + "label": "UIEvents", + "rank": 90 + }, + { + "degree": 118, + "id": "sha256:d55a2ea4635421bd983bc684105ec9357cbc8d37b36be7097037c411569a5aae", + "label": "PreferencePage", + "rank": 91 + }, + { + "degree": 117, + "id": "sha256:96cdca444374d848d99b133830dd778fc33fb15a6415c1041ba6230de6739834", + "label": "Diffs", + "rank": 92 + }, + { + "degree": 116, + "id": "sha256:e5537f27476f39f96d421c40b5691003a4d865cd714b9c5f3270964404dab06d", + "label": "NotDefinedException", + "rank": 93 + }, + { + "degree": 115, + "id": "sha256:5941ad9816184d58557ff10555cc45866b59c0d81c0c97f7cc9b741801e50edb", + "label": "TabbedPropertySheetPage", + "rank": 94 + }, + { + "degree": 115, + "id": "sha256:7bc798c19fe05d4c325618c814fc2076789bc568b1e1c256620add6de8705f2d", + "label": "Wizard", + "rank": 95 + }, + { + "degree": 115, + "id": "sha256:b0c431c8d85f21b30c1afd2fbb3305b15203be2434618d08529ea53e21b3b770", + "label": "DisplayRealm", + "rank": 96 + }, + { + "degree": 114, + "id": "sha256:0e39bd3c1c4d738ab4553eb53d27d7700b51abebe929c4539b6d4916a30d8ea8", + "label": "CommonViewer", + "rank": 97 + }, + { + "degree": 114, + "id": "sha256:6a9e04d0245eabd678a374289a977cdece69ef13dc3fc4199be1f09ecfbc08d7", + "label": "Util", + "rank": 98 + }, + { + "degree": 114, + "id": "sha256:df1ff238cb303325167226944e52f1a5f7e7355bb31475096d1612ce34e21e2c", + "label": "HandlerUtil", + "rank": 99 + }, + { + "degree": 114, + "id": "sha256:f46e39c4f950524e1846f1fa40f90a7f58d83516b14f69e18041e544b03e07ed", + "label": "FilteredItemsSelectionDialog", + "rank": 100 + } + ] + }, + { + "cases": [ + { + "classification": "unanimous-major-critical", + "degree": 22, + "graphId": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel", + "rank": 1403, + "sampleId": 6374724, + "status": "ranked" + }, + { + "classification": "unanimous-none", + "degree": 52, + "graphId": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty", + "rank": 382, + "sampleId": 6391534, + "status": "ranked" + }, + { + "classification": "unanimous-none", + "degree": 11, + "graphId": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl", + "rank": 3093, + "sampleId": 6406137, + "status": "ranked" + }, + { + "classification": "unanimous-major-critical", + "degree": 19, + "graphId": "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto", + "rank": 1740, + "sampleId": 6413795, + "status": "ranked" + } + ], + "classCandidates": 7597, + "danglingPairs": 0, + "directed": false, + "distinctEndpointPairs": 258146, + "edgeRecordCount": 258146, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef", + "nodeCount": 70420, + "rawSha256": "1615667ea0f9fa967d1a72e8431893b7f184e827f4d142a1dfbed1a71a106a6e", + "repository": "eclipse/eclipse.platform.ui", + "tool": "graphify", + "top100": [ + { + "degree": 770, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchwindow_iworkbenchwindow", + "label": "IWorkbenchWindow", + "rank": 1 + }, + { + "degree": 677, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_platformui_platformui", + "label": "PlatformUI", + "rank": 2 + }, + { + "degree": 663, + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_engine_cssengine_cssengine", + "label": "CSSEngine", + "rank": 3 + }, + { + "degree": 652, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_resource_imagedescriptor_imagedescriptor", + "label": "ImageDescriptor", + "rank": 4 + }, + { + "degree": 601, + "id": "tests_org_eclipse_e4_ui_tests_src_org_eclipse_e4_ui_tests_application_epartservicetest_epartservicetest", + "label": "EPartServiceTest", + "rank": 5 + }, + { + "degree": 584, + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_value_iobservablevalue_iobservablevalue", + "label": "IObservableValue", + "rank": 6 + }, + { + "degree": 569, + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_muielement_muielement", + "label": "MUIElement", + "rank": 7 + }, + { + "degree": 556, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpage_iworkbenchpage", + "label": "IWorkbenchPage", + "rank": 8 + }, + { + "degree": 530, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpart_iworkbenchpart", + "label": "IWorkbenchPart", + "rank": 9 + }, + { + "degree": 522, + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_realm_realm", + "label": "Realm", + "rank": 10 + }, + { + "degree": 508, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_istructuredselection_istructuredselection", + "label": "IStructuredSelection", + "rank": 11 + }, + { + "degree": 501, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewer_viewer", + "label": "Viewer", + "rank": 12 + }, + { + "degree": 496, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_imemento_imemento", + "label": "IMemento", + "rank": 13 + }, + { + "degree": 456, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_structuredselection_structuredselection", + "label": "StructuredSelection", + "rank": 14 + }, + { + "degree": 454, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselection_iselection", + "label": "ISelection", + "rank": 15 + }, + { + "degree": 402, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_iaction_iaction", + "label": "IAction", + "rank": 16 + }, + { + "degree": 388, + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_basic_mpart_mpart", + "label": "MPart", + "rank": 17 + }, + { + "degree": 387, + "id": "tests_org_eclipse_ui_tests_harness_src_org_eclipse_ui_tests_harness_util_uitestcase_uitestcase", + "label": "UITestCase", + "rank": 18 + }, + { + "degree": 363, + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_executionevent_executionevent", + "label": "ExecutionEvent", + "rank": 19 + }, + { + "degree": 342, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_action_action", + "label": "Action", + "rank": 20 + }, + { + "degree": 342, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchplugin_workbenchplugin", + "label": "WorkbenchPlugin", + "rank": 21 + }, + { + "degree": 339, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_menumanager_menumanager", + "label": "MenuManager", + "rank": 22 + }, + { + "degree": 338, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbench_iworkbench", + "label": "IWorkbench", + "rank": 23 + }, + { + "degree": 330, + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_iobservable_iobservable", + "label": "IObservable", + "rank": 24 + }, + { + "degree": 318, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_tableviewer_tableviewer", + "label": "TableViewer", + "rank": 25 + }, + { + "degree": 310, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_ipropertychangelistener_ipropertychangelistener", + "label": "IPropertyChangeListener", + "rank": 26 + }, + { + "degree": 308, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_treeviewer_treeviewer", + "label": "TreeViewer", + "rank": 27 + }, + { + "degree": 308, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchpage_workbenchpage", + "label": "WorkbenchPage", + "rank": 28 + }, + { + "degree": 302, + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_mapplication_mapplication", + "label": "MApplication", + "rank": 29 + }, + { + "degree": 297, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditorpart_ieditorpart", + "label": "IEditorPart", + "rank": 30 + }, + { + "degree": 295, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_icontributionitem_icontributionitem", + "label": "IContributionItem", + "rank": 31 + }, + { + "degree": 294, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_structuredviewer_structuredviewer", + "label": "StructuredViewer", + "rank": 32 + }, + { + "degree": 268, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkingset_iworkingset", + "label": "IWorkingSet", + "rank": 33 + }, + { + "degree": 263, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_imenumanager_imenumanager", + "label": "IMenuManager", + "rank": 34 + }, + { + "degree": 262, + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_list_iobservablelist_iobservablelist", + "label": "IObservableList", + "rank": 35 + }, + { + "degree": 250, + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_css2propertiesimpl_css2propertiesimpl", + "label": "CSS2PropertiesImpl", + "rank": 36 + }, + { + "degree": 248, + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_basic_mwindow_mwindow", + "label": "MWindow", + "rank": 37 + }, + { + "degree": 243, + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_parameterizedcommand_parameterizedcommand", + "label": "ParameterizedCommand", + "rank": 38 + }, + { + "degree": 242, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditorinput_ieditorinput", + "label": "IEditorInput", + "rank": 39 + }, + { + "degree": 237, + "id": "bundles_org_eclipse_e4_ui_workbench_src_org_eclipse_e4_ui_workbench_modeling_emodelservice_emodelservice", + "label": "EModelService", + "rank": 40 + }, + { + "degree": 237, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_preference_ipreferencestore_ipreferencestore", + "label": "IPreferenceStore", + "rank": 41 + }, + { + "degree": 237, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchwindow_workbenchwindow", + "label": "WorkbenchWindow", + "rank": 42 + }, + { + "degree": 233, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_labelprovider_labelprovider", + "label": "LabelProvider", + "rank": 43 + }, + { + "degree": 226, + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_set_iobservableset_iobservableset", + "label": "IObservableSet", + "rank": 44 + }, + { + "degree": 226, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_itreecontentprovider_itreecontentprovider", + "label": "ITreeContentProvider", + "rank": 45 + }, + { + "degree": 218, + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_abstracthandler_abstracthandler", + "label": "AbstractHandler", + "rank": 46 + }, + { + "degree": 218, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbench_workbench", + "label": "Workbench", + "rank": 47 + }, + { + "degree": 213, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_resource_jfaceresources_jfaceresources", + "label": "JFaceResources", + "rank": 48 + }, + { + "degree": 207, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_messagedialog_messagedialog", + "label": "MessageDialog", + "rank": 49 + }, + { + "degree": 203, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iperspectivedescriptor_iperspectivedescriptor", + "label": "IPerspectiveDescriptor", + "rank": 50 + }, + { + "degree": 193, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_dialog_dialog", + "label": "Dialog", + "rank": 51 + }, + { + "degree": 193, + "id": "tests_org_eclipse_jface_tests_databinding_src_org_eclipse_jface_tests_databinding_bindingtestsuite_bindingtestsuite", + "label": "BindingTestSuite", + "rank": 52 + }, + { + "degree": 190, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_celleditor_celleditor", + "label": "CellEditor", + "rank": 53 + }, + { + "degree": 184, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_ilabelproviderlistener_ilabelproviderlistener", + "label": "ILabelProviderListener", + "rank": 54 + }, + { + "degree": 183, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iviewpart_iviewpart", + "label": "IViewPart", + "rank": 55 + }, + { + "degree": 178, + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_command_command", + "label": "Command", + "rank": 56 + }, + { + "degree": 173, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_idialogsettings_idialogsettings", + "label": "IDialogSettings", + "rank": 57 + }, + { + "degree": 172, + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_melementcontainer_melementcontainer", + "label": "MElementContainer", + "rank": 58 + }, + { + "degree": 170, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchmessages_workbenchmessages", + "label": "WorkbenchMessages", + "rank": 59 + }, + { + "degree": 169, + "id": "tests_org_eclipse_jface_tests_databinding_src_org_eclipse_jface_tests_databinding_abstractdefaultrealmtestcase_abstractdefaultrealmtestcase", + "label": "AbstractDefaultRealmTestCase", + "rank": 60 + }, + { + "degree": 167, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_columnviewer_columnviewer", + "label": "ColumnViewer", + "rank": 61 + }, + { + "degree": 166, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_abstracttreeviewer_abstracttreeviewer", + "label": "AbstractTreeViewer", + "rank": 62 + }, + { + "degree": 165, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iactionbars_iactionbars", + "label": "IActionBars", + "rank": 63 + }, + { + "degree": 164, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpartreference_iworkbenchpartreference", + "label": "IWorkbenchPartReference", + "rank": 64 + }, + { + "degree": 164, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_partinitexception_partinitexception", + "label": "PartInitException", + "rank": 65 + }, + { + "degree": 162, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewercell_viewercell", + "label": "ViewerCell", + "rank": 66 + }, + { + "degree": 161, + "id": "bundles_org_eclipse_ui_ide_src_org_eclipse_ui_internal_ide_ideworkbenchplugin_ideworkbenchplugin", + "label": "IDEWorkbenchPlugin", + "rank": 67 + }, + { + "degree": 161, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_services_iservicelocator_iservicelocator", + "label": "IServiceLocator", + "rank": 68 + }, + { + "degree": 155, + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_executionexception_executionexception", + "label": "ExecutionException", + "rank": 69 + }, + { + "degree": 154, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_ilabelprovider_ilabelprovider", + "label": "ILabelProvider", + "rank": 70 + }, + { + "degree": 154, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselectionprovider_iselectionprovider", + "label": "ISelectionProvider", + "rank": 71 + }, + { + "degree": 153, + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_mapplicationelement_mapplicationelement", + "label": "MApplicationElement", + "rank": 72 + }, + { + "degree": 153, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_wizard_wizarddialog_wizarddialog", + "label": "WizardDialog", + "rank": 73 + }, + { + "degree": 150, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselectionchangedlistener_iselectionchangedlistener", + "label": "ISelectionChangedListener", + "rank": 74 + }, + { + "degree": 149, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewercomparator_viewercomparator", + "label": "ViewerComparator", + "rank": 75 + }, + { + "degree": 148, + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_iobservablecollection_iobservablecollection", + "label": "IObservableCollection", + "rank": 76 + }, + { + "degree": 146, + "id": "bundles_org_eclipse_core_databinding_src_org_eclipse_core_databinding_databindingcontext_databindingcontext", + "label": "DataBindingContext", + "rank": 77 + }, + { + "degree": 146, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_saferunnable_saferunnable", + "label": "SafeRunnable", + "rank": 78 + }, + { + "degree": 145, + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_advanced_mperspective_mperspective", + "label": "MPerspective", + "rank": 79 + }, + { + "degree": 144, + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_map_iobservablemap_iobservablemap", + "label": "IObservableMap", + "rank": 80 + }, + { + "degree": 144, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_bindings_binding_binding", + "label": "Binding", + "rank": 81 + }, + { + "degree": 142, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewerfilter_viewerfilter", + "label": "ViewerFilter", + "rank": 82 + }, + { + "degree": 141, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_idialogconstants_idialogconstants", + "label": "IDialogConstants", + "rank": 83 + }, + { + "degree": 140, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_bindings_triggersequence_triggersequence", + "label": "TriggerSequence", + "rank": 84 + }, + { + "degree": 139, + "id": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_ivalueproperty_ivalueproperty", + "label": "IValueProperty", + "rank": 85 + }, + { + "degree": 137, + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_menu_mmenu_mmenu", + "label": "MMenu", + "rank": 86 + }, + { + "degree": 135, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_propertychangeevent_propertychangeevent", + "label": "PropertyChangeEvent", + "rank": 87 + }, + { + "degree": 135, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_window_window_window", + "label": "Window", + "rank": 88 + }, + { + "degree": 134, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditordescriptor_ieditordescriptor", + "label": "IEditorDescriptor", + "rank": 89 + }, + { + "degree": 132, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_istructuredcontentprovider_istructuredcontentprovider", + "label": "IStructuredContentProvider", + "rank": 90 + }, + { + "degree": 128, + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_value_writablevalue_writablevalue", + "label": "WritableValue", + "rank": 91 + }, + { + "degree": 127, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_plugin_abstractuiplugin_abstractuiplugin", + "label": "AbstractUIPlugin", + "rank": 92 + }, + { + "degree": 125, + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_operations_iundocontext_iundocontext", + "label": "IUndoContext", + "rank": 93 + }, + { + "degree": 125, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_bindings_bindingmanager_bindingmanager", + "label": "BindingManager", + "rank": 94 + }, + { + "degree": 124, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_operation_irunnablewithprogress_irunnablewithprogress", + "label": "IRunnableWithProgress", + "rank": 95 + }, + { + "degree": 123, + "id": "bundles_org_eclipse_ui_navigator_src_org_eclipse_ui_internal_navigator_navigatorcontentservice_navigatorcontentservice", + "label": "NavigatorContentService", + "rank": 96 + }, + { + "degree": 121, + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_operations_iundoableoperation_iundoableoperation", + "label": "IUndoableOperation", + "rank": 97 + }, + { + "degree": 121, + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_part_viewpart_viewpart", + "label": "ViewPart", + "rank": 98 + }, + { + "degree": 119, + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_arraycontentprovider_arraycontentprovider", + "label": "ArrayContentProvider", + "rank": 99 + }, + { + "degree": 119, + "id": "bundles_org_eclipse_ui_ide_src_org_eclipse_ui_internal_views_markers_extendedmarkersview_extendedmarkersview", + "label": "ExtendedMarkersView", + "rank": 100 + } + ] + } + ], + "schema": "compass.mlcq-class-degree-review/1", + "scope": "Run the registered class-only degree diagnostic on frozen Java graphs.\n\nEach graph is processed in a separate bounded process. This is a development\nretrieval diagnostic, not a god-object classifier or native tool comparison.\n" +} diff --git a/benchmarks/agent_query/mlcq_class_span_probe_registration.json b/benchmarks/agent_query/mlcq_class_span_probe_registration.json new file mode 100644 index 000000000..d1f243cd0 --- /dev/null +++ b/benchmarks/agent_query/mlcq_class_span_probe_registration.json @@ -0,0 +1,78 @@ +{ + "bounds": { + "graphBytes": 1073741824, + "maxClassCandidates": 100000, + "maxNodes": 1000000, + "maxSecondsPerGraph": 300, + "nodeBytes": 8388608 + }, + "dataset": { + "authors": [ + "Lech Madeyski", + "Tomasz Lewowski" + ], + "doi": "10.5281/zenodo.3666840", + "file": "MLCQCodeSmellSamples.csv", + "license": "CC-BY-4.0", + "paperDoi": "10.1145/3383219.3383264", + "publishedMd5": "9019beae88089838d2d13dc12e69241b", + "recordUrl": "https://zenodo.org/records/3666840", + "sha256": "8e05db55150a984f0b08ab211f5f612374790ea918ba08afc290cf122b63551b", + "title": "MLCQ: Industry-relevant code smell data set", + "version": "1.1" + }, + "declaredBeforeExecution": true, + "graphs": [ + { + "graphBytes": 671502979, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "producerBinarySha256": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4", + "producerNote": "CloudStack is the 9df5dcf3 release extraction, not a new candidate build.", + "repository": "apache/cloudstack" + }, + { + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "producerBinarySha256": "80a970c1c403892fcafd82eac7e6461afec119f2008db9f9117419432e387ca6", + "producerNote": "CloudStack is the 9df5dcf3 release result; Eclipse is the earlier development extraction. Query this existing artifact without rerunning extraction.", + "repository": "eclipse/eclipse.platform.ui" + } + ], + "interpretation": [ + "This known, purposively consensus-enriched cohort is development data, not a held-out test or population prevalence.", + "Do not tune a threshold or weights on the eight primary labels and claim independent success.", + "A large class span is not a god-object defect. Require responsibility/cohesion evidence and independent review before any diagnosis claim.", + "Do not alter the frozen Graphify environment, graphs, label votes, or prior native ranking outcomes.", + "Unequal graph producer versions and emitted-language coverage remain disclosed; this probe is only within each preserved Compass typed graph." + ], + "method": { + "candidatePool": "Every stored typed graph node with kind exactly class, a nonempty source file, and inclusive startLine/endLine with endLine >= startLine. No generated/test filter; exclude non-class kinds explicitly.", + "cutoffs": [ + 10, + 50, + 100 + ], + "identity": "For each annotated sample, require exact source file, exact simple Java class name (last codeName segment), and overlapping class/source line spans. Zero matches is unavailable; multiple matches are ambiguous. Never select nearest/best candidate.", + "outputs": "Retain every class candidate identity/score/rank, all 55 join outcomes, primary positive/none retrieval separately, and bound/truncation failures. Preserve existing native Graphify and Compass hub results as separate controls.", + "score": "Inclusive source span length = endLine - startLine + 1. Sort descending length, then ascending exact node ID. This is size, not responsibility/cohesion/defect severity." + }, + "priorExternalInputsSha256": "663beb33e986c695ec4a6ae8864651f9838baa4c0d183a2da021d8d3197b951e", + "priorRegistrationSha256": "a08e6a0970c605154b329acbfebaa0d9684859f1fad2fa0ed8e8717772866ef1", + "priorReviewSha256": "0db695b5722e741d4d740707ad69888141152ae69e4af02622254293d4e4680b", + "purpose": "Exploratory source-span ranking diagnostic for externally reviewed Blob classes; measure before considering a class-responsibility tool. This is not production behavior or a defect classifier.", + "samples": { + "count": 55, + "policy": "Retain all 55 reviewed classes in selected revisions; four consensus-positive and four consensus-none primary cases. Other ratings remain uncertain/secondary, never converted to positive or negative.", + "primarySampleIds": [ + 6374724, + 6391534, + 6406137, + 6413795, + 8528735, + 8537138, + 8538037, + 8539645 + ] + }, + "schema": "compass.mlcq-class-span-probe-registration/1" +} diff --git a/benchmarks/agent_query/mlcq_class_span_probe_review.json b/benchmarks/agent_query/mlcq_class_span_probe_review.json new file mode 100644 index 000000000..b853261e7 --- /dev/null +++ b/benchmarks/agent_query/mlcq_class_span_probe_review.json @@ -0,0 +1,552 @@ +{ + "all55JoinCounts": { + "0": 7, + "1": 48 + }, + "all55Samples": [ + { + "classification": "minor-or-disagreement", + "exactMatchCount": 0, + "rank": null, + "repository": "apache/cloudstack", + "sampleId": 8491397 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 2513, + "repository": "apache/cloudstack", + "sampleId": 8494605 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 2362, + "repository": "apache/cloudstack", + "sampleId": 8497585 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 0, + "rank": null, + "repository": "apache/cloudstack", + "sampleId": 8497687 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 4408, + "repository": "apache/cloudstack", + "sampleId": 8501968 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 1099, + "repository": "apache/cloudstack", + "sampleId": 8501970 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 2828, + "repository": "apache/cloudstack", + "sampleId": 8502684 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 541, + "repository": "apache/cloudstack", + "sampleId": 8507718 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 3863, + "repository": "apache/cloudstack", + "sampleId": 8510347 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 0, + "rank": null, + "repository": "apache/cloudstack", + "sampleId": 8511088 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 2079, + "repository": "apache/cloudstack", + "sampleId": 8514954 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 599, + "repository": "apache/cloudstack", + "sampleId": 8515776 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 1833, + "repository": "apache/cloudstack", + "sampleId": 8516029 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 5960, + "repository": "apache/cloudstack", + "sampleId": 8517396 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 0, + "rank": null, + "repository": "apache/cloudstack", + "sampleId": 8522716 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 4261, + "repository": "apache/cloudstack", + "sampleId": 8526483 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 952, + "repository": "apache/cloudstack", + "sampleId": 8526485 + }, + { + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "rank": 131, + "repository": "apache/cloudstack", + "sampleId": 8528735 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 4583, + "repository": "apache/cloudstack", + "sampleId": 8533230 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 1269, + "repository": "apache/cloudstack", + "sampleId": 8533645 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 4019, + "repository": "apache/cloudstack", + "sampleId": 8533750 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 5465, + "repository": "apache/cloudstack", + "sampleId": 8533873 + }, + { + "classification": "unanimous-none", + "exactMatchCount": 1, + "rank": 4333, + "repository": "apache/cloudstack", + "sampleId": 8537138 + }, + { + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "rank": 411, + "repository": "apache/cloudstack", + "sampleId": 8538037 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 3566, + "repository": "apache/cloudstack", + "sampleId": 8539540 + }, + { + "classification": "unanimous-none", + "exactMatchCount": 1, + "rank": 5692, + "repository": "apache/cloudstack", + "sampleId": 8539645 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 2973, + "repository": "apache/cloudstack", + "sampleId": 8541418 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 1055, + "repository": "apache/cloudstack", + "sampleId": 8547261 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 0, + "rank": null, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6369779 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 1634, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6371049 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 2887, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6372633 + }, + { + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "rank": 426, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6374724 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 4119, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6375252 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 781, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6375517 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 20, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6379553 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 2719, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6383930 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 1395, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6385711 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 0, + "rank": null, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6387077 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 4437, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6387249 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 5642, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6388458 + }, + { + "classification": "unanimous-none", + "exactMatchCount": 1, + "rank": 3903, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6391534 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 4558, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6393486 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 3115, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6398820 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 4231, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6404028 + }, + { + "classification": "unanimous-none", + "exactMatchCount": 1, + "rank": 3532, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6406137 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 1685, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6412439 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 3644, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413248 + }, + { + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "rank": 714, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413795 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 3413, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6414719 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 5978, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6416620 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 4254, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6424656 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 0, + "rank": null, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6424683 + }, + { + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "rank": 5055, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6425142 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 6423, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6427227 + }, + { + "classification": "single-reviewer", + "exactMatchCount": 1, + "rank": 2127, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6428158 + } + ], + "correctedRunSha256": "53d2fa3132740f8c611a9469345515a2c64447202c91118f741c15ce9d78c71f", + "firstFailedRunSha256": "869ee2a6624c539b618d0e5afd9ef65ad9e74dab90fb023df2ea02d0d5aa05a5", + "graphs": [ + { + "admissibleClassCount": 6373, + "classNodesWithoutAdmissibleSpan": 0, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "repository": "apache/cloudstack", + "sourceNodeCount": 173689 + }, + { + "admissibleClassCount": 6628, + "classNodesWithoutAdmissibleSpan": 0, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "repository": "eclipse/eclipse.platform.ui", + "sourceNodeCount": 95084 + } + ], + "limitations": [ + "All four consensus-positive class spans rank below the top 100; source size alone fails this known development retrieval check.", + "All four consensus-none classes also rank below the top 100. This does not estimate false-positive rate because most ranked classes have no consensus label.", + "Seven secondary classes have no exact class-node join under the preregistered file/name/span rule and remain unavailable; no nearest or alternate identity was chosen.", + "Known purposively selected Java ratings cannot establish independent accuracy, population prevalence or cross-language god-object detection.", + "Source span is not cohesion, independent responsibility, coupling or a justified defect diagnosis. Do not promote it to the product as a classifier from this result.", + "CloudStack and Eclipse use different preserved Compass graph producer versions. CloudStack has a recorded partial-graph warning, and the frozen Graphify CloudStack extraction omitted 119 SQL files. No fresh extraction or Graphify execution was made.", + "The first bounded scanner failed because the node array followed more than one MiB of graph metadata; its failure is retained. The corrected scanner changed only how the declared graph was read, not the registered ranking or labels." + ], + "primaryCases": [ + { + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "rank": 131, + "repository": "apache/cloudstack", + "sampleId": 8528735 + }, + { + "classification": "unanimous-none", + "exactMatchCount": 1, + "rank": 4333, + "repository": "apache/cloudstack", + "sampleId": 8537138 + }, + { + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "rank": 411, + "repository": "apache/cloudstack", + "sampleId": 8538037 + }, + { + "classification": "unanimous-none", + "exactMatchCount": 1, + "rank": 5692, + "repository": "apache/cloudstack", + "sampleId": 8539645 + }, + { + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "rank": 426, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6374724 + }, + { + "classification": "unanimous-none", + "exactMatchCount": 1, + "rank": 3903, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6391534 + }, + { + "classification": "unanimous-none", + "exactMatchCount": 1, + "rank": 3532, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6406137 + }, + { + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "rank": 714, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413795 + } + ], + "primaryCutoffs": { + "10": { + "unanimous-major-critical": 0, + "unanimous-none": 0 + }, + "100": { + "unanimous-major-critical": 0, + "unanimous-none": 0 + }, + "50": { + "unanimous-major-critical": 0, + "unanimous-none": 0 + } + }, + "priorNativeReviewSha256": "0db695b5722e741d4d740707ad69888141152ae69e4af02622254293d4e4680b", + "registrationSha256": "010bec3332f31a151ce7925d66cf8216315e20c340fd0bfb5e58ec861d029df9", + "repeatedVerificationByteEqual": true, + "schema": "compass.mlcq-class-span-probe-review/1", + "scope": "Preregistered, exploratory full-class source-span ranking on two frozen Compass graphs. No product change or Graphify rerun.", + "unchangedNativeHubControl": { + "compass": { + "10": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + } + }, + "graphify": { + "10": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + } + } + }, + "verificationSha256": "f2309132af6199c20ac7425ea76c1f4054b4a1f180c1c8e7cd26b5bb995b6daf" +} diff --git a/benchmarks/agent_query/mlcq_corpus.py b/benchmarks/agent_query/mlcq_corpus.py new file mode 100644 index 000000000..3765663ed --- /dev/null +++ b/benchmarks/agent_query/mlcq_corpus.py @@ -0,0 +1,114 @@ +"""Derive review cohorts from the published MLCQ CSV, without tool outputs. + +Ratings are annotator evidence, not certain design truth. Repeated ratings from +one reviewer never create an independent vote. Preserve every excluded group. +""" +from collections import Counter, defaultdict +import csv +import hashlib +import io +from pathlib import PurePosixPath +import re + + +MAX_BYTES = 16 * 1024 * 1024 +MAX_ROWS = 100000 +SEVERITIES = {'none', 'minor', 'major', 'critical'} +FIELDS = ['id', 'reviewer_id', 'sample_id', 'smell', 'severity', 'review_timestamp', + 'type', 'code_name', 'repository', 'commit_hash', 'path', 'start_line', + 'end_line', 'link', 'is_from_industry_relevant_project'] + + +def positive_int(value): + if not isinstance(value, str) or re.fullmatch(r'[1-9][0-9]{0,11}', value) is None: + raise ValueError('expected a positive bounded integer') + return int(value) + + +def source_identity(row): + match = re.fullmatch(r'git@github.com:([A-Za-z0-9_.-]+)/([A-Za-z0-9_.-]+)\.git', row['repository']) + if match is None or any(part in {'.', '..'} for part in match.groups()): + raise ValueError('unsupported repository address') + if re.fullmatch(r'[0-9a-f]{40}', row['commit_hash']) is None: + raise ValueError('source revision is not a full commit') + raw = row['path'] + path = raw[1:] if raw.startswith('/') else raw + if (not path or len(path) > 4096 or '\\' in path + or any(part in {'', '.', '..'} for part in path.split('/')) + or PurePosixPath(path).is_absolute() or not path.endswith('.java')): + raise ValueError('invalid source path') + start, end = positive_int(row['start_line']), positive_int(row['end_line']) + if end < start or end-start > 1000000: + raise ValueError('invalid source span') + name = row['code_name'] + if not name or len(name) > 2048 or any(ord(c) < 32 for c in name): + raise ValueError('invalid code name') + return dict(repository='/'.join(match.groups()), commit=row['commit_hash'], + file=path, startLine=start, endLine=end, codeName=name) + + +def census(data): + if len(data) > MAX_BYTES: + raise ValueError('dataset byte limit exceeded') + reader = csv.DictReader(io.StringIO(data.decode('utf-8-sig'), newline=''), delimiter=';') + if reader.fieldnames != FIELDS: + raise ValueError('unexpected dataset columns') + groups, row_ids, total = defaultdict(list), set(), 0 + for row in reader: + total += 1 + if total > MAX_ROWS or None in row or any(v is None for v in row.values()): + raise ValueError('invalid or excessive dataset rows') + identifier = positive_int(row['id']) + if identifier in row_ids: + raise ValueError('duplicate review identity') + row_ids.add(identifier) + if row['smell'] != 'blob': + continue + if row['type'] != 'class' or row['severity'] not in SEVERITIES: + raise ValueError('invalid Blob review') + sample, reviewer = positive_int(row['sample_id']), positive_int(row['reviewer_id']) + groups[sample].append(dict(reviewId=identifier, reviewerId=reviewer, + severity=row['severity'], source=source_identity(row))) + samples = [] + for sample, rows in sorted(groups.items()): + source = rows[0]['source'] + if any(row['source'] != source for row in rows): + raise ValueError('sample identity has inconsistent source coordinates') + votes = defaultdict(set) + for row in rows: + votes[row['reviewerId']].add(row['severity']) + levels = {row['severity'] for row in rows} + if any(len(v) != 1 for v in votes.values()): + classification = 'conflicting-same-reviewer' + elif len(votes) < 2: + classification = 'single-reviewer' + elif levels == {'none'}: + classification = 'unanimous-none' + elif levels <= {'major', 'critical'}: + classification = 'unanimous-major-critical' + else: + classification = 'minor-or-disagreement' + samples.append(dict(sampleId=sample, **source, classification=classification, + uniqueReviewers=len(votes), reviewRows=len(rows), + duplicateReviewerRows=len(rows)-len(votes), + ratings=[{k: row[k] for k in ['reviewId', 'reviewerId', 'severity']} + for row in sorted(rows, key=lambda r: r['reviewId'])])) + cohorts = defaultdict(list) + for sample in samples: + cohorts[sample['repository'], sample['commit']].append(sample) + projects = [] + for (repository, commit), records in sorted(cohorts.items()): + counts = dict(sorted(Counter(r['classification'] for r in records).items())) + eligible = min(counts.get('unanimous-none', 0), counts.get('unanimous-major-critical', 0)) >= 2 + projects.append(dict(repository=repository, commit=commit, classifications=counts, + eligible=eligible, sampleIds=[r['sampleId'] for r in records])) + return dict(schema='compass.mlcq-blob-census/1', datasetSha256=hashlib.sha256(data).hexdigest(), + totalReviews=total, blobReviews=sum(r['reviewRows'] for r in samples), + blobSamples=len(samples), classifications=dict(sorted(Counter(r['classification'] for r in samples).items())), + projects=projects, samples=samples) + + +def select_cohorts(report): + """All revisions with >=2 multi-reviewer positive and >=2 negative samples.""" + eligible = {(r['repository'], r['commit']) for r in report['projects'] if r['eligible']} + return [s for s in report['samples'] if (s['repository'], s['commit']) in eligible] diff --git a/benchmarks/agent_query/mlcq_explicit_this_field_registration.json b/benchmarks/agent_query/mlcq_explicit_this_field_registration.json new file mode 100644 index 000000000..35f20053c --- /dev/null +++ b/benchmarks/agent_query/mlcq_explicit_this_field_registration.json @@ -0,0 +1,32 @@ +{ + "schema": "compass.mlcq-explicit-this-field-registration/1", + "declaredBeforeExecution": true, + "purpose": "Independently verify exact method-to-own-field references for explicit this.field syntax in the same eight rated Java classes. This is a bounded source-relationship audit, not a god-object score.", + "priorMemberReviewSha256": "edff7c60649a6d85389d94b04bfe805f0b046d0667603135e00b56b61c001756", + "sourceWitnessesSha256": "648a953a72162910f880e3eb8194200fb95e247af85fb49fe46c18bf864bad2c", + "sampleIds": [6374724, 6391534, 6406137, 6413795, 8528735, 8537138, 8538037, 8539645], + "graphSha256": { + "apache/cloudstack": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "eclipse/eclipse.platform.ui": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74" + }, + "sourceRule": "Parse all eight pinned files with the public JDK 17 syntax API, without attribution or project dependencies. Within the uniquely witnessed class, visit direct MethodTree bodies and skip every nested ClassTree. Count a MemberSelectTree only when its expression is the IdentifierTree this and its selected name matches exactly one direct field declaration of that class. Include lambda bodies in the direct method. Record the selected identifier token's UTF-16 interval; convert it to UTF-8 byte coordinates using the unchanged source file. Preserve duplicate occurrences. Record all other this.name sites as out of scope, with reasons.", + "graphRule": "Use the previously source-matched direct method and field graph IDs. For each source occurrence, find stored directed references records from that exact method to that exact field whose relationshipSite has the same relative file and exact UTF-8 start/end byte interval. Count absent, one-record and multiple-record outcomes separately. Also report any other method-to-field references record at the same source token as a wrong-target or wrong-owner collision. Do not use class-level counts or first-candidate resolution as a substitute.", + "scopeLimits": [ + "This source oracle establishes only explicit this.field syntax for direct fields in direct methods. Unqualified fields, inherited fields, qualified outer-this, reflection, anonymous/local classes, field initializers and expression semantics outside the exact token are not measured.", + "A parsed syntactic occurrence does not prove an executable runtime path. A missing graph edge is not evidence of low cohesion or zero foreign-state access.", + "The panel is known Java development data, including one positive-rated test class. Do not infer broad recall, cross-language quality or Graphify superiority." + ], + "bounds": { + "sourceFiles": 8, + "sourceBytesPerFile": 2097152, + "sourceBytesTotal": 8388608, + "oracleRecords": 10000, + "oracleSeconds": 60, + "graphBytesPerFile": 1073741824, + "graphRecordBytes": 8388608, + "graphNodesPerFile": 1000000, + "graphEdgesPerFile": 1000000, + "secondsPerGraph": 300 + }, + "outputs": "All in-scope source occurrences and graph records at their exact token positions, per-case denominators and outcomes, out-of-scope this.name site counts, source/graph/oracle hashes, failed attempts and repeated verification. No threshold, classifier, Graphify rerun or held-out claim." +} diff --git a/benchmarks/agent_query/mlcq_explicit_this_field_review.json b/benchmarks/agent_query/mlcq_explicit_this_field_review.json new file mode 100644 index 000000000..dd53edb45 --- /dev/null +++ b/benchmarks/agent_query/mlcq_explicit_this_field_review.json @@ -0,0 +1,304 @@ +{ + "counts": { + "constructor-out-of-scope": 4, + "direct-field": 5, + "method-invocation-out-of-scope": 1 + }, + "graphSha256": { + "apache/cloudstack": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "eclipse/eclipse.platform.ui": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74" + }, + "inScope": [ + { + "endByte": 1323, + "fieldId": "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033", + "fieldName": "name", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b2bd8622c5d87b66ce1266c4ce7b5af565e86b30d1183450fdaf81a88bb0a001", + "kind": "references", + "relationshipSite": { + "endByte": 1323, + "endColumn": 17, + "endLine": 36, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "startByte": 1319, + "startColumn": 13, + "startLine": 36 + }, + "source": "sha256:d610f427834da5212c077f597a677863c177e7726d9e8e4628cf3051e950282d", + "target": "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1337, + "methodId": "sha256:d610f427834da5212c077f597a677863c177e7726d9e8e4628cf3051e950282d", + "methodName": "setName", + "methodStartLine": 35, + "methodStartUtf16": 1271, + "sampleId": 8539645, + "sourceFileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "startByte": 1319, + "status": "direct-field", + "tokenEndUtf16": 1323, + "tokenLine": 36, + "tokenStartUtf16": 1319, + "wrongPairRecordCount": 0 + }, + { + "endByte": 13476, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:38f67377d42082e72b3dcc6aba0c85b7e004c99786a6852ef6aa2abc667857f2", + "kind": "references", + "relationshipSite": { + "endByte": 13476, + "endColumn": 36, + "endLine": 447, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13461, + "startColumn": 21, + "startLine": 447 + }, + "source": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13584, + "methodId": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "methodName": "setBindings", + "methodStartLine": 446, + "methodStartUtf16": 13396, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13461, + "status": "direct-field", + "tokenEndUtf16": 13476, + "tokenLine": 447, + "tokenStartUtf16": 13461, + "wrongPairRecordCount": 0 + }, + { + "endByte": 13500, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:481709db5e93eec181d6e99f3494d4d6dc8f2e974bed2b67417e7fcf86016f86", + "kind": "references", + "relationshipSite": { + "endByte": 13500, + "endColumn": 22, + "endLine": 448, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13485, + "startColumn": 7, + "startLine": 448 + }, + "source": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13584, + "methodId": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "methodName": "setBindings", + "methodStartLine": 446, + "methodStartUtf16": 13396, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13485, + "status": "direct-field", + "tokenEndUtf16": 13500, + "tokenLine": 448, + "tokenStartUtf16": 13485, + "wrongPairRecordCount": 0 + }, + { + "endByte": 13758, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a1ac81ef8b1ae8085365c22df232eec7caf37e338cc685d2b262a6da9de70821", + "kind": "references", + "relationshipSite": { + "endByte": 13758, + "endColumn": 33, + "endLine": 457, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13742, + "startColumn": 17, + "startLine": 457 + }, + "source": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13898, + "methodId": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "methodName": "setBindingToElement", + "methodStartLine": 456, + "methodStartUtf16": 13669, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13742, + "status": "direct-field", + "tokenEndUtf16": 13758, + "tokenLine": 457, + "tokenStartUtf16": 13742, + "wrongPairRecordCount": 0 + }, + { + "endByte": 13783, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d10d5cbe4075f49aa50b4bd80e9153e7625613b49a35b7829e111a568bd28b5a", + "kind": "references", + "relationshipSite": { + "endByte": 13783, + "endColumn": 23, + "endLine": 458, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13767, + "startColumn": 7, + "startLine": 458 + }, + "source": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13898, + "methodId": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "methodName": "setBindingToElement", + "methodStartLine": 456, + "methodStartUtf16": 13669, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13767, + "status": "direct-field", + "tokenEndUtf16": 13783, + "tokenLine": 458, + "tokenStartUtf16": 13767, + "wrongPairRecordCount": 0 + } + ], + "limitations": [ + "Five explicit direct-method this.field tokens are a small, selected syntactic subset, not all class field uses.", + "Four constructor field sites and one method call are retained outside the registered direct-method field denominator.", + "Exact source-token and stored edge agreement here does not validate other field references or god-object classification.", + "The first collector preflight failed before graph scanning due to a list-versus-set assertion. The corrected run retained all registered inputs and bounds.", + "The observed subset contains only five source field sites; no population, cross-language or Graphify comparison follows." + ], + "oracleOutputSha256": "1a99f94eeeeb62423edd49ce67c45fca0ff3fe37dbb1c08e1557d06e93420ac6", + "oracleRepeatByteIdentical": true, + "oracleSourceSha256": "6860f872fd4ee65fca3f1b66edeb12b53bdc4c9c6a90e4953dbf2227d2d80052", + "outOfScope": [ + { + "endByte": 61345, + "fieldName": "getClass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "methodEndUtf16": 61398, + "methodName": "configure", + "methodStartLine": 1145, + "methodStartUtf16": 61004, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 61337, + "status": "method-invocation-out-of-scope", + "tokenEndUtf16": 61345, + "tokenLine": 1149, + "tokenStartUtf16": 61337 + }, + { + "endByte": 1242, + "fieldName": "isoFile", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "methodEndUtf16": 1357, + "methodName": "HandleConfigDriveIsoCommand", + "methodStartLine": 33, + "methodStartUtf16": 1114, + "sampleId": 8537138, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "startByte": 1235, + "status": "constructor-out-of-scope", + "tokenEndUtf16": 1242, + "tokenLine": 34, + "tokenStartUtf16": 1235 + }, + { + "endByte": 1274, + "fieldName": "isoData", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "methodEndUtf16": 1357, + "methodName": "HandleConfigDriveIsoCommand", + "methodStartLine": 33, + "methodStartUtf16": 1114, + "sampleId": 8537138, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "startByte": 1267, + "status": "constructor-out-of-scope", + "tokenEndUtf16": 1274, + "tokenLine": 35, + "tokenStartUtf16": 1267 + }, + { + "endByte": 1308, + "fieldName": "destStore", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "methodEndUtf16": 1357, + "methodName": "HandleConfigDriveIsoCommand", + "methodStartLine": 33, + "methodStartUtf16": 1114, + "sampleId": 8537138, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "startByte": 1299, + "status": "constructor-out-of-scope", + "tokenEndUtf16": 1308, + "tokenLine": 36, + "tokenStartUtf16": 1299 + }, + { + "endByte": 1341, + "fieldName": "create", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "methodEndUtf16": 1357, + "methodName": "HandleConfigDriveIsoCommand", + "methodStartLine": 33, + "methodStartUtf16": 1114, + "sampleId": 8537138, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "startByte": 1335, + "status": "constructor-out-of-scope", + "tokenEndUtf16": 1341, + "tokenLine": 37, + "tokenStartUtf16": 1335 + } + ], + "preflightFailureSha256": "7ef327aa048275cf9b9d6d0ec24b83be911d2f1b3613d2ef1e43adad631da251", + "rawRunSha256": "ab115658c71f2656f8e92fc937fb53f71aaf4b3d04494f387635d00de4666d93", + "registrationSha256": "3ce46adde8a7ffb48147a06e004a581efb3bf868ceee229888f143a14f81eb04", + "schema": "compass.mlcq-explicit-this-field-review/1", + "scope": "Exact explicit this.field syntax in direct methods of eight known Java classes; not a full field-reference census or god-object score.", + "sourceWitnessesSha256": "648a953a72162910f880e3eb8194200fb95e247af85fb49fe46c18bf864bad2c", + "verificationRepeatByteIdentical": true, + "verifiedRunSha256": "54ddad9efbc7c35c389f6888f11605f063082ca39f6f73ea428a820adf511ee0", + "verifierSha256": "4e25f8b2b67f04c22d278f48c9f5038351de2a9db7f07fb3d82fcd23ba96eaba" +} diff --git a/benchmarks/agent_query/mlcq_god_audit_registration.json b/benchmarks/agent_query/mlcq_god_audit_registration.json new file mode 100644 index 000000000..1c5a25081 --- /dev/null +++ b/benchmarks/agent_query/mlcq_god_audit_registration.json @@ -0,0 +1,1484 @@ +{ + "schema": "compass.mlcq-god-audit-registration/1", + "dataset": { + "title": "MLCQ: Industry-relevant code smell data set", + "authors": [ + "Lech Madeyski", + "Tomasz Lewowski" + ], + "version": "1.1", + "doi": "10.5281/zenodo.3666840", + "paperDoi": "10.1145/3383219.3383264", + "recordUrl": "https://zenodo.org/records/3666840", + "license": "CC-BY-4.0", + "file": "MLCQCodeSmellSamples.csv", + "sha256": "8e05db55150a984f0b08ab211f5f612374790ea918ba08afc290cf122b63551b", + "publishedMd5": "9019beae88089838d2d13dc12e69241b" + }, + "scope": "First externally rated Blob cohort for this audit. Java-only addition to the existing multilingual panel, not a cross-language god-object oracle. Selection uses published ratings and source coordinates, before extraction or query outputs.", + "selection": "Include every repository/revision with at least two distinct multi-reviewer unanimous none classes AND two distinct multi-reviewer all-major-or-critical classes. Same-reviewer repeats never add votes. Preserve all other Blob samples in selected revisions as secondary/uncertain. This purposive consensus-enriched selection is not population prevalence.", + "cohorts": [ + { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "classifications": { + "minor-or-disagreement": 11, + "single-reviewer": 13, + "unanimous-major-critical": 2, + "unanimous-none": 2 + }, + "eligible": true, + "sampleIds": [ + 8491397, + 8494605, + 8497585, + 8497687, + 8501968, + 8501970, + 8502684, + 8507718, + 8510347, + 8511088, + 8514954, + 8515776, + 8516029, + 8517396, + 8522716, + 8526483, + 8526485, + 8528735, + 8533230, + 8533645, + 8533750, + 8533873, + 8537138, + 8538037, + 8539540, + 8539645, + 8541418, + 8547261 + ] + }, + { + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "classifications": { + "minor-or-disagreement": 5, + "single-reviewer": 18, + "unanimous-major-critical": 2, + "unanimous-none": 2 + }, + "eligible": true, + "sampleIds": [ + 6369779, + 6371049, + 6372633, + 6374724, + 6375252, + 6375517, + 6379553, + 6383930, + 6385711, + 6387077, + 6387249, + 6388458, + 6391534, + 6393486, + 6398820, + 6404028, + 6406137, + 6412439, + 6413248, + 6413795, + 6414719, + 6416620, + 6424656, + 6424683, + 6425142, + 6427227, + 6428158 + ] + } + ], + "samples": [ + { + "sampleId": 6369779, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/IPropertyDescriptor.java", + "startLine": 55, + "endLine": 154, + "codeName": "org.eclipse.ui.views.properties.IPropertyDescriptor", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 4804, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 6371049, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BusyIndicator.java", + "startLine": 28, + "endLine": 175, + "codeName": "org.eclipse.ui.internal.browser.BusyIndicator", + "classification": "minor-or-disagreement", + "uniqueReviewers": 2, + "reviewRows": 2, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 9330, + "reviewerId": 13, + "severity": "minor" + }, + { + "reviewId": 11787, + "reviewerId": 3, + "severity": "minor" + } + ] + }, + { + "sampleId": 6372633, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/WizardShortcutAction.java", + "startLine": 43, + "endLine": 116, + "codeName": "org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 8581, + "reviewerId": 1, + "severity": "none" + } + ] + }, + { + "sampleId": 6374724, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startLine": 41, + "endLine": 462, + "codeName": "org.eclipse.ui.internal.keys.model.BindingModel", + "classification": "unanimous-major-critical", + "uniqueReviewers": 2, + "reviewRows": 2, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 10116, + "reviewerId": 3, + "severity": "critical" + }, + { + "reviewId": 10226, + "reviewerId": 16, + "severity": "major" + } + ] + }, + { + "sampleId": 6375252, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnLabelProvider.java", + "startLine": 31, + "endLine": 71, + "codeName": "org.eclipse.jface.viewers.ColumnLabelProvider", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 3332, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 6375517, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/HandledMenuItemImpl.java", + "startLine": 49, + "endLine": 327, + "codeName": "org.eclipse.e4.ui.model.application.ui.menu.impl.HandledMenuItemImpl", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 4417, + "reviewerId": 5, + "severity": "minor" + }, + { + "reviewId": 11935, + "reviewerId": 3, + "severity": "minor" + }, + { + "reviewId": 13737, + "reviewerId": 1, + "severity": "none" + } + ] + }, + { + "sampleId": 6379553, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/fieldassist/ContentProposalAdapter.java", + "startLine": 63, + "endLine": 2173, + "codeName": "org.eclipse.jface.fieldassist.ContentProposalAdapter", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 7354, + "reviewerId": 5, + "severity": "critical" + }, + { + "reviewId": 10127, + "reviewerId": 13, + "severity": "minor" + }, + { + "reviewId": 12241, + "reviewerId": 3, + "severity": "critical" + } + ] + }, + { + "sampleId": 6383930, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/api/MockEditorActionBarContributor.java", + "startLine": 22, + "endLine": 101, + "codeName": "org.eclipse.ui.tests.api.MockEditorActionBarContributor", + "classification": "minor-or-disagreement", + "uniqueReviewers": 4, + "reviewRows": 4, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 824, + "reviewerId": 12, + "severity": "minor" + }, + { + "reviewId": 10162, + "reviewerId": 13, + "severity": "major" + }, + { + "reviewId": 11994, + "reviewerId": 3, + "severity": "none" + }, + { + "reviewId": 13365, + "reviewerId": 1, + "severity": "none" + } + ] + }, + { + "sampleId": 6385711, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetTreeContentProvider.java", + "startLine": 43, + "endLine": 215, + "codeName": "org.eclipse.jface.databinding.viewers.ObservableSetTreeContentProvider", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 802, + "reviewerId": 4, + "severity": "none" + } + ] + }, + { + "sampleId": 6387077, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/dom/properties/css2/ICSSPropertyPaddingHandler.java", + "startLine": 26, + "endLine": 113, + "codeName": "org.eclipse.e4.ui.css.core.dom.properties.css2.ICSSPropertyPaddingHandler", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 6207, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 6387249, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/commands/NotHandledException.java", + "startLine": 27, + "endLine": 62, + "codeName": "org.eclipse.ui.commands.NotHandledException", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 9911, + "reviewerId": 4, + "severity": "none" + } + ] + }, + { + "sampleId": 6388458, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "examples/org.eclipse.jface.snippets/Eclipse JFace Snippets/org/eclipse/jface/snippets/wizard/Snippet071WizardWithProgressAndCancel.java", + "startLine": 43, + "endLine": 60, + "codeName": "org.eclipse.jface.snippets.wizard.Snippet071WizardWithProgressAndCancel.MyWizard.MyPage", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 9468, + "reviewerId": 4, + "severity": "none" + } + ] + }, + { + "sampleId": 6391534, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "startLine": 54, + "endLine": 99, + "codeName": "org.eclipse.core.databinding.property.value.SimpleValueProperty", + "classification": "unanimous-none", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 7681, + "reviewerId": 3, + "severity": "none" + }, + { + "reviewId": 13126, + "reviewerId": 11, + "severity": "none" + }, + { + "reviewId": 13713, + "reviewerId": 1, + "severity": "none" + } + ] + }, + { + "sampleId": 6393486, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/VisualTextDirectionSegmentListener.java", + "startLine": 25, + "endLine": 58, + "codeName": "org.eclipse.jface.util.VisualTextDirectionSegmentListener", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 8500, + "reviewerId": 1, + "severity": "none" + } + ] + }, + { + "sampleId": 6398820, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/WorkbenchThemeManager.java", + "startLine": 536, + "endLine": 602, + "codeName": "org.eclipse.ui.internal.themes.WorkbenchThemeManager.ThemeRegistryModifiedHandler", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 4424, + "reviewerId": 5, + "severity": "none" + } + ] + }, + { + "sampleId": 6404028, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/keys/KeySequenceText.java", + "startLine": 402, + "endLine": 440, + "codeName": "org.eclipse.jface.bindings.keys.KeySequenceText.TraversalFilterManager", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2905, + "reviewerId": 5, + "severity": "none" + } + ] + }, + { + "sampleId": 6406137, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "startLine": 24, + "endLine": 77, + "codeName": "org.eclipse.e4.ui.css.core.impl.dom.CSSValueListImpl", + "classification": "unanimous-none", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 6262, + "reviewerId": 7, + "severity": "none" + }, + { + "reviewId": 11432, + "reviewerId": 3, + "severity": "none" + }, + { + "reviewId": 13655, + "reviewerId": 1, + "severity": "none" + } + ] + }, + { + "sampleId": 6412439, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ThemeElementDefinition.java", + "startLine": 25, + "endLine": 168, + "codeName": "org.eclipse.ui.internal.themes.ThemeElementDefinition", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 807, + "reviewerId": 10, + "severity": "none" + } + ] + }, + { + "sampleId": 6413248, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AbstractEvaluationHandler.java", + "startLine": 30, + "endLine": 81, + "codeName": "org.eclipse.ui.internal.AbstractEvaluationHandler", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 3539, + "reviewerId": 16, + "severity": "none" + } + ] + }, + { + "sampleId": 6413795, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startLine": 45, + "endLine": 340, + "codeName": "org.eclipse.ui.tests.dialogs.DeprecatedUIWizardsAuto", + "classification": "unanimous-major-critical", + "uniqueReviewers": 2, + "reviewRows": 2, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 3878, + "reviewerId": 17, + "severity": "major" + }, + { + "reviewId": 10857, + "reviewerId": 4, + "severity": "major" + } + ] + }, + { + "sampleId": 6414719, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/set/UnionSetProperty.java", + "startLine": 37, + "endLine": 94, + "codeName": "org.eclipse.core.databinding.property.set.UnionSetProperty", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 8033, + "reviewerId": 3, + "severity": "none" + } + ] + }, + { + "sampleId": 6416620, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "examples/org.eclipse.ui.examples.readmetool/Eclipse UI Examples Readme Tool/org/eclipse/ui/examples/readmetool/ReadmeMarkerResolutionGenerator.java", + "startLine": 24, + "endLine": 37, + "codeName": "org.eclipse.ui.examples.readmetool.ReadmeMarkerResolutionGenerator", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 5630, + "reviewerId": 6, + "severity": "none" + } + ] + }, + { + "sampleId": 6424656, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ReferenceCounter.java", + "startLine": 36, + "endLine": 74, + "codeName": "org.eclipse.ui.internal.ReferenceCounter.RefRec", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2748, + "reviewerId": 16, + "severity": "none" + } + ] + }, + { + "sampleId": 6424683, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/window/IShellProvider.java", + "startLine": 26, + "endLine": 34, + "codeName": "org.eclipse.jface.window.IShellProvider", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 780, + "reviewerId": 13, + "severity": "none" + } + ] + }, + { + "sampleId": 6425142, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertyOuterKeylineSWTHandler.java", + "startLine": 25, + "endLine": 50, + "codeName": "org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyOuterKeylineSWTHandler", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 7631, + "reviewerId": 3, + "severity": "minor" + }, + { + "reviewId": 10275, + "reviewerId": 16, + "severity": "none" + }, + { + "reviewId": 13029, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 6427227, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/SkeletonViewerSorter.java", + "startLine": 23, + "endLine": 30, + "codeName": "org.eclipse.ui.internal.navigator.sorters.SkeletonViewerSorter", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 798, + "reviewerId": 1, + "severity": "none" + } + ] + }, + { + "sampleId": 6428158, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/map/DelegatingMapProperty.java", + "startLine": 38, + "endLine": 149, + "codeName": "org.eclipse.core.databinding.property.map.DelegatingMapProperty", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 5153, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 8491397, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java", + "startLine": 34, + "endLine": 155, + "codeName": "com.cloud.vm.dao.VMInstanceDao", + "classification": "minor-or-disagreement", + "uniqueReviewers": 4, + "reviewRows": 4, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 5736, + "reviewerId": 25, + "severity": "minor" + }, + { + "reviewId": 10696, + "reviewerId": 13, + "severity": "none" + }, + { + "reviewId": 11556, + "reviewerId": 3, + "severity": "critical" + }, + { + "reviewId": 13175, + "reviewerId": 11, + "severity": "none" + } + ] + }, + { + "sampleId": 8494605, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java", + "startLine": 40, + "endLine": 126, + "codeName": "org.apache.cloudstack.api.command.user.firewall.DeleteFirewallRuleCmd", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 5390, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 8497585, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "engine/schema/src/main/java/com/cloud/user/dao/VmDiskStatisticsDaoImpl.java", + "startLine": 37, + "endLine": 130, + "codeName": "com.cloud.user.dao.VmDiskStatisticsDaoImpl", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 6229, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 8497687, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManager.java", + "startLine": 35, + "endLine": 103, + "codeName": "com.cloud.network.ExternalLoadBalancerDeviceManager", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2029, + "reviewerId": 3, + "severity": "minor" + }, + { + "reviewId": 12812, + "reviewerId": 13, + "severity": "none" + }, + { + "reviewId": 14536, + "reviewerId": 4, + "severity": "minor" + } + ] + }, + { + "sampleId": 8501968, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsFetchInterfaceCommandWrapper.java", + "startLine": 38, + "endLine": 73, + "codeName": "com.cloud.hypervisor.xenserver.resource.wrapper.xenbase.CitrixOvsFetchInterfaceCommandWrapper", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 5272, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 8501970, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerFormatListPDU.java", + "startLine": 32, + "endLine": 237, + "codeName": "rdpclient.clip.ServerFormatListPDU", + "classification": "minor-or-disagreement", + "uniqueReviewers": 2, + "reviewRows": 2, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 3495, + "reviewerId": 16, + "severity": "minor" + }, + { + "reviewId": 12407, + "reviewerId": 3, + "severity": "minor" + } + ] + }, + { + "sampleId": 8502684, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "api/src/main/java/org/apache/cloudstack/api/command/admin/ca/RevokeCertificateCmd.java", + "startLine": 39, + "endLine": 116, + "codeName": "org.apache.cloudstack.api.command.admin.ca.RevokeCertificateCmd", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2036, + "reviewerId": 3, + "severity": "minor" + }, + { + "reviewId": 13868, + "reviewerId": 15, + "severity": "none" + }, + { + "reviewId": 14691, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 8507718, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java", + "startLine": 44, + "endLine": 433, + "codeName": "com.cloud.hypervisor.kvm.resource.BridgeVifDriver", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 5124, + "reviewerId": 20, + "severity": "minor" + }, + { + "reviewId": 12159, + "reviewerId": 3, + "severity": "critical" + }, + { + "reviewId": 13387, + "reviewerId": 1, + "severity": "minor" + } + ] + }, + { + "sampleId": 8510347, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateCommandWrapper.java", + "startLine": 39, + "endLine": 87, + "codeName": "com.cloud.hypervisor.kvm.resource.wrapper.LibvirtCreateCommandWrapper", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 6231, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 8511088, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "engine/schema/src/main/java/com/cloud/storage/dao/VolumeHostDao.java", + "startLine": 28, + "endLine": 41, + "codeName": "com.cloud.storage.dao.VolumeHostDao", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 9957, + "reviewerId": 4, + "severity": "none" + } + ] + }, + { + "sampleId": 8514954, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "api/src/main/java/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java", + "startLine": 39, + "endLine": 147, + "codeName": "org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd", + "classification": "minor-or-disagreement", + "uniqueReviewers": 4, + "reviewRows": 4, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2045, + "reviewerId": 3, + "severity": "minor" + }, + { + "reviewId": 10612, + "reviewerId": 13, + "severity": "none" + }, + { + "reviewId": 13154, + "reviewerId": 11, + "severity": "none" + }, + { + "reviewId": 14149, + "reviewerId": 21, + "severity": "minor" + } + ] + }, + { + "sampleId": 8515776, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "server/src/main/java/com/cloud/usage/UsageServiceImpl.java", + "startLine": 79, + "endLine": 438, + "codeName": "com.cloud.usage.UsageServiceImpl", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2039, + "reviewerId": 3, + "severity": "critical" + }, + { + "reviewId": 14936, + "reviewerId": 20, + "severity": "minor" + }, + { + "reviewId": 15207, + "reviewerId": 4, + "severity": "minor" + } + ] + }, + { + "sampleId": 8516029, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "server/src/main/java/com/cloud/servlet/ConsoleProxyClientParam.java", + "startLine": 20, + "endLine": 143, + "codeName": "com.cloud.servlet.ConsoleProxyClientParam", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 6385, + "reviewerId": 7, + "severity": "none" + }, + { + "reviewId": 11406, + "reviewerId": 3, + "severity": "minor" + }, + { + "reviewId": 14093, + "reviewerId": 21, + "severity": "none" + } + ] + }, + { + "sampleId": 8517396, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "core/src/main/java/com/cloud/agent/api/CheckHealthAnswer.java", + "startLine": 22, + "endLine": 30, + "codeName": "com.cloud.agent.api.CheckHealthAnswer", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2048, + "reviewerId": 3, + "severity": "none" + } + ] + }, + { + "sampleId": 8522716, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "plugins/dedicated-resources/src/main/java/org/apache/cloudstack/dedicated/DedicatedService.java", + "startLine": 35, + "endLine": 63, + "codeName": "org.apache.cloudstack.dedicated.DedicatedService", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2050, + "reviewerId": 3, + "severity": "minor" + }, + { + "reviewId": 14032, + "reviewerId": 20, + "severity": "none" + }, + { + "reviewId": 14783, + "reviewerId": 21, + "severity": "none" + } + ] + }, + { + "sampleId": 8526483, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsSetTagAndFlowCommandWrapper.java", + "startLine": 36, + "endLine": 74, + "codeName": "com.cloud.hypervisor.xenserver.resource.wrapper.xenbase.CitrixOvsSetTagAndFlowCommandWrapper", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 9167, + "reviewerId": 20, + "severity": "none" + } + ] + }, + { + "sampleId": 8526485, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "engine/orchestration/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java", + "startLine": 39, + "endLine": 272, + "codeName": "org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 6572, + "reviewerId": 13, + "severity": "minor" + }, + { + "reviewId": 10486, + "reviewerId": 5, + "severity": "none" + }, + { + "reviewId": 11921, + "reviewerId": 3, + "severity": "minor" + } + ] + }, + { + "sampleId": 8528735, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startLine": 141, + "endLine": 1311, + "codeName": "com.cloud.network.ExternalLoadBalancerDeviceManagerImpl", + "classification": "unanimous-major-critical", + "uniqueReviewers": 4, + "reviewRows": 4, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2053, + "reviewerId": 3, + "severity": "critical" + }, + { + "reviewId": 14461, + "reviewerId": 4, + "severity": "critical" + }, + { + "reviewId": 15257, + "reviewerId": 21, + "severity": "major" + }, + { + "reviewId": 15334, + "reviewerId": 20, + "severity": "major" + } + ] + }, + { + "sampleId": 8533230, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "core/src/main/java/com/cloud/agent/api/storage/DestroyCommand.java", + "startLine": 27, + "endLine": 58, + "codeName": "com.cloud.agent.api.storage.DestroyCommand", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 7604, + "reviewerId": 3, + "severity": "none" + } + ] + }, + { + "sampleId": 8533645, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java", + "startLine": 45, + "endLine": 225, + "codeName": "org.apache.cloudstack.api.command.user.network.UpdateNetworkCmd", + "classification": "minor-or-disagreement", + "uniqueReviewers": 3, + "reviewRows": 3, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 4460, + "reviewerId": 16, + "severity": "none" + }, + { + "reviewId": 12066, + "reviewerId": 3, + "severity": "minor" + }, + { + "reviewId": 15182, + "reviewerId": 4, + "severity": "none" + } + ] + }, + { + "sampleId": 8533750, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "api/src/main/java/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java", + "startLine": 28, + "endLine": 72, + "codeName": "org.apache.cloudstack.api.command.user.config.ListCapabilitiesCmd", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 9291, + "reviewerId": 13, + "severity": "none" + } + ] + }, + { + "sampleId": 8533873, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetMonitorServiceConfigItem.java", + "startLine": 31, + "endLine": 47, + "codeName": "com.cloud.agent.resource.virtualnetwork.facade.SetMonitorServiceConfigItem", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 3998, + "reviewerId": 5, + "severity": "none" + } + ] + }, + { + "sampleId": 8537138, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "startLine": 24, + "endLine": 60, + "codeName": "com.cloud.agent.api.HandleConfigDriveIsoCommand", + "classification": "unanimous-none", + "uniqueReviewers": 4, + "reviewRows": 4, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 5481, + "reviewerId": 6, + "severity": "none" + }, + { + "reviewId": 10277, + "reviewerId": 16, + "severity": "none" + }, + { + "reviewId": 10570, + "reviewerId": 13, + "severity": "none" + }, + { + "reviewId": 11416, + "reviewerId": 3, + "severity": "none" + } + ] + }, + { + "sampleId": 8538037, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startLine": 63, + "endLine": 542, + "codeName": "com.cloud.network.brocade.BrocadeVcsApi", + "classification": "unanimous-major-critical", + "uniqueReviewers": 2, + "reviewRows": 2, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 2055, + "reviewerId": 3, + "severity": "major" + }, + { + "reviewId": 14767, + "reviewerId": 4, + "severity": "major" + } + ] + }, + { + "sampleId": 8539540, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachOrDettachConfigDriveCommandWrapper.java", + "startLine": 39, + "endLine": 95, + "codeName": "com.cloud.hypervisor.xenserver.resource.wrapper.xenbase.CitrixAttachOrDettachConfigDriveCommandWrapper", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 7255, + "reviewerId": 5, + "severity": "none" + } + ] + }, + { + "sampleId": 8539645, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "startLine": 26, + "endLine": 38, + "codeName": "org.apache.cloudstack.api.response.DeploymentPlannersResponse", + "classification": "unanimous-none", + "uniqueReviewers": 4, + "reviewRows": 4, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 5989, + "reviewerId": 20, + "severity": "none" + }, + { + "reviewId": 10617, + "reviewerId": 13, + "severity": "none" + }, + { + "reviewId": 12468, + "reviewerId": 3, + "severity": "none" + }, + { + "reviewId": 13411, + "reviewerId": 1, + "severity": "none" + } + ] + }, + { + "sampleId": 8541418, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "api/src/main/java/org/apache/cloudstack/api/command/admin/ha/EnableHAForHostCmd.java", + "startLine": 44, + "endLine": 116, + "codeName": "org.apache.cloudstack.api.command.admin.ha.EnableHAForHostCmd", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 3048, + "reviewerId": 16, + "severity": "none" + } + ] + }, + { + "sampleId": 8547261, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java", + "startLine": 47, + "endLine": 259, + "codeName": "com.cloud.baremetal.networkservice.BaremetalPingPxeResource", + "classification": "single-reviewer", + "uniqueReviewers": 1, + "reviewRows": 1, + "duplicateReviewerRows": 0, + "ratings": [ + { + "reviewId": 9804, + "reviewerId": 4, + "severity": "none" + } + ] + } + ], + "primarySampleIds": [ + 6374724, + 6391534, + 6406137, + 6413795, + 8528735, + 8537138, + 8538037, + 8539645 + ], + "execution": "Use full clean pinned repository checkouts on the mounted workspace volume. Same whole-repository native-only extraction scope for both tools; no model-generated edges, credentials or project build execution. Record all file/scope counts, graph diagnostics, failures, commands, binary/environment and graph hashes. If source revision or exact sample source is unavailable, retain the failure and do not substitute latest source.", + "identity": "Before tool graph extraction, inspect each primary source span and freeze its exact class declaration line/name/file/hash separately from the annotated span. Preserve nested classes and test roles. Resolve result identities against source only after querying; ambiguous rendered labels remain unknown, never select by expected degree or rating.", + "nativeHubCapture": { + "method": "god_nodes", + "arguments": { + "top_n": 100 + }, + "timeoutSeconds": 120, + "maxResponseBytes": 16777216 + }, + "judgment": "At fixed cutoffs 10/50/100 report consensus-positive class retrieval out of four and consensus-none class retrieval out of four separately. Nonreturned, missing extraction and unresolved output identity remain distinct. Unlabeled hubs cannot become false positives or true negatives. No precision-at-k, population accuracy or classifier score from this partial label set. Preserve every candidate and rating disagreement.", + "secondary": "For each of the eight primary source classes, perform one public source-coordinate resolver and one unfiltered public get_neighbors call with returned ID when resolved. Graphify file::symbol lookup is source-coordinate checked; Compass exact scoped search. No oracle ID substitution or retries. Neighbor projection and source responsibilities may diagnose why hub degree diverges from labels; they cannot replace the native ranking score.", + "sourceReview": "Read the complete annotated primary spans plus necessary immediate context, retain their hashes and review rationale. Developer labels are external evidence with imperfect agreement, not unquestionable truth. Do not train or retune a classifier on these eight cases and call the same cases held-out confirmation.", + "limits": { + "maxSourceFileBytes": 4194304, + "maxGraphBytes": 268435456, + "maxExtractSeconds": 1200, + "maxExtractStreamBytes": 16777216, + "maxMcpSessionBytes": 67108864 + }, + "productVersion": "0.3.30", + "compassBinary": "calls-only-trails-01/compass", + "compassBinarySha256": "80a970c1c403892fcafd82eac7e6461afec119f2008db9f9117419432e387ca6", + "graphify": "0.9.67, same verified 227-file MCP installation used by prior comparisons" +} diff --git a/benchmarks/agent_query/mlcq_god_audit_review.json b/benchmarks/agent_query/mlcq_god_audit_review.json new file mode 100644 index 000000000..27e94bd02 --- /dev/null +++ b/benchmarks/agent_query/mlcq_god_audit_review.json @@ -0,0 +1,2859 @@ +{ + "artifacts": { + "benchmark-tests-03.log": "409fbe37e44d9079eeee8b3485cc9aab400c759b86f5755e72da608fdae08ba3", + "build_graphs.py": "b6f555f0e767135da5c5f7b568fdd672ad9315ee846052dbbddd2468e8b2ecff", + "capture.py": "970959ad7e1376666a6eb8fdd1095f62db12df9ac66de8162dc485cd74efff35", + "capture/capture.json": "22741d318f67f18dd3dad91150619d0a4de8704889c8707d956c86c14e9df1a5", + "cloudstack-live-sample.txt": "b3471ec240696d911f64f1d563c136cfb4d517c48e14c88d209eb2c407adbd0b", + "graphs/apache-cloudstack/build.json": "0bf829fe31c53f44bf407316d38e97fd5483756c1882c42555a5fcb19db9b99b", + "graphs/apache-cloudstack/compass.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphs/apache-cloudstack/compass.stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "graphs/apache-cloudstack/graphify.stderr": "5cc985f15fbdf37e6b6af1b427f317f0c8efba81984873e626ce209c149e73dc", + "graphs/apache-cloudstack/graphify.stdout": "7f0f8a91acc4d3979bb9c8ee1885a76e6bb4404597980f5cbde2b87b62531c6d", + "graphs/eclipse-eclipse.platform.ui/build.json": "f7d226afb76cf57836feabf9cbf4c310f25e5f0ddd65f869af0774f39dd0b2d4", + "graphs/eclipse-eclipse.platform.ui/compass.stderr": "6677dd9c5b1be60696b56c2c189264552b4a3bd942bd335d4325201680670f5c", + "graphs/eclipse-eclipse.platform.ui/compass.stdout": "bcd65cab1f7d4b6e0f09b2318d51e4fe24a7023445fdb55feba6dc8bf6b41903", + "graphs/eclipse-eclipse.platform.ui/graphify.stderr": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "graphs/eclipse-eclipse.platform.ui/graphify.stdout": "79bce2ef3d666c37f50591c7f3cee2f44d754562af15491fcbeb3a81123618f2", + "launch.json": "69e43eeff6575d8dcc6391dc4b55986dec2c014d56feefc39d2de019a1397870", + "product-boundary.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "source-witnesses-at-build.json": "648a953a72162910f880e3eb8194200fb95e247af85fb49fe46c18bf864bad2c", + "sql-bottleneck-notes.json": "588760756395597ea621155b65c1df075aa3194454a4ddb837bfed218792e5a2", + "verified-capture-repeat.json": "420eb2fc950039450f77c0561aea887e905f0c1a80c21de9fc99c95e031c8878", + "verified-capture.json": "420eb2fc950039450f77c0561aea887e905f0c1a80c21de9fc99c95e031c8878", + "verified-corpus.json": "b1faf6b1e9816f4e7738bfa90ace23c1393d8fd3814f9e1642117481c1e83507", + "verify_capture.py": "1a561ceede49bc03b5de7d8dc240814afbb3f95f085aeb70e652ae93f6f29190", + "verify_corpus.py": "d0baa4bbaa4cfd9e0da88ed1646420d7ad6a7d0604efa859bcaa8471409eba69", + "witness-portability.json": "6226a28cab6ee3f966004a485adc1e7e562725bdb18b9427ef32f2c11d7c943f", + "write_report.py": "a06b4089c92834a94c5bb88e708e121277efcc44636cd66ff0954ce1fe057a61" + }, + "buildProfileDisclosure": { + "compass": "Frozen unoptimized Cargo dev binary, with debug information disabled and incremental compilation disabled; not a release executable.", + "graphify": "Installed Graphify 0.9.67 Python package and its native dependencies.", + "interpretation": "Original extraction timeouts are development-build observations under registered limits. They do not establish release performance or a controlled language/tool speed comparison. Graph bytes and original query/admission outcomes are unchanged.", + "sourceBuildLog": "calls-only-trails-01/build.log", + "sourceBuildLogSha256": "a79489e56b200092517e298a7e6b0892358dd8af72ea894972ff37b69e8f2b47", + "sourceBuildScript": "calls-only-trails-01/validate.py", + "sourceBuildScriptSha256": "0ce82fa6d32cb48a6d9bdaa876611e55e8795728b8374653f8f388b79976da93" + }, + "conclusions": [ + "Compass primary ranking retrieval is unavailable for all four positive and all four none cases. The original limit outcomes remain in the denominator.", + "Graphify primary ranking retrieves zero of four positive and zero of four none classes at each registered cutoff 10/50/100. All eight exact classes exist in its graphs and resolve through public source-coordinate queries; they are not extraction misses.", + "Graphify returned 200 hub rows; 163 have unique graph label identities and matching distinct-pair degrees. The other 37 remain ambiguous, never selected by degree or external rating.", + "All eight Graphify unfiltered neighbor projections match stored displayed direction/label/relation triples (234 rows); this is graph consistency, not source-precision proof or identity-rich navigation.", + "No precision-at-k, broad god-object classification accuracy, authored explanation score, representative performance result or Compass superiority follows.", + "A live CloudStack sample and code inspection identify speculative repeated SQL prefix scanning before dollar-delimiter syntax rejection as a concrete follow-up. No optimization or improvement claim has been tested here." + ], + "corpus": { + "blobReviews": 4019, + "blobSamples": 2334, + "classifications": { + "minor-or-disagreement": 462, + "single-reviewer": 1563, + "unanimous-major-critical": 43, + "unanimous-none": 266 + }, + "datasetSha256": "8e05db55150a984f0b08ab211f5f612374790ea918ba08afc290cf122b63551b", + "primaryRatings": { + "unanimous-major-critical": 4, + "unanimous-none": 4 + }, + "primarySamples": 8, + "repeatedReviewerSamples": [ + 5715127 + ], + "reviews": 14739, + "schema": "compass.mlcq-corpus-verification/1", + "selectedReviewRows": 104, + "selectedSamples": 55, + "sources": [ + { + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "repository": "apache/cloudstack", + "trackedFiles": 7764, + "trackedJavaFiles": 5474 + }, + { + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "repository": "eclipse/eclipse.platform.ui", + "trackedFiles": 8964, + "trackedJavaFiles": 6060 + } + ], + "toolScoresAvailable": false, + "verifiedSources": [ + { + "fileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "sampleId": 6374724, + "sourceIdentityVerified": true + }, + { + "fileSha256": "50407d33afc5ee8283f1022f5bf38278aa20b4cd82db4cd909eb5ee0e2e22b64", + "sampleId": 6391534, + "sourceIdentityVerified": true + }, + { + "fileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "sampleId": 6406137, + "sourceIdentityVerified": true + }, + { + "fileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "sampleId": 6413795, + "sourceIdentityVerified": true + }, + { + "fileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "sampleId": 8528735, + "sourceIdentityVerified": true + }, + { + "fileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "sampleId": 8537138, + "sourceIdentityVerified": true + }, + { + "fileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "sampleId": 8538037, + "sourceIdentityVerified": true + }, + { + "fileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "sampleId": 8539645, + "sourceIdentityVerified": true + } + ], + "verifierSha256": "d0baa4bbaa4cfd9e0da88ed1646420d7ad6a7d0604efa859bcaa8471409eba69" + }, + "dataset": { + "authors": [ + "Lech Madeyski", + "Tomasz Lewowski" + ], + "doi": "10.5281/zenodo.3666840", + "file": "MLCQCodeSmellSamples.csv", + "license": "CC-BY-4.0", + "paperDoi": "10.1145/3383219.3383264", + "publishedMd5": "9019beae88089838d2d13dc12e69241b", + "recordUrl": "https://zenodo.org/records/3666840", + "sha256": "8e05db55150a984f0b08ab211f5f612374790ea918ba08afc290cf122b63551b", + "title": "MLCQ: Industry-relevant code smell data set", + "version": "1.1" + }, + "externalRun": "mlcq-god-audit-01", + "extractionCaveats": [ + "One timed extraction per tool/repository; concurrent repository runs and native worker settings differ, so these are operational observations, not a controlled speed ranking.", + "Compass Eclipse indexed 6162 files and reported 95084 nodes, 347974 edges and 317 communities, with 62 omitted edges and a partial-graph warning. Artifact admission failed at the registered 256 MiB bound.", + "Graphify reported 6775 code files for CloudStack and 6162 for Eclipse. Native discovery/support differs; whole-repository request scope does not imply identical emitted facts.", + "Compass CloudStack exceeded the registered 1200-second limit and was terminated by the harness, exit -9. No published graph was admitted." + ], + "extractionObservations": [ + { + "exit_code": -9, + "graphBytes": null, + "repository": "apache/cloudstack", + "timed_out": true, + "tool": "compass", + "wall_ms": 1200258, + "withinRegisteredGraphBound": null + }, + { + "exit_code": 0, + "graphBytes": 227334534, + "repository": "apache/cloudstack", + "timed_out": false, + "tool": "graphify", + "wall_ms": 88899, + "withinRegisteredGraphBound": true + }, + { + "exit_code": 0, + "graphBytes": 477211091, + "repository": "eclipse/eclipse.platform.ui", + "timed_out": false, + "tool": "compass", + "wall_ms": 671990, + "withinRegisteredGraphBound": false + }, + { + "exit_code": 0, + "graphBytes": 189557807, + "repository": "eclipse/eclipse.platform.ui", + "timed_out": false, + "tool": "graphify", + "wall_ms": 65246, + "withinRegisteredGraphBound": true + } + ], + "registrationSha256": "a08e6a0970c605154b329acbfebaa0d9684859f1fad2fa0ed8e8717772866ef1", + "repeat": { + "byteIdentical": true, + "sha256": "420eb2fc950039450f77c0561aea887e905f0c1a80c21de9fc99c95e031c8878" + }, + "schema": "compass.mlcq-god-audit-review/1", + "scope": "Registered whole-repository native-only Java Blob cohort; partial external labels, not population precision or overall superiority.", + "sourceReviewSha256": "c126379ccdbdfe0991ac28205b06ee6d92f40e5bc5713ca7f45ab1778e2853f7", + "sourceWitnessesSha256": "c35e4202703599acca6f96a807c72f598345d7d764d88cfc3b13f9340e01e675", + "verification": { + "captureSha256": "22741d318f67f18dd3dad91150619d0a4de8704889c8707d956c86c14e9df1a5", + "results": [ + { + "build": { + "exitCode": -9, + "graphBytes": null, + "graphSha256": null, + "timedOut": true, + "withinRegisteredGraphBound": null + }, + "captureStatus": "build-or-artifact-bound-failure", + "cases": [ + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-major-critical", + "graphIds": null, + "rank": null, + "sampleId": 8528735 + }, + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-none", + "graphIds": null, + "rank": null, + "sampleId": 8537138 + }, + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-major-critical", + "graphIds": null, + "rank": null, + "sampleId": 8538037 + }, + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-none", + "graphIds": null, + "rank": null, + "sampleId": 8539645 + } + ], + "connectivityChecks": [], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "capture-unavailable": 2 + }, + "unanimous-none": { + "capture-unavailable": 2 + } + }, + "100": { + "unanimous-major-critical": { + "capture-unavailable": 2 + }, + "unanimous-none": { + "capture-unavailable": 2 + } + }, + "50": { + "unanimous-major-critical": { + "capture-unavailable": 2 + }, + "unanimous-none": { + "capture-unavailable": 2 + } + } + }, + "graphConsistency": null, + "repository": "apache/cloudstack", + "secondary": [], + "tool": "compass" + }, + { + "build": { + "exitCode": 0, + "graphBytes": 227334534, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72", + "timedOut": false, + "withinRegisteredGraphBound": true + }, + "captureStatus": "completed", + "cases": [ + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl" + ], + "rank": null, + "sampleId": 8528735 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand" + ], + "rank": null, + "sampleId": 8537138 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi" + ], + "rank": null, + "sampleId": 8538037 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse" + ], + "rank": null, + "sampleId": 8539645 + } + ], + "connectivityChecks": [], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + } + }, + "graphConsistency": { + "executionSucceeded": true, + "explicitIdentities": 0, + "hubs": [ + { + "degree": 2273, + "identityCandidates": 3, + "label": "CloudRuntimeException", + "rank": 1 + }, + { + "degree": 1458, + "degreeMatches": true, + "expectedDegree": 1458, + "file": "api/src/main/java/com/cloud/agent/api/Answer.java", + "id": "api_src_main_java_com_cloud_agent_api_answer_answer", + "identityCandidates": 1, + "label": "Answer", + "line": 21, + "rank": 2 + }, + { + "degree": 1332, + "degreeMatches": true, + "expectedDegree": 1332, + "file": "api/src/main/java/org/apache/cloudstack/api/APICommand.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apicommand_apicommand", + "identityCandidates": 1, + "label": "APICommand", + "line": 28, + "rank": 3 + }, + { + "degree": 1293, + "identityCandidates": 9, + "label": "Network", + "rank": 4 + }, + { + "degree": 1149, + "identityCandidates": 10, + "label": "Account", + "rank": 5 + }, + { + "degree": 932, + "identityCandidates": 2, + "label": "cleanup_resources()", + "rank": 6 + }, + { + "degree": 799, + "degreeMatches": true, + "expectedDegree": 799, + "file": "framework/db/src/main/java/com/cloud/utils/db/DB.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_db_db", + "identityCandidates": 1, + "label": "DB", + "line": 40, + "rank": 7 + }, + { + "degree": 798, + "identityCandidates": 2, + "label": "Pair", + "rank": 8 + }, + { + "degree": 780, + "degreeMatches": true, + "expectedDegree": 780, + "file": "api/src/main/java/org/apache/cloudstack/api/ApiConstants.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apiconstants_apiconstants", + "identityCandidates": 1, + "label": "ApiConstants", + "line": 19, + "rank": 9 + }, + { + "degree": 758, + "degreeMatches": true, + "expectedDegree": 758, + "file": "framework/db/src/main/java/com/cloud/utils/db/GenericDao.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_genericdao_genericdao", + "identityCandidates": 1, + "label": "GenericDao", + "line": 30, + "rank": 10 + }, + { + "degree": 711, + "identityCandidates": 8, + "label": "Host", + "rank": 11 + }, + { + "degree": 683, + "identityCandidates": 4, + "label": "Command", + "rank": 12 + }, + { + "degree": 663, + "degreeMatches": true, + "expectedDegree": 663, + "file": "framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_genericdaobase_genericdaobase", + "identityCandidates": 1, + "label": "GenericDaoBase", + "line": 116, + "rank": 13 + }, + { + "degree": 657, + "degreeMatches": true, + "expectedDegree": 657, + "file": "engine/schema/src/main/java/com/cloud/host/HostVO.java", + "id": "engine_schema_src_main_java_com_cloud_host_hostvo_hostvo", + "identityCandidates": 1, + "label": "HostVO", + "line": 47, + "rank": 14 + }, + { + "degree": 639, + "degreeMatches": true, + "expectedDegree": 639, + "file": "api/src/main/java/com/cloud/vm/VirtualMachineProfile.java", + "id": "api_src_main_java_com_cloud_vm_virtualmachineprofile_virtualmachineprofile", + "identityCandidates": 1, + "label": "VirtualMachineProfile", + "line": 35, + "rank": 15 + }, + { + "degree": 587, + "degreeMatches": true, + "expectedDegree": 587, + "file": "api/src/main/java/org/apache/cloudstack/api/Parameter.java", + "id": "api_src_main_java_org_apache_cloudstack_api_parameter_parameter", + "identityCandidates": 1, + "label": "Parameter", + "line": 28, + "rank": 16 + }, + { + "degree": 582, + "degreeMatches": true, + "expectedDegree": 582, + "file": "api/src/main/java/com/cloud/hypervisor/Hypervisor.java", + "id": "api_src_main_java_com_cloud_hypervisor_hypervisor_hypervisortype", + "identityCandidates": 1, + "label": "HypervisorType", + "line": 23, + "rank": 17 + }, + { + "degree": 578, + "identityCandidates": 9, + "label": "VirtualMachine", + "rank": 18 + }, + { + "degree": 560, + "degreeMatches": true, + "expectedDegree": 560, + "file": "framework/db/src/main/java/com/cloud/utils/db/SearchBuilder.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_searchbuilder_searchbuilder", + "identityCandidates": 1, + "label": "SearchBuilder", + "line": 56, + "rank": 19 + }, + { + "degree": 540, + "degreeMatches": true, + "expectedDegree": 540, + "file": "api/src/main/java/org/apache/cloudstack/api/ServerApiException.java", + "id": "api_src_main_java_org_apache_cloudstack_api_serverapiexception_serverapiexception", + "identityCandidates": 1, + "label": "ServerApiException", + "line": 26, + "rank": 20 + }, + { + "degree": 523, + "degreeMatches": true, + "expectedDegree": 523, + "file": "api/src/main/java/com/cloud/vm/NicProfile.java", + "id": "api_src_main_java_com_cloud_vm_nicprofile_nicprofile", + "identityCandidates": 1, + "label": "NicProfile", + "line": 31, + "rank": 21 + }, + { + "degree": 521, + "degreeMatches": true, + "expectedDegree": 521, + "file": "tools/marvin/marvin/cloudstackTestCase.py", + "id": "tools_marvin_marvin_cloudstacktestcase_cloudstacktestcase", + "identityCandidates": 1, + "label": "cloudstackTestCase", + "line": 37, + "rank": 22 + }, + { + "degree": 521, + "degreeMatches": true, + "expectedDegree": 521, + "file": "engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java", + "id": "engine_api_src_main_java_org_apache_cloudstack_engine_subsystem_api_storage_datastore_datastore", + "identityCandidates": 1, + "label": "DataStore", + "line": 22, + "rank": 23 + }, + { + "degree": 512, + "degreeMatches": true, + "expectedDegree": 512, + "file": "api/src/main/java/org/apache/cloudstack/api/BaseCmd.java", + "id": "api_src_main_java_org_apache_cloudstack_api_basecmd_basecmd", + "identityCandidates": 1, + "label": "BaseCmd", + "line": 85, + "rank": 24 + }, + { + "degree": 507, + "degreeMatches": true, + "expectedDegree": 507, + "file": "api/src/main/java/org/apache/cloudstack/api/ApiErrorCode.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apierrorcode_apierrorcode", + "identityCandidates": 1, + "label": "ApiErrorCode", + "line": 23, + "rank": 25 + }, + { + "degree": 505, + "degreeMatches": true, + "expectedDegree": 505, + "file": "api/src/main/java/com/cloud/exception/ResourceUnavailableException.java", + "id": "api_src_main_java_com_cloud_exception_resourceunavailableexception_resourceunavailableexception", + "identityCandidates": 1, + "label": "ResourceUnavailableException", + "line": 21, + "rank": 26 + }, + { + "degree": 499, + "degreeMatches": true, + "expectedDegree": 499, + "file": "api/src/main/java/com/cloud/exception/InvalidParameterValueException.java", + "id": "api_src_main_java_com_cloud_exception_invalidparametervalueexception_invalidparametervalueexception", + "identityCandidates": 1, + "label": "InvalidParameterValueException", + "line": 21, + "rank": 27 + }, + { + "degree": 494, + "identityCandidates": 2, + "label": "get_zone()", + "rank": 28 + }, + { + "degree": 489, + "degreeMatches": true, + "expectedDegree": 489, + "file": "api/src/main/java/org/apache/cloudstack/api/InternalIdentity.java", + "id": "api_src_main_java_org_apache_cloudstack_api_internalidentity_internalidentity", + "identityCandidates": 1, + "label": "InternalIdentity", + "line": 26, + "rank": 29 + }, + { + "degree": 478, + "degreeMatches": true, + "expectedDegree": 478, + "file": "api/src/main/java/org/apache/cloudstack/context/CallContext.java", + "id": "api_src_main_java_org_apache_cloudstack_context_callcontext_callcontext", + "identityCandidates": 1, + "label": "CallContext", + "line": 42, + "rank": 30 + }, + { + "degree": 457, + "degreeMatches": true, + "expectedDegree": 457, + "file": "framework/db/src/main/java/com/cloud/utils/db/SearchCriteria.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_searchcriteria_searchcriteria", + "identityCandidates": 1, + "label": "SearchCriteria", + "line": 33, + "rank": 31 + }, + { + "degree": 455, + "identityCandidates": 3, + "label": "get_domain()", + "rank": 32 + }, + { + "degree": 454, + "identityCandidates": 10, + "label": "Account", + "rank": 33 + }, + { + "degree": 454, + "degreeMatches": true, + "expectedDegree": 454, + "file": "api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java", + "id": "api_src_main_java_org_apache_cloudstack_api_baseasynccmd_baseasynccmd", + "identityCandidates": 1, + "label": "BaseAsyncCmd", + "line": 25, + "rank": 34 + }, + { + "degree": 434, + "degreeMatches": true, + "expectedDegree": 434, + "file": "api/src/main/java/com/cloud/vm/ReservationContext.java", + "id": "api_src_main_java_com_cloud_vm_reservationcontext_reservationcontext", + "identityCandidates": 1, + "label": "ReservationContext", + "line": 28, + "rank": 35 + }, + { + "degree": 434, + "degreeMatches": true, + "expectedDegree": 434, + "file": "api/src/main/java/org/apache/cloudstack/api/BaseResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_baseresponse_baseresponse", + "identityCandidates": 1, + "label": "BaseResponse", + "line": 23, + "rank": 36 + }, + { + "degree": 433, + "identityCandidates": 9, + "label": "VirtualMachine", + "rank": 37 + }, + { + "degree": 431, + "degreeMatches": true, + "expectedDegree": 431, + "file": "api/src/main/java/org/apache/cloudstack/api/response/ListResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_listresponse_listresponse", + "identityCandidates": 1, + "label": "ListResponse", + "line": 24, + "rank": 38 + }, + { + "degree": 415, + "degreeMatches": true, + "expectedDegree": 415, + "file": "plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java", + "id": "plugins_hypervisors_kvm_src_main_java_com_cloud_hypervisor_kvm_resource_libvirtcomputingresource_libvirtcomputingresource", + "identityCandidates": 1, + "label": "LibvirtComputingResource", + "line": 198, + "rank": 39 + }, + { + "degree": 409, + "identityCandidates": 2, + "label": "Config", + "rank": 40 + }, + { + "degree": 408, + "degreeMatches": true, + "expectedDegree": 408, + "file": "engine/schema/src/main/java/com/cloud/host/dao/HostDao.java", + "id": "engine_schema_src_main_java_com_cloud_host_dao_hostdao_hostdao", + "identityCandidates": 1, + "label": "HostDao", + "line": 37, + "rank": 41 + }, + { + "degree": 408, + "degreeMatches": true, + "expectedDegree": 408, + "file": "plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java", + "id": "plugins_hypervisors_xenserver_src_main_java_com_cloud_hypervisor_xenserver_resource_citrixresourcebase_citrixresourcebase", + "identityCandidates": 1, + "label": "CitrixResourceBase", + "line": 173, + "rank": 42 + }, + { + "degree": 406, + "degreeMatches": true, + "expectedDegree": 406, + "file": "api/src/main/java/com/cloud/deploy/DeployDestination.java", + "id": "api_src_main_java_com_cloud_deploy_deploydestination_deploydestination", + "identityCandidates": 1, + "label": "DeployDestination", + "line": 30, + "rank": 43 + }, + { + "degree": 403, + "identityCandidates": 4, + "label": "ServiceOffering", + "rank": 44 + }, + { + "degree": 400, + "degreeMatches": true, + "expectedDegree": 400, + "file": "tools/marvin/marvin/lib/utils.py", + "id": "tools_marvin_marvin_lib_utils_validatelist", + "identityCandidates": 1, + "label": "validateList()", + "line": 386, + "rank": 45 + }, + { + "degree": 390, + "degreeMatches": true, + "expectedDegree": 390, + "file": "framework/config/src/main/java/org/apache/cloudstack/framework/config/dao/ConfigurationDao.java", + "id": "framework_config_src_main_java_org_apache_cloudstack_framework_config_dao_configurationdao_configurationdao", + "identityCandidates": 1, + "label": "ConfigurationDao", + "line": 25, + "rank": 46 + }, + { + "degree": 382, + "identityCandidates": 2, + "label": "get_template()", + "rank": 47 + }, + { + "degree": 379, + "degreeMatches": true, + "expectedDegree": 379, + "file": "server/src/main/java/com/cloud/api/ApiDBUtils.java", + "id": "server_src_main_java_com_cloud_api_apidbutils_apidbutils", + "identityCandidates": 1, + "label": "ApiDBUtils", + "line": 318, + "rank": 48 + }, + { + "degree": 376, + "degreeMatches": true, + "expectedDegree": 376, + "file": "core/src/main/java/com/cloud/resource/ResourceWrapper.java", + "id": "core_src_main_java_com_cloud_resource_resourcewrapper_resourcewrapper", + "identityCandidates": 1, + "label": "ResourceWrapper", + "line": 29, + "rank": 49 + }, + { + "degree": 359, + "identityCandidates": 6, + "label": "Service", + "rank": 50 + }, + { + "degree": 354, + "identityCandidates": 3, + "label": "NetworkOffering", + "rank": 51 + }, + { + "degree": 353, + "degreeMatches": true, + "expectedDegree": 353, + "file": "core/src/main/java/com/cloud/resource/CommandWrapper.java", + "id": "core_src_main_java_com_cloud_resource_commandwrapper_commandwrapper", + "identityCandidates": 1, + "label": "CommandWrapper", + "line": 25, + "rank": 52 + }, + { + "degree": 352, + "degreeMatches": true, + "expectedDegree": 352, + "file": "engine/schema/src/main/java/com/cloud/network/dao/NetworkVO.java", + "id": "engine_schema_src_main_java_com_cloud_network_dao_networkvo_networkvo", + "identityCandidates": 1, + "label": "NetworkVO", + "line": 46, + "rank": 53 + }, + { + "degree": 345, + "degreeMatches": true, + "expectedDegree": 345, + "file": "api/src/main/java/com/cloud/event/EventTypes.java", + "id": "api_src_main_java_com_cloud_event_eventtypes_eventtypes", + "identityCandidates": 1, + "label": "EventTypes", + "line": 79, + "rank": 54 + }, + { + "degree": 340, + "degreeMatches": true, + "expectedDegree": 340, + "file": "services/console-proxy/rdpconsole/src/main/java/streamer/ByteBuffer.java", + "id": "services_console_proxy_rdpconsole_src_main_java_streamer_bytebuffer_bytebuffer", + "identityCandidates": 1, + "label": "ByteBuffer", + "line": 29, + "rank": 55 + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "file": "api/src/main/java/com/cloud/event/ActionEvent.java", + "id": "api_src_main_java_com_cloud_event_actionevent_actionevent", + "identityCandidates": 1, + "label": "ActionEvent", + "line": 26, + "rank": 56 + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "file": "engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java", + "id": "engine_schema_src_main_java_com_cloud_vm_vminstancevo_vminstancevo", + "identityCandidates": 1, + "label": "VMInstanceVO", + "line": 48, + "rank": 57 + }, + { + "degree": 336, + "degreeMatches": true, + "expectedDegree": 336, + "file": "engine/components-api/src/main/java/com/cloud/agent/AgentManager.java", + "id": "engine_components_api_src_main_java_com_cloud_agent_agentmanager_agentmanager", + "identityCandidates": 1, + "label": "AgentManager", + "line": 37, + "rank": 58 + }, + { + "degree": 329, + "degreeMatches": true, + "expectedDegree": 329, + "file": "core/src/main/java/com/cloud/agent/api/StartupCommand.java", + "id": "core_src_main_java_com_cloud_agent_api_startupcommand_startupcommand", + "identityCandidates": 1, + "label": "StartupCommand", + "line": 24, + "rank": 59 + }, + { + "degree": 329, + "degreeMatches": true, + "expectedDegree": 329, + "file": "api/src/main/java/com/cloud/exception/ConcurrentOperationException.java", + "id": "api_src_main_java_com_cloud_exception_concurrentoperationexception_concurrentoperationexception", + "identityCandidates": 1, + "label": "ConcurrentOperationException", + "line": 22, + "rank": 60 + }, + { + "degree": 321, + "degreeMatches": true, + "expectedDegree": 321, + "file": "engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDao.java", + "id": "engine_schema_src_main_java_com_cloud_dc_dao_datacenterdao_datacenterdao", + "identityCandidates": 1, + "label": "DataCenterDao", + "line": 26, + "rank": 61 + }, + { + "degree": 321, + "identityCandidates": 5, + "label": "StoragePool", + "rank": 62 + }, + { + "degree": 317, + "degreeMatches": true, + "expectedDegree": 317, + "file": "api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apicommandjobtype_apicommandjobtype", + "identityCandidates": 1, + "label": "ApiCommandJobType", + "line": 19, + "rank": 63 + }, + { + "degree": 316, + "degreeMatches": true, + "expectedDegree": 316, + "file": "api/src/main/java/org/apache/cloudstack/api/response/SuccessResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_successresponse_successresponse", + "identityCandidates": 1, + "label": "SuccessResponse", + "line": 25, + "rank": 64 + }, + { + "degree": 313, + "degreeMatches": true, + "expectedDegree": 313, + "file": "api/src/main/java/com/cloud/network/NetworkModel.java", + "id": "api_src_main_java_com_cloud_network_networkmodel_networkmodel", + "identityCandidates": 1, + "label": "NetworkModel", + "line": 52, + "rank": 65 + }, + { + "degree": 307, + "degreeMatches": true, + "expectedDegree": 307, + "file": "engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java", + "id": "engine_api_src_main_java_org_apache_cloudstack_engine_subsystem_api_storage_dataobject_dataobject", + "identityCandidates": 1, + "label": "DataObject", + "line": 25, + "rank": 66 + }, + { + "degree": 294, + "identityCandidates": 2, + "label": "InsufficientCapacityException", + "rank": 67 + }, + { + "degree": 292, + "degreeMatches": true, + "expectedDegree": 292, + "file": "api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_uservmresponse_uservmresponse", + "identityCandidates": 1, + "label": "UserVmResponse", + "line": 36, + "rank": 68 + }, + { + "degree": 289, + "identityCandidates": 18, + "label": "TrafficType", + "rank": 69 + }, + { + "degree": 286, + "degreeMatches": true, + "expectedDegree": 286, + "file": "engine/schema/src/main/java/com/cloud/user/AccountVO.java", + "id": "engine_schema_src_main_java_com_cloud_user_accountvo_accountvo", + "identityCandidates": 1, + "label": "AccountVO", + "line": 33, + "rank": 70 + }, + { + "degree": 285, + "degreeMatches": true, + "expectedDegree": 285, + "file": "server/src/main/java/com/cloud/user/AccountManager.java", + "id": "server_src_main_java_com_cloud_user_accountmanager_accountmanager", + "identityCandidates": 1, + "label": "AccountManager", + "line": 44, + "rank": 71 + }, + { + "degree": 280, + "degreeMatches": true, + "expectedDegree": 280, + "file": "engine/schema/src/main/java/com/cloud/network/dao/NetworkDao.java", + "id": "engine_schema_src_main_java_com_cloud_network_dao_networkdao_networkdao", + "identityCandidates": 1, + "label": "NetworkDao", + "line": 30, + "rank": 72 + }, + { + "degree": 278, + "degreeMatches": true, + "expectedDegree": 278, + "file": "engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java", + "id": "engine_schema_src_main_java_com_cloud_vm_dao_vminstancedao_vminstancedao", + "identityCandidates": 1, + "label": "VMInstanceDao", + "line": 34, + "rank": 73 + }, + { + "degree": 275, + "identityCandidates": 7, + "label": "Volume", + "rank": 74 + }, + { + "degree": 272, + "degreeMatches": true, + "expectedDegree": 272, + "file": "engine/schema/src/main/java/com/cloud/storage/VolumeVO.java", + "id": "engine_schema_src_main_java_com_cloud_storage_volumevo_volumevo", + "identityCandidates": 1, + "label": "VolumeVO", + "line": 40, + "rank": 75 + }, + { + "degree": 266, + "degreeMatches": true, + "expectedDegree": 266, + "file": "plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/IntegrationTestConfiguration.java", + "id": "plugins_network_elements_juniper_contrail_src_test_java_org_apache_cloudstack_network_contrail_management_integrationtestconfiguration_integrationtestconfiguration", + "identityCandidates": 1, + "label": "IntegrationTestConfiguration", + "line": 304, + "rank": 76 + }, + { + "degree": 264, + "degreeMatches": true, + "expectedDegree": 264, + "file": "utils/src/main/java/com/cloud/utils/component/ManagerBase.java", + "id": "utils_src_main_java_com_cloud_utils_component_managerbase_managerbase", + "identityCandidates": 1, + "label": "ManagerBase", + "line": 22, + "rank": 77 + }, + { + "degree": 262, + "identityCandidates": 2, + "label": "VolumeInfo", + "rank": 78 + }, + { + "degree": 262, + "degreeMatches": true, + "expectedDegree": 262, + "file": "api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java", + "id": "api_src_main_java_com_cloud_agent_api_to_virtualmachineto_virtualmachineto", + "identityCandidates": 1, + "label": "VirtualMachineTO", + "line": 27, + "rank": 79 + }, + { + "degree": 260, + "identityCandidates": 2, + "label": "VirtualRouter", + "rank": 80 + }, + { + "degree": 260, + "degreeMatches": true, + "expectedDegree": 260, + "file": "engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java", + "id": "engine_schema_src_main_java_com_cloud_storage_vmtemplatevo_vmtemplatevo", + "identityCandidates": 1, + "label": "VMTemplateVO", + "line": 40, + "rank": 81 + }, + { + "degree": 260, + "degreeMatches": true, + "expectedDegree": 260, + "file": "api/src/main/java/com/cloud/exception/ResourceAllocationException.java", + "id": "api_src_main_java_com_cloud_exception_resourceallocationexception_resourceallocationexception", + "identityCandidates": 1, + "label": "ResourceAllocationException", + "line": 21, + "rank": 82 + }, + { + "degree": 258, + "identityCandidates": 2, + "label": "Filter", + "rank": 83 + }, + { + "degree": 257, + "degreeMatches": true, + "expectedDegree": 257, + "file": "engine/components-api/src/main/java/com/cloud/resource/ResourceManager.java", + "id": "engine_components_api_src_main_java_com_cloud_resource_resourcemanager_resourcemanager", + "identityCandidates": 1, + "label": "ResourceManager", + "line": 48, + "rank": 84 + }, + { + "degree": 256, + "degreeMatches": true, + "expectedDegree": 256, + "file": "framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java", + "id": "framework_config_src_main_java_org_apache_cloudstack_framework_config_configkey_configkey", + "identityCandidates": 1, + "label": "ConfigKey", + "line": 31, + "rank": 85 + }, + { + "degree": 255, + "degreeMatches": true, + "expectedDegree": 255, + "file": "framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_transactionlegacy_transactionlegacy", + "identityCandidates": 1, + "label": "TransactionLegacy", + "line": 65, + "rank": 86 + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "file": "api/src/main/java/com/cloud/dc/DataCenter.java", + "id": "api_src_main_java_com_cloud_dc_datacenter_datacenter", + "identityCandidates": 1, + "label": "DataCenter", + "line": 28, + "rank": 87 + }, + { + "degree": 249, + "identityCandidates": 10, + "label": "User", + "rank": 88 + }, + { + "degree": 243, + "degreeMatches": true, + "expectedDegree": 243, + "file": "utils/src/main/java/com/cloud/utils/net/NetUtils.java", + "id": "utils_src_main_java_com_cloud_utils_net_netutils_netutils", + "identityCandidates": 1, + "label": "NetUtils", + "line": 59, + "rank": 89 + }, + { + "degree": 241, + "degreeMatches": true, + "expectedDegree": 241, + "file": "utils/src/main/java/com/cloud/utils/script/Script.java", + "id": "utils_src_main_java_com_cloud_utils_script_script_script", + "identityCandidates": 1, + "label": "Script", + "line": 49, + "rank": 90 + }, + { + "degree": 240, + "degreeMatches": true, + "expectedDegree": 240, + "file": "engine/schema/src/main/java/com/cloud/vm/DomainRouterVO.java", + "id": "engine_schema_src_main_java_com_cloud_vm_domainroutervo_domainroutervo", + "identityCandidates": 1, + "label": "DomainRouterVO", + "line": 32, + "rank": 91 + }, + { + "degree": 239, + "identityCandidates": 5, + "label": "Provider", + "rank": 92 + }, + { + "degree": 235, + "degreeMatches": true, + "expectedDegree": 235, + "file": "api/src/main/java/org/apache/cloudstack/api/EntityReference.java", + "id": "api_src_main_java_org_apache_cloudstack_api_entityreference_entityreference", + "identityCandidates": 1, + "label": "EntityReference", + "line": 25, + "rank": 93 + }, + { + "degree": 233, + "degreeMatches": true, + "expectedDegree": 233, + "file": "engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java", + "id": "engine_schema_src_main_java_org_apache_cloudstack_storage_datastore_db_storagepoolvo_storagepoolvo", + "identityCandidates": 1, + "label": "StoragePoolVO", + "line": 40, + "rank": 94 + }, + { + "degree": 232, + "identityCandidates": 8, + "label": "Param", + "rank": 95 + }, + { + "degree": 232, + "degreeMatches": true, + "expectedDegree": 232, + "file": "api/src/main/java/org/apache/cloudstack/acl/RoleType.java", + "id": "api_src_main_java_org_apache_cloudstack_acl_roletype_roletype", + "identityCandidates": 1, + "label": "RoleType", + "line": 24, + "rank": 96 + }, + { + "degree": 231, + "degreeMatches": true, + "expectedDegree": 231, + "file": "tools/marvin/marvin/sshClient.py", + "id": "tools_marvin_marvin_sshclient_sshclient", + "identityCandidates": 1, + "label": "SshClient", + "line": 38, + "rank": 97 + }, + { + "degree": 231, + "degreeMatches": true, + "expectedDegree": 231, + "file": "engine/schema/src/main/java/com/cloud/dc/DataCenterVO.java", + "id": "engine_schema_src_main_java_com_cloud_dc_datacentervo_datacentervo", + "identityCandidates": 1, + "label": "DataCenterVO", + "line": 38, + "rank": 98 + }, + { + "degree": 227, + "identityCandidates": 36, + "label": "Status", + "rank": 99 + }, + { + "degree": 225, + "degreeMatches": true, + "expectedDegree": 225, + "file": "engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java", + "id": "engine_schema_src_main_java_com_cloud_storage_dao_volumedao_volumedao", + "identityCandidates": 1, + "label": "VolumeDao", + "line": 31, + "rank": 100 + } + ], + "matchingDegrees": 72, + "matchingSourceAnchors": 0, + "question": "hubs", + "repository": "apache/cloudstack", + "returned": 100, + "tool": "graphify", + "verifiedIdentities": 72 + }, + "graphCounts": { + "edges": 340129, + "nodes": 93793 + }, + "repository": "apache/cloudstack", + "secondary": [ + { + "projection": { + "expectedRows": 71, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 71 + }, + "sampleId": 8528735, + "selection": { + "matchedIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl" + ], + "returnedAnchors": [ + { + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl", + "line": 141, + "symbols": [ + "ExternalLoadBalancerDeviceManagerImpl" + ] + } + ], + "selector": "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 21, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 21 + }, + "sampleId": 8537138, + "selection": { + "matchedIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand" + ], + "returnedAnchors": [ + { + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand", + "line": 24, + "symbols": [ + "HandleConfigDriveIsoCommand" + ] + } + ], + "selector": "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 32, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 32 + }, + "sampleId": 8538037, + "selection": { + "matchedIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi" + ], + "returnedAnchors": [ + { + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi", + "line": 63, + "symbols": [ + "BrocadeVcsApi" + ] + } + ], + "selector": "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 6, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 6 + }, + "sampleId": 8539645, + "selection": { + "matchedIds": [ + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse" + ], + "returnedAnchors": [ + { + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse", + "line": 26, + "symbols": [ + "DeploymentPlannersResponse" + ] + } + ], + "selector": "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse", + "status": "resolved" + } + } + ], + "tool": "graphify" + }, + { + "build": { + "exitCode": 0, + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "timedOut": false, + "withinRegisteredGraphBound": false + }, + "captureStatus": "build-or-artifact-bound-failure", + "cases": [ + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-major-critical", + "graphIds": null, + "rank": null, + "sampleId": 6374724 + }, + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-none", + "graphIds": null, + "rank": null, + "sampleId": 6391534 + }, + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-none", + "graphIds": null, + "rank": null, + "sampleId": 6406137 + }, + { + "atCutoff": { + "10": "capture-unavailable", + "100": "capture-unavailable", + "50": "capture-unavailable" + }, + "classification": "unanimous-major-critical", + "graphIds": null, + "rank": null, + "sampleId": 6413795 + } + ], + "connectivityChecks": [], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "capture-unavailable": 2 + }, + "unanimous-none": { + "capture-unavailable": 2 + } + }, + "100": { + "unanimous-major-critical": { + "capture-unavailable": 2 + }, + "unanimous-none": { + "capture-unavailable": 2 + } + }, + "50": { + "unanimous-major-critical": { + "capture-unavailable": 2 + }, + "unanimous-none": { + "capture-unavailable": 2 + } + } + }, + "graphConsistency": null, + "repository": "eclipse/eclipse.platform.ui", + "secondary": [], + "tool": "compass" + }, + { + "build": { + "exitCode": 0, + "graphBytes": 189557807, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef", + "timedOut": false, + "withinRegisteredGraphBound": true + }, + "captureStatus": "completed", + "cases": [ + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel" + ], + "rank": null, + "sampleId": 6374724 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty" + ], + "rank": null, + "sampleId": 6391534 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl" + ], + "rank": null, + "sampleId": 6406137 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto" + ], + "rank": null, + "sampleId": 6413795 + } + ], + "connectivityChecks": [], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + } + }, + "graphConsistency": { + "executionSucceeded": true, + "explicitIdentities": 0, + "hubs": [ + { + "degree": 770, + "degreeMatches": true, + "expectedDegree": 770, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchWindow.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchwindow_iworkbenchwindow", + "identityCandidates": 1, + "label": "IWorkbenchWindow", + "line": 59, + "rank": 1 + }, + { + "degree": 677, + "identityCandidates": 2, + "label": "PlatformUI", + "rank": 2 + }, + { + "degree": 663, + "degreeMatches": true, + "expectedDegree": 663, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/engine/CSSEngine.java", + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_engine_cssengine_cssengine", + "identityCandidates": 1, + "label": "CSSEngine", + "line": 41, + "rank": 3 + }, + { + "degree": 652, + "degreeMatches": true, + "expectedDegree": 652, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/ImageDescriptor.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_resource_imagedescriptor_imagedescriptor", + "identityCandidates": 1, + "label": "ImageDescriptor", + "line": 59, + "rank": 4 + }, + { + "degree": 601, + "degreeMatches": true, + "expectedDegree": 601, + "file": "tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java", + "id": "tests_org_eclipse_e4_ui_tests_src_org_eclipse_e4_ui_tests_application_epartservicetest_epartservicetest", + "identityCandidates": 1, + "label": "EPartServiceTest", + "line": 56, + "rank": 5 + }, + { + "degree": 584, + "degreeMatches": true, + "expectedDegree": 584, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/IObservableValue.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_value_iobservablevalue_iobservablevalue", + "identityCandidates": 1, + "label": "IObservableValue", + "line": 38, + "rank": 6 + }, + { + "degree": 569, + "degreeMatches": true, + "expectedDegree": 569, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MUIElement.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_muielement_muielement", + "identityCandidates": 1, + "label": "MUIElement", + "line": 54, + "rank": 7 + }, + { + "degree": 556, + "degreeMatches": true, + "expectedDegree": 556, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPage.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpage_iworkbenchpage", + "identityCandidates": 1, + "label": "IWorkbenchPage", + "line": 46, + "rank": 8 + }, + { + "degree": 530, + "degreeMatches": true, + "expectedDegree": 530, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpart_iworkbenchpart", + "identityCandidates": 1, + "label": "IWorkbenchPart", + "line": 99, + "rank": 9 + }, + { + "degree": 522, + "degreeMatches": true, + "expectedDegree": 522, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/Realm.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_realm_realm", + "identityCandidates": 1, + "label": "Realm", + "line": 84, + "rank": 10 + }, + { + "degree": 508, + "degreeMatches": true, + "expectedDegree": 508, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/IStructuredSelection.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_istructuredselection_istructuredselection", + "identityCandidates": 1, + "label": "IStructuredSelection", + "line": 22, + "rank": 11 + }, + { + "degree": 501, + "degreeMatches": true, + "expectedDegree": 501, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/Viewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewer_viewer", + "identityCandidates": 1, + "label": "Viewer", + "line": 43, + "rank": 12 + }, + { + "degree": 496, + "degreeMatches": true, + "expectedDegree": 496, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IMemento.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_imemento_imemento", + "identityCandidates": 1, + "label": "IMemento", + "line": 57, + "rank": 13 + }, + { + "degree": 456, + "degreeMatches": true, + "expectedDegree": 456, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredSelection.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_structuredselection_structuredselection", + "identityCandidates": 1, + "label": "StructuredSelection", + "line": 33, + "rank": 14 + }, + { + "degree": 454, + "degreeMatches": true, + "expectedDegree": 454, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelection.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselection_iselection", + "identityCandidates": 1, + "label": "ISelection", + "line": 23, + "rank": 15 + }, + { + "degree": 402, + "degreeMatches": true, + "expectedDegree": 402, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IAction.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_iaction_iaction", + "identityCandidates": 1, + "label": "IAction", + "line": 47, + "rank": 16 + }, + { + "degree": 388, + "degreeMatches": true, + "expectedDegree": 388, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MPart.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_basic_mpart_mpart", + "identityCandidates": 1, + "label": "MPart", + "line": 56, + "rank": 17 + }, + { + "degree": 387, + "degreeMatches": true, + "expectedDegree": 387, + "file": "tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/UITestCase.java", + "id": "tests_org_eclipse_ui_tests_harness_src_org_eclipse_ui_tests_harness_util_uitestcase_uitestcase", + "identityCandidates": 1, + "label": "UITestCase", + "line": 49, + "rank": 18 + }, + { + "degree": 363, + "degreeMatches": true, + "expectedDegree": 363, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ExecutionEvent.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_executionevent_executionevent", + "identityCandidates": 1, + "label": "ExecutionEvent", + "line": 36, + "rank": 19 + }, + { + "degree": 342, + "degreeMatches": true, + "expectedDegree": 342, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/Action.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_action_action", + "identityCandidates": 1, + "label": "Action", + "line": 29, + "rank": 20 + }, + { + "degree": 342, + "degreeMatches": true, + "expectedDegree": 342, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchplugin_workbenchplugin", + "identityCandidates": 1, + "label": "WorkbenchPlugin", + "line": 111, + "rank": 21 + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/MenuManager.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_menumanager_menumanager", + "identityCandidates": 1, + "label": "MenuManager", + "line": 48, + "rank": 22 + }, + { + "degree": 338, + "identityCandidates": 4, + "label": "IWorkbench", + "rank": 23 + }, + { + "degree": 330, + "degreeMatches": true, + "expectedDegree": 330, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/IObservable.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_iobservable_iobservable", + "identityCandidates": 1, + "label": "IObservable", + "line": 36, + "rank": 24 + }, + { + "degree": 318, + "degreeMatches": true, + "expectedDegree": 318, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_tableviewer_tableviewer", + "identityCandidates": 1, + "label": "TableViewer", + "line": 69, + "rank": 25 + }, + { + "degree": 310, + "degreeMatches": true, + "expectedDegree": 310, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/IPropertyChangeListener.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_ipropertychangelistener_ipropertychangelistener", + "identityCandidates": 1, + "label": "IPropertyChangeListener", + "line": 37, + "rank": 26 + }, + { + "degree": 308, + "degreeMatches": true, + "expectedDegree": 308, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_treeviewer_treeviewer", + "identityCandidates": 1, + "label": "TreeViewer", + "line": 69, + "rank": 27 + }, + { + "degree": 308, + "degreeMatches": true, + "expectedDegree": 308, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchpage_workbenchpage", + "identityCandidates": 1, + "label": "WorkbenchPage", + "line": 197, + "rank": 28 + }, + { + "degree": 302, + "degreeMatches": true, + "expectedDegree": 302, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplication.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_mapplication_mapplication", + "identityCandidates": 1, + "label": "MApplication", + "line": 70, + "rank": 29 + }, + { + "degree": 297, + "degreeMatches": true, + "expectedDegree": 297, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditorpart_ieditorpart", + "identityCandidates": 1, + "label": "IEditorPart", + "line": 55, + "rank": 30 + }, + { + "degree": 295, + "degreeMatches": true, + "expectedDegree": 295, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IContributionItem.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_icontributionitem_icontributionitem", + "identityCandidates": 1, + "label": "IContributionItem", + "line": 42, + "rank": 31 + }, + { + "degree": 294, + "degreeMatches": true, + "expectedDegree": 294, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_structuredviewer_structuredviewer", + "identityCandidates": 1, + "label": "StructuredViewer", + "line": 65, + "rank": 32 + }, + { + "degree": 268, + "degreeMatches": true, + "expectedDegree": 268, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkingSet.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkingset_iworkingset", + "identityCandidates": 1, + "label": "IWorkingSet", + "line": 29, + "rank": 33 + }, + { + "degree": 263, + "degreeMatches": true, + "expectedDegree": 263, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IMenuManager.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_imenumanager_imenumanager", + "identityCandidates": 1, + "label": "IMenuManager", + "line": 32, + "rank": 34 + }, + { + "degree": 262, + "degreeMatches": true, + "expectedDegree": 262, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/IObservableList.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_list_iobservablelist_iobservablelist", + "identityCandidates": 1, + "label": "IObservableList", + "line": 44, + "rank": 35 + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSS2PropertiesImpl.java", + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_css2propertiesimpl_css2propertiesimpl", + "identityCandidates": 1, + "label": "CSS2PropertiesImpl", + "line": 24, + "rank": 36 + }, + { + "degree": 248, + "degreeMatches": true, + "expectedDegree": 248, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MWindow.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_basic_mwindow_mwindow", + "identityCandidates": 1, + "label": "MWindow", + "line": 56, + "rank": 37 + }, + { + "degree": 243, + "degreeMatches": true, + "expectedDegree": 243, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ParameterizedCommand.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_parameterizedcommand_parameterizedcommand", + "identityCandidates": 1, + "label": "ParameterizedCommand", + "line": 41, + "rank": 38 + }, + { + "degree": 242, + "degreeMatches": true, + "expectedDegree": 242, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorInput.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditorinput_ieditorinput", + "identityCandidates": 1, + "label": "IEditorInput", + "line": 54, + "rank": 39 + }, + { + "degree": 237, + "degreeMatches": true, + "expectedDegree": 237, + "file": "bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/EModelService.java", + "id": "bundles_org_eclipse_e4_ui_workbench_src_org_eclipse_e4_ui_workbench_modeling_emodelservice_emodelservice", + "identityCandidates": 1, + "label": "EModelService", + "line": 41, + "rank": 40 + }, + { + "degree": 237, + "degreeMatches": true, + "expectedDegree": 237, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchwindow_workbenchwindow", + "identityCandidates": 1, + "label": "WorkbenchWindow", + "line": 209, + "rank": 41 + }, + { + "degree": 237, + "degreeMatches": true, + "expectedDegree": 237, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_preference_ipreferencestore_ipreferencestore", + "identityCandidates": 1, + "label": "IPreferenceStore", + "line": 59, + "rank": 42 + }, + { + "degree": 233, + "identityCandidates": 5, + "label": "LabelProvider", + "rank": 43 + }, + { + "degree": 226, + "degreeMatches": true, + "expectedDegree": 226, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ITreeContentProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_itreecontentprovider_itreecontentprovider", + "identityCandidates": 1, + "label": "ITreeContentProvider", + "line": 22, + "rank": 44 + }, + { + "degree": 226, + "degreeMatches": true, + "expectedDegree": 226, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/set/IObservableSet.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_set_iobservableset_iobservableset", + "identityCandidates": 1, + "label": "IObservableSet", + "line": 43, + "rank": 45 + }, + { + "degree": 218, + "identityCandidates": 2, + "label": "AbstractHandler", + "rank": 46 + }, + { + "degree": 218, + "degreeMatches": true, + "expectedDegree": 218, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbench_workbench", + "identityCandidates": 1, + "label": "Workbench", + "line": 279, + "rank": 47 + }, + { + "degree": 213, + "degreeMatches": true, + "expectedDegree": 213, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/JFaceResources.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_resource_jfaceresources_jfaceresources", + "identityCandidates": 1, + "label": "JFaceResources", + "line": 57, + "rank": 48 + }, + { + "degree": 207, + "degreeMatches": true, + "expectedDegree": 207, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/MessageDialog.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_messagedialog_messagedialog", + "identityCandidates": 1, + "label": "MessageDialog", + "line": 40, + "rank": 49 + }, + { + "degree": 203, + "degreeMatches": true, + "expectedDegree": 203, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPerspectiveDescriptor.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iperspectivedescriptor_iperspectivedescriptor", + "identityCandidates": 1, + "label": "IPerspectiveDescriptor", + "line": 49, + "rank": 50 + }, + { + "degree": 193, + "degreeMatches": true, + "expectedDegree": 193, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/Dialog.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_dialog_dialog", + "identityCandidates": 1, + "label": "Dialog", + "line": 65, + "rank": 51 + }, + { + "degree": 193, + "identityCandidates": 2, + "label": "BindingTestSuite", + "rank": 52 + }, + { + "degree": 190, + "degreeMatches": true, + "expectedDegree": 190, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/CellEditor.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_celleditor_celleditor", + "identityCandidates": 1, + "label": "CellEditor", + "line": 45, + "rank": 53 + }, + { + "degree": 184, + "degreeMatches": true, + "expectedDegree": 184, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ILabelProviderListener.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_ilabelproviderlistener_ilabelproviderlistener", + "identityCandidates": 1, + "label": "ILabelProviderListener", + "line": 23, + "rank": 54 + }, + { + "degree": 183, + "degreeMatches": true, + "expectedDegree": 183, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IViewPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iviewpart_iviewpart", + "identityCandidates": 1, + "label": "IViewPart", + "line": 58, + "rank": 55 + }, + { + "degree": 178, + "identityCandidates": 2, + "label": "Command", + "rank": 56 + }, + { + "degree": 173, + "degreeMatches": true, + "expectedDegree": 173, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogSettings.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_idialogsettings_idialogsettings", + "identityCandidates": 1, + "label": "IDialogSettings", + "line": 28, + "rank": 57 + }, + { + "degree": 172, + "degreeMatches": true, + "expectedDegree": 172, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MElementContainer.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_melementcontainer_melementcontainer", + "identityCandidates": 1, + "label": "MElementContainer", + "line": 50, + "rank": 58 + }, + { + "degree": 170, + "degreeMatches": true, + "expectedDegree": 170, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchmessages_workbenchmessages", + "identityCandidates": 1, + "label": "WorkbenchMessages", + "line": 33, + "rank": 59 + }, + { + "degree": 169, + "degreeMatches": true, + "expectedDegree": 169, + "file": "tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java", + "id": "tests_org_eclipse_jface_tests_databinding_src_org_eclipse_jface_tests_databinding_abstractdefaultrealmtestcase_abstractdefaultrealmtestcase", + "identityCandidates": 1, + "label": "AbstractDefaultRealmTestCase", + "line": 30, + "rank": 60 + }, + { + "degree": 167, + "degreeMatches": true, + "expectedDegree": 167, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_columnviewer_columnviewer", + "identityCandidates": 1, + "label": "ColumnViewer", + "line": 47, + "rank": 61 + }, + { + "degree": 166, + "degreeMatches": true, + "expectedDegree": 166, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_abstracttreeviewer_abstracttreeviewer", + "identityCandidates": 1, + "label": "AbstractTreeViewer", + "line": 73, + "rank": 62 + }, + { + "degree": 165, + "degreeMatches": true, + "expectedDegree": 165, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IActionBars.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iactionbars_iactionbars", + "identityCandidates": 1, + "label": "IActionBars", + "line": 61, + "rank": 63 + }, + { + "degree": 164, + "degreeMatches": true, + "expectedDegree": 164, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/PartInitException.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_partinitexception_partinitexception", + "identityCandidates": 1, + "label": "PartInitException", + "line": 26, + "rank": 64 + }, + { + "degree": 164, + "degreeMatches": true, + "expectedDegree": 164, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPartReference.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpartreference_iworkbenchpartreference", + "identityCandidates": 1, + "label": "IWorkbenchPartReference", + "line": 29, + "rank": 65 + }, + { + "degree": 162, + "degreeMatches": true, + "expectedDegree": 162, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerCell.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewercell_viewercell", + "identityCandidates": 1, + "label": "ViewerCell", + "line": 34, + "rank": 66 + }, + { + "degree": 161, + "degreeMatches": true, + "expectedDegree": 161, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/services/IServiceLocator.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_services_iservicelocator_iservicelocator", + "identityCandidates": 1, + "label": "IServiceLocator", + "line": 35, + "rank": 67 + }, + { + "degree": 161, + "degreeMatches": true, + "expectedDegree": 161, + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java", + "id": "bundles_org_eclipse_ui_ide_src_org_eclipse_ui_internal_ide_ideworkbenchplugin_ideworkbenchplugin", + "identityCandidates": 1, + "label": "IDEWorkbenchPlugin", + "line": 65, + "rank": 68 + }, + { + "degree": 155, + "identityCandidates": 2, + "label": "ExecutionException", + "rank": 69 + }, + { + "degree": 154, + "degreeMatches": true, + "expectedDegree": 154, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ILabelProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_ilabelprovider_ilabelprovider", + "identityCandidates": 1, + "label": "ILabelProvider", + "line": 23, + "rank": 70 + }, + { + "degree": 154, + "degreeMatches": true, + "expectedDegree": 154, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselectionprovider_iselectionprovider", + "identityCandidates": 1, + "label": "ISelectionProvider", + "line": 23, + "rank": 71 + }, + { + "degree": 153, + "degreeMatches": true, + "expectedDegree": 153, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplicationElement.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_mapplicationelement_mapplicationelement", + "identityCandidates": 1, + "label": "MApplicationElement", + "line": 57, + "rank": 72 + }, + { + "degree": 153, + "degreeMatches": true, + "expectedDegree": 153, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_wizard_wizarddialog_wizarddialog", + "identityCandidates": 1, + "label": "WizardDialog", + "line": 85, + "rank": 73 + }, + { + "degree": 150, + "degreeMatches": true, + "expectedDegree": 150, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionChangedListener.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselectionchangedlistener_iselectionchangedlistener", + "identityCandidates": 1, + "label": "ISelectionChangedListener", + "line": 24, + "rank": 74 + }, + { + "degree": 149, + "degreeMatches": true, + "expectedDegree": 149, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerComparator.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewercomparator_viewercomparator", + "identityCandidates": 1, + "label": "ViewerComparator", + "line": 49, + "rank": 75 + }, + { + "degree": 148, + "degreeMatches": true, + "expectedDegree": 148, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/IObservableCollection.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_iobservablecollection_iobservablecollection", + "identityCandidates": 1, + "label": "IObservableCollection", + "line": 41, + "rank": 76 + }, + { + "degree": 146, + "degreeMatches": true, + "expectedDegree": 146, + "file": "bundles/org.eclipse.core.databinding/src/org/eclipse/core/databinding/DataBindingContext.java", + "id": "bundles_org_eclipse_core_databinding_src_org_eclipse_core_databinding_databindingcontext_databindingcontext", + "identityCandidates": 1, + "label": "DataBindingContext", + "line": 58, + "rank": 77 + }, + { + "degree": 146, + "degreeMatches": true, + "expectedDegree": 146, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/SafeRunnable.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_saferunnable_saferunnable", + "identityCandidates": 1, + "label": "SafeRunnable", + "line": 31, + "rank": 78 + }, + { + "degree": 145, + "degreeMatches": true, + "expectedDegree": 145, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/advanced/MPerspective.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_advanced_mperspective_mperspective", + "identityCandidates": 1, + "label": "MPerspective", + "line": 52, + "rank": 79 + }, + { + "degree": 144, + "degreeMatches": true, + "expectedDegree": 144, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/map/IObservableMap.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_map_iobservablemap_iobservablemap", + "identityCandidates": 1, + "label": "IObservableMap", + "line": 45, + "rank": 80 + }, + { + "degree": 144, + "identityCandidates": 4, + "label": "Binding", + "rank": 81 + }, + { + "degree": 142, + "degreeMatches": true, + "expectedDegree": 142, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerFilter.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewerfilter_viewerfilter", + "identityCandidates": 1, + "label": "ViewerFilter", + "line": 30, + "rank": 82 + }, + { + "degree": 141, + "degreeMatches": true, + "expectedDegree": 141, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogConstants.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_idialogconstants_idialogconstants", + "identityCandidates": 1, + "label": "IDialogConstants", + "line": 45, + "rank": 83 + }, + { + "degree": 140, + "degreeMatches": true, + "expectedDegree": 140, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/TriggerSequence.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_bindings_triggersequence_triggersequence", + "identityCandidates": 1, + "label": "TriggerSequence", + "line": 28, + "rank": 84 + }, + { + "degree": 139, + "degreeMatches": true, + "expectedDegree": 139, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/IValueProperty.java", + "id": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_ivalueproperty_ivalueproperty", + "identityCandidates": 1, + "label": "IValueProperty", + "line": 47, + "rank": 85 + }, + { + "degree": 137, + "degreeMatches": true, + "expectedDegree": 137, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/MMenu.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_menu_mmenu_mmenu", + "identityCandidates": 1, + "label": "MMenu", + "line": 41, + "rank": 86 + }, + { + "degree": 135, + "degreeMatches": true, + "expectedDegree": 135, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/PropertyChangeEvent.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_propertychangeevent_propertychangeevent", + "identityCandidates": 1, + "label": "PropertyChangeEvent", + "line": 36, + "rank": 87 + }, + { + "degree": 135, + "identityCandidates": 2, + "label": "Window", + "rank": 88 + }, + { + "degree": 134, + "degreeMatches": true, + "expectedDegree": 134, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorDescriptor.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditordescriptor_ieditordescriptor", + "identityCandidates": 1, + "label": "IEditorDescriptor", + "line": 36, + "rank": 89 + }, + { + "degree": 132, + "degreeMatches": true, + "expectedDegree": 132, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/IStructuredContentProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_istructuredcontentprovider_istructuredcontentprovider", + "identityCandidates": 1, + "label": "IStructuredContentProvider", + "line": 21, + "rank": 90 + }, + { + "degree": 128, + "degreeMatches": true, + "expectedDegree": 128, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/WritableValue.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_value_writablevalue_writablevalue", + "identityCandidates": 1, + "label": "WritableValue", + "line": 38, + "rank": 91 + }, + { + "degree": 127, + "degreeMatches": true, + "expectedDegree": 127, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/plugin/AbstractUIPlugin.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_plugin_abstractuiplugin_abstractuiplugin", + "identityCandidates": 1, + "label": "AbstractUIPlugin", + "line": 126, + "rank": 92 + }, + { + "degree": 125, + "degreeMatches": true, + "expectedDegree": 125, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/IUndoContext.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_operations_iundocontext_iundocontext", + "identityCandidates": 1, + "label": "IUndoContext", + "line": 37, + "rank": 93 + }, + { + "degree": 125, + "degreeMatches": true, + "expectedDegree": 125, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_bindings_bindingmanager_bindingmanager", + "identityCandidates": 1, + "label": "BindingManager", + "line": 70, + "rank": 94 + }, + { + "degree": 124, + "degreeMatches": true, + "expectedDegree": 124, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/operation/IRunnableWithProgress.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_operation_irunnablewithprogress_irunnablewithprogress", + "identityCandidates": 1, + "label": "IRunnableWithProgress", + "line": 33, + "rank": 95 + }, + { + "degree": 123, + "degreeMatches": true, + "expectedDegree": 123, + "file": "bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentService.java", + "id": "bundles_org_eclipse_ui_navigator_src_org_eclipse_ui_internal_navigator_navigatorcontentservice_navigatorcontentservice", + "identityCandidates": 1, + "label": "NavigatorContentService", + "line": 85, + "rank": 96 + }, + { + "degree": 121, + "degreeMatches": true, + "expectedDegree": 121, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/IUndoableOperation.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_operations_iundoableoperation_iundoableoperation", + "identityCandidates": 1, + "label": "IUndoableOperation", + "line": 37, + "rank": 97 + }, + { + "degree": 121, + "degreeMatches": true, + "expectedDegree": 121, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/ViewPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_part_viewpart_viewpart", + "identityCandidates": 1, + "label": "ViewPart", + "line": 69, + "rank": 98 + }, + { + "degree": 119, + "degreeMatches": true, + "expectedDegree": 119, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ArrayContentProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_arraycontentprovider_arraycontentprovider", + "identityCandidates": 1, + "label": "ArrayContentProvider", + "line": 30, + "rank": 99 + }, + { + "degree": 119, + "degreeMatches": true, + "expectedDegree": 119, + "file": "bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java", + "id": "bundles_org_eclipse_ui_navigator_src_org_eclipse_ui_navigator_inavigatorcontentservice_inavigatorcontentservice", + "identityCandidates": 1, + "label": "INavigatorContentService", + "line": 104, + "rank": 100 + } + ], + "matchingDegrees": 91, + "matchingSourceAnchors": 0, + "question": "hubs", + "repository": "eclipse/eclipse.platform.ui", + "returned": 100, + "tool": "graphify", + "verifiedIdentities": 91 + }, + "graphCounts": { + "edges": 258146, + "nodes": 70420 + }, + "repository": "eclipse/eclipse.platform.ui", + "secondary": [ + { + "projection": { + "expectedRows": 22, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 22 + }, + "sampleId": 6374724, + "selection": { + "matchedIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel", + "line": 41, + "symbols": [ + "BindingModel" + ] + } + ], + "selector": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 52, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 52 + }, + "sampleId": 6391534, + "selection": { + "matchedIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty", + "line": 54, + "symbols": [ + "SimpleValueProperty" + ] + } + ], + "selector": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 11, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 11 + }, + "sampleId": 6406137, + "selection": { + "matchedIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl", + "line": 24, + "symbols": [ + "CSSValueListImpl" + ] + } + ], + "selector": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 19, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 19 + }, + "sampleId": 6413795, + "selection": { + "matchedIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto" + ], + "returnedAnchors": [ + { + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto", + "line": 45, + "symbols": [ + "DeprecatedUIWizardsAuto" + ] + } + ], + "selector": "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto", + "status": "resolved" + } + } + ], + "tool": "graphify" + } + ], + "schema": "compass.mlcq-hub-verification/1", + "scorerSha256": "efecb4fe026e464addb385c312766b5f58fbf8b4cb8b47eb3d43409602511202", + "verifiedToolCalls": 18, + "verifierSha256": "1a561ceede49bc03b5de7d8dc240814afbb3f95f085aeb70e652ae93f6f29190" + }, + "coverageDisclosure": { + "graphifyCloudStackSkippedSqlFiles": 119, + "missingOptionalDependency": "tree_sitter_sql", + "otherFilesWithSyntaxErrors": 3, + "sourceLog": "mlcq-god-audit-01/graphs/apache-cloudstack/graphify.stderr", + "sourceLogSha256": "5cc985f15fbdf37e6b6af1b427f317f0c8efba81984873e626ce209c149e73dc", + "interpretation": "The frozen Graphify installation reported skipping all SQL files and partially extracting other files with syntax errors. Whole-repository request scope did not yield equal emitted language coverage. No environment, graph, admission outcome or query score is changed by this disclosure." + } +} diff --git a/benchmarks/agent_query/mlcq_god_source_review.json b/benchmarks/agent_query/mlcq_god_source_review.json new file mode 100644 index 000000000..7b11a641f --- /dev/null +++ b/benchmarks/agent_query/mlcq_god_source_review.json @@ -0,0 +1,297 @@ +{ + "schema": "compass.mlcq-source-review/1", + "scope": "Same-agent qualitative reading of all eight complete annotated spans before either hub response. External published ratings remain separate from these source explanations and later tool scores.", + "sourceWitnessesSha256": "648a953a72162910f880e3eb8194200fb95e247af85fb49fe46c18bf864bad2c", + "reviews": [ + { + "sampleId": 6374724, + "repository": "eclipse/eclipse.platform.ui", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "fileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "reviewedWholeAnnotatedSpan": true, + "startLine": 41, + "endLine": 462, + "annotatedSpanSha256": "44caa70ca94cd2c16e4d3e88c57e87a931d3c5aa5c892a109e225d4ed4ddcb23", + "externalClassification": "unanimous-major-critical", + "sourceRole": "production-class", + "summary": "Binding model centralizes command enumeration, binding-to-element and command-to-element maps, UI selection/property events, conflict handling and restoration of user/system bindings.", + "facts": [ + { + "startLine": 149, + "endLine": 198, + "claim": "Initialization queries active bindings and command services and constructs several linked collections.", + "sourceSpanSha256": "a9a31e7315e01dcb4a62963961f25e9570f494f9d5fce8c891b9b64e42f9d588" + }, + { + "startLine": 205, + "endLine": 271, + "claim": "Refresh synchronizes those collections with active manager bindings and fires add/remove events.", + "sourceSpanSha256": "4ba05edff8bce8ab5c7ca64e5ed3e4a8576abb6e78ebad71616a44029325297d" + }, + { + "startLine": 287, + "endLine": 334, + "claim": "Removal changes manager bindings, updates conflict elements and rewrites command mappings.", + "sourceSpanSha256": "908cf8f2de9c6f597499f386b45ed507e9618bb640d774f459f25dc471e21bfb" + }, + { + "startLine": 343, + "endLine": 439, + "claim": "Restoration removes user bindings, reconciles maps and reselects the command.", + "sourceSpanSha256": "d3a739056c3333fa5e99e01ed6dd70bdeb19d92cd58a8dee0ac627c0db78b259" + } + ], + "qualification": "All operations concern key bindings. The external Blob rating is preserved, but this source reading alone does not prove harmful change coupling or justify a particular refactoring." + }, + { + "sampleId": 6391534, + "repository": "eclipse/eclipse.platform.ui", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "fileSha256": "50407d33afc5ee8283f1022f5bf38278aa20b4cd82db4cd909eb5ee0e2e22b64", + "reviewedWholeAnnotatedSpan": true, + "startLine": 54, + "endLine": 99, + "annotatedSpanSha256": "41d9c06501c385b332f4bca06c824bbdc59d85cafbe4712ccb9240358496da03", + "externalClassification": "unanimous-none", + "sourceRole": "production-class", + "summary": "Abstract property adapter delegates value behavior to subclasses and creates observable wrappers for individual values and collection/map details.", + "facts": [ + { + "startLine": 54, + "endLine": 78, + "claim": "Abstract get/set and native-listener hooks define extension points.", + "sourceSpanSha256": "b35d691839f3637ab8c0935d7108ba681f70dfff5d296ba055ca21e6bcbc9b2d" + }, + { + "startLine": 80, + "endLine": 98, + "claim": "Four observation methods construct dedicated observable wrapper implementations.", + "sourceSpanSha256": "65a3f3270357154534fe844bb8c4d68f835d92450c325de33372b7a7fe9a3304" + } + ], + "qualification": "Unanimous-none applies to Blob only; it does not certify all quality properties or imply low usage/degree." + }, + { + "sampleId": 6406137, + "repository": "eclipse/eclipse.platform.ui", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "fileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "reviewedWholeAnnotatedSpan": true, + "startLine": 24, + "endLine": 77, + "annotatedSpanSha256": "3fcdd11d287627416dcbb7f76f58aac5ffa3562bf7958d72693a4221e40c8023", + "externalClassification": "unanimous-none", + "sourceRole": "production-class", + "summary": "CSS value-list wrapper builds one list from lexical units, exposes indexed access and renders CSS strings.", + "facts": [ + { + "startLine": 26, + "endLine": 35, + "claim": "Constructor populates the owned CSSValue list.", + "sourceSpanSha256": "d205ec182a46acdbd23e82efa011b1fb801d2613fe9c8af7f621d265ccc742a6" + }, + { + "startLine": 38, + "endLine": 60, + "claim": "Length, item, CSS text and type operations all address that list representation.", + "sourceSpanSha256": "0ca76860348a3ab57adc678d4e085ab874496f14235ebf82ede323878f96b540" + }, + { + "startLine": 63, + "endLine": 75, + "claim": "Text mutation is explicitly unsupported; toString renders the same values.", + "sourceSpanSha256": "6ad52c33bc1a2117706c283e88d041323026099d02c734823ec2a7972a86adb8" + } + ], + "qualification": "The unsupported mutation is visible behavior, not a reason to relabel the external Blob judgment." + }, + { + "sampleId": 6413795, + "repository": "eclipse/eclipse.platform.ui", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "fileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "reviewedWholeAnnotatedSpan": true, + "startLine": 45, + "endLine": 340, + "annotatedSpanSha256": "22b7ed775db7a8098a78fbe0d99ac9aa91cd50253dc75de099bbe291099c6290", + "externalClassification": "unanimous-major-critical", + "sourceRole": "test-class", + "summary": "JUnit UI test class repeats wizard construction, dialog configuration, help binding and text assertions across import/export and resource-creation cases.", + "facts": [ + { + "startLine": 45, + "endLine": 65, + "claim": "TestCase inheritance and shell/workbench helpers establish its testing role.", + "sourceSpanSha256": "2dc99683323ecdac74010146e2b108e2f8f0c34b3c6824f9fb38c172c0bc1202" + }, + { + "startLine": 68, + "endLine": 121, + "claim": "Import/export helpers each configure workbench settings and wizard dialogs.", + "sourceSpanSha256": "57cddb705b0f2096cba80684ef7b61bbdaa67fa61d1d937e6cecb77caf8b0436" + }, + { + "startLine": 127, + "endLine": 159, + "claim": "Teardown deletes its test project; tests assert dialog text.", + "sourceSpanSha256": "042ca3ed0a442a5fd827633925707fb0c1f85d57009ad394c5e88ba312cf6aa3" + }, + { + "startLine": 173, + "endLine": 338, + "claim": "File, folder, project and resource cases repeat dialog setup; one case creates a project in an overridden page hook.", + "sourceSpanSha256": "06cc876fe136c251329abb0dd352ee68ba9bbd6692a38d79187ef95ec9925a50" + } + ], + "qualification": "This is a test class, not production UI architecture. Keep its consensus-major rating in the registered denominator and report the role; do not infer a production god-object defect." + }, + { + "sampleId": 8528735, + "repository": "apache/cloudstack", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "fileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "reviewedWholeAnnotatedSpan": true, + "startLine": 141, + "endLine": 1311, + "annotatedSpanSha256": "8c628b31e0df0062051daf3a8898a7a1b7de82b24b5540f9ab1a1cd009335ff3", + "externalClassification": "unanimous-major-critical", + "sourceRole": "production-class", + "summary": "Load-balancer manager coordinates device lifecycle, persistence, capacity allocation, appliance provisioning, IP/NIC/NAT state, network-rule deployment, rollback and health-check commands.", + "facts": [ + { + "startLine": 143, + "endLine": 216, + "claim": "Injected collaborators span network, device, account, host, resource, address and VM data/services.", + "sourceSpanSha256": "2f836ad19984c80bfb54aab54d09c1f067384f493248d0d5b9fdfa6d36827c03" + }, + { + "startLine": 222, + "endLine": 417, + "claim": "Device registration/deletion and API response construction touch host/device records and resource lifecycle.", + "sourceSpanSha256": "04845a9a6d3188f4e18555092953d041cbed81b3415483e7d4b35d4db7e397f5" + }, + { + "startLine": 435, + "endLine": 676, + "claim": "Allocation combines a global lock, database transactions, capacity selection, appliance agent commands and address provisioning/cleanup.", + "sourceSpanSha256": "1e2216b2c2e6b45617c92b399418e269021c138ba82bcc97f8a6f6859f5c7633" + }, + { + "startLine": 679, + "endLine": 893, + "claim": "Release and inline load-balancer NIC handling update mappings and apply or undo NAT state.", + "sourceSpanSha256": "584e8b990a05a1400df5b0a00a2d0af7dcb0b6627d551d38355a3902bf418c23" + }, + { + "startLine": 905, + "endLine": 1029, + "claim": "Rule application assembles backend commands and rolls back inline mappings after failure.", + "sourceSpanSha256": "4cdacc1d5e23a1dab501ebffa111874ed94bb399198bb3af963e8562dc68bd10" + }, + { + "startLine": 1032, + "endLine": 1143, + "claim": "Guest-network lifecycle allocates/releases devices and self IPs and sends association commands.", + "sourceSpanSha256": "d1da87d886bc1b354478a427755e5c28e18034ec9c09f19b48a3ca583545fead" + }, + { + "startLine": 1214, + "endLine": 1297, + "claim": "Health checks also translate rules and send device commands.", + "sourceSpanSha256": "7035d21e7100e77b2e86496ad35243fceb8f6c1c0a661466a43e984c07952568" + } + ], + "qualification": "The source supports several coupled operational responsibilities and broad collaborator access, consistent with the external concern. No independent fault/change-history study or proven optimal split is claimed." + }, + { + "sampleId": 8537138, + "repository": "apache/cloudstack", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "fileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "reviewedWholeAnnotatedSpan": true, + "startLine": 24, + "endLine": 60, + "annotatedSpanSha256": "1192a692b4ccf5bafd1bad1091074a11c7148099cc23f5b3b6e40554e6a488fd", + "externalClassification": "unanimous-none", + "sourceRole": "production-class", + "summary": "Command carrier initializes four values and exposes getters plus an execution-order flag.", + "facts": [ + { + "startLine": 26, + "endLine": 38, + "claim": "Constructor initializes ISO data/path, destination store and create flag.", + "sourceSpanSha256": "8ebe0c2b35d630fbbbb7c4f3cf64a85277d56405ed73a414614a049683a990d2" + }, + { + "startLine": 40, + "endLine": 59, + "claim": "Methods return the flag/fields; there is no provisioning workflow in this class body.", + "sourceSpanSha256": "12cbd47cde1fd593bc4d0788f3320ad6d0883bface2b3e8cc678be52d7f127b8" + } + ], + "qualification": "A data carrier may have many users without being a Blob. The rating is limited to this smell and class span." + }, + { + "sampleId": 8538037, + "repository": "apache/cloudstack", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "fileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "reviewedWholeAnnotatedSpan": true, + "startLine": 63, + "endLine": 542, + "annotatedSpanSha256": "03537a504701be2adcb209efa479b005977aa98a8ccdddf9148b204fccef5e0b", + "externalClassification": "unanimous-major-critical", + "sourceRole": "production-class", + "summary": "Switch API facade combines network/profile workflows, schema-object assembly, HTTP method/status/authentication handling and XML serialization/deserialization.", + "facts": [ + { + "startLine": 66, + "endLine": 100, + "claim": "The object owns host credentials and an HTTP client and creates several HTTP method types.", + "sourceSpanSha256": "bbb53941914b5467660372291c64f329ad9f9e78dba7d2b3690be8bed89cfc2d" + }, + { + "startLine": 114, + "endLine": 317, + "claim": "VLAN, port-profile and MAC workflows assemble/mutate schema objects and call update/create helpers.", + "sourceSpanSha256": "ebd932e73fefb3c0c1d39a9743b0a372db41faecbf17c9bf680b361bed8b117e" + }, + { + "startLine": 320, + "endLine": 506, + "claim": "Transport helpers validate credentials, serialize XML, inspect status codes, translate errors and release connections.", + "sourceSpanSha256": "1c1c94141536cfa0913fee29064c0fb79bdaa5c1dc200f0c9235cbdbe6cf514b" + }, + { + "startLine": 508, + "endLine": 540, + "claim": "Execution retries an unauthorized response and extracts HTML error bodies.", + "sourceSpanSha256": "4a0c8c2d71cab15c2abead2b6a79fd9b34ffa118b45cdea8435054bc3aefa43c" + } + ], + "qualification": "The concerns are still part of one switch integration. The external major ratings motivate investigation; no standalone source metric proves that decomposition is required." + }, + { + "sampleId": 8539645, + "repository": "apache/cloudstack", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "fileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "reviewedWholeAnnotatedSpan": true, + "startLine": 26, + "endLine": 38, + "annotatedSpanSha256": "986a0188cad5fe5a7b1ca1a8af8c0305d93da98c0b58d657f3599e7dfbd7dc43", + "externalClassification": "unanimous-none", + "sourceRole": "production-class", + "summary": "Response data carrier holds a single annotated name property with a getter and setter.", + "facts": [ + { + "startLine": 26, + "endLine": 38, + "claim": "One field and two accessors constitute the complete annotated class body.", + "sourceSpanSha256": "986a0188cad5fe5a7b1ca1a8af8c0305d93da98c0b58d657f3599e7dfbd7dc43" + } + ], + "qualification": "Unanimous-none is a Blob judgment, not a claim that a response DTO should have no graph connections." + } + ] +} diff --git a/benchmarks/agent_query/mlcq_god_source_witnesses.json b/benchmarks/agent_query/mlcq_god_source_witnesses.json new file mode 100644 index 000000000..7e3a0e3da --- /dev/null +++ b/benchmarks/agent_query/mlcq_god_source_witnesses.json @@ -0,0 +1,139 @@ +{ + "schema": "compass.mlcq-source-witnesses/1", + "registrationCommit": "630b3cd2", + "sources": [ + { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "trackedFiles": 7764, + "trackedJavaFiles": 5474 + }, + { + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "trackedFiles": 8964, + "trackedJavaFiles": 6060 + } + ], + "sourceRecovery": { + "repository": "eclipse/eclipse.platform.ui", + "originalUrl": "https://github.com/eclipse/eclipse.platform.ui", + "retrievalUrl": "https://github.com/eclipse-platform/eclipse.platform.ui", + "commitUnchanged": true, + "originalFailure": "Repository not found; retained in external logs." + }, + "witnesses": [ + { + "sampleId": 6374724, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "fileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "symbol": "BindingModel", + "line": 41, + "text": "public class BindingModel extends CommonModel {", + "annotatedEndLine": 462, + "annotatedSpanSha256": "44caa70ca94cd2c16e4d3e88c57e87a931d3c5aa5c892a109e225d4ed4ddcb23", + "sourceRole": "production-class", + "roleBasis": "Class under a production source bundle/module" + }, + { + "sampleId": 6391534, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "fileSha256": "50407d33afc5ee8283f1022f5bf38278aa20b4cd82db4cd909eb5ee0e2e22b64", + "symbol": "SimpleValueProperty", + "line": 54, + "text": "public abstract class SimpleValueProperty extends ValueProperty {", + "annotatedEndLine": 99, + "annotatedSpanSha256": "41d9c06501c385b332f4bca06c824bbdc59d85cafbe4712ccb9240358496da03", + "sourceRole": "production-class", + "roleBasis": "Class under a production source bundle/module" + }, + { + "sampleId": 6406137, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "fileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "symbol": "CSSValueListImpl", + "line": 24, + "text": "public class CSSValueListImpl extends AbstractCSSNode implements CSSValueList {", + "annotatedEndLine": 77, + "annotatedSpanSha256": "3fcdd11d287627416dcbb7f76f58aac5ffa3562bf7958d72693a4221e40c8023", + "sourceRole": "production-class", + "roleBasis": "Class under a production source bundle/module" + }, + { + "sampleId": 6413795, + "repository": "eclipse/eclipse.platform.ui", + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "fileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "symbol": "DeprecatedUIWizardsAuto", + "line": 45, + "text": "public class DeprecatedUIWizardsAuto extends TestCase {", + "annotatedEndLine": 340, + "annotatedSpanSha256": "22b7ed775db7a8098a78fbe0d99ac9aa91cd50253dc75de099bbe291099c6290", + "sourceRole": "test-class", + "roleBasis": "JUnit TestCase under the project test source tree" + }, + { + "sampleId": 8528735, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "fileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "symbol": "ExternalLoadBalancerDeviceManagerImpl", + "line": 141, + "text": "public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase implements ExternalLoadBalancerDeviceManager, ResourceStateAdapter {", + "annotatedEndLine": 1311, + "annotatedSpanSha256": "8c628b31e0df0062051daf3a8898a7a1b7de82b24b5540f9ab1a1cd009335ff3", + "sourceRole": "production-class", + "roleBasis": "Class under a production source bundle/module" + }, + { + "sampleId": 8537138, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "fileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "symbol": "HandleConfigDriveIsoCommand", + "line": 24, + "text": "public class HandleConfigDriveIsoCommand extends Command {", + "annotatedEndLine": 60, + "annotatedSpanSha256": "1192a692b4ccf5bafd1bad1091074a11c7148099cc23f5b3b6e40554e6a488fd", + "sourceRole": "production-class", + "roleBasis": "Class under a production source bundle/module" + }, + { + "sampleId": 8538037, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "fileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "symbol": "BrocadeVcsApi", + "line": 63, + "text": "public class BrocadeVcsApi {", + "annotatedEndLine": 542, + "annotatedSpanSha256": "03537a504701be2adcb209efa479b005977aa98a8ccdddf9148b204fccef5e0b", + "sourceRole": "production-class", + "roleBasis": "Class under a production source bundle/module" + }, + { + "sampleId": 8539645, + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "fileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "symbol": "DeploymentPlannersResponse", + "line": 26, + "text": "public class DeploymentPlannersResponse extends BaseResponse {", + "annotatedEndLine": 38, + "annotatedSpanSha256": "986a0188cad5fe5a7b1ca1a8af8c0305d93da98c0b58d657f3599e7dfbd7dc43", + "sourceRole": "production-class", + "roleBasis": "Class under a production source bundle/module" + } + ] +} diff --git a/benchmarks/agent_query/mlcq_hubs.py b/benchmarks/agent_query/mlcq_hubs.py new file mode 100644 index 000000000..bba00dfd1 --- /dev/null +++ b/benchmarks/agent_query/mlcq_hubs.py @@ -0,0 +1,74 @@ +"""Score partial externally rated class retrieval, never population precision. + +Native ranking identity comes exclusively from its public response. Source +coordinates identify graph coverage; they never disambiguate a returned label. +Callers verify capture provenance and raw transcripts before using this scorer. +""" +from collections import Counter + +from benchmarks.agent_query.mcp_audit import audit, label +from benchmarks.agent_query.runner import _node_anchor + +CUTOFFS = (10, 50, 100) +PRIMARY = {'unanimous-major-critical', 'unanimous-none'} + + +def evaluate_ranking(tool, repository, call, graph, samples, witnesses): + """Retain every registered primary case, including unavailable captures.""" + selected = [s for s in samples if s['repository'] == repository and s['classification'] in PRIMARY] + by_sample = {w['sampleId']: w for w in witnesses if w['repository'] == repository} + if len(by_sample) != len(selected) or set(by_sample) != {s['sampleId'] for s in selected}: + raise ValueError('primary source witness denominator differs') + if tool not in {'compass', 'graphify'}: + raise ValueError('unsupported tool') + checked = None + nodes = {} + names = {} + if call is not None and call.get('executionSucceeded') and graph is not None: + nodes = {n['id']: n for n in graph['nodes']} + if len(nodes) != len(graph['nodes']): + raise ValueError('duplicate graph IDs') + for n in nodes.values(): + names.setdefault(label(n, tool), []).append(n['id']) + checked = audit(dict(call, repository=repository, tool=tool, question='hubs'), graph) + hubs = checked['hubs'] + if not hubs or len(hubs) > 100 or [h['rank'] for h in hubs] != list(range(1, len(hubs)+1)): + raise ValueError('missing, invalid, or reordered hub ranking') + if any('explicitId' in h and h['identityCandidates'] != 1 for h in hubs): + raise ValueError('invalid explicit hub identity') + cases = [] + for sample in sorted(selected, key=lambda s: s['sampleId']): + witness = by_sample[sample['sampleId']] + case = dict(sampleId=sample['sampleId'], classification=sample['classification']) + statuses = {} + if checked is None: + case.update(graphIds=None, rank=None) + statuses = {str(k): 'capture-unavailable' for k in CUTOFFS} + else: + matching = [] + for identifier, node in nodes.items(): + file, line, symbols = _node_anchor(node, tool) + if (file, line) == (witness['file'], witness['line']) and witness['symbol'] in symbols: + matching.append(identifier) + matching.sort() + case.update(graphIds=matching, rank=None) + if len(matching) != 1: + statuses = {str(k): 'source-missing' if not matching else 'source-ambiguous' for k in CUTOFFS} + else: + identifier = matching[0] + ranks = [h['rank'] for h in checked['hubs'] if h.get('id') == identifier] + if len(ranks) > 1: + raise ValueError('repeated returned hub identity') + case['rank'] = ranks[0] if ranks else None + uncertain = [h['rank'] for h in checked['hubs'] if h['identityCandidates'] != 1 + and identifier in names.get(h['label'], [])] + case['ambiguousOutputRanks'] = uncertain + for k in CUTOFFS: + statuses[str(k)] = ('retrieved' if ranks and ranks[0] <= k else + 'ambiguous-output' if any(r <= k for r in uncertain) else 'not-returned') + case['atCutoff'] = statuses + cases.append(case) + totals = {str(k): {rating: dict(Counter(c['atCutoff'][str(k)] for c in cases + if c['classification'] == rating)) + for rating in sorted(PRIMARY)} for k in CUTOFFS} + return dict(repository=repository, tool=tool, cases=cases, cutoffs=totals, graphConsistency=checked) diff --git a/benchmarks/agent_query/mlcq_javac_field_binding_registration.json b/benchmarks/agent_query/mlcq_javac_field_binding_registration.json new file mode 100644 index 000000000..3140c5f4d --- /dev/null +++ b/benchmarks/agent_query/mlcq_javac_field_binding_registration.json @@ -0,0 +1,36 @@ +{ + "schema": "compass.mlcq-javac-field-binding-registration/1", + "declaredBeforeExecution": true, + "purpose": "Audit all direct-method source field accesses that a public JDK compiler can bind to a direct field of the same class in eight frozen rated Java files. Compare exact occurrences and targets with Compass without treating partial attribution as full recall.", + "priorMemberReviewSha256": "edff7c60649a6d85389d94b04bfe805f0b046d0667603135e00b56b61c001756", + "priorExplicitThisReviewSha256": "7a6e7b9b43cff60e7122bc37d804a0bbb936b5f8c3de714440e51a99963d6364", + "sourceWitnessesSha256": "648a953a72162910f880e3eb8194200fb95e247af85fb49fe46c18bf864bad2c", + "sampleIds": [6374724, 6391534, 6406137, 6413795, 8528735, 8537138, 8538037, 8539645], + "graphSha256": { + "apache/cloudstack": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "eclipse/eclipse.platform.ui": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74" + }, + "oracleRule": "Use public JDK 17 JavacTask.parse then analyze on exactly the eight pinned Java files with an empty external classpath/sourcepath and no annotation processors. Keep every compiler diagnostic, including missing dependencies, and stop scoring if direct field symbols or the five previously verified explicit this.field controls cannot be bound. Within each witnessed class, inspect only direct MethodTree bodies; skip nested ClassTree bodies and constructors. For every IdentifierTree or MemberSelectTree, retain it only if Trees.getElement yields exactly the VariableElement obtained from one direct VariableTree field declaration of that same selected class. Preserve repeated occurrences and identify the exact selected identifier token in UTF-16 and UTF-8 source coordinates. Record unbound and other-field candidates separately as unavailable, not negatives.", + "graphRule": "Use the 95/95 and 65/65 previously source-matched direct method and field graph IDs. For each compiler-bound direct-field token, compare every stored directed references record at its exact source byte interval, recording correct method/field pair, wrong pair, duplicate and absent outcomes separately. Also inventory all method-to-owned-field graph records in the selected classes and mark those outside the compiler-bound denominator as unverified, not false positives.", + "comparison": "The five explicit this.field controls must occur among compiler-bound direct-field sites with their previous exact target and anchor. Report the denominator and diagnostics before interpreting any graph match rate. Do not use a missing compiler binding as evidence of absent source access.", + "limits": [ + "The empty classpath will cause missing-dependency diagnostics; any compiler binding under errors is a selected precision-oriented oracle, not a complete source reference census.", + "The eight examples are known Java development data; one externally rated positive class is a test class. No god-object classifier, threshold, Graphify rerun, cross-language or held-out claim follows.", + "A correct static binding does not prove that the code path runs or that the class has one or multiple responsibilities." + ], + "bounds": { + "sourceFiles": 8, + "sourceBytesPerFile": 2097152, + "sourceBytesTotal": 8388608, + "oracleRecords": 100000, + "diagnosticRecords": 10000, + "oracleSeconds": 120, + "oracleHeapMegabytes": 1024, + "graphBytesPerFile": 1073741824, + "graphRecordBytes": 8388608, + "graphNodesPerFile": 1000000, + "graphEdgesPerFile": 1000000, + "secondsPerGraph": 300 + }, + "outputs": "Full accepted source occurrences, all graph records at exact tokens, unmatched and wrong-pair outcomes, unverified graph edges, compiler diagnostic and unavailable counts, raw hashes, failed attempts and repeated verification. No defect score or superiority claim." +} diff --git a/benchmarks/agent_query/mlcq_javac_field_binding_review.json b/benchmarks/agent_query/mlcq_javac_field_binding_review.json new file mode 100644 index 000000000..ebc577262 --- /dev/null +++ b/benchmarks/agent_query/mlcq_javac_field_binding_review.json @@ -0,0 +1,18110 @@ +{ + "allCandidates": [ + { + "endByte": 3655, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:7e53979271150218720d51910dc8c4d625ca0ebda1c68d9393e7bd2444b452de", + "kind": "references", + "relationshipSite": { + "endByte": 3655, + "endColumn": 17, + "endLine": 115, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 3640, + "startColumn": 2, + "startLine": 115 + }, + "source": "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 3810, + "methodId": "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7", + "methodName": "copy", + "methodStartUtf16": 3281, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 3640, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 3655, + "tokenLine": 115, + "tokenStartUtf16": 3640, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 3683, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:47df67483593a50219025f49eb4f4e6473b03986cd8ee5ab647fa77f7ec96030", + "kind": "references", + "relationshipSite": { + "endByte": 3683, + "endColumn": 18, + "endLine": 116, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 3667, + "startColumn": 2, + "startLine": 116 + }, + "source": "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 3810, + "methodId": "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7", + "methodName": "copy", + "methodStartUtf16": 3281, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 3667, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 3683, + "tokenLine": 116, + "tokenStartUtf16": 3667, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 3769, + "fieldId": "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5", + "fieldName": "PROP_BINDING_ADD", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d5f75895f30a69ff7f7b5a15cf610bd9f6c6fb056f3ca1950f93d07458d4214b", + "kind": "references", + "relationshipSite": { + "endByte": 3769, + "endColumn": 54, + "endLine": 117, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 3753, + "startColumn": 38, + "startLine": 117 + }, + "source": "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7", + "target": "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 3810, + "methodId": "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7", + "methodName": "copy", + "methodStartUtf16": 3281, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 3753, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1515, + "targetFieldStartUtf16": 1456, + "tokenEndUtf16": 3769, + "tokenLine": 117, + "tokenStartUtf16": 3753, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 3912, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:59b4fbe651eb03d1faf112501e6883c3f4379f8e130067d78507d934503b0d16", + "kind": "references", + "relationshipSite": { + "endByte": 3912, + "endColumn": 24, + "endLine": 125, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 3897, + "startColumn": 9, + "startLine": 125 + }, + "source": "sha256:4755a0411c85fc28af82c8a79fae3cf3e7d4e7f131c077ea998d6e4fd50a614a", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 3916, + "methodId": "sha256:4755a0411c85fc28af82c8a79fae3cf3e7d4e7f131c077ea998d6e4fd50a614a", + "methodName": "getBindings", + "methodStartUtf16": 3857, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 3897, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 3912, + "tokenLine": 125, + "tokenStartUtf16": 3897, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4031, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:8899ecec01eb28f4f586a80b9f8545a69bfe3c00e25d7f120aa3fe95c7100b3a", + "kind": "references", + "relationshipSite": { + "endByte": 4031, + "endColumn": 25, + "endLine": 132, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 4015, + "startColumn": 9, + "startLine": 132 + }, + "source": "sha256:3941d61bd83f869715323ddb5ea2544d8a86f592c3ebd73bdf17cc2a4bb5bf2a", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 4035, + "methodId": "sha256:3941d61bd83f869715323ddb5ea2544d8a86f592c3ebd73bdf17cc2a4bb5bf2a", + "methodName": "getBindingToElement", + "methodStartUtf16": 3971, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 4015, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2843, + "targetFieldStartUtf16": 2814, + "tokenEndUtf16": 4031, + "tokenLine": 132, + "tokenStartUtf16": 4015, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4150, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:92feda87a3c514672368636f418d6c54931f720f9bd8c29f51db5efab11941ca", + "kind": "references", + "relationshipSite": { + "endByte": 4150, + "endColumn": 25, + "endLine": 139, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 4134, + "startColumn": 9, + "startLine": 139 + }, + "source": "sha256:2f2d6d938e1e86d8f47a275c7fb6281fe2304e8b4f9fba32e6a854c7f7712d97", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 4154, + "methodId": "sha256:2f2d6d938e1e86d8f47a275c7fb6281fe2304e8b4f9fba32e6a854c7f7712d97", + "methodName": "getCommandToElement", + "methodStartUtf16": 4090, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 4134, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 4150, + "tokenLine": 139, + "tokenStartUtf16": 4134, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4403, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:565d4094c12fa35dbafb2a6086a4478d0604c4189ef9917eb84118a3820a7d6c", + "kind": "references", + "relationshipSite": { + "endByte": 4403, + "endColumn": 18, + "endLine": 152, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 4387, + "startColumn": 2, + "startLine": 152 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 4387, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2843, + "targetFieldStartUtf16": 2814, + "tokenEndUtf16": 4403, + "tokenLine": 152, + "tokenStartUtf16": 4387, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4439, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e098c1c349452cf04ed889ade0e725a49730de73194d3ccc8cdca247db6021a3", + "kind": "references", + "relationshipSite": { + "endByte": 4439, + "endColumn": 18, + "endLine": 153, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 4423, + "startColumn": 2, + "startLine": 153 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 4423, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 4439, + "tokenLine": 153, + "tokenStartUtf16": 4423, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4475, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:88ecc41f8424fb67240ef5e7f7d3bbbbc3562371b0f652222f16f6c35e5b3a87", + "kind": "references", + "relationshipSite": { + "endByte": 4475, + "endColumn": 17, + "endLine": 155, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 4460, + "startColumn": 2, + "startLine": 155 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 4460, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 4475, + "tokenLine": 155, + "tokenStartUtf16": 4460, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4509, + "fieldId": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "fieldName": "bindingManager", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:57c4bee0c7b5415ea7792a0f34c478cd26a25e0d090c0d3dffa85afde7f0ee0c", + "kind": "references", + "relationshipSite": { + "endByte": 4509, + "endColumn": 16, + "endLine": 156, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 4495, + "startColumn": 2, + "startLine": 156 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 4495, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2634, + "targetFieldStartUtf16": 2596, + "tokenEndUtf16": 4509, + "tokenLine": 156, + "tokenStartUtf16": 4495, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4782, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:4137d81e41c80e5aa668e0f832aee175fbce8d065506a910190694905b0302d0", + "kind": "references", + "relationshipSite": { + "endByte": 4782, + "endColumn": 18, + "endLine": 165, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 4767, + "startColumn": 3, + "startLine": 165 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 4767, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 4782, + "tokenLine": 165, + "tokenStartUtf16": 4767, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4811, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e05133b7a5c62184d9564975157a11b2c1daff831a992b5b8058cb2654849921", + "kind": "references", + "relationshipSite": { + "endByte": 4811, + "endColumn": 19, + "endLine": 166, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 4795, + "startColumn": 3, + "startLine": 166 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 4795, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2843, + "targetFieldStartUtf16": 2814, + "tokenEndUtf16": 4811, + "tokenLine": 166, + "tokenStartUtf16": 4795, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 5062, + "fieldId": "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8", + "fieldName": "allParameterizedCommands", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:1aeafc5702bf03882484f2734fb9167ab9adcfbfc2cbe56f43a13a4825983964", + "kind": "references", + "relationshipSite": { + "endByte": 5062, + "endColumn": 26, + "endLine": 173, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 5038, + "startColumn": 2, + "startLine": 173 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 5038, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2594, + "targetFieldStartUtf16": 2550, + "tokenEndUtf16": 5062, + "tokenLine": 173, + "tokenStartUtf16": 5038, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 5357, + "fieldId": "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8", + "fieldName": "allParameterizedCommands", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:9e9ca739ebd1f482f77a4cd7cf8d33ae0b11053a0dc13f24e12bb3e88dcb5e0c", + "kind": "references", + "relationshipSite": { + "endByte": 5357, + "endColumn": 28, + "endLine": 180, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 5333, + "startColumn": 4, + "startLine": 180 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 5333, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2594, + "targetFieldStartUtf16": 2550, + "tokenEndUtf16": 5357, + "tokenLine": 180, + "tokenStartUtf16": 5333, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 5568, + "fieldId": "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8", + "fieldName": "allParameterizedCommands", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d0ac1116239b4eae701de79d9ee380ab13e00c4e96e14d1fb8ffe8791c525fc2", + "kind": "references", + "relationshipSite": { + "endByte": 5568, + "endColumn": 30, + "endLine": 187, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 5544, + "startColumn": 6, + "startLine": 187 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 5544, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2594, + "targetFieldStartUtf16": 2550, + "tokenEndUtf16": 5568, + "tokenLine": 187, + "tokenStartUtf16": 5544, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 5826, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a82f2c1ce0ddf4f96838af9e401c398e71306a55c942224233ca2e614a5c79d1", + "kind": "references", + "relationshipSite": { + "endByte": 5826, + "endColumn": 19, + "endLine": 194, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 5811, + "startColumn": 4, + "startLine": 194 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 5811, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 5826, + "tokenLine": 194, + "tokenStartUtf16": 5811, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 5856, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:9a9510bc15890914418e5ae0405d96fded9eaa8b90b317bddcf2944bf9e14be5", + "kind": "references", + "relationshipSite": { + "endByte": 5856, + "endColumn": 20, + "endLine": 195, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 5840, + "startColumn": 4, + "startLine": 195 + }, + "source": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5882, + "methodId": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "methodName": "init", + "methodStartUtf16": 4255, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 5840, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 5856, + "tokenLine": 195, + "tokenStartUtf16": 5840, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 6141, + "fieldId": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "fieldName": "bindingManager", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:740c5b11a3c08c5d583cd11bf0ff5fbf1fc487950034ad4c3b1614e422129b65", + "kind": "references", + "relationshipSite": { + "endByte": 6141, + "endColumn": 51, + "endLine": 207, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 6127, + "startColumn": 37, + "startLine": 207 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 6127, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2634, + "targetFieldStartUtf16": 2596, + "tokenEndUtf16": 6141, + "tokenLine": 207, + "tokenStartUtf16": 6127, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 6508, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:bc77b40b40f5bcce387b18a4e69cf60d6f96c56db3c554e7dd9b2567fb56b842", + "kind": "references", + "relationshipSite": { + "endByte": 6508, + "endColumn": 24, + "endLine": 217, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 6492, + "startColumn": 8, + "startLine": 217 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 6492, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2843, + "targetFieldStartUtf16": 2814, + "tokenEndUtf16": 6508, + "tokenLine": 217, + "tokenStartUtf16": 6492, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 6656, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:09fb4fd86907eddec96dcbc708fb168ac4efd107ddda38873ad111639abd265a", + "kind": "references", + "relationshipSite": { + "endByte": 6656, + "endColumn": 19, + "endLine": 221, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 6641, + "startColumn": 4, + "startLine": 221 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 6641, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 6656, + "tokenLine": 221, + "tokenStartUtf16": 6641, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 6686, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:22ebe4d4cc5980f46bbd4e5a2f14f149eaa3c24cfb0f20622dbd5d698e6df00a", + "kind": "references", + "relationshipSite": { + "endByte": 6686, + "endColumn": 20, + "endLine": 222, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 6670, + "startColumn": 4, + "startLine": 222 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 6670, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2843, + "targetFieldStartUtf16": 2814, + "tokenEndUtf16": 6686, + "tokenLine": 222, + "tokenStartUtf16": 6670, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 6755, + "fieldId": "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5", + "fieldName": "PROP_BINDING_ADD", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:168d0ea593d086fd88f7cc978df87c9366522ff359bc4ff3a58041802d646724", + "kind": "references", + "relationshipSite": { + "endByte": 6755, + "endColumn": 56, + "endLine": 223, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 6739, + "startColumn": 40, + "startLine": 223 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 6739, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1515, + "targetFieldStartUtf16": 1456, + "tokenEndUtf16": 6755, + "tokenLine": 223, + "tokenStartUtf16": 6739, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 6793, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b67ea8b7aae54efb22d97906e1b71ed0f2fc269ce997d83f5c3aa2f551f96ee8", + "kind": "references", + "relationshipSite": { + "endByte": 6793, + "endColumn": 24, + "endLine": 225, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 6777, + "startColumn": 8, + "startLine": 225 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 6777, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 6793, + "tokenLine": 225, + "tokenStartUtf16": 6777, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 6924, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:674b0463ea6de53d8929f6f48e84955906585735eb129c7d82451332d2600920", + "kind": "references", + "relationshipSite": { + "endByte": 6924, + "endColumn": 37, + "endLine": 227, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 6908, + "startColumn": 21, + "startLine": 227 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 6908, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 6924, + "tokenLine": 227, + "tokenStartUtf16": 6908, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 6975, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e2b7464a11f299243a4149caacd4187909d020f171bc96f0ba88a370bdb489d0", + "kind": "references", + "relationshipSite": { + "endByte": 6975, + "endColumn": 20, + "endLine": 228, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 6960, + "startColumn": 5, + "startLine": 228 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 6960, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 6975, + "tokenLine": 228, + "tokenStartUtf16": 6960, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 7052, + "fieldId": "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5", + "fieldName": "PROP_BINDING_REMOVE", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e208ece7ed5c70e679bfa96cc957f5e3241092695ee99a34c9414c7297a69bb5", + "kind": "references", + "relationshipSite": { + "endByte": 7052, + "endColumn": 60, + "endLine": 229, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 7033, + "startColumn": 41, + "startLine": 229 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 7033, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1767, + "targetFieldStartUtf16": 1702, + "tokenEndUtf16": 7052, + "tokenLine": 229, + "tokenStartUtf16": 7033, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 7158, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:6970e8c2e9804f8d80bda7f164ebb15fa702b5ab6409517db55709664a93e42e", + "kind": "references", + "relationshipSite": { + "endByte": 7158, + "endColumn": 21, + "endLine": 236, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 7143, + "startColumn": 6, + "startLine": 236 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 7143, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 7158, + "tokenLine": 236, + "tokenStartUtf16": 7143, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 7499, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:1f4cb22cd4ae867d70d21b48f677e95ff52db1d444f19707d99f14653a621e7a", + "kind": "references", + "relationshipSite": { + "endByte": 7499, + "endColumn": 22, + "endLine": 245, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 7483, + "startColumn": 6, + "startLine": 245 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 7483, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 7499, + "tokenLine": 245, + "tokenStartUtf16": 7483, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 7541, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:649e39482244292abcfa9078acf2726b26ef7ece7184e58d56e298822ebfb612", + "kind": "references", + "relationshipSite": { + "endByte": 7541, + "endColumn": 21, + "endLine": 247, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 7525, + "startColumn": 5, + "startLine": 247 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 7525, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2843, + "targetFieldStartUtf16": 2814, + "tokenEndUtf16": 7541, + "tokenLine": 247, + "tokenStartUtf16": 7525, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 7630, + "fieldId": "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5", + "fieldName": "PROP_BINDING_REMOVE", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:87da652566849d0ebb1d071cc4e4aeba8ee954c74e3206dd3db5c6b5649c349d", + "kind": "references", + "relationshipSite": { + "endByte": 7630, + "endColumn": 60, + "endLine": 249, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 7611, + "startColumn": 41, + "startLine": 249 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 7611, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1767, + "targetFieldStartUtf16": 1702, + "tokenEndUtf16": 7630, + "tokenLine": 249, + "tokenStartUtf16": 7611, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 7825, + "fieldId": "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8", + "fieldName": "allParameterizedCommands", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e9898d90f10a4946f8013193078befadaec7b28c4e40303be6d41d2553539880", + "kind": "references", + "relationshipSite": { + "endByte": 7825, + "endColumn": 30, + "endLine": 259, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 7801, + "startColumn": 6, + "startLine": 259 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 7801, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2594, + "targetFieldStartUtf16": 2550, + "tokenEndUtf16": 7825, + "tokenLine": 259, + "tokenStartUtf16": 7801, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 8083, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c1f0258c14edf087006fd7121b8d192199e90b43054b5fbf3bf875f2c57f556b", + "kind": "references", + "relationshipSite": { + "endByte": 8083, + "endColumn": 19, + "endLine": 266, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 8068, + "startColumn": 4, + "startLine": 266 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 8068, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 8083, + "tokenLine": 266, + "tokenStartUtf16": 8068, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 8113, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:7ad1d21b8ca3c6d2046f9f51d39362052f922ec00e5590d3e18375c58b1ec85e", + "kind": "references", + "relationshipSite": { + "endByte": 8113, + "endColumn": 20, + "endLine": 267, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 8097, + "startColumn": 4, + "startLine": 267 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 8097, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 8113, + "tokenLine": 267, + "tokenStartUtf16": 8097, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 8184, + "fieldId": "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5", + "fieldName": "PROP_BINDING_ADD", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:1614966939becb4be1dfb435e4eb7fd5a9b5947d0427b9396c7432d8c6e6c315", + "kind": "references", + "relationshipSite": { + "endByte": 8184, + "endColumn": 56, + "endLine": 268, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 8168, + "startColumn": 40, + "startLine": 268 + }, + "source": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "target": "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 8208, + "methodId": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "methodName": "refresh", + "methodStartUtf16": 6002, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 8168, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1515, + "targetFieldStartUtf16": 1456, + "tokenEndUtf16": 8184, + "tokenLine": 268, + "tokenStartUtf16": 8168, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 8769, + "fieldId": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "fieldName": "bindingManager", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:fced9648a09fbf852044f0bdadfdfc8a0d52bf79d65b69deb3cb637272e7010b", + "kind": "references", + "relationshipSite": { + "endByte": 8769, + "endColumn": 17, + "endLine": 294, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 8755, + "startColumn": 3, + "startLine": 294 + }, + "source": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "target": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 10194, + "methodId": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "methodName": "remove", + "methodStartUtf16": 8474, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 8755, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2634, + "targetFieldStartUtf16": 2596, + "tokenEndUtf16": 8769, + "tokenLine": 294, + "tokenStartUtf16": 8755, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 8913, + "fieldId": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "fieldName": "bindingManager", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:fe9a08127f953fa419d9b5b00e93df98aa419ee96af90f5d898e390a08b462e9", + "kind": "references", + "relationshipSite": { + "endByte": 8913, + "endColumn": 17, + "endLine": 299, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 8899, + "startColumn": 3, + "startLine": 299 + }, + "source": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "target": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 10194, + "methodId": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "methodName": "remove", + "methodStartUtf16": 8474, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 8899, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2634, + "targetFieldStartUtf16": 2596, + "tokenEndUtf16": 8913, + "tokenLine": 299, + "tokenStartUtf16": 8899, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 9862, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:616c354543cbe4b97e032a2bcf6b8cfca2167a6b6691d12c0ecd84114d4d1a14", + "kind": "references", + "relationshipSite": { + "endByte": 9862, + "endColumn": 22, + "endLine": 323, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 9846, + "startColumn": 6, + "startLine": 323 + }, + "source": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 10194, + "methodId": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "methodName": "remove", + "methodStartUtf16": 8474, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 9846, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 9862, + "tokenLine": 323, + "tokenStartUtf16": 9846, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 10056, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:9ab3e21da93e4f65508381e59e9c9225116364a01c86e944724aad47c598221f", + "kind": "references", + "relationshipSite": { + "endByte": 10056, + "endColumn": 18, + "endLine": 331, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 10040, + "startColumn": 2, + "startLine": 331 + }, + "source": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 10194, + "methodId": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "methodName": "remove", + "methodStartUtf16": 8474, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 10040, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 10056, + "tokenLine": 331, + "tokenStartUtf16": 10040, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 10163, + "fieldId": "sha256:4a4c257e89d7b7deacb707b8f099649dc836330f8b8d9afcf7faa5d34169001e", + "fieldName": "PROP_CONFLICT_ELEMENT_MAP", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:7ea099d56012e5d8da2afc710394d6cc92d04e48fa46a68410047eb3b04b141b", + "kind": "references", + "relationshipSite": { + "endByte": 10163, + "endColumn": 63, + "endLine": 332, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 10138, + "startColumn": 38, + "startLine": 332 + }, + "source": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "target": "sha256:4a4c257e89d7b7deacb707b8f099649dc836330f8b8d9afcf7faa5d34169001e" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 10194, + "methodId": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "methodName": "remove", + "methodStartUtf16": 8474, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 10138, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1928, + "targetFieldStartUtf16": 1853, + "tokenEndUtf16": 10163, + "tokenLine": 332, + "tokenStartUtf16": 10138, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 10710, + "fieldId": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "fieldName": "bindingManager", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:8e5474453fcc3884001040920c66ffe84577fa87f522acedd37edc475fc0eef1", + "kind": "references", + "relationshipSite": { + "endByte": 10710, + "endColumn": 43, + "endLine": 353, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 10696, + "startColumn": 29, + "startLine": 353 + }, + "source": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "target": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12247, + "methodId": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "methodName": "restoreBinding", + "methodStartUtf16": 10390, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 10696, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2634, + "targetFieldStartUtf16": 2596, + "tokenEndUtf16": 10710, + "tokenLine": 353, + "tokenStartUtf16": 10696, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 10790, + "fieldId": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "fieldName": "bindingManager", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:8d8fc24214ba1fab21c4f09654565554f8532268655c0e8d23954702c4cb1cef", + "kind": "references", + "relationshipSite": { + "endByte": 10790, + "endColumn": 35, + "endLine": 355, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 10776, + "startColumn": 21, + "startLine": 355 + }, + "source": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "target": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12247, + "methodId": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "methodName": "restoreBinding", + "methodStartUtf16": 10390, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 10776, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2634, + "targetFieldStartUtf16": 2596, + "tokenEndUtf16": 10790, + "tokenLine": 355, + "tokenStartUtf16": 10776, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 11091, + "fieldId": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "fieldName": "bindingManager", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:bd9ac4fa6906c789bb468e12de9982160b6f3e5a04cf506412915ab5edfa035c", + "kind": "references", + "relationshipSite": { + "endByte": 11091, + "endColumn": 44, + "endLine": 364, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 11077, + "startColumn": 30, + "startLine": 364 + }, + "source": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "target": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12247, + "methodId": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "methodName": "restoreBinding", + "methodStartUtf16": 10390, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 11077, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2634, + "targetFieldStartUtf16": 2596, + "tokenEndUtf16": 11091, + "tokenLine": 364, + "tokenStartUtf16": 11077, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 11492, + "fieldId": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "fieldName": "bindingManager", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b4dfc27b9314ced0152b94852c626921fd91daee099a59f1c286771e5562ce65", + "kind": "references", + "relationshipSite": { + "endByte": 11492, + "endColumn": 19, + "endLine": 372, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 11478, + "startColumn": 5, + "startLine": 372 + }, + "source": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "target": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12247, + "methodId": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "methodName": "restoreBinding", + "methodStartUtf16": 10390, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 11478, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2634, + "targetFieldStartUtf16": 2596, + "tokenEndUtf16": 11492, + "tokenLine": 372, + "tokenStartUtf16": 11478, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 11989, + "fieldId": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "fieldName": "bindingManager", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:819cf46affa49a426fa3d5923ee600155fb2e1d59d3bd1738687bcdc15351446", + "kind": "references", + "relationshipSite": { + "endByte": 11989, + "endColumn": 19, + "endLine": 387, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 11975, + "startColumn": 5, + "startLine": 387 + }, + "source": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "target": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12247, + "methodId": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "methodName": "restoreBinding", + "methodStartUtf16": 10390, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 11975, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2634, + "targetFieldStartUtf16": 2596, + "tokenEndUtf16": 11989, + "tokenLine": 387, + "tokenStartUtf16": 11975, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12072, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:6c01547cca8b1f1511df8b951ddb4f7d6477775e0e5097c51b534d69b3d52895", + "kind": "references", + "relationshipSite": { + "endByte": 12072, + "endColumn": 17, + "endLine": 394, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 12057, + "startColumn": 2, + "startLine": 394 + }, + "source": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12247, + "methodId": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "methodName": "restoreBinding", + "methodStartUtf16": 10390, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 12057, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 12072, + "tokenLine": 394, + "tokenStartUtf16": 12057, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12108, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c1761ccbb8a6062f240108d750caa427ff6fa8750ef1f96d329ed7a826c77adf", + "kind": "references", + "relationshipSite": { + "endByte": 12108, + "endColumn": 18, + "endLine": 395, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 12092, + "startColumn": 2, + "startLine": 395 + }, + "source": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12247, + "methodId": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "methodName": "restoreBinding", + "methodStartUtf16": 10390, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 12092, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2843, + "targetFieldStartUtf16": 2814, + "tokenEndUtf16": 12108, + "tokenLine": 395, + "tokenStartUtf16": 12092, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12148, + "fieldId": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "fieldName": "commandToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:153b5d5365ba38f5227b051a028ec8e5cc8c4c6df9e210f380d95915f3a9c393", + "kind": "references", + "relationshipSite": { + "endByte": 12148, + "endColumn": 18, + "endLine": 396, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 12132, + "startColumn": 2, + "startLine": 396 + }, + "source": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "target": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12247, + "methodId": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "methodName": "restoreBinding", + "methodStartUtf16": 10390, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 12132, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2974, + "targetFieldStartUtf16": 2945, + "tokenEndUtf16": 12148, + "tokenLine": 396, + "tokenStartUtf16": 12132, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12227, + "fieldId": "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5", + "fieldName": "PROP_BINDING_REMOVE", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c49c6418dabe37bb7259f82183c3510c63de621f5c6d7e339567eec227492d22", + "kind": "references", + "relationshipSite": { + "endByte": 12227, + "endColumn": 57, + "endLine": 397, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 12208, + "startColumn": 38, + "startLine": 397 + }, + "source": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "target": "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12247, + "methodId": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "methodName": "restoreBinding", + "methodStartUtf16": 10390, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 12208, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1767, + "targetFieldStartUtf16": 1702, + "tokenEndUtf16": 12227, + "tokenLine": 397, + "tokenStartUtf16": 12208, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12864, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:741ff7587448f9c592a057c31a9455765779d364128984b5063f7e21be53fc01", + "kind": "references", + "relationshipSite": { + "endByte": 12864, + "endColumn": 30, + "endLine": 424, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 12849, + "startColumn": 15, + "startLine": 424 + }, + "source": "sha256:ebe0acac959f694b9197d93b927d5d62c757b44c204fe69ad731e96e0e79d164", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13327, + "methodId": "sha256:ebe0acac959f694b9197d93b927d5d62c757b44c204fe69ad731e96e0e79d164", + "methodName": "restoreBinding", + "methodStartUtf16": 12333, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 12849, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 12864, + "tokenLine": 424, + "tokenStartUtf16": 12849, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13476, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:38f67377d42082e72b3dcc6aba0c85b7e004c99786a6852ef6aa2abc667857f2", + "kind": "references", + "relationshipSite": { + "endByte": 13476, + "endColumn": 36, + "endLine": 447, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13461, + "startColumn": 21, + "startLine": 447 + }, + "source": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13584, + "methodId": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "methodName": "setBindings", + "methodStartUtf16": 13396, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13461, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 13476, + "tokenLine": 447, + "tokenStartUtf16": 13461, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13500, + "fieldId": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "fieldName": "bindingElements", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:481709db5e93eec181d6e99f3494d4d6dc8f2e974bed2b67417e7fcf86016f86", + "kind": "references", + "relationshipSite": { + "endByte": 13500, + "endColumn": 22, + "endLine": 448, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13485, + "startColumn": 7, + "startLine": 448 + }, + "source": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "target": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13584, + "methodId": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "methodName": "setBindings", + "methodStartUtf16": 13396, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13485, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2729, + "targetFieldStartUtf16": 2697, + "tokenEndUtf16": 13500, + "tokenLine": 448, + "tokenStartUtf16": 13485, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13564, + "fieldId": "sha256:46b54e3fcd64d7510776bdef13bddf2d390d2a998af849eb34a7d2a27a4b2c7c", + "fieldName": "PROP_BINDINGS", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ae3b9417208c284f901bad7fd2227e34ce9d7276231e6f2ec353fea501b00e80", + "kind": "references", + "relationshipSite": { + "endByte": 13564, + "endColumn": 51, + "endLine": 449, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13551, + "startColumn": 38, + "startLine": 449 + }, + "source": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "target": "sha256:46b54e3fcd64d7510776bdef13bddf2d390d2a998af849eb34a7d2a27a4b2c7c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13584, + "methodId": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "methodName": "setBindings", + "methodStartUtf16": 13396, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13551, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1837, + "targetFieldStartUtf16": 1783, + "tokenEndUtf16": 13564, + "tokenLine": 449, + "tokenStartUtf16": 13551, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13758, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a1ac81ef8b1ae8085365c22df232eec7caf37e338cc685d2b262a6da9de70821", + "kind": "references", + "relationshipSite": { + "endByte": 13758, + "endColumn": 33, + "endLine": 457, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13742, + "startColumn": 17, + "startLine": 457 + }, + "source": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13898, + "methodId": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "methodName": "setBindingToElement", + "methodStartUtf16": 13669, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13742, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2843, + "targetFieldStartUtf16": 2814, + "tokenEndUtf16": 13758, + "tokenLine": 457, + "tokenStartUtf16": 13742, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13783, + "fieldId": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d10d5cbe4075f49aa50b4bd80e9153e7625613b49a35b7829e111a568bd28b5a", + "kind": "references", + "relationshipSite": { + "endByte": 13783, + "endColumn": 23, + "endLine": 458, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13767, + "startColumn": 7, + "startLine": 458 + }, + "source": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "target": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13898, + "methodId": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "methodName": "setBindingToElement", + "methodStartUtf16": 13669, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13767, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2843, + "targetFieldStartUtf16": 2814, + "tokenEndUtf16": 13783, + "tokenLine": 458, + "tokenStartUtf16": 13767, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13802, + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "methodEndUtf16": 13898, + "methodName": "setBindingToElement", + "methodStartUtf16": 13669, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13786, + "status": "bound-nonfield", + "targetFieldEndUtf16": null, + "targetFieldStartUtf16": null, + "tokenEndUtf16": 13802, + "tokenLine": 458, + "tokenStartUtf16": 13786, + "type": "candidate" + }, + { + "endByte": 13866, + "fieldId": "sha256:e86338032c69f208ec5c55262f82d68ad21b0041b53e362cb85e4b905770535f", + "fieldName": "PROP_BINDING_ELEMENT_MAP", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:f032d288ecd0700d58bd9b21c3b2590163acdd0491c0e2b6c085a4613affe46b", + "kind": "references", + "relationshipSite": { + "endByte": 13866, + "endColumn": 62, + "endLine": 459, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "startByte": 13842, + "startColumn": 38, + "startLine": 459 + }, + "source": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "target": "sha256:e86338032c69f208ec5c55262f82d68ad21b0041b53e362cb85e4b905770535f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13898, + "methodId": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "methodName": "setBindingToElement", + "methodStartUtf16": 13669, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13842, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1605, + "targetFieldStartUtf16": 1531, + "tokenEndUtf16": 13866, + "tokenLine": 459, + "tokenStartUtf16": 13842, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13893, + "fieldName": "bindingToElement", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "methodEndUtf16": 13898, + "methodName": "setBindingToElement", + "methodStartUtf16": 13669, + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "startByte": 13877, + "status": "bound-nonfield", + "targetFieldEndUtf16": null, + "targetFieldStartUtf16": null, + "tokenEndUtf16": 13893, + "tokenLine": 460, + "tokenStartUtf16": 13877, + "type": "candidate" + }, + { + "endByte": 1211, + "fieldId": "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605", + "fieldName": "values", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:bc18f2084cb73ad28ff56a1aef51bf3893c6fad35d6e40859964fef05bd9e09c", + "kind": "references", + "relationshipSite": { + "endByte": 1211, + "endColumn": 15, + "endLine": 40, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "startByte": 1205, + "startColumn": 9, + "startLine": 40 + }, + "source": "sha256:94890255d79eed8dfc72f3ff25d2cf747a32f6637311e8dc38fc6aced0216df4", + "target": "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1222, + "methodId": "sha256:94890255d79eed8dfc72f3ff25d2cf747a32f6637311e8dc38fc6aced0216df4", + "methodName": "getLength", + "methodStartUtf16": 1160, + "sampleId": 6406137, + "sourceFileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "startByte": 1205, + "status": "bound-direct-field", + "targetFieldEndUtf16": 901, + "targetFieldStartUtf16": 879, + "tokenEndUtf16": 1211, + "tokenLine": 40, + "tokenStartUtf16": 1205, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1285, + "fieldId": "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605", + "fieldName": "values", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d251fa19cba613a504915b49f660d6dc4615e1c1b653de23a59f79f49fde33f0", + "kind": "references", + "relationshipSite": { + "endByte": 1285, + "endColumn": 15, + "endLine": 45, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "startByte": 1279, + "startColumn": 9, + "startLine": 45 + }, + "source": "sha256:79cd30c3e452e263e9027183c4017ba020202040e38ad833da4d9108462023c3", + "target": "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1300, + "methodId": "sha256:79cd30c3e452e263e9027183c4017ba020202040e38ad833da4d9108462023c3", + "methodName": "item", + "methodStartUtf16": 1225, + "sampleId": 6406137, + "sourceFileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "startByte": 1279, + "status": "bound-direct-field", + "targetFieldEndUtf16": 901, + "targetFieldStartUtf16": 879, + "tokenEndUtf16": 1285, + "tokenLine": 45, + "tokenStartUtf16": 1279, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1419, + "fieldId": "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605", + "fieldName": "values", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:eef7de922e584479a62964913f90963073735c8398323a76f7eac44ecfe7f38a", + "kind": "references", + "relationshipSite": { + "endByte": 1419, + "endColumn": 30, + "endLine": 51, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "startByte": 1413, + "startColumn": 24, + "startLine": 51 + }, + "source": "sha256:3637988bf9edece1d0c47e080ad3dd0806abf1f0dc5f7997b7601b4d8d226e9f", + "target": "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1525, + "methodId": "sha256:3637988bf9edece1d0c47e080ad3dd0806abf1f0dc5f7997b7601b4d8d226e9f", + "methodName": "getCssText", + "methodStartUtf16": 1303, + "sampleId": 6406137, + "sourceFileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "startByte": 1413, + "status": "bound-direct-field", + "targetFieldEndUtf16": 901, + "targetFieldStartUtf16": 879, + "tokenEndUtf16": 1419, + "tokenLine": 51, + "tokenStartUtf16": 1413, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1855, + "fieldId": "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605", + "fieldName": "values", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:5b6987a9d2545f3294eb98a727324e69132d42d49593f63eaa4b5a5aa0f06e82", + "kind": "references", + "relationshipSite": { + "endByte": 1855, + "endColumn": 33, + "endLine": 71, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "startByte": 1849, + "startColumn": 27, + "startLine": 71 + }, + "source": "sha256:49d95022e2bfafb07103ad7246a6142d3faef61790764535fef2660a701e83cc", + "target": "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1933, + "methodId": "sha256:49d95022e2bfafb07103ad7246a6142d3faef61790764535fef2660a701e83cc", + "methodName": "toString", + "methodStartUtf16": 1742, + "sampleId": 6406137, + "sourceFileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "startByte": 1849, + "status": "bound-direct-field", + "targetFieldEndUtf16": 901, + "targetFieldStartUtf16": 879, + "tokenEndUtf16": 1855, + "tokenLine": 71, + "tokenStartUtf16": 1849, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 3362, + "fieldId": "sha256:8ea2f8bd06166bc1454965ac9f119b4392735032314336c5381c73a01ea83e1e", + "fieldName": "SIZING_WIZARD_WIDTH", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:0495b4ad762e40281dc482b8db779f716a846ee379e6210c6bafde68ed63ab80", + "kind": "references", + "relationshipSite": { + "endByte": 3362, + "endColumn": 44, + "endLine": 84, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 3343, + "startColumn": 25, + "startLine": 84 + }, + "source": "sha256:32d4bd92789abc09d7330e5f5f219e62e709ae193f11fcfa6ba0d8a35413065b", + "target": "sha256:8ea2f8bd06166bc1454965ac9f119b4392735032314336c5381c73a01ea83e1e" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 3685, + "methodId": "sha256:32d4bd92789abc09d7330e5f5f219e62e709ae193f11fcfa6ba0d8a35413065b", + "methodName": "exportWizard", + "methodStartUtf16": 2575, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 3343, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2099, + "targetFieldStartUtf16": 2048, + "tokenEndUtf16": 3362, + "tokenLine": 84, + "tokenStartUtf16": 3343, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 3432, + "fieldId": "sha256:ccb6addc4e0421b0b01e3c330ff1b732dc36c88cbbe9af74df00c758653c0248", + "fieldName": "SIZING_WIZARD_HEIGHT", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:98fb3b69a2fadb840a22a294e3adeb7b5ad240e8782d0327e9e34ff3399909ce", + "kind": "references", + "relationshipSite": { + "endByte": 3432, + "endColumn": 36, + "endLine": 85, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 3412, + "startColumn": 16, + "startLine": 85 + }, + "source": "sha256:32d4bd92789abc09d7330e5f5f219e62e709ae193f11fcfa6ba0d8a35413065b", + "target": "sha256:ccb6addc4e0421b0b01e3c330ff1b732dc36c88cbbe9af74df00c758653c0248" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 3685, + "methodId": "sha256:32d4bd92789abc09d7330e5f5f219e62e709ae193f11fcfa6ba0d8a35413065b", + "methodName": "exportWizard", + "methodStartUtf16": 2575, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 3412, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2157, + "targetFieldStartUtf16": 2105, + "tokenEndUtf16": 3432, + "tokenLine": 85, + "tokenStartUtf16": 3412, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4479, + "fieldId": "sha256:8ea2f8bd06166bc1454965ac9f119b4392735032314336c5381c73a01ea83e1e", + "fieldName": "SIZING_WIZARD_WIDTH", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:9c961172c84ba948e13b3a321a3b47cd89d9983411ccd8996901a0efa2cf5925", + "kind": "references", + "relationshipSite": { + "endByte": 4479, + "endColumn": 44, + "endLine": 112, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 4460, + "startColumn": 25, + "startLine": 112 + }, + "source": "sha256:d58d82337ee98bd41da35e7de022206e019cabac84be0e3d07089363bbe96ef0", + "target": "sha256:8ea2f8bd06166bc1454965ac9f119b4392735032314336c5381c73a01ea83e1e" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 4802, + "methodId": "sha256:d58d82337ee98bd41da35e7de022206e019cabac84be0e3d07089363bbe96ef0", + "methodName": "importWizard", + "methodStartUtf16": 3691, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 4460, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2099, + "targetFieldStartUtf16": 2048, + "tokenEndUtf16": 4479, + "tokenLine": 112, + "tokenStartUtf16": 4460, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4549, + "fieldId": "sha256:ccb6addc4e0421b0b01e3c330ff1b732dc36c88cbbe9af74df00c758653c0248", + "fieldName": "SIZING_WIZARD_HEIGHT", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:8a6ce397cfbb78fac2448cec5686c93bd660d35eff7d425578e8ddb327e7e403", + "kind": "references", + "relationshipSite": { + "endByte": 4549, + "endColumn": 36, + "endLine": 113, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 4529, + "startColumn": 16, + "startLine": 113 + }, + "source": "sha256:d58d82337ee98bd41da35e7de022206e019cabac84be0e3d07089363bbe96ef0", + "target": "sha256:ccb6addc4e0421b0b01e3c330ff1b732dc36c88cbbe9af74df00c758653c0248" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 4802, + "methodId": "sha256:d58d82337ee98bd41da35e7de022206e019cabac84be0e3d07089363bbe96ef0", + "methodName": "importWizard", + "methodStartUtf16": 3691, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 4529, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2157, + "targetFieldStartUtf16": 2105, + "tokenEndUtf16": 4549, + "tokenLine": 113, + "tokenStartUtf16": 4529, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 4991, + "fieldId": "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f", + "fieldName": "project", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:4a97788edb5eea45a246a13bda511eaa75d8c1ce3b653c510b0a705c83231405", + "kind": "references", + "relationshipSite": { + "endByte": 4991, + "endColumn": 23, + "endLine": 130, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 4984, + "startColumn": 16, + "startLine": 130 + }, + "source": "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233", + "target": "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5182, + "methodId": "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233", + "methodName": "tearDown", + "methodStartUtf16": 4872, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 4984, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2307, + "targetFieldStartUtf16": 2282, + "tokenEndUtf16": 4991, + "tokenLine": 130, + "tokenStartUtf16": 4984, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 5026, + "fieldId": "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f", + "fieldName": "project", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:f2515f6190403cd601116eb70c5de97541b00f1e61b213f20c2e07866726de34", + "kind": "references", + "relationshipSite": { + "endByte": 5026, + "endColumn": 23, + "endLine": 131, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 5019, + "startColumn": 16, + "startLine": 131 + }, + "source": "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233", + "target": "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5182, + "methodId": "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233", + "methodName": "tearDown", + "methodStartUtf16": 4872, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 5019, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2307, + "targetFieldStartUtf16": 2282, + "tokenEndUtf16": 5026, + "tokenLine": 131, + "tokenStartUtf16": 5019, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 5076, + "fieldId": "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f", + "fieldName": "project", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e5e2f46d2fd27e3c53ae96cbb8b6eaf4c9237732728fc0d73f353afac47a5644", + "kind": "references", + "relationshipSite": { + "endByte": 5076, + "endColumn": 23, + "endLine": 132, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 5069, + "startColumn": 16, + "startLine": 132 + }, + "source": "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233", + "target": "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 5182, + "methodId": "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233", + "methodName": "tearDown", + "methodStartUtf16": 4872, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 5069, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2307, + "targetFieldStartUtf16": 2282, + "tokenEndUtf16": 5076, + "tokenLine": 132, + "tokenStartUtf16": 5069, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 9498, + "fieldId": "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06", + "fieldName": "SIZING_WIZARD_WIDTH_2", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ad75b9cc621e6f559a3d68a10af7d03f508c67702b62bb778f16ee603239b1ef", + "kind": "references", + "relationshipSite": { + "endByte": 9498, + "endColumn": 46, + "endLine": 239, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 9477, + "startColumn": 25, + "startLine": 239 + }, + "source": "sha256:c669d5f72ab4651f722a8c2a00ca215c497ce93662057cad3e1af27dfd3c9ae9", + "target": "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 9798, + "methodId": "sha256:c669d5f72ab4651f722a8c2a00ca215c497ce93662057cad3e1af27dfd3c9ae9", + "methodName": "testNewProjectPage1", + "methodStartUtf16": 9103, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 9477, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2216, + "targetFieldStartUtf16": 2163, + "tokenEndUtf16": 9498, + "tokenLine": 239, + "tokenStartUtf16": 9477, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 9570, + "fieldId": "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368", + "fieldName": "SIZING_WIZARD_HEIGHT_2", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:39c54c28df3acf9ee6ce2cd9425942b32642beb46853940c8bbbffe9e8860ba5", + "kind": "references", + "relationshipSite": { + "endByte": 9570, + "endColumn": 38, + "endLine": 240, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 9548, + "startColumn": 16, + "startLine": 240 + }, + "source": "sha256:c669d5f72ab4651f722a8c2a00ca215c497ce93662057cad3e1af27dfd3c9ae9", + "target": "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 9798, + "methodId": "sha256:c669d5f72ab4651f722a8c2a00ca215c497ce93662057cad3e1af27dfd3c9ae9", + "methodName": "testNewProjectPage1", + "methodStartUtf16": 9103, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 9548, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2276, + "targetFieldStartUtf16": 2222, + "tokenEndUtf16": 9570, + "tokenLine": 240, + "tokenStartUtf16": 9548, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 10517, + "fieldId": "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06", + "fieldName": "SIZING_WIZARD_WIDTH_2", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:201d7f7fdf542934a231838f3e9bb343bb3c3d3f2461c08d8b26fd93c6ac88e4", + "kind": "references", + "relationshipSite": { + "endByte": 10517, + "endColumn": 46, + "endLine": 261, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 10496, + "startColumn": 25, + "startLine": 261 + }, + "source": "sha256:eaca2f9a7ff4eb93c781cdaacf4c5167c8edd3983e6c8e1372c3f0cd79a9ea8f", + "target": "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 10849, + "methodId": "sha256:eaca2f9a7ff4eb93c781cdaacf4c5167c8edd3983e6c8e1372c3f0cd79a9ea8f", + "methodName": "testNewProjectPage2", + "methodStartUtf16": 9804, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 10496, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2216, + "targetFieldStartUtf16": 2163, + "tokenEndUtf16": 10517, + "tokenLine": 261, + "tokenStartUtf16": 10496, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 10589, + "fieldId": "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368", + "fieldName": "SIZING_WIZARD_HEIGHT_2", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:15ec4b60355bde5d3dc0b444a6dfb99b3c6d47f172a99ef9617a58415918b4c7", + "kind": "references", + "relationshipSite": { + "endByte": 10589, + "endColumn": 38, + "endLine": 262, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 10567, + "startColumn": 16, + "startLine": 262 + }, + "source": "sha256:eaca2f9a7ff4eb93c781cdaacf4c5167c8edd3983e6c8e1372c3f0cd79a9ea8f", + "target": "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 10849, + "methodId": "sha256:eaca2f9a7ff4eb93c781cdaacf4c5167c8edd3983e6c8e1372c3f0cd79a9ea8f", + "methodName": "testNewProjectPage2", + "methodStartUtf16": 9804, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 10567, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2276, + "targetFieldStartUtf16": 2222, + "tokenEndUtf16": 10589, + "tokenLine": 262, + "tokenStartUtf16": 10567, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12093, + "fieldId": "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06", + "fieldName": "SIZING_WIZARD_WIDTH_2", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c27a7d57cb732dd56cfae3f1f76510584a6741d0ac3bcb7fe441d9446380fb6c", + "kind": "references", + "relationshipSite": { + "endByte": 12093, + "endColumn": 46, + "endLine": 299, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 12072, + "startColumn": 25, + "startLine": 299 + }, + "source": "sha256:7bc48dcb4430fa7ce5f06b470427fd0b9766a616289bc58f501c7f46f9ea4c7a", + "target": "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12333, + "methodId": "sha256:7bc48dcb4430fa7ce5f06b470427fd0b9766a616289bc58f501c7f46f9ea4c7a", + "methodName": "testNewProject", + "methodStartUtf16": 10855, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 12072, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2216, + "targetFieldStartUtf16": 2163, + "tokenEndUtf16": 12093, + "tokenLine": 299, + "tokenStartUtf16": 12072, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12165, + "fieldId": "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368", + "fieldName": "SIZING_WIZARD_HEIGHT_2", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:f1c978dfbc2f856f1f6e314cacb878f8c4865a69890eeeb3dc208dd70a12f474", + "kind": "references", + "relationshipSite": { + "endByte": 12165, + "endColumn": 38, + "endLine": 300, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 12143, + "startColumn": 16, + "startLine": 300 + }, + "source": "sha256:7bc48dcb4430fa7ce5f06b470427fd0b9766a616289bc58f501c7f46f9ea4c7a", + "target": "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 12333, + "methodId": "sha256:7bc48dcb4430fa7ce5f06b470427fd0b9766a616289bc58f501c7f46f9ea4c7a", + "methodName": "testNewProject", + "methodStartUtf16": 10855, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 12143, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2276, + "targetFieldStartUtf16": 2222, + "tokenEndUtf16": 12165, + "tokenLine": 300, + "tokenStartUtf16": 12143, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13464, + "fieldId": "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06", + "fieldName": "SIZING_WIZARD_WIDTH_2", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:317b2b19d4e8055bdc38a97207e710429d9fe35494cbd3314c39d99c23463864", + "kind": "references", + "relationshipSite": { + "endByte": 13464, + "endColumn": 46, + "endLine": 332, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 13443, + "startColumn": 25, + "startLine": 332 + }, + "source": "sha256:1931e4fc19819b6641e89deecf850b3ff055f80f4e47cbd610ebc5274cb73e39", + "target": "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13702, + "methodId": "sha256:1931e4fc19819b6641e89deecf850b3ff055f80f4e47cbd610ebc5274cb73e39", + "methodName": "testNewResource", + "methodStartUtf16": 12339, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 13443, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2216, + "targetFieldStartUtf16": 2163, + "tokenEndUtf16": 13464, + "tokenLine": 332, + "tokenStartUtf16": 13443, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13536, + "fieldId": "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368", + "fieldName": "SIZING_WIZARD_HEIGHT_2", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a384a67412ccff61b241c109541c3fbc264df4d788f098cf8a5c00ce3f3516f8", + "kind": "references", + "relationshipSite": { + "endByte": 13536, + "endColumn": 38, + "endLine": 333, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "startByte": 13514, + "startColumn": 16, + "startLine": 333 + }, + "source": "sha256:1931e4fc19819b6641e89deecf850b3ff055f80f4e47cbd610ebc5274cb73e39", + "target": "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13702, + "methodId": "sha256:1931e4fc19819b6641e89deecf850b3ff055f80f4e47cbd610ebc5274cb73e39", + "methodName": "testNewResource", + "methodStartUtf16": 12339, + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "startByte": 13514, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2276, + "targetFieldStartUtf16": 2222, + "tokenEndUtf16": 13536, + "tokenLine": 333, + "tokenStartUtf16": 13514, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 9405, + "fieldId": "sha256:8f63d21f7a432574db2808754da27fb8a5f280867d32cbae8daf6aca72821caf", + "fieldName": "_physicalNetworkDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:10648efe3a9405df646d75eee21d6e3f9ed7db5ec3f7ae63883f12427f9c1de6", + "kind": "references", + "relationshipSite": { + "endByte": 9405, + "endColumn": 38, + "endLine": 235, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 9386, + "startColumn": 19, + "startLine": 235 + }, + "source": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "target": "sha256:8f63d21f7a432574db2808754da27fb8a5f280867d32cbae8daf6aca72821caf" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 14387, + "methodId": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "methodName": "addExternalLoadBalancer", + "methodStartUtf16": 8509, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 9386, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7185, + "targetFieldStartUtf16": 7134, + "tokenEndUtf16": 9405, + "tokenLine": 235, + "tokenStartUtf16": 9386, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 9746, + "fieldId": "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4", + "fieldName": "_physicalNetworkServiceProviderDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e420dd8c7e81e25ab45c9b173d9deeeaac8b04c2a77d0f126c9351d71ede31a4", + "kind": "references", + "relationshipSite": { + "endByte": 9746, + "endColumn": 46, + "endLine": 242, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 9712, + "startColumn": 12, + "startLine": 242 + }, + "source": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "target": "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 14387, + "methodId": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "methodName": "addExternalLoadBalancer", + "methodStartUtf16": 8509, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 9712, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7271, + "targetFieldStartUtf16": 7190, + "tokenEndUtf16": 9746, + "tokenLine": 242, + "tokenStartUtf16": 9712, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 9888, + "fieldId": "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4", + "fieldName": "_physicalNetworkServiceProviderDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e867fe86212087b1f62c61085e17b26483fef16550dddbe080d17b4513a2a0b2", + "kind": "references", + "relationshipSite": { + "endByte": 9888, + "endColumn": 60, + "endLine": 244, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 9854, + "startColumn": 26, + "startLine": 244 + }, + "source": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "target": "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 14387, + "methodId": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "methodName": "addExternalLoadBalancer", + "methodStartUtf16": 8509, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 9854, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7271, + "targetFieldStartUtf16": 7190, + "tokenEndUtf16": 9888, + "tokenLine": 244, + "tokenStartUtf16": 9854, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 10693, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:172d15e07047e084eb4df7ec1aa0f414adf69494eabb46fe84f8fce6332d2f10", + "kind": "references", + "relationshipSite": { + "endByte": 10693, + "endColumn": 46, + "endLine": 255, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 10663, + "startColumn": 16, + "startLine": 255 + }, + "source": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 14387, + "methodId": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "methodName": "addExternalLoadBalancer", + "methodStartUtf16": 8509, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 10663, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 10693, + "tokenLine": 255, + "tokenStartUtf16": 10663, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 11077, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:de7bdb9da30541692c0c6a1565776e1b388fbba3b6f255d652cfe90b8da265b7", + "kind": "references", + "relationshipSite": { + "endByte": 11077, + "endColumn": 20, + "endLine": 265, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 11069, + "startColumn": 12, + "startLine": 265 + }, + "source": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 14387, + "methodId": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "methodName": "addExternalLoadBalancer", + "methodStartUtf16": 8509, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 11069, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 11077, + "tokenLine": 265, + "tokenStartUtf16": 11069, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12204, + "fieldId": "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073", + "fieldName": "_resourceMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:90ffec86217115625d6e571ad9ad3ee9a7bbd43afd793c0c0460b62da953aa9a", + "kind": "references", + "relationshipSite": { + "endByte": 12204, + "endColumn": 42, + "endLine": 289, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 12192, + "startColumn": 30, + "startLine": 289 + }, + "source": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "target": "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 14387, + "methodId": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "methodName": "addExternalLoadBalancer", + "methodStartUtf16": 8509, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 12192, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6955, + "targetFieldStartUtf16": 6914, + "tokenEndUtf16": 12204, + "tokenLine": 289, + "tokenStartUtf16": 12192, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12772, + "fieldId": "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c", + "fieldName": "_defaultLbCapacity", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:353d7cafd00b45907eab1493a8d91bea6784881e6a8bbc66a9bc9fc709023f49", + "kind": "references", + "relationshipSite": { + "endByte": 12772, + "endColumn": 49, + "endLine": 297, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 12754, + "startColumn": 31, + "startLine": 297 + }, + "source": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "target": "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 14387, + "methodId": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "methodName": "addExternalLoadBalancer", + "methodStartUtf16": 8509, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 12754, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8380, + "targetFieldStartUtf16": 8348, + "tokenEndUtf16": 12772, + "tokenLine": 297, + "tokenStartUtf16": 12754, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 14510, + "fieldId": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "fieldName": "_hostDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ca43f09010e97064b50875e5c3399049f107c1f8fd15b17a1fc030a6686463a6", + "kind": "references", + "relationshipSite": { + "endByte": 14510, + "endColumn": 46, + "endLine": 330, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 14502, + "startColumn": 38, + "startLine": 330 + }, + "source": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "target": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16684, + "methodId": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "methodName": "deleteExternalLoadBalancer", + "methodStartUtf16": 14393, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 14502, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6624, + "targetFieldStartUtf16": 6595, + "tokenEndUtf16": 14510, + "tokenLine": 330, + "tokenStartUtf16": 14502, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 14748, + "fieldId": "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd", + "fieldName": "_hostDetailDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:15432be3390ef21d096cb09b14ce0fe98da28ba6602196c259c5e5b9d9e7f21f", + "kind": "references", + "relationshipSite": { + "endByte": 14748, + "endColumn": 47, + "endLine": 335, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 14734, + "startColumn": 33, + "startLine": 335 + }, + "source": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "target": "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16684, + "methodId": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "methodName": "deleteExternalLoadBalancer", + "methodStartUtf16": 14393, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 14734, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7654, + "targetFieldStartUtf16": 7612, + "tokenEndUtf16": 14748, + "tokenLine": 335, + "tokenStartUtf16": 14734, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 14956, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:38e6d0de3502435583e3e26112caf77c2538a82215a013c6416d295871e7b46a", + "kind": "references", + "relationshipSite": { + "endByte": 14956, + "endColumn": 80, + "endLine": 338, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 14926, + "startColumn": 50, + "startLine": 338 + }, + "source": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16684, + "methodId": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "methodName": "deleteExternalLoadBalancer", + "methodStartUtf16": 14393, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 14926, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 14956, + "tokenLine": 338, + "tokenStartUtf16": 14926, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 15260, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a8f7a400469584f79d096380fec04cfc0fb64566c499adb5535a70788bca2499", + "kind": "references", + "relationshipSite": { + "endByte": 15260, + "endColumn": 89, + "endLine": 341, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 15230, + "startColumn": 59, + "startLine": 341 + }, + "source": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16684, + "methodId": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "methodName": "deleteExternalLoadBalancer", + "methodStartUtf16": 14393, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 15230, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 15260, + "tokenLine": 341, + "tokenStartUtf16": 15230, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 15889, + "fieldId": "sha256:6f2796dc195083076baf982f607d430765bf88b00d757324ebf575399210b253", + "fieldName": "_networkLBDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:62e4be465084c5df1da823cf303eaf996c2906a67a6f3a91cf3bf661f536876e", + "kind": "references", + "relationshipSite": { + "endByte": 15889, + "endColumn": 72, + "endLine": 352, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 15876, + "startColumn": 59, + "startLine": 352 + }, + "source": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "target": "sha256:6f2796dc195083076baf982f607d430765bf88b00d757324ebf575399210b253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16684, + "methodId": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "methodName": "deleteExternalLoadBalancer", + "methodStartUtf16": 14393, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 15876, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7716, + "targetFieldStartUtf16": 7659, + "tokenEndUtf16": 15889, + "tokenLine": 352, + "tokenStartUtf16": 15876, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16337, + "fieldId": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "fieldName": "_hostDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:2a907a510368d4b83f9c856639a9be9233650cd072c01a23dd124a4d05842ab1", + "kind": "references", + "relationshipSite": { + "endByte": 16337, + "endColumn": 20, + "endLine": 361, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 16329, + "startColumn": 12, + "startLine": 361 + }, + "source": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "target": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16684, + "methodId": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "methodName": "deleteExternalLoadBalancer", + "methodStartUtf16": 14393, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 16329, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6624, + "targetFieldStartUtf16": 6595, + "tokenEndUtf16": 16337, + "tokenLine": 361, + "tokenStartUtf16": 16329, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16400, + "fieldId": "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073", + "fieldName": "_resourceMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:bff20add129927ca71f5827a9d9a4da7a8337356c90d1358696f434a7b55407d", + "kind": "references", + "relationshipSite": { + "endByte": 16400, + "endColumn": 24, + "endLine": 362, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 16388, + "startColumn": 12, + "startLine": 362 + }, + "source": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "target": "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16684, + "methodId": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "methodName": "deleteExternalLoadBalancer", + "methodStartUtf16": 14393, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 16388, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6955, + "targetFieldStartUtf16": 6914, + "tokenEndUtf16": 16400, + "tokenLine": 362, + "tokenStartUtf16": 16388, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16533, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:73b04ad75f49bf3f2c7d671754e386f6370f050dc7180662623cc09e6c71e52f", + "kind": "references", + "relationshipSite": { + "endByte": 16533, + "endColumn": 42, + "endLine": 365, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 16503, + "startColumn": 12, + "startLine": 365 + }, + "source": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16684, + "methodId": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "methodName": "deleteExternalLoadBalancer", + "methodStartUtf16": 14393, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 16503, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 16533, + "tokenLine": 365, + "tokenStartUtf16": 16503, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16632, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:6e3194ac92484166f93aca9f682f6427fb58b49754892b27ca36bf53beb85ba3", + "kind": "references", + "relationshipSite": { + "endByte": 16632, + "endColumn": 20, + "endLine": 369, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 16624, + "startColumn": 12, + "startLine": 369 + }, + "source": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16684, + "methodId": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "methodName": "deleteExternalLoadBalancer", + "methodStartUtf16": 14393, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 16624, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 16632, + "tokenLine": 369, + "tokenStartUtf16": 16624, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 17011, + "fieldId": "sha256:8f63d21f7a432574db2808754da27fb8a5f280867d32cbae8daf6aca72821caf", + "fieldName": "_physicalNetworkDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:f26011a510c4032e8ded0d790762d0f93e216c32f0973397084fbc3a5b05438c", + "kind": "references", + "relationshipSite": { + "endByte": 17011, + "endColumn": 38, + "endLine": 380, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 16992, + "startColumn": 19, + "startLine": 380 + }, + "source": "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14", + "target": "sha256:8f63d21f7a432574db2808754da27fb8a5f280867d32cbae8daf6aca72821caf" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 17985, + "methodId": "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14", + "methodName": "listExternalLoadBalancers", + "methodStartUtf16": 16690, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 16992, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7185, + "targetFieldStartUtf16": 7134, + "tokenEndUtf16": 17011, + "tokenLine": 380, + "tokenStartUtf16": 16992, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 17360, + "fieldId": "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4", + "fieldName": "_physicalNetworkServiceProviderDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:49053ae8cf23fb356e7901aaef9a5274b87a98f44e648b223c63001dac3fb636", + "kind": "references", + "relationshipSite": { + "endByte": 17360, + "endColumn": 46, + "endLine": 387, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 17326, + "startColumn": 12, + "startLine": 387 + }, + "source": "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14", + "target": "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 17985, + "methodId": "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14", + "methodName": "listExternalLoadBalancers", + "methodStartUtf16": 16690, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 17326, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7271, + "targetFieldStartUtf16": 7190, + "tokenEndUtf16": 17360, + "tokenLine": 387, + "tokenStartUtf16": 17326, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 17711, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:71aeb6325e9b5445ebe48f0efaf2bdc2c1461cf132c7c792be60055be7c6b859", + "kind": "references", + "relationshipSite": { + "endByte": 17711, + "endColumn": 42, + "endLine": 394, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 17681, + "startColumn": 12, + "startLine": 394 + }, + "source": "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 17985, + "methodId": "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14", + "methodName": "listExternalLoadBalancers", + "methodStartUtf16": 16690, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 17681, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 17711, + "tokenLine": 394, + "tokenStartUtf16": 17681, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 17905, + "fieldId": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "fieldName": "_hostDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:6e192cb34b85e674849efc336368f845e82a4993b0f6f4d76e167e805a0f2f9e", + "kind": "references", + "relationshipSite": { + "endByte": 17905, + "endColumn": 32, + "endLine": 396, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 17897, + "startColumn": 24, + "startLine": 396 + }, + "source": "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14", + "target": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 17985, + "methodId": "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14", + "methodName": "listExternalLoadBalancers", + "methodStartUtf16": 16690, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 17897, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6624, + "targetFieldStartUtf16": 6595, + "tokenEndUtf16": 17905, + "tokenLine": 396, + "tokenStartUtf16": 17897, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 18145, + "fieldId": "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd", + "fieldName": "_hostDetailDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:347f5bd64609bd37533504b7a7082835c26e3e76574b6c103d0dda34671a9247", + "kind": "references", + "relationshipSite": { + "endByte": 18145, + "endColumn": 54, + "endLine": 402, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 18131, + "startColumn": 40, + "startLine": 402 + }, + "source": "sha256:8adc07923460de74eb5748e360bbb92ef0268fe5e06e67deed7ae0ade9e6c599", + "target": "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18696, + "methodId": "sha256:8adc07923460de74eb5748e360bbb92ef0268fe5e06e67deed7ae0ade9e6c599", + "methodName": "createExternalLoadBalancerResponse", + "methodStartUtf16": 17991, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 18131, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7654, + "targetFieldStartUtf16": 7612, + "tokenEndUtf16": 18145, + "tokenLine": 402, + "tokenStartUtf16": 18131, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 19066, + "fieldId": "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d", + "fieldName": "_networkExternalLBDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:55ea835297f9e22fc578e6ae045b8001a3142966b8f7358db0c38e41958df981", + "kind": "references", + "relationshipSite": { + "endByte": 19066, + "endColumn": 80, + "endLine": 419, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 19045, + "startColumn": 59, + "startLine": 419 + }, + "source": "sha256:6f0ff34209385f110023262bc92b8dcdf132314e4bf1d98a12fa2ebcc63b19b6", + "target": "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19432, + "methodId": "sha256:6f0ff34209385f110023262bc92b8dcdf132314e4bf1d98a12fa2ebcc63b19b6", + "methodName": "getExternalLoadBalancerForNetwork", + "methodStartUtf16": 18883, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 19045, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6512, + "targetFieldStartUtf16": 6447, + "tokenEndUtf16": 19066, + "tokenLine": 419, + "tokenStartUtf16": 19045, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 19301, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:16f2469d5d004c08599172199ed939030f7ae54b5ea0adee2bed5a90826351a9", + "kind": "references", + "relationshipSite": { + "endByte": 19301, + "endColumn": 84, + "endLine": 422, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 19271, + "startColumn": 54, + "startLine": 422 + }, + "source": "sha256:6f0ff34209385f110023262bc92b8dcdf132314e4bf1d98a12fa2ebcc63b19b6", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19432, + "methodId": "sha256:6f0ff34209385f110023262bc92b8dcdf132314e4bf1d98a12fa2ebcc63b19b6", + "methodName": "getExternalLoadBalancerForNetwork", + "methodStartUtf16": 18883, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 19271, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 19301, + "tokenLine": 422, + "tokenStartUtf16": 19271, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 19688, + "fieldId": "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d", + "fieldName": "_networkExternalLBDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:819ddabd183c15d90d60a7d8ff8679c0f540e370a57a7ceb0e70b1f11a6fbb11", + "kind": "references", + "relationshipSite": { + "endByte": 19688, + "endColumn": 29, + "endLine": 431, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 19667, + "startColumn": 8, + "startLine": 431 + }, + "source": "sha256:46f0f79d1533633b212cab83d54110ac544397f62812689fda8947b907f3b29f", + "target": "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19723, + "methodId": "sha256:46f0f79d1533633b212cab83d54110ac544397f62812689fda8947b907f3b29f", + "methodName": "setExternalLoadBalancerForNetwork", + "methodStartUtf16": 19438, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 19667, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6512, + "targetFieldStartUtf16": 6447, + "tokenEndUtf16": 19688, + "tokenLine": 431, + "tokenStartUtf16": 19667, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 20125, + "fieldId": "sha256:520753938735383092187588cae8785e8bcc6393b22eb53eafb902fa7384a092", + "fieldName": "_networkOfferingDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:9bc50fe9df4fc01eba3467ac66fbe5930fb7af2a8d7b8fb5a80ebcd7150f610d", + "kind": "references", + "relationshipSite": { + "endByte": 20125, + "endColumn": 56, + "endLine": 440, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 20106, + "startColumn": 37, + "startLine": 440 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:520753938735383092187588cae8785e8bcc6393b22eb53eafb902fa7384a092" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 20106, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7089, + "targetFieldStartUtf16": 7038, + "tokenEndUtf16": 20125, + "tokenLine": 440, + "tokenStartUtf16": 20106, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 20218, + "fieldId": "sha256:6d7f54f7e690d84260a66c274e6780cce118ed0d220ec5be9ac4cd4bbd738e90", + "fieldName": "_ntwkSrvcProviderDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ed784d4a0a20cf2bf9d7d36504bf861916a6d60b5249475ba96924cb780c9c90", + "kind": "references", + "relationshipSite": { + "endByte": 20218, + "endColumn": 46, + "endLine": 441, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 20198, + "startColumn": 26, + "startLine": 441 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:6d7f54f7e690d84260a66c274e6780cce118ed0d220ec5be9ac4cd4bbd738e90" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 20198, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7775, + "targetFieldStartUtf16": 7721, + "tokenEndUtf16": 20218, + "tokenLine": 441, + "tokenStartUtf16": 20198, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 23152, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:32ca00d278762b1921edca28e2cc43ae1e4b8a3dd000cb364c027bf56ef5197e", + "kind": "references", + "relationshipSite": { + "endByte": 23152, + "endColumn": 40, + "endLine": 481, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 23144, + "startColumn": 32, + "startLine": 481 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 23144, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 23152, + "tokenLine": 481, + "tokenStartUtf16": 23144, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 24083, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:1c634e9d0ea2c1694a83eb4685becfcef8c170461ff3810eb139ebbbc2344593", + "kind": "references", + "relationshipSite": { + "endByte": 24083, + "endColumn": 50, + "endLine": 499, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 24053, + "startColumn": 20, + "startLine": 499 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 24053, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 24083, + "tokenLine": 499, + "tokenStartUtf16": 24053, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 24658, + "fieldId": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341", + "fieldName": "_dcDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e3a49345cd4fd2d72e4b0118af68ee923c8bfeae8b0ce1c95a2f3fd79d2a893c", + "kind": "references", + "relationshipSite": { + "endByte": 24658, + "endColumn": 70, + "endLine": 504, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 24652, + "startColumn": 64, + "startLine": 504 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 24652, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6662, + "targetFieldStartUtf16": 6629, + "tokenEndUtf16": 24658, + "tokenLine": 504, + "tokenStartUtf16": 24652, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 25180, + "fieldId": "sha256:df463387e7867f168a977ea770b0c2e42d3ac711c9eaef319d316409b3ff34d5", + "fieldName": "_podDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:8f378b69690c8184d3019b78bab7c93cca97331d1d3751b19dae97b8c934453f", + "kind": "references", + "relationshipSite": { + "endByte": 25180, + "endColumn": 45, + "endLine": 509, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 25173, + "startColumn": 38, + "startLine": 509 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:df463387e7867f168a977ea770b0c2e42d3ac711c9eaef319d316409b3ff34d5" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 25173, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7970, + "targetFieldStartUtf16": 7922, + "tokenEndUtf16": 25180, + "tokenLine": 509, + "tokenStartUtf16": 25173, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 25901, + "fieldId": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1", + "fieldName": "_agentMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:52e1fc728b0dbfa44d5af3233ebdeecb60df627532e4be523e41509b3a83f81a", + "kind": "references", + "relationshipSite": { + "endByte": 25901, + "endColumn": 93, + "endLine": 518, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 25892, + "startColumn": 84, + "startLine": 518 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 25892, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6909, + "targetFieldStartUtf16": 6874, + "tokenEndUtf16": 25901, + "tokenLine": 518, + "tokenStartUtf16": 25892, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 26095, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:6d143330df5b9139dd6c1a8a2cab39eae4bbc03c61b7fbfbe95a14865c800d7e", + "kind": "references", + "relationshipSite": { + "endByte": 26095, + "endColumn": 44, + "endLine": 520, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 26087, + "startColumn": 36, + "startLine": 520 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 26087, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 26095, + "tokenLine": 520, + "tokenStartUtf16": 26087, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 26390, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:054b44018ca296f18a0303c825d016c47e67b06b39de77a2bd360c46d43fbdc8", + "kind": "references", + "relationshipSite": { + "endByte": 26390, + "endColumn": 40, + "endLine": 524, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 26382, + "startColumn": 32, + "startLine": 524 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 26382, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 26390, + "tokenLine": 524, + "tokenStartUtf16": 26382, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 27534, + "fieldId": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98", + "fieldName": "_ipAddrMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:00392f110f056921b57ff0735e930dead965630368ddff198d9e4df530a00c56", + "kind": "references", + "relationshipSite": { + "endByte": 27534, + "endColumn": 42, + "endLine": 540, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 27524, + "startColumn": 32, + "startLine": 540 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 27524, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8015, + "targetFieldStartUtf16": 7975, + "tokenEndUtf16": 27534, + "tokenLine": 540, + "tokenStartUtf16": 27524, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 27605, + "fieldId": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d", + "fieldName": "_accountMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c47577d53e085e1854610169d8e8fdb4f09c50315d00adef40e8fe3fc31753a9", + "kind": "references", + "relationshipSite": { + "endByte": 27605, + "endColumn": 113, + "endLine": 540, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 27594, + "startColumn": 102, + "startLine": 540 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 27594, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7315, + "targetFieldStartUtf16": 7276, + "tokenEndUtf16": 27605, + "tokenLine": 540, + "tokenStartUtf16": 27594, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 28247, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:66af6550b27f7dfaafcc1c8e7fddfc5d62d68b79e05f14751dc9e08489e7af38", + "kind": "references", + "relationshipSite": { + "endByte": 28247, + "endColumn": 40, + "endLine": 549, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 28239, + "startColumn": 32, + "startLine": 549 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 28239, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 28247, + "tokenLine": 549, + "tokenStartUtf16": 28239, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 29299, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:353b4ac666f47a269a953e90ebc3abc0f2cbdd6e68af95c7abcaf28401542194", + "kind": "references", + "relationshipSite": { + "endByte": 29299, + "endColumn": 40, + "endLine": 562, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 29291, + "startColumn": 32, + "startLine": 562 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 29291, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 29299, + "tokenLine": 562, + "tokenStartUtf16": 29291, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 29819, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e5f2d6cea5abb6761fa09ce240a7e6a839c866fb3bd188f29ee6ba32e85bbad2", + "kind": "references", + "relationshipSite": { + "endByte": 29819, + "endColumn": 103, + "endLine": 568, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 29789, + "startColumn": 73, + "startLine": 568 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 29789, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 29819, + "tokenLine": 568, + "tokenStartUtf16": 29789, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 30070, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e1aafa44f82bb1c8b346bd45552cc5d65f18a171f0ec11df7e759d8ce7fd0c7e", + "kind": "references", + "relationshipSite": { + "endByte": 30070, + "endColumn": 62, + "endLine": 571, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 30040, + "startColumn": 32, + "startLine": 571 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 30040, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 30070, + "tokenLine": 571, + "tokenStartUtf16": 30040, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 30607, + "fieldId": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1", + "fieldName": "_agentMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:5e02445110978fc15803dea1d1fc422c9e1df942aaf44e14531d4a42d19211e0", + "kind": "references", + "relationshipSite": { + "endByte": 30607, + "endColumn": 90, + "endLine": 577, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 30598, + "startColumn": 81, + "startLine": 577 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 30598, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6909, + "targetFieldStartUtf16": 6874, + "tokenEndUtf16": 30607, + "tokenLine": 577, + "tokenStartUtf16": 30598, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 30790, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:3d51986bc0a8c2b6080df39d6d1b9217f2880be52241f49ec9cf0369109fb6cc", + "kind": "references", + "relationshipSite": { + "endByte": 30790, + "endColumn": 48, + "endLine": 579, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 30782, + "startColumn": 40, + "startLine": 579 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 30782, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 30790, + "tokenLine": 579, + "tokenStartUtf16": 30782, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 31081, + "fieldId": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341", + "fieldName": "_dcDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a9ba5ea69de74880178a69e13fa2aed53ee47d2e6c837ce231a4988f243b92b3", + "kind": "references", + "relationshipSite": { + "endByte": 31081, + "endColumn": 46, + "endLine": 582, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 31075, + "startColumn": 40, + "startLine": 582 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 31075, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6662, + "targetFieldStartUtf16": 6629, + "tokenEndUtf16": 31081, + "tokenLine": 582, + "tokenStartUtf16": 31075, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 31200, + "fieldId": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98", + "fieldName": "_ipAddrMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d7dfb03d0e1dbd1714b9e25092e6b4e09ba7201a7cbe25672a39fb0bb2e287ca", + "kind": "references", + "relationshipSite": { + "endByte": 31200, + "endColumn": 50, + "endLine": 583, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 31190, + "startColumn": 40, + "startLine": 583 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 31190, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8015, + "targetFieldStartUtf16": 7975, + "tokenEndUtf16": 31200, + "tokenLine": 583, + "tokenStartUtf16": 31190, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 31258, + "fieldId": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d", + "fieldName": "_accountMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:92964145cad500f867633b84c9aa08df252e707d66aabfecfa449a0e88b0b4d3", + "kind": "references", + "relationshipSite": { + "endByte": 31258, + "endColumn": 108, + "endLine": 583, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 31247, + "startColumn": 97, + "startLine": 583 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 31247, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7315, + "targetFieldStartUtf16": 7276, + "tokenEndUtf16": 31258, + "tokenLine": 583, + "tokenStartUtf16": 31247, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 31295, + "fieldId": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d", + "fieldName": "_accountMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ae7850aa3201433e4de783cef6b20d988745fe6a3f39fd7637b334344aebb919", + "kind": "references", + "relationshipSite": { + "endByte": 31295, + "endColumn": 145, + "endLine": 583, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 31284, + "startColumn": 134, + "startLine": 583 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 31284, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7315, + "targetFieldStartUtf16": 7276, + "tokenEndUtf16": 31295, + "tokenLine": 583, + "tokenStartUtf16": 31284, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 31455, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e0289267812b9493830af04e5287b5539afcfce8d9704c3b5b87fc42c263922a", + "kind": "references", + "relationshipSite": { + "endByte": 31455, + "endColumn": 44, + "endLine": 586, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 31447, + "startColumn": 36, + "startLine": 586 + }, + "source": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 31768, + "methodId": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "methodName": "allocateLoadBalancerForNetwork", + "methodStartUtf16": 19729, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 31447, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 31455, + "tokenLine": 586, + "tokenStartUtf16": 31447, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 32108, + "fieldId": "sha256:6d7f54f7e690d84260a66c274e6780cce118ed0d220ec5be9ac4cd4bbd738e90", + "fieldName": "_ntwkSrvcProviderDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:9ea3e89101bc5a70f36356a276ae7e04b721ba4544f1bee72d655e4336a8ec5c", + "kind": "references", + "relationshipSite": { + "endByte": 32108, + "endColumn": 46, + "endLine": 602, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 32088, + "startColumn": 26, + "startLine": 602 + }, + "source": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "target": "sha256:6d7f54f7e690d84260a66c274e6780cce118ed0d220ec5be9ac4cd4bbd738e90" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 36085, + "methodId": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "methodName": "findSuitableLoadBalancerForNetwork", + "methodStartUtf16": 31774, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 32088, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7775, + "targetFieldStartUtf16": 7721, + "tokenEndUtf16": 32108, + "tokenLine": 602, + "tokenStartUtf16": 32088, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 32287, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d25542287fdcedc03cdb44a76f24f2c8abc02b2d6e41509884091f7d8aa59248", + "kind": "references", + "relationshipSite": { + "endByte": 32287, + "endColumn": 54, + "endLine": 606, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 32257, + "startColumn": 24, + "startLine": 606 + }, + "source": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 36085, + "methodId": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "methodName": "findSuitableLoadBalancerForNetwork", + "methodStartUtf16": 31774, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 32257, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 32287, + "tokenLine": 606, + "tokenStartUtf16": 32257, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 32969, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ba2c8886ede86a32658fb64bd2b5685223bbf5a206b2fc12318d1d206bda7683", + "kind": "references", + "relationshipSite": { + "endByte": 32969, + "endColumn": 54, + "endLine": 617, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 32939, + "startColumn": 24, + "startLine": 617 + }, + "source": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 36085, + "methodId": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "methodName": "findSuitableLoadBalancerForNetwork", + "methodStartUtf16": 31774, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 32939, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 32969, + "tokenLine": 617, + "tokenStartUtf16": 32939, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 33810, + "fieldId": "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d", + "fieldName": "_networkExternalLBDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:de8a141b569aac1fe49ae71726a393999ba10ced3e3576df69a2d40a584ddb0d", + "kind": "references", + "relationshipSite": { + "endByte": 33810, + "endColumn": 94, + "endLine": 633, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 33789, + "startColumn": 73, + "startLine": 633 + }, + "source": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "target": "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 36085, + "methodId": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "methodName": "findSuitableLoadBalancerForNetwork", + "methodStartUtf16": 31774, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 33789, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6512, + "targetFieldStartUtf16": 6447, + "tokenEndUtf16": 33810, + "tokenLine": 633, + "tokenStartUtf16": 33789, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 34217, + "fieldId": "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c", + "fieldName": "_defaultLbCapacity", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:abd31ec466869dc5b20535354aef751d2c4d3febf892ed56fcc1d3ca0d3fc808", + "kind": "references", + "relationshipSite": { + "endByte": 34217, + "endColumn": 57, + "endLine": 639, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 34199, + "startColumn": 39, + "startLine": 639 + }, + "source": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "target": "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 36085, + "methodId": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "methodName": "findSuitableLoadBalancerForNetwork", + "methodStartUtf16": 31774, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 34199, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8380, + "targetFieldStartUtf16": 8348, + "tokenEndUtf16": 34217, + "tokenLine": 639, + "tokenStartUtf16": 34199, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 35385, + "fieldId": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "fieldName": "_externalLoadBalancerDeviceDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:cbbf0506ef7d70807b745b1280ec7100760d496e1c7eebeff5eacb36245205d0", + "kind": "references", + "relationshipSite": { + "endByte": 35385, + "endColumn": 54, + "endLine": 663, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 35355, + "startColumn": 24, + "startLine": 663 + }, + "source": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "target": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 36085, + "methodId": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "methodName": "findSuitableLoadBalancerForNetwork", + "methodStartUtf16": 31774, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 35355, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6590, + "targetFieldStartUtf16": 6517, + "tokenEndUtf16": 35385, + "tokenLine": 663, + "tokenStartUtf16": 35355, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 38396, + "fieldId": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "fieldName": "_hostDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a40f74cb3018e8aa8dc6221568c43002e6ae8bddbfb9beab635d8874f737a55d", + "kind": "references", + "relationshipSite": { + "endByte": 38396, + "endColumn": 42, + "endLine": 714, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 38388, + "startColumn": 34, + "startLine": 714 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 38388, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6624, + "targetFieldStartUtf16": 6595, + "tokenEndUtf16": 38396, + "tokenLine": 714, + "tokenStartUtf16": 38388, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 38784, + "fieldId": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1", + "fieldName": "_agentMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:444042b5964888757df1f8be24bbd8b163bef8a5525f0e6f17a53e8d1e0b740a", + "kind": "references", + "relationshipSite": { + "endByte": 38784, + "endColumn": 78, + "endLine": 719, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 38775, + "startColumn": 69, + "startLine": 719 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 38775, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6909, + "targetFieldStartUtf16": 6874, + "tokenEndUtf16": 38784, + "tokenLine": 719, + "tokenStartUtf16": 38775, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 38941, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:4923f2d015039c68c338fc825001e4710fb353155ffb0d45cb1cb4ad9516ecc1", + "kind": "references", + "relationshipSite": { + "endByte": 38941, + "endColumn": 36, + "endLine": 721, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 38933, + "startColumn": 28, + "startLine": 721 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 38933, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 38941, + "tokenLine": 721, + "tokenStartUtf16": 38933, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 39295, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:f381c77ad3e34ff5861b11e10c6d13875c63d98f346b187fdd93227b10ab5252", + "kind": "references", + "relationshipSite": { + "endByte": 39295, + "endColumn": 32, + "endLine": 726, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 39287, + "startColumn": 24, + "startLine": 726 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 39287, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 39295, + "tokenLine": 726, + "tokenStartUtf16": 39287, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 39474, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:2ec2747ee28bad28436e86c3f246195f2192cf76d978a7a38f745558c6f84f7a", + "kind": "references", + "relationshipSite": { + "endByte": 39474, + "endColumn": 32, + "endLine": 729, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 39466, + "startColumn": 24, + "startLine": 729 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 39466, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 39474, + "tokenLine": 729, + "tokenStartUtf16": 39466, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 39527, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d5f3cf7ca80f6b1aad4da60c91b774aaf140ef78b2288412e2e88a6a1791944f", + "kind": "references", + "relationshipSite": { + "endByte": 39527, + "endColumn": 32, + "endLine": 730, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 39519, + "startColumn": 24, + "startLine": 730 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 39519, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 39527, + "tokenLine": 730, + "tokenStartUtf16": 39519, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 39983, + "fieldId": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341", + "fieldName": "_dcDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:58066c1ae894517c26461b394383e203e868b296e4aec472542c14fd0775ce6b", + "kind": "references", + "relationshipSite": { + "endByte": 39983, + "endColumn": 26, + "endLine": 738, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 39977, + "startColumn": 20, + "startLine": 738 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 39977, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6662, + "targetFieldStartUtf16": 6629, + "tokenEndUtf16": 39983, + "tokenLine": 738, + "tokenStartUtf16": 39977, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 40214, + "fieldId": "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd", + "fieldName": "_hostDetailDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c16ddfaa1564652b2ba1f8f1d1eea8d43114f30ea227b5cab69ac5df5e37d888", + "kind": "references", + "relationshipSite": { + "endByte": 40214, + "endColumn": 60, + "endLine": 741, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 40200, + "startColumn": 46, + "startLine": 741 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 40200, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7654, + "targetFieldStartUtf16": 7612, + "tokenEndUtf16": 40214, + "tokenLine": 741, + "tokenStartUtf16": 40200, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 40307, + "fieldId": "sha256:83f0ea4c0f440fe421cb511edfab721429e58bdf70d6051e96763523cabea956", + "fieldName": "_ipAddressDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d0fa7bea4a438ece844026f219e6414fab6b318e67935988a6fd5453cf9aa064", + "kind": "references", + "relationshipSite": { + "endByte": 40307, + "endColumn": 52, + "endLine": 742, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 40294, + "startColumn": 39, + "startLine": 742 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:83f0ea4c0f440fe421cb511edfab721429e58bdf70d6051e96763523cabea956" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 40294, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6999, + "targetFieldStartUtf16": 6960, + "tokenEndUtf16": 40307, + "tokenLine": 742, + "tokenStartUtf16": 40294, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 40413, + "fieldId": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98", + "fieldName": "_ipAddrMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:fd0b254077b2f9893cab6392b8588d449cad1afe3ff6e48362e00b62be2337cd", + "kind": "references", + "relationshipSite": { + "endByte": 40413, + "endColumn": 30, + "endLine": 743, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 40403, + "startColumn": 20, + "startLine": 743 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 40403, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8015, + "targetFieldStartUtf16": 7975, + "tokenEndUtf16": 40413, + "tokenLine": 743, + "tokenStartUtf16": 40403, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 40467, + "fieldId": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d", + "fieldName": "_accountMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:2723a19ea40996c604cd2d198c8701446aeb201ac1c026604f252186fc88f6e8", + "kind": "references", + "relationshipSite": { + "endByte": 40467, + "endColumn": 84, + "endLine": 743, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 40456, + "startColumn": 73, + "startLine": 743 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 40456, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7315, + "targetFieldStartUtf16": 7276, + "tokenEndUtf16": 40467, + "tokenLine": 743, + "tokenStartUtf16": 40456, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 40504, + "fieldId": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d", + "fieldName": "_accountMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b7309763231eda976c5b2a9c594ac29169fd16087050a1d521603a159f6bd5fa", + "kind": "references", + "relationshipSite": { + "endByte": 40504, + "endColumn": 121, + "endLine": 743, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 40493, + "startColumn": 110, + "startLine": 743 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 40493, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7315, + "targetFieldStartUtf16": 7276, + "tokenEndUtf16": 40504, + "tokenLine": 743, + "tokenStartUtf16": 40493, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 40688, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:cf7c1c99df1f22aaa8767ddeb03def6ff0cd285b0c7586b6386fc77b36f0f651", + "kind": "references", + "relationshipSite": { + "endByte": 40688, + "endColumn": 24, + "endLine": 750, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 40680, + "startColumn": 16, + "startLine": 750 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 40680, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 40688, + "tokenLine": 750, + "tokenStartUtf16": 40680, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 40911, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:237826d83e882ce92794962a4f40697040ed110c7d5356172560bfa58a514b2d", + "kind": "references", + "relationshipSite": { + "endByte": 40911, + "endColumn": 20, + "endLine": 754, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 40903, + "startColumn": 12, + "startLine": 754 + }, + "source": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41135, + "methodId": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "methodName": "freeLoadBalancerForNetwork", + "methodStartUtf16": 36091, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 40903, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 40911, + "tokenLine": 754, + "tokenStartUtf16": 40903, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 41427, + "fieldId": "sha256:83f0ea4c0f440fe421cb511edfab721429e58bdf70d6051e96763523cabea956", + "fieldName": "_ipAddressDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:4176136cd5bc654a3262428e5674f168bf9a53556949f5e7e9d7dc05c93c06a1", + "kind": "references", + "relationshipSite": { + "endByte": 41427, + "endColumn": 40, + "endLine": 765, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 41414, + "startColumn": 27, + "startLine": 765 + }, + "source": "sha256:9d9f417a45113f8597ed72b885546110a914bf65f1ba0970fb41711d472176a6", + "target": "sha256:83f0ea4c0f440fe421cb511edfab721429e58bdf70d6051e96763523cabea956" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41837, + "methodId": "sha256:9d9f417a45113f8597ed72b885546110a914bf65f1ba0970fb41711d472176a6", + "methodName": "applyStaticNatRuleForInlineLBRule", + "methodStartUtf16": 41141, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 41414, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6999, + "targetFieldStartUtf16": 6960, + "tokenEndUtf16": 41427, + "tokenLine": 765, + "tokenStartUtf16": 41414, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 41736, + "fieldId": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "fieldName": "_networkMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:612c0d1b81f3ff08f1e4817cae217ef5b38b422859bec34eae562d76c1befa39", + "kind": "references", + "relationshipSite": { + "endByte": 41736, + "endColumn": 54, + "endLine": 768, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 41725, + "startColumn": 43, + "startLine": 768 + }, + "source": "sha256:9d9f417a45113f8597ed72b885546110a914bf65f1ba0970fb41711d472176a6", + "target": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 41837, + "methodId": "sha256:9d9f417a45113f8597ed72b885546110a914bf65f1ba0970fb41711d472176a6", + "methodName": "applyStaticNatRuleForInlineLBRule", + "methodStartUtf16": 41141, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 41725, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6763, + "targetFieldStartUtf16": 6711, + "tokenEndUtf16": 41736, + "tokenLine": 768, + "tokenStartUtf16": 41725, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 42548, + "fieldId": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c", + "fieldName": "_networkModel", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:48a2de37dfdca9002914a666b8249225914063b9775bef70f83e93045893d421", + "kind": "references", + "relationshipSite": { + "endByte": 42548, + "endColumn": 36, + "endLine": 799, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 42535, + "startColumn": 23, + "startLine": 799 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 42535, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6706, + "targetFieldStartUtf16": 6667, + "tokenEndUtf16": 42548, + "tokenLine": 799, + "tokenStartUtf16": 42535, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 42661, + "fieldId": "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca", + "fieldName": "_inlineLoadBalancerNicMapDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:08681d1c25d3853063604313470c5a9fa460f4991253b35ace33203dc57fbc7e", + "kind": "references", + "relationshipSite": { + "endByte": 42661, + "endColumn": 73, + "endLine": 800, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 42633, + "startColumn": 45, + "startLine": 800 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 42633, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6837, + "targetFieldStartUtf16": 6768, + "tokenEndUtf16": 42661, + "tokenLine": 800, + "tokenStartUtf16": 42633, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 43232, + "fieldId": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98", + "fieldName": "_ipAddrMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:63b85565ee31ae0b24bbca568f70e17ac6d4b94101509bff77c35bde5fe2de61", + "kind": "references", + "relationshipSite": { + "endByte": 43232, + "endColumn": 59, + "endLine": 811, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 43222, + "startColumn": 49, + "startLine": 811 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 43222, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8015, + "targetFieldStartUtf16": 7975, + "tokenEndUtf16": 43232, + "tokenLine": 811, + "tokenStartUtf16": 43222, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 43476, + "fieldId": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98", + "fieldName": "_ipAddrMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:5d10e70e01ff5e6b652b5ac4e5530de5afda601895533488efb772b0c4bf954e", + "kind": "references", + "relationshipSite": { + "endByte": 43476, + "endColumn": 42, + "endLine": 815, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 43466, + "startColumn": 32, + "startLine": 815 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 43466, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8015, + "targetFieldStartUtf16": 7975, + "tokenEndUtf16": 43476, + "tokenLine": 815, + "tokenStartUtf16": 43466, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 43543, + "fieldId": "sha256:6ae2a588540f6200447a1624efff22acb3ebcefb8dee155a2d4d33b258679711", + "fieldName": "_accountDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:922b9cfa0c6b5487ba98ccfcab7bf5a2c917a9b224e951ed62d9f22b09ae58f8", + "kind": "references", + "relationshipSite": { + "endByte": 43543, + "endColumn": 109, + "endLine": 815, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 43532, + "startColumn": 98, + "startLine": 815 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:6ae2a588540f6200447a1624efff22acb3ebcefb8dee155a2d4d33b258679711" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 43532, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7129, + "targetFieldStartUtf16": 7094, + "tokenEndUtf16": 43543, + "tokenLine": 815, + "tokenStartUtf16": 43532, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 43973, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:932eec6dc10c3a8dfb74b389e785fb770627633a6528290647b52c043556eeb1", + "kind": "references", + "relationshipSite": { + "endByte": 43973, + "endColumn": 36, + "endLine": 820, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 43965, + "startColumn": 28, + "startLine": 820 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 43965, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 43973, + "tokenLine": 820, + "tokenStartUtf16": 43965, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 44320, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ee7176697a0988f2efee56f3c32f7b7c480f3527c154e3e272a4c2c6115ffbb7", + "kind": "references", + "relationshipSite": { + "endByte": 44320, + "endColumn": 28, + "endLine": 828, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 44312, + "startColumn": 20, + "startLine": 828 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 44312, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 44320, + "tokenLine": 828, + "tokenStartUtf16": 44312, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 44594, + "fieldId": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f", + "fieldName": "_nicDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:90bb504a7cd9d619d1a5c82ca0c28b7e27d364108d1484b61dedc7656578928d", + "kind": "references", + "relationshipSite": { + "endByte": 44594, + "endColumn": 44, + "endLine": 833, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 44587, + "startColumn": 37, + "startLine": 833 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 44587, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6869, + "targetFieldStartUtf16": 6842, + "tokenEndUtf16": 44594, + "tokenLine": 833, + "tokenStartUtf16": 44587, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 44768, + "fieldId": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "fieldName": "_networkMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:9a48101a7f3ef7f2d6b73b56bceb3c3a68ea1a888b41f44611c60c8e40e684f1", + "kind": "references", + "relationshipSite": { + "endByte": 44768, + "endColumn": 52, + "endLine": 835, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 44757, + "startColumn": 41, + "startLine": 835 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 44757, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6763, + "targetFieldStartUtf16": 6711, + "tokenEndUtf16": 44768, + "tokenLine": 835, + "tokenStartUtf16": 44757, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 45092, + "fieldId": "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca", + "fieldName": "_inlineLoadBalancerNicMapDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:911b8d0146a8fb7b3a7f05ffda5f0575d830a7ed4db0d59c8a9dec389260b834", + "kind": "references", + "relationshipSite": { + "endByte": 45092, + "endColumn": 44, + "endLine": 840, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 45064, + "startColumn": 16, + "startLine": 840 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 45064, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6837, + "targetFieldStartUtf16": 6768, + "tokenEndUtf16": 45092, + "tokenLine": 840, + "tokenStartUtf16": 45064, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 45579, + "fieldId": "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca", + "fieldName": "_inlineLoadBalancerNicMapDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:4739f6fbb9b7f5eac85572a21eb06f99982716f1e0daf2c63fb9cbc0e911f601", + "kind": "references", + "relationshipSite": { + "endByte": 45579, + "endColumn": 48, + "endLine": 848, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 45551, + "startColumn": 20, + "startLine": 848 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 45551, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6837, + "targetFieldStartUtf16": 6768, + "tokenEndUtf16": 45579, + "tokenLine": 848, + "tokenStartUtf16": 45551, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 45633, + "fieldId": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f", + "fieldName": "_nicDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b219ea8733882d5caf6a661d1e7d6772b17eb3ffdad9c0c7ab5ce85ddad3a53a", + "kind": "references", + "relationshipSite": { + "endByte": 45633, + "endColumn": 27, + "endLine": 849, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 45626, + "startColumn": 20, + "startLine": 849 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 45626, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6869, + "targetFieldStartUtf16": 6842, + "tokenEndUtf16": 45633, + "tokenLine": 849, + "tokenStartUtf16": 45626, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 45744, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:cba14fb0a6cfa35920ffc4229f119e644a17f041fa195b47402c729fb7e46416", + "kind": "references", + "relationshipSite": { + "endByte": 45744, + "endColumn": 24, + "endLine": 853, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 45736, + "startColumn": 16, + "startLine": 853 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 45736, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 45744, + "tokenLine": 853, + "tokenStartUtf16": 45736, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 45920, + "fieldId": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f", + "fieldName": "_nicDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:3d3ade8482226363557bf93dc6152b6ebfe8e99733e4977cc0daaf22caa18879", + "kind": "references", + "relationshipSite": { + "endByte": 45920, + "endColumn": 44, + "endLine": 856, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 45913, + "startColumn": 37, + "startLine": 856 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 45913, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6869, + "targetFieldStartUtf16": 6842, + "tokenEndUtf16": 45920, + "tokenLine": 856, + "tokenStartUtf16": 45913, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 46120, + "fieldId": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f", + "fieldName": "_nicDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:7ff7f6f33968fea586b7c1ed20cb9c7d189870f31ed7e54320a643f18fd53ea1", + "kind": "references", + "relationshipSite": { + "endByte": 46120, + "endColumn": 44, + "endLine": 861, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 46113, + "startColumn": 37, + "startLine": 861 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 46113, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6869, + "targetFieldStartUtf16": 6842, + "tokenEndUtf16": 46120, + "tokenLine": 861, + "tokenStartUtf16": 46113, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 46190, + "fieldId": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98", + "fieldName": "_ipAddrMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:716bcc9e22f9a120ab69a873f456398a8cfa785376cf43836e9e3a2042a0c41c", + "kind": "references", + "relationshipSite": { + "endByte": 46190, + "endColumn": 38, + "endLine": 863, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 46180, + "startColumn": 28, + "startLine": 863 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 46180, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8015, + "targetFieldStartUtf16": 7975, + "tokenEndUtf16": 46190, + "tokenLine": 863, + "tokenStartUtf16": 46180, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 46763, + "fieldId": "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca", + "fieldName": "_inlineLoadBalancerNicMapDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a6d0bae77b13549a3a266b6e7a43027e8328354b0a0b45655b3545809ba2aaf8", + "kind": "references", + "relationshipSite": { + "endByte": 46763, + "endColumn": 48, + "endLine": 870, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 46735, + "startColumn": 20, + "startLine": 870 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 46735, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6837, + "targetFieldStartUtf16": 6768, + "tokenEndUtf16": 46763, + "tokenLine": 870, + "tokenStartUtf16": 46735, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 46856, + "fieldId": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f", + "fieldName": "_nicDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b185a894f5a718bedfc83f898c09ea745d830a92184448c8af1726e6c9cd3d51", + "kind": "references", + "relationshipSite": { + "endByte": 46856, + "endColumn": 27, + "endLine": 873, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 46849, + "startColumn": 20, + "startLine": 873 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 46849, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6869, + "targetFieldStartUtf16": 6842, + "tokenEndUtf16": 46856, + "tokenLine": 873, + "tokenStartUtf16": 46849, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 46923, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:47e1eb5f9d74d8491ec2c0440d9344dceb839af29dee878e286f8ab8238b422d", + "kind": "references", + "relationshipSite": { + "endByte": 46923, + "endColumn": 28, + "endLine": 875, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 46915, + "startColumn": 20, + "startLine": 875 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 46915, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 46923, + "tokenLine": 875, + "tokenStartUtf16": 46915, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 47101, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b861ddf38fea578f18784a5f16bf9b2601a769ba603c7045134aa775eba5bd4d", + "kind": "references", + "relationshipSite": { + "endByte": 47101, + "endColumn": 24, + "endLine": 879, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 47093, + "startColumn": 16, + "startLine": 879 + }, + "source": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47342, + "methodId": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "methodName": "getLoadBalancingIpNic", + "methodStartUtf16": 42332, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 47093, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 47101, + "tokenLine": 879, + "tokenStartUtf16": 47093, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 47464, + "fieldId": "sha256:520753938735383092187588cae8785e8bcc6393b22eb53eafb902fa7384a092", + "fieldName": "_networkOfferingDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a7d41f1fc879e557489eaeae894a98d285bfcc60cf88c21a7d40dd6b8f2263a5", + "kind": "references", + "relationshipSite": { + "endByte": 47464, + "endColumn": 61, + "endLine": 890, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 47445, + "startColumn": 42, + "startLine": 890 + }, + "source": "sha256:752125af788c4b388a7727ebb0bd59d8ad956b6ff850d7f9200ef9f8049b99ae", + "target": "sha256:520753938735383092187588cae8785e8bcc6393b22eb53eafb902fa7384a092" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47683, + "methodId": "sha256:752125af788c4b388a7727ebb0bd59d8ad956b6ff850d7f9200ef9f8049b99ae", + "methodName": "isNccServiceProvider", + "methodStartUtf16": 47348, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 47445, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7089, + "targetFieldStartUtf16": 7038, + "tokenEndUtf16": 47464, + "tokenLine": 890, + "tokenStartUtf16": 47445, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 47838, + "fieldId": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "fieldName": "_hostDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:dff45f7f761c475d9a9faa1a746cd03f784a7a4692c667d197c9f283acdfa325", + "kind": "references", + "relationshipSite": { + "endByte": 47838, + "endColumn": 23, + "endLine": 901, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 47830, + "startColumn": 15, + "startLine": 901 + }, + "source": "sha256:01ab66a3921360bcb5029e7eef6478d533b6bd540cdf3d673871cfcaf9112617", + "target": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 47932, + "methodId": "sha256:01ab66a3921360bcb5029e7eef6478d533b6bd540cdf3d673871cfcaf9112617", + "methodName": "getNetScalerControlCenterForNetwork", + "methodStartUtf16": 47689, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 47830, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6624, + "targetFieldStartUtf16": 6595, + "tokenEndUtf16": 47838, + "tokenLine": 901, + "tokenStartUtf16": 47830, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 48228, + "fieldId": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341", + "fieldName": "_dcDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:7516ff7c15cc0fa5c34aa79f9aac8a8a95290d36f7f9a95d7856f8bcae775468", + "kind": "references", + "relationshipSite": { + "endByte": 48228, + "endColumn": 34, + "endLine": 908, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 48222, + "startColumn": 28, + "startLine": 908 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 48222, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6662, + "targetFieldStartUtf16": 6629, + "tokenEndUtf16": 48228, + "tokenLine": 908, + "tokenStartUtf16": 48222, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 48706, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:666048f34fa6b08152b720cc343630ac8207ca8fcbddd341b5c4df93a5edeb36", + "kind": "references", + "relationshipSite": { + "endByte": 48706, + "endColumn": 24, + "endLine": 921, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 48698, + "startColumn": 16, + "startLine": 921 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 48698, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 48706, + "tokenLine": 921, + "tokenStartUtf16": 48698, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 48951, + "fieldId": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "fieldName": "_hostDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:0e49a35eaa7060448e703ec32f812f2eea1d75af55574ecc446c3f54f1cc819d", + "kind": "references", + "relationshipSite": { + "endByte": 48951, + "endColumn": 47, + "endLine": 924, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 48943, + "startColumn": 39, + "startLine": 924 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 48943, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6624, + "targetFieldStartUtf16": 6595, + "tokenEndUtf16": 48951, + "tokenLine": 924, + "tokenStartUtf16": 48943, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 49071, + "fieldId": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "fieldName": "_networkMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:24719aa555fb8849ebd6b059db307e83c6aef953c097015b8d034df780f15b31", + "kind": "references", + "relationshipSite": { + "endByte": 49071, + "endColumn": 58, + "endLine": 930, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 49060, + "startColumn": 47, + "startLine": 930 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 49060, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6763, + "targetFieldStartUtf16": 6711, + "tokenEndUtf16": 49071, + "tokenLine": 930, + "tokenStartUtf16": 49060, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 49184, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:f555af587bf12b289f4f88d9859b66653a61cec730981464fc0c7b1256935f9e", + "kind": "references", + "relationshipSite": { + "endByte": 49184, + "endColumn": 20, + "endLine": 933, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 49176, + "startColumn": 12, + "startLine": 933 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 49176, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 49184, + "tokenLine": 933, + "tokenStartUtf16": 49176, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 50127, + "fieldId": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c", + "fieldName": "_networkModel", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:2f14d557d255e9c6483ee771a474499dbfd26ff775f1672770aab7523463fe4c", + "kind": "references", + "relationshipSite": { + "endByte": 50127, + "endColumn": 40, + "endLine": 951, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 50114, + "startColumn": 27, + "startLine": 951 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 50114, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6706, + "targetFieldStartUtf16": 6667, + "tokenEndUtf16": 50127, + "tokenLine": 951, + "tokenStartUtf16": 50114, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 50292, + "fieldId": "sha256:8b25366aa5124c41e4745309379a581a56cf797a917482744dca32fca1d03ecb", + "fieldName": "_vlanDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:5433c5eaff33e61e7e591a06a89bebebeaa3d36b8bf47e3af1cc90e49a3a925d", + "kind": "references", + "relationshipSite": { + "endByte": 50292, + "endColumn": 44, + "endLine": 953, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 50284, + "startColumn": 36, + "startLine": 953 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:8b25366aa5124c41e4745309379a581a56cf797a917482744dca32fca1d03ecb" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 50284, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7033, + "targetFieldStartUtf16": 7004, + "tokenEndUtf16": 50292, + "tokenLine": 953, + "tokenStartUtf16": 50284, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 50707, + "fieldId": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c", + "fieldName": "_networkModel", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:0ac4c9ffd3a430311498ce22f51d011d32137470e39a7c8b69a4568642971c9e", + "kind": "references", + "relationshipSite": { + "endByte": 50707, + "endColumn": 41, + "endLine": 962, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 50694, + "startColumn": 28, + "startLine": 962 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 50694, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6706, + "targetFieldStartUtf16": 6667, + "tokenEndUtf16": 50707, + "tokenLine": 962, + "tokenStartUtf16": 50694, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 51416, + "fieldId": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "fieldName": "_networkMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:de9a6ceeec51f2943d4f1af06658602fe8f2de62bb5043381fdacc61137d6d6c", + "kind": "references", + "relationshipSite": { + "endByte": 51416, + "endColumn": 44, + "endLine": 975, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 51405, + "startColumn": 33, + "startLine": 975 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 51405, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6763, + "targetFieldStartUtf16": 6711, + "tokenEndUtf16": 51416, + "tokenLine": 975, + "tokenStartUtf16": 51405, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 52852, + "fieldId": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1", + "fieldName": "_agentMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c4a80907cd525631a0817c7bfcc62cd2df2bf4e1136ad06fadf2a724cebaa2b2", + "kind": "references", + "relationshipSite": { + "endByte": 52852, + "endColumn": 41, + "endLine": 997, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 52843, + "startColumn": 32, + "startLine": 997 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 52843, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6909, + "targetFieldStartUtf16": 6874, + "tokenEndUtf16": 52852, + "tokenLine": 997, + "tokenStartUtf16": 52843, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 53256, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:349539bc4452fe9fee5316917fab2101fd0fa8787380d5a00f57775902071240", + "kind": "references", + "relationshipSite": { + "endByte": 53256, + "endColumn": 28, + "endLine": 1001, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 53248, + "startColumn": 20, + "startLine": 1001 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 53248, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 53256, + "tokenLine": 1001, + "tokenStartUtf16": 53248, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 53516, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:7a8f97e2889752416e9efaa4d16e292153b66da92cd3efeec99cb54b09014a01", + "kind": "references", + "relationshipSite": { + "endByte": 53516, + "endColumn": 24, + "endLine": 1007, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 53508, + "startColumn": 16, + "startLine": 1007 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 53508, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 53516, + "tokenLine": 1007, + "tokenStartUtf16": 53508, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 54348, + "fieldId": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c", + "fieldName": "_networkModel", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e1f5ffa042bce35a643677ef0de87ebe2e53e254f6355821f99717e8b3e6e5ab", + "kind": "references", + "relationshipSite": { + "endByte": 54348, + "endColumn": 51, + "endLine": 1021, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 54335, + "startColumn": 38, + "startLine": 1021 + }, + "source": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "target": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 54708, + "methodId": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "methodName": "applyLoadBalancerRules", + "methodStartUtf16": 47938, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 54335, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6706, + "targetFieldStartUtf16": 6667, + "tokenEndUtf16": 54348, + "tokenLine": 1021, + "tokenStartUtf16": 54335, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 54974, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:8cb1ea1c5390f54d57fea6d0f8c51c30a836469642b8d78d46f2d4c5806d1beb", + "kind": "references", + "relationshipSite": { + "endByte": 54974, + "endColumn": 20, + "endLine": 1034, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 54966, + "startColumn": 12, + "startLine": 1034 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 54966, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 54974, + "tokenLine": 1034, + "tokenStartUtf16": 54966, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 55169, + "fieldId": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341", + "fieldName": "_dcDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c00b057138ec2eb386d0d97f9e8be77c989c7399864d8c98dc07816248eb2e33", + "kind": "references", + "relationshipSite": { + "endByte": 55169, + "endColumn": 34, + "endLine": 1039, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 55163, + "startColumn": 28, + "startLine": 1039 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 55163, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6662, + "targetFieldStartUtf16": 6629, + "tokenEndUtf16": 55169, + "tokenLine": 1039, + "tokenStartUtf16": 55163, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 55871, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:2ffd05f853c89f927c14890d1c961fde3f7966ef5eee9a013770a6c78d083400", + "kind": "references", + "relationshipSite": { + "endByte": 55871, + "endColumn": 28, + "endLine": 1051, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 55863, + "startColumn": 20, + "startLine": 1051 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 55863, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 55871, + "tokenLine": 1051, + "tokenStartUtf16": 55863, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 56081, + "fieldId": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "fieldName": "_hostDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:dbcc2c3b565f28022b96967f5a7dfee67d6a1e064688ca5cdef6f74701910c14", + "kind": "references", + "relationshipSite": { + "endByte": 56081, + "endColumn": 43, + "endLine": 1055, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 56073, + "startColumn": 35, + "startLine": 1055 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 56073, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6624, + "targetFieldStartUtf16": 6595, + "tokenEndUtf16": 56081, + "tokenLine": 1055, + "tokenStartUtf16": 56073, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 56136, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:6c1ef9afc25f1e4bdc67ee28113557a88d10211bd2688db11b4fea6efa06a243", + "kind": "references", + "relationshipSite": { + "endByte": 56136, + "endColumn": 20, + "endLine": 1056, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 56128, + "startColumn": 12, + "startLine": 1056 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 56128, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 56136, + "tokenLine": 1056, + "tokenStartUtf16": 56128, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 56506, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:700b8d9127365ff8b0976fe04125903c1a0b891804507d9635687b5e3b45f4aa", + "kind": "references", + "relationshipSite": { + "endByte": 56506, + "endColumn": 24, + "endLine": 1061, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 56498, + "startColumn": 16, + "startLine": 1061 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 56498, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 56506, + "tokenLine": 1061, + "tokenStartUtf16": 56498, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 56837, + "fieldId": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "fieldName": "_hostDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:109d1cdc9833b020de676228d8d86f64a710eeaae126eba735a70407faa9bfb2", + "kind": "references", + "relationshipSite": { + "endByte": 56837, + "endColumn": 43, + "endLine": 1066, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 56829, + "startColumn": 35, + "startLine": 1066 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 56829, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6624, + "targetFieldStartUtf16": 6595, + "tokenEndUtf16": 56837, + "tokenLine": 1066, + "tokenStartUtf16": 56829, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 57366, + "fieldId": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c", + "fieldName": "_networkModel", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:78744f4ab46a676ec6e9c68c31b53ac52289b3c9628f018809494a34dcc5c0d4", + "kind": "references", + "relationshipSite": { + "endByte": 57366, + "endColumn": 43, + "endLine": 1074, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 57353, + "startColumn": 30, + "startLine": 1074 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 57353, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6706, + "targetFieldStartUtf16": 6667, + "tokenEndUtf16": 57366, + "tokenLine": 1074, + "tokenStartUtf16": 57353, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 57798, + "fieldId": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98", + "fieldName": "_ipAddrMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:5e8f114e2d2e38fa9a097dcab8f2ed00bf220cf443d3e653f7da91829aeda389", + "kind": "references", + "relationshipSite": { + "endByte": 57798, + "endColumn": 31, + "endLine": 1084, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 57788, + "startColumn": 21, + "startLine": 1084 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 57788, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8015, + "targetFieldStartUtf16": 7975, + "tokenEndUtf16": 57798, + "tokenLine": 1084, + "tokenStartUtf16": 57788, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 58029, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ffad488c7bffded4c86134a3c0f6ccbda28bba036d532f90f2dfd8818c4fc365", + "kind": "references", + "relationshipSite": { + "endByte": 58029, + "endColumn": 24, + "endLine": 1087, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 58021, + "startColumn": 16, + "startLine": 1087 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 58021, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 58029, + "tokenLine": 1087, + "tokenStartUtf16": 58021, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 58356, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:718bb8813f064ca7d3d78bec5d9726f738cea2f71f046550072877714ba711e7", + "kind": "references", + "relationshipSite": { + "endByte": 58356, + "endColumn": 24, + "endLine": 1094, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 58348, + "startColumn": 16, + "startLine": 1094 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 58348, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 58356, + "tokenLine": 1094, + "tokenStartUtf16": 58348, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 58824, + "fieldId": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "fieldName": "_networkMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:01e898483fc82bd6ac2bee0f480af1e9ef35dd262c5d292867300dc322dcf3c4", + "kind": "references", + "relationshipSite": { + "endByte": 58824, + "endColumn": 36, + "endLine": 1102, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 58813, + "startColumn": 25, + "startLine": 1102 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 58813, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6763, + "targetFieldStartUtf16": 6711, + "tokenEndUtf16": 58824, + "tokenLine": 1102, + "tokenStartUtf16": 58813, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 59188, + "fieldId": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1", + "fieldName": "_agentMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:20fdbc449d09658eeee446e3dce60cef690c70358de33d0832be99d95fd34cec", + "kind": "references", + "relationshipSite": { + "endByte": 59188, + "endColumn": 33, + "endLine": 1108, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 59179, + "startColumn": 24, + "startLine": 1108 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 59179, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6909, + "targetFieldStartUtf16": 6874, + "tokenEndUtf16": 59188, + "tokenLine": 1108, + "tokenStartUtf16": 59179, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 59707, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:17abfef67b4c392fe782e962e7d3f74bfe689fa9820de049931708ac74438f01", + "kind": "references", + "relationshipSite": { + "endByte": 59707, + "endColumn": 20, + "endLine": 1115, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 59699, + "startColumn": 12, + "startLine": 1115 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 59699, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 59707, + "tokenLine": 1115, + "tokenStartUtf16": 59699, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 59944, + "fieldId": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "fieldName": "_networkMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a2d8dd1a2d3b4c05c993cb5fe0ac9640b01d4097760ec81fa7f3626175d5fa44", + "kind": "references", + "relationshipSite": { + "endByte": 59944, + "endColumn": 23, + "endLine": 1121, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 59933, + "startColumn": 12, + "startLine": 1121 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 59933, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6763, + "targetFieldStartUtf16": 6711, + "tokenEndUtf16": 59944, + "tokenLine": 1121, + "tokenStartUtf16": 59933, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 60157, + "fieldId": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f", + "fieldName": "_nicDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:502588be019adfb162e2edcd0e66cf07d9eef2076235c8825ebdabc13a148115", + "kind": "references", + "relationshipSite": { + "endByte": 60157, + "endColumn": 19, + "endLine": 1125, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 60150, + "startColumn": 12, + "startLine": 1125 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 60150, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6869, + "targetFieldStartUtf16": 6842, + "tokenEndUtf16": 60157, + "tokenLine": 1125, + "tokenStartUtf16": 60150, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 60504, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:4b3e2660a3591a6a3bae99628d24851124ed00051f97968900232269dc6d6eb5", + "kind": "references", + "relationshipSite": { + "endByte": 60504, + "endColumn": 24, + "endLine": 1131, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 60496, + "startColumn": 16, + "startLine": 1131 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 60496, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 60504, + "tokenLine": 1131, + "tokenStartUtf16": 60496, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 60562, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ff19140ab181e79f361508ba17e250894f316c42f40648488c70171d6a88be03", + "kind": "references", + "relationshipSite": { + "endByte": 60562, + "endColumn": 20, + "endLine": 1135, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 60554, + "startColumn": 12, + "startLine": 1135 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 60554, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 60562, + "tokenLine": 1135, + "tokenStartUtf16": 60554, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 60624, + "fieldId": "sha256:6ae2a588540f6200447a1624efff22acb3ebcefb8dee155a2d4d33b258679711", + "fieldName": "_accountDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:72d3d923ca75d899400385bfa98efc1f4427bb3db97bcdc6d073e1d438c6bf70", + "kind": "references", + "relationshipSite": { + "endByte": 60624, + "endColumn": 41, + "endLine": 1136, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 60613, + "startColumn": 30, + "startLine": 1136 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:6ae2a588540f6200447a1624efff22acb3ebcefb8dee155a2d4d33b258679711" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 60613, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7129, + "targetFieldStartUtf16": 7094, + "tokenEndUtf16": 60624, + "tokenLine": 1136, + "tokenStartUtf16": 60613, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 60762, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:33505958ce7c9b95768983ff00866d6d21c579c096e1d09bb377249c1d42247c", + "kind": "references", + "relationshipSite": { + "endByte": 60762, + "endColumn": 20, + "endLine": 1138, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 60754, + "startColumn": 12, + "startLine": 1138 + }, + "source": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 60998, + "methodId": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "methodName": "manageGuestNetworkWithExternalLoadBalancer", + "methodStartUtf16": 54714, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 60754, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 60762, + "tokenLine": 1138, + "tokenStartUtf16": 60754, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 61181, + "fieldId": "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c", + "fieldName": "_defaultLbCapacity", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:cd6e853af3f6993f74f3f69334e89d83b5edb4d6fb0ccda8894c47806e3fbcf5", + "kind": "references", + "relationshipSite": { + "endByte": 61181, + "endColumn": 26, + "endLine": 1148, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 61163, + "startColumn": 8, + "startLine": 1148 + }, + "source": "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28", + "target": "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 61398, + "methodId": "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28", + "methodName": "configure", + "methodStartUtf16": 61004, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 61163, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8380, + "targetFieldStartUtf16": 8348, + "tokenEndUtf16": 61181, + "tokenLine": 1148, + "tokenStartUtf16": 61163, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 61216, + "fieldId": "sha256:1ebcef1c61713cb6f8314fa6f86cf03965adb8269643fe46abf8dba3c4386166", + "fieldName": "_configDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e5491539044b832925839b6d4303a96888f1d93d2b15ebf842bf7b262631c8e7", + "kind": "references", + "relationshipSite": { + "endByte": 61216, + "endColumn": 61, + "endLine": 1148, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 61206, + "startColumn": 51, + "startLine": 1148 + }, + "source": "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28", + "target": "sha256:1ebcef1c61713cb6f8314fa6f86cf03965adb8269643fe46abf8dba3c4386166" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 61398, + "methodId": "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28", + "methodName": "configure", + "methodStartUtf16": 61004, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 61206, + "status": "bound-direct-field", + "targetFieldEndUtf16": 7607, + "targetFieldStartUtf16": 7567, + "tokenEndUtf16": 61216, + "tokenLine": 1148, + "tokenStartUtf16": 61206, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 61302, + "fieldId": "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073", + "fieldName": "_resourceMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:8484c59dd791fd5e09ebaa1033ec7cd654561ee2d78694f45514dcb5c576e88d", + "kind": "references", + "relationshipSite": { + "endByte": 61302, + "endColumn": 20, + "endLine": 1149, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 61290, + "startColumn": 8, + "startLine": 1149 + }, + "source": "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28", + "target": "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 61398, + "methodId": "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28", + "methodName": "configure", + "methodStartUtf16": 61004, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 61290, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6955, + "targetFieldStartUtf16": 6914, + "tokenEndUtf16": 61302, + "tokenLine": 1149, + "tokenStartUtf16": 61290, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 62766, + "fieldId": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "fieldName": "_networkMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:5512a7e945021ae28bff25d44d3c06050f3d9e80f4a764783e50909a12685638", + "kind": "references", + "relationshipSite": { + "endByte": 62766, + "endColumn": 46, + "endLine": 1193, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 62755, + "startColumn": 35, + "startLine": 1193 + }, + "source": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "target": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 63704, + "methodId": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "methodName": "getIpDeployerForInlineMode", + "methodStartUtf16": 62575, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 62755, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6763, + "targetFieldStartUtf16": 6711, + "tokenEndUtf16": 62766, + "tokenLine": 1193, + "tokenStartUtf16": 62755, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 62920, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c41100b9bd18a91ec6ccb2d6ccd4411cbb79d86389322af9c602da4f41208acd", + "kind": "references", + "relationshipSite": { + "endByte": 62920, + "endColumn": 20, + "endLine": 1196, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 62912, + "startColumn": 12, + "startLine": 1196 + }, + "source": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 63704, + "methodId": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "methodName": "getIpDeployerForInlineMode", + "methodStartUtf16": 62575, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 62912, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 62920, + "tokenLine": 1196, + "tokenStartUtf16": 62912, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 63084, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ab2ea5f775be74af294e084ad7903da5d519f4e551665bb7707d54859bdd32ae", + "kind": "references", + "relationshipSite": { + "endByte": 63084, + "endColumn": 20, + "endLine": 1200, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 63076, + "startColumn": 12, + "startLine": 1200 + }, + "source": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 63704, + "methodId": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "methodName": "getIpDeployerForInlineMode", + "methodStartUtf16": 62575, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 63076, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 63084, + "tokenLine": 1200, + "tokenStartUtf16": 63076, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 63257, + "fieldId": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c", + "fieldName": "_networkModel", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:cce13b6ee4d7f24aa99d7590f0c4bf175ae2a97d851410a8766c6a0ddc7910dc", + "kind": "references", + "relationshipSite": { + "endByte": 63257, + "endColumn": 46, + "endLine": 1204, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 63244, + "startColumn": 33, + "startLine": 1204 + }, + "source": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "target": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 63704, + "methodId": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "methodName": "getIpDeployerForInlineMode", + "methodStartUtf16": 62575, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 63244, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6706, + "targetFieldStartUtf16": 6667, + "tokenEndUtf16": 63257, + "tokenLine": 1204, + "tokenStartUtf16": 63244, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 63386, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e8c3dee0afb11367a1c8cc7181a54e147624f141ff1a890bb4607db165b843b7", + "kind": "references", + "relationshipSite": { + "endByte": 63386, + "endColumn": 20, + "endLine": 1206, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 63378, + "startColumn": 12, + "startLine": 1206 + }, + "source": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 63704, + "methodId": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "methodName": "getIpDeployerForInlineMode", + "methodStartUtf16": 62575, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 63378, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 63386, + "tokenLine": 1206, + "tokenStartUtf16": 63378, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 63549, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:0b8dc7fadbd9e4025ab19b0774ba9934c3b10807f3ae1b6c6ce637278196d9e7", + "kind": "references", + "relationshipSite": { + "endByte": 63549, + "endColumn": 16, + "endLine": 1209, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 63541, + "startColumn": 8, + "startLine": 1209 + }, + "source": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 63704, + "methodId": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "methodName": "getIpDeployerForInlineMode", + "methodStartUtf16": 62575, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 63541, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 63549, + "tokenLine": 1209, + "tokenStartUtf16": 63541, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 64009, + "fieldId": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341", + "fieldName": "_dcDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:80ebe0c5f6f32f1f32c218e4371d11f7b1f7d6f6950a9c7f244cd62d45a7dbff", + "kind": "references", + "relationshipSite": { + "endByte": 64009, + "endColumn": 34, + "endLine": 1218, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 64003, + "startColumn": 28, + "startLine": 1218 + }, + "source": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "target": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68113, + "methodId": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "methodName": "getLBHealthChecks", + "methodStartUtf16": 63710, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 64003, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6662, + "targetFieldStartUtf16": 6629, + "tokenEndUtf16": 64009, + "tokenLine": 1218, + "tokenStartUtf16": 64003, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 64487, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:3f8014cf642d74c8f73a7ad8045f1f019d7c02c4c92e57ec71fd02ebd24ca733", + "kind": "references", + "relationshipSite": { + "endByte": 64487, + "endColumn": 24, + "endLine": 1231, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 64479, + "startColumn": 16, + "startLine": 1231 + }, + "source": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68113, + "methodId": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "methodName": "getLBHealthChecks", + "methodStartUtf16": 63710, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 64479, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 64487, + "tokenLine": 1231, + "tokenStartUtf16": 64479, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 64732, + "fieldId": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "fieldName": "_hostDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:2cdd2104affa8c60ae86775d0eb91f33853a6dc122d78cc91f13c817aebb0fc2", + "kind": "references", + "relationshipSite": { + "endByte": 64732, + "endColumn": 47, + "endLine": 1234, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 64724, + "startColumn": 39, + "startLine": 1234 + }, + "source": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "target": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68113, + "methodId": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "methodName": "getLBHealthChecks", + "methodStartUtf16": 63710, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 64724, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6624, + "targetFieldStartUtf16": 6595, + "tokenEndUtf16": 64732, + "tokenLine": 1234, + "tokenStartUtf16": 64724, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 64850, + "fieldId": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "fieldName": "_networkMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:2af44ecd567ce4e4d498ac2d56e0cc9ee0cfdbd31efabf28604504a9fc140597", + "kind": "references", + "relationshipSite": { + "endByte": 64850, + "endColumn": 58, + "endLine": 1238, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 64839, + "startColumn": 47, + "startLine": 1238 + }, + "source": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "target": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68113, + "methodId": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "methodName": "getLBHealthChecks", + "methodStartUtf16": 63710, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 64839, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6763, + "targetFieldStartUtf16": 6711, + "tokenEndUtf16": 64850, + "tokenLine": 1238, + "tokenStartUtf16": 64839, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 64963, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b42151b91f06b090d5e5f343d946dc22a586fa222f3502edb315ee0e0b8343c7", + "kind": "references", + "relationshipSite": { + "endByte": 64963, + "endColumn": 20, + "endLine": 1241, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 64955, + "startColumn": 12, + "startLine": 1241 + }, + "source": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68113, + "methodId": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "methodName": "getLBHealthChecks", + "methodStartUtf16": 63710, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 64955, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 64963, + "tokenLine": 1241, + "tokenStartUtf16": 64955, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 65908, + "fieldId": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c", + "fieldName": "_networkModel", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:0f614927e64e8518fe5f1d8854655bda773e826b252aedbf59b5ae2af11602e5", + "kind": "references", + "relationshipSite": { + "endByte": 65908, + "endColumn": 47, + "endLine": 1258, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 65895, + "startColumn": 34, + "startLine": 1258 + }, + "source": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "target": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68113, + "methodId": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "methodName": "getLBHealthChecks", + "methodStartUtf16": 63710, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 65895, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6706, + "targetFieldStartUtf16": 6667, + "tokenEndUtf16": 65908, + "tokenLine": 1258, + "tokenStartUtf16": 65895, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 66643, + "fieldId": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "fieldName": "_networkMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:34f99cc2ed72d50bb7d8782ae1b2736b1d3f7e5769ba91b423b086cd71513142", + "kind": "references", + "relationshipSite": { + "endByte": 66643, + "endColumn": 44, + "endLine": 1272, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 66632, + "startColumn": 33, + "startLine": 1272 + }, + "source": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "target": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68113, + "methodId": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "methodName": "getLBHealthChecks", + "methodStartUtf16": 63710, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 66632, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6763, + "targetFieldStartUtf16": 6711, + "tokenEndUtf16": 66643, + "tokenLine": 1272, + "tokenStartUtf16": 66632, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 67758, + "fieldId": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1", + "fieldName": "_agentMgr", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:0873ab75f36e2909c468f7b9572a00c3e05500b8c7f7b5829157c0032a3a4f18", + "kind": "references", + "relationshipSite": { + "endByte": 67758, + "endColumn": 88, + "endLine": 1288, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 67749, + "startColumn": 79, + "startLine": 1288 + }, + "source": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "target": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68113, + "methodId": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "methodName": "getLBHealthChecks", + "methodStartUtf16": 63710, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 67749, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6909, + "targetFieldStartUtf16": 6874, + "tokenEndUtf16": 67758, + "tokenLine": 1288, + "tokenStartUtf16": 67749, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 67999, + "fieldId": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "fieldName": "s_logger", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:60db0f5eb400a90517b3228bc678c216e0e91a4233034b99d35ff047bc7c6b12", + "kind": "references", + "relationshipSite": { + "endByte": 67999, + "endColumn": 20, + "endLine": 1293, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 67991, + "startColumn": 12, + "startLine": 1293 + }, + "source": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "target": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68113, + "methodId": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "methodName": "getLBHealthChecks", + "methodStartUtf16": 63710, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 67991, + "status": "bound-direct-field", + "targetFieldEndUtf16": 8503, + "targetFieldStartUtf16": 8385, + "tokenEndUtf16": 67999, + "tokenLine": 1293, + "tokenStartUtf16": 67991, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 68208, + "fieldId": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f", + "fieldName": "_nicDao", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a839d95545d9c0b9315261157fb11a2251aa23ca3a93314c9f979d4e3d593d7a", + "kind": "references", + "relationshipSite": { + "endByte": 68208, + "endColumn": 38, + "endLine": 1300, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "startByte": 68201, + "startColumn": 31, + "startLine": 1300 + }, + "source": "sha256:0f0ac8b8d8171327954faed1126533db91c1072651d20186db9b60887a4beab3", + "target": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 68717, + "methodId": "sha256:0f0ac8b8d8171327954faed1126533db91c1072651d20186db9b60887a4beab3", + "methodName": "getPlaceholderNic", + "methodStartUtf16": 68119, + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "startByte": 68201, + "status": "bound-direct-field", + "targetFieldEndUtf16": 6869, + "targetFieldStartUtf16": 6842, + "tokenEndUtf16": 68208, + "tokenLine": 1300, + "tokenStartUtf16": 68201, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1498, + "fieldId": "sha256:800efd6d52e2127c65ff7f020dabc4e9e0dd3a4058cb35e9363cfb925d1ac80b", + "fieldName": "isoData", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:4f14707b676bdda8b588b4ef815535da632fba4b2371ac11fa064b07c97da82a", + "kind": "references", + "relationshipSite": { + "endByte": 1498, + "endColumn": 22, + "endLine": 46, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "startByte": 1491, + "startColumn": 15, + "startLine": 46 + }, + "source": "sha256:7fa67675b5f04e758a02243355d2fbb68eb9d9c685cdb7b2b1c192d0ea5bd3d1", + "target": "sha256:800efd6d52e2127c65ff7f020dabc4e9e0dd3a4058cb35e9363cfb925d1ac80b" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1505, + "methodId": "sha256:7fa67675b5f04e758a02243355d2fbb68eb9d9c685cdb7b2b1c192d0ea5bd3d1", + "methodName": "getIsoData", + "methodStartUtf16": 1447, + "sampleId": 8537138, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "startByte": 1491, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1008, + "targetFieldStartUtf16": 946, + "tokenEndUtf16": 1498, + "tokenLine": 46, + "tokenStartUtf16": 1491, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1560, + "fieldId": "sha256:4d475e4306639a2f27d07d42d806992f7f56e980fb78eb2cd6e655fb84017f1d", + "fieldName": "create", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:28f6d87ae9c0ca3141191e56175b60796427a7b08920bc3f9e3e48cc90c01570", + "kind": "references", + "relationshipSite": { + "endByte": 1560, + "endColumn": 21, + "endLine": 50, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "startByte": 1554, + "startColumn": 15, + "startLine": 50 + }, + "source": "sha256:d999831bb8489f58708b7121238ed367baa1a1b1bde30984926039f9a9951052", + "target": "sha256:4d475e4306639a2f27d07d42d806992f7f56e980fb78eb2cd6e655fb84017f1d" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1567, + "methodId": "sha256:d999831bb8489f58708b7121238ed367baa1a1b1bde30984926039f9a9951052", + "methodName": "isCreate", + "methodStartUtf16": 1511, + "sampleId": 8537138, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "startByte": 1554, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1073, + "targetFieldStartUtf16": 1042, + "tokenEndUtf16": 1560, + "tokenLine": 50, + "tokenStartUtf16": 1554, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1633, + "fieldId": "sha256:14456682777a4ff64721ed0a34adc9e91a1484ba7594d74ba3931b23d1b058dc", + "fieldName": "destStore", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:2ddbc00b70b579b5fbdb787f2a83da313156b086470e2da275c64c955f7ba900", + "kind": "references", + "relationshipSite": { + "endByte": 1633, + "endColumn": 24, + "endLine": 54, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "startByte": 1624, + "startColumn": 15, + "startLine": 54 + }, + "source": "sha256:4a8d6dc8071557345615646d5628ca493b826d606fbea4a8a4906bbafc103530", + "target": "sha256:14456682777a4ff64721ed0a34adc9e91a1484ba7594d74ba3931b23d1b058dc" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1640, + "methodId": "sha256:4a8d6dc8071557345615646d5628ca493b826d606fbea4a8a4906bbafc103530", + "methodName": "getDestStore", + "methodStartUtf16": 1573, + "sampleId": 8537138, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "startByte": 1624, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1108, + "targetFieldStartUtf16": 1078, + "tokenEndUtf16": 1633, + "tokenLine": 54, + "tokenStartUtf16": 1624, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1697, + "fieldId": "sha256:c976047893b66f10cfc82a8fc1771d8a7763cedf7b044323107b27a4202d3817", + "fieldName": "isoFile", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:5b27b99ec5669e3d0ebe323d8489171f35dcae528cf34aa25450e8f48bb9f15e", + "kind": "references", + "relationshipSite": { + "endByte": 1697, + "endColumn": 22, + "endLine": 58, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "startByte": 1690, + "startColumn": 15, + "startLine": 58 + }, + "source": "sha256:4353f0a8ccdddeb491539282f4ccf823780cea0bd83399b0c460602c270f9d9a", + "target": "sha256:c976047893b66f10cfc82a8fc1771d8a7763cedf7b044323107b27a4202d3817" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1704, + "methodId": "sha256:4353f0a8ccdddeb491539282f4ccf823780cea0bd83399b0c460602c270f9d9a", + "methodName": "getIsoFile", + "methodStartUtf16": 1646, + "sampleId": 8537138, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "startByte": 1690, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1037, + "targetFieldStartUtf16": 1014, + "tokenEndUtf16": 1697, + "tokenLine": 58, + "tokenStartUtf16": 1690, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 3237, + "fieldId": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "fieldName": "_host", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c000f481eb3798b409b72980a1db8112a6cbae3e31e43470a1d4804e026320a3", + "kind": "references", + "relationshipSite": { + "endByte": 3237, + "endColumn": 51, + "endLine": 75, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 3232, + "startColumn": 46, + "startLine": 75 + }, + "source": "sha256:9b1b0b79581c7123928906a67eb2fad96fff3c2c2d4cb778e3d52d9d95a686ff", + "target": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 3966, + "methodId": "sha256:9b1b0b79581c7123928906a67eb2fad96fff3c2c2d4cb778e3d52d9d95a686ff", + "methodName": "createMethod", + "methodStartUtf16": 3056, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 3232, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2934, + "targetFieldStartUtf16": 2907, + "tokenEndUtf16": 3237, + "tokenLine": 75, + "tokenStartUtf16": 3232, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 3342, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:3f64e3748f29a192be7dd3870963c588db1423d3e2321f2db29dee938103f34b", + "kind": "references", + "relationshipSite": { + "endByte": 3342, + "endColumn": 20, + "endLine": 77, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 3334, + "startColumn": 12, + "startLine": 77 + }, + "source": "sha256:9b1b0b79581c7123928906a67eb2fad96fff3c2c2d4cb778e3d52d9d95a686ff", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 3966, + "methodId": "sha256:9b1b0b79581c7123928906a67eb2fad96fff3c2c2d4cb778e3d52d9d95a686ff", + "methodName": "createMethod", + "methodStartUtf16": 3056, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 3334, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 3342, + "tokenLine": 77, + "tokenStartUtf16": 3334, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12319, + "fieldId": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "fieldName": "_host", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:76fe9a7b9b20b34c6773761aa2ff69223468835fa2763b89cf4fc5781262f429", + "kind": "references", + "relationshipSite": { + "endByte": 12319, + "endColumn": 17, + "endLine": 324, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 12314, + "startColumn": 12, + "startLine": 324 + }, + "source": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "target": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13552, + "methodId": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "methodName": "executeUpdateObject", + "methodStartUtf16": 12164, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 12314, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2934, + "targetFieldStartUtf16": 2907, + "tokenEndUtf16": 12319, + "tokenLine": 324, + "tokenStartUtf16": 12314, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12336, + "fieldId": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "fieldName": "_host", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:da12b9d1578b399b787c9653662f9d9dd177b637e511ea39feff41b287117ce3", + "kind": "references", + "relationshipSite": { + "endByte": 12336, + "endColumn": 34, + "endLine": 324, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 12331, + "startColumn": 29, + "startLine": 324 + }, + "source": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "target": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13552, + "methodId": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "methodName": "executeUpdateObject", + "methodStartUtf16": 12164, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 12331, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2934, + "targetFieldStartUtf16": 2907, + "tokenEndUtf16": 12336, + "tokenLine": 324, + "tokenStartUtf16": 12331, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12360, + "fieldId": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db", + "fieldName": "_adminuser", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:984ef007bc481051fde2a5f98a3c01b5cb0a826e046a764c512ab86133f9fdf1", + "kind": "references", + "relationshipSite": { + "endByte": 12360, + "endColumn": 58, + "endLine": 324, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 12350, + "startColumn": 48, + "startLine": 324 + }, + "source": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "target": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13552, + "methodId": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "methodName": "executeUpdateObject", + "methodStartUtf16": 12164, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 12350, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2971, + "targetFieldStartUtf16": 2939, + "tokenEndUtf16": 12360, + "tokenLine": 324, + "tokenStartUtf16": 12350, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12382, + "fieldId": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db", + "fieldName": "_adminuser", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e7058259cb8b628fa165f93dd093d7e6a1f078a3839ae745a8511cfd935394bc", + "kind": "references", + "relationshipSite": { + "endByte": 12382, + "endColumn": 80, + "endLine": 324, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 12372, + "startColumn": 70, + "startLine": 324 + }, + "source": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "target": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13552, + "methodId": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "methodName": "executeUpdateObject", + "methodStartUtf16": 12164, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 12372, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2971, + "targetFieldStartUtf16": 2939, + "tokenEndUtf16": 12382, + "tokenLine": 324, + "tokenStartUtf16": 12372, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12406, + "fieldId": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868", + "fieldName": "_adminpass", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:0d3c3a4b10841c5194c1cf52c9340d0bea24da1e02e17ba8c82126afc6f68c85", + "kind": "references", + "relationshipSite": { + "endByte": 12406, + "endColumn": 104, + "endLine": 324, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 12396, + "startColumn": 94, + "startLine": 324 + }, + "source": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "target": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13552, + "methodId": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "methodName": "executeUpdateObject", + "methodStartUtf16": 12164, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 12396, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3008, + "targetFieldStartUtf16": 2976, + "tokenEndUtf16": 12406, + "tokenLine": 324, + "tokenStartUtf16": 12396, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 12428, + "fieldId": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868", + "fieldName": "_adminpass", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:7a3b910a81f18ae844050668a82ae383506771a498f25d783d1938bf010509d6", + "kind": "references", + "relationshipSite": { + "endByte": 12428, + "endColumn": 126, + "endLine": 324, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 12418, + "startColumn": 116, + "startLine": 324 + }, + "source": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "target": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13552, + "methodId": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "methodName": "executeUpdateObject", + "methodStartUtf16": 12164, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 12418, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3008, + "targetFieldStartUtf16": 2976, + "tokenEndUtf16": 12428, + "tokenLine": 324, + "tokenStartUtf16": 12418, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13113, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c7b1c15f7db9f47df4ccf5c5b6f82c10892f9a03d5611cc71b76b16ce18b1fe8", + "kind": "references", + "relationshipSite": { + "endByte": 13113, + "endColumn": 24, + "endLine": 341, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 13105, + "startColumn": 16, + "startLine": 341 + }, + "source": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13552, + "methodId": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "methodName": "executeUpdateObject", + "methodStartUtf16": 12164, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 13105, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 13113, + "tokenLine": 341, + "tokenStartUtf16": 13105, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13336, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:5268c93a59539ad87d85d2a4efab8074affbc3a70dc1791e8728387e7904c670", + "kind": "references", + "relationshipSite": { + "endByte": 13336, + "endColumn": 20, + "endLine": 346, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 13328, + "startColumn": 12, + "startLine": 346 + }, + "source": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 13552, + "methodId": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "methodName": "executeUpdateObject", + "methodStartUtf16": 12164, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 13328, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 13336, + "tokenLine": 346, + "tokenStartUtf16": 13328, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 13987, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:316e012624a9eb8135fa1bd6848522a8ca4c965dcea72d700b84682171db2463", + "kind": "references", + "relationshipSite": { + "endByte": 13987, + "endColumn": 20, + "endLine": 366, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 13979, + "startColumn": 12, + "startLine": 366 + }, + "source": "sha256:1537123f4043eeafb6e3d6a9ffe2ebe76214eff90502bce2828d5505ca96c7db", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 14275, + "methodId": "sha256:1537123f4043eeafb6e3d6a9ffe2ebe76214eff90502bce2828d5505ca96c7db", + "methodName": "convertToString", + "methodStartUtf16": 13558, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 13979, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 13987, + "tokenLine": 366, + "tokenStartUtf16": 13979, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 14236, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b34ef61f23e9f6b725d979d16efa85fc7d522daaad8f4f7d99f098e5696fc563", + "kind": "references", + "relationshipSite": { + "endByte": 14236, + "endColumn": 16, + "endLine": 371, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 14228, + "startColumn": 8, + "startLine": 371 + }, + "source": "sha256:1537123f4043eeafb6e3d6a9ffe2ebe76214eff90502bce2828d5505ca96c7db", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 14275, + "methodId": "sha256:1537123f4043eeafb6e3d6a9ffe2ebe76214eff90502bce2828d5505ca96c7db", + "methodName": "convertToString", + "methodStartUtf16": 13558, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 14228, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 14236, + "tokenLine": 371, + "tokenStartUtf16": 14228, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 14802, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:f65c179e683f41acc5f1dfab71abaabdd2678de67543668f26b361f8e3252afa", + "kind": "references", + "relationshipSite": { + "endByte": 14802, + "endColumn": 24, + "endLine": 390, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 14794, + "startColumn": 16, + "startLine": 390 + }, + "source": "sha256:a1653a754e7b32dd54c190546d66856b1733a208f69f20cbe30ef629d730cab5", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 15104, + "methodId": "sha256:a1653a754e7b32dd54c190546d66856b1733a208f69f20cbe30ef629d730cab5", + "methodName": "convertToXML", + "methodStartUtf16": 14281, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 14794, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 14802, + "tokenLine": 390, + "tokenStartUtf16": 14794, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 14894, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:01abca9d3152d9deb785fb4b5f97f8a7e73f40b5e62fea3dd8150d236b7fadf4", + "kind": "references", + "relationshipSite": { + "endByte": 14894, + "endColumn": 20, + "endLine": 394, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 14886, + "startColumn": 12, + "startLine": 394 + }, + "source": "sha256:a1653a754e7b32dd54c190546d66856b1733a208f69f20cbe30ef629d730cab5", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 15104, + "methodId": "sha256:a1653a754e7b32dd54c190546d66856b1733a208f69f20cbe30ef629d730cab5", + "methodName": "convertToXML", + "methodStartUtf16": 14281, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 14886, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 14894, + "tokenLine": 394, + "tokenStartUtf16": 14886, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 15226, + "fieldId": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "fieldName": "_host", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:7dfee3e79a1aac2fc735978e55a57dffb77e31bd2f5f81e3d077652e86a13d2d", + "kind": "references", + "relationshipSite": { + "endByte": 15226, + "endColumn": 17, + "endLine": 403, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 15221, + "startColumn": 12, + "startLine": 403 + }, + "source": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "target": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16489, + "methodId": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "methodName": "executeCreateObject", + "methodStartUtf16": 15110, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 15221, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2934, + "targetFieldStartUtf16": 2907, + "tokenEndUtf16": 15226, + "tokenLine": 403, + "tokenStartUtf16": 15221, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 15243, + "fieldId": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "fieldName": "_host", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:11a6df334d24386cc899aa255e08433dd11a4e2f12ddbf277250d9ea0ca1148e", + "kind": "references", + "relationshipSite": { + "endByte": 15243, + "endColumn": 34, + "endLine": 403, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 15238, + "startColumn": 29, + "startLine": 403 + }, + "source": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "target": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16489, + "methodId": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "methodName": "executeCreateObject", + "methodStartUtf16": 15110, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 15238, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2934, + "targetFieldStartUtf16": 2907, + "tokenEndUtf16": 15243, + "tokenLine": 403, + "tokenStartUtf16": 15238, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 15267, + "fieldId": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db", + "fieldName": "_adminuser", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:9acae192a8cd1a445b083ed55b4075c83c0942be74403c9b03e07b853135119d", + "kind": "references", + "relationshipSite": { + "endByte": 15267, + "endColumn": 58, + "endLine": 403, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 15257, + "startColumn": 48, + "startLine": 403 + }, + "source": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "target": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16489, + "methodId": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "methodName": "executeCreateObject", + "methodStartUtf16": 15110, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 15257, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2971, + "targetFieldStartUtf16": 2939, + "tokenEndUtf16": 15267, + "tokenLine": 403, + "tokenStartUtf16": 15257, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 15289, + "fieldId": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db", + "fieldName": "_adminuser", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:20916ac5c30c0ef1fd521de0b17e41166bfa8592d580f3bc2135c4ae737399d2", + "kind": "references", + "relationshipSite": { + "endByte": 15289, + "endColumn": 80, + "endLine": 403, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 15279, + "startColumn": 70, + "startLine": 403 + }, + "source": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "target": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16489, + "methodId": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "methodName": "executeCreateObject", + "methodStartUtf16": 15110, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 15279, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2971, + "targetFieldStartUtf16": 2939, + "tokenEndUtf16": 15289, + "tokenLine": 403, + "tokenStartUtf16": 15279, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 15313, + "fieldId": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868", + "fieldName": "_adminpass", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:d320d61c1e24757a755d35ac09b50d6be6eeb8567a4f41c691caf13020c313ca", + "kind": "references", + "relationshipSite": { + "endByte": 15313, + "endColumn": 104, + "endLine": 403, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 15303, + "startColumn": 94, + "startLine": 403 + }, + "source": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "target": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16489, + "methodId": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "methodName": "executeCreateObject", + "methodStartUtf16": 15110, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 15303, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3008, + "targetFieldStartUtf16": 2976, + "tokenEndUtf16": 15313, + "tokenLine": 403, + "tokenStartUtf16": 15303, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 15335, + "fieldId": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868", + "fieldName": "_adminpass", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:f15bffd43321d107d0ee3c7969ec78bc57ed73f72100e6d41734ee5dd6c50c39", + "kind": "references", + "relationshipSite": { + "endByte": 15335, + "endColumn": 126, + "endLine": 403, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 15325, + "startColumn": 116, + "startLine": 403 + }, + "source": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "target": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16489, + "methodId": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "methodName": "executeCreateObject", + "methodStartUtf16": 15110, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 15325, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3008, + "targetFieldStartUtf16": 2976, + "tokenEndUtf16": 15335, + "tokenLine": 403, + "tokenStartUtf16": 15325, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16050, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:378f751d3d0868c005fbfa7a8aaceca43c0ea1fdf800cd18abfb5db95ba9effd", + "kind": "references", + "relationshipSite": { + "endByte": 16050, + "endColumn": 24, + "endLine": 420, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 16042, + "startColumn": 16, + "startLine": 420 + }, + "source": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16489, + "methodId": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "methodName": "executeCreateObject", + "methodStartUtf16": 15110, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 16042, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 16050, + "tokenLine": 420, + "tokenStartUtf16": 16042, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16273, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:cdee6df2b0f4a82d2320b6073caef97c931fe6a3323982427ebec73be825e818", + "kind": "references", + "relationshipSite": { + "endByte": 16273, + "endColumn": 20, + "endLine": 425, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 16265, + "startColumn": 12, + "startLine": 425 + }, + "source": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 16489, + "methodId": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "methodName": "executeCreateObject", + "methodStartUtf16": 15110, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 16265, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 16273, + "tokenLine": 425, + "tokenStartUtf16": 16265, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16595, + "fieldId": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "fieldName": "_host", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:03b8885f7ee5d52ebf233c224b69827aba1da257c3dcd33d9e789b4f2e634277", + "kind": "references", + "relationshipSite": { + "endByte": 16595, + "endColumn": 17, + "endLine": 435, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 16590, + "startColumn": 12, + "startLine": 435 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 16590, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2934, + "targetFieldStartUtf16": 2907, + "tokenEndUtf16": 16595, + "tokenLine": 435, + "tokenStartUtf16": 16590, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16612, + "fieldId": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "fieldName": "_host", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:4f0fb8edd0c9381e23ec409574701bbf74b5818f15abbda71a9a6dcb08fbd3ad", + "kind": "references", + "relationshipSite": { + "endByte": 16612, + "endColumn": 34, + "endLine": 435, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 16607, + "startColumn": 29, + "startLine": 435 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 16607, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2934, + "targetFieldStartUtf16": 2907, + "tokenEndUtf16": 16612, + "tokenLine": 435, + "tokenStartUtf16": 16607, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16636, + "fieldId": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db", + "fieldName": "_adminuser", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:8008e4d6f82d9eec5d1c02de40673f0c538ad140bccee6ca10d7fa02000fb44b", + "kind": "references", + "relationshipSite": { + "endByte": 16636, + "endColumn": 58, + "endLine": 435, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 16626, + "startColumn": 48, + "startLine": 435 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 16626, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2971, + "targetFieldStartUtf16": 2939, + "tokenEndUtf16": 16636, + "tokenLine": 435, + "tokenStartUtf16": 16626, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16658, + "fieldId": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db", + "fieldName": "_adminuser", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b8c49a8a33f725e6c617edaefd97babde0b818986e2494dd5be0d9b6856d67ba", + "kind": "references", + "relationshipSite": { + "endByte": 16658, + "endColumn": 80, + "endLine": 435, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 16648, + "startColumn": 70, + "startLine": 435 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 16648, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2971, + "targetFieldStartUtf16": 2939, + "tokenEndUtf16": 16658, + "tokenLine": 435, + "tokenStartUtf16": 16648, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16682, + "fieldId": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868", + "fieldName": "_adminpass", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:3764e2a410bafe5132cc31e25be0f6cd13f5584555b7d4992c4eeee2bcd84613", + "kind": "references", + "relationshipSite": { + "endByte": 16682, + "endColumn": 104, + "endLine": 435, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 16672, + "startColumn": 94, + "startLine": 435 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 16672, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3008, + "targetFieldStartUtf16": 2976, + "tokenEndUtf16": 16682, + "tokenLine": 435, + "tokenStartUtf16": 16672, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 16704, + "fieldId": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868", + "fieldName": "_adminpass", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:ec967131d1fc52898cf1fec23db61697e9999b63f014ca6477adca485b60db75", + "kind": "references", + "relationshipSite": { + "endByte": 16704, + "endColumn": 126, + "endLine": 435, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 16694, + "startColumn": 116, + "startLine": 435 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 16694, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3008, + "targetFieldStartUtf16": 2976, + "tokenEndUtf16": 16704, + "tokenLine": 435, + "tokenStartUtf16": 16694, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 17443, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:566b417cead8834e1a46149f39f15f3edc9d536679a7b3e0a2b521298c905fa3", + "kind": "references", + "relationshipSite": { + "endByte": 17443, + "endColumn": 24, + "endLine": 454, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 17435, + "startColumn": 16, + "startLine": 454 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 17435, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 17443, + "tokenLine": 454, + "tokenStartUtf16": 17435, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 17670, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a75c3e09b5324138f2f27fc4b23d8c0910b325d0cce1a0cceb6b6afc2b200b5a", + "kind": "references", + "relationshipSite": { + "endByte": 17670, + "endColumn": 20, + "endLine": 459, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 17662, + "startColumn": 12, + "startLine": 459 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 17662, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 17670, + "tokenLine": 459, + "tokenStartUtf16": 17662, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 18087, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a3e288d34b9b37a724d45b4e550f98c79fc462248b1ccaffc5ddfbbe5939969f", + "kind": "references", + "relationshipSite": { + "endByte": 18087, + "endColumn": 24, + "endLine": 467, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 18079, + "startColumn": 16, + "startLine": 467 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 18079, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 18087, + "tokenLine": 467, + "tokenStartUtf16": 18079, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 18215, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e2d08b1415cc7832cfd1c685d0ecb2d3cf7768b69b6895367a8757950a3d7cd8", + "kind": "references", + "relationshipSite": { + "endByte": 18215, + "endColumn": 20, + "endLine": 472, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 18207, + "startColumn": 12, + "startLine": 472 + }, + "source": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 18460, + "methodId": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "methodName": "executeRetreiveStatus", + "methodStartUtf16": 16495, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 18207, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 18215, + "tokenLine": 472, + "tokenStartUtf16": 18207, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 18562, + "fieldId": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "fieldName": "_host", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:90cc68256eb152230cd717a34a4daa79105a5dd04081eb88846d68f4ba04d4c3", + "kind": "references", + "relationshipSite": { + "endByte": 18562, + "endColumn": 17, + "endLine": 482, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 18557, + "startColumn": 12, + "startLine": 482 + }, + "source": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "target": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19675, + "methodId": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "methodName": "executeDeleteObject", + "methodStartUtf16": 18466, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 18557, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2934, + "targetFieldStartUtf16": 2907, + "tokenEndUtf16": 18562, + "tokenLine": 482, + "tokenStartUtf16": 18557, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 18579, + "fieldId": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "fieldName": "_host", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:efdbb84520c06379200e8861cadf8c2223a801500bd35e00bdb1437dd7ae0d0a", + "kind": "references", + "relationshipSite": { + "endByte": 18579, + "endColumn": 34, + "endLine": 482, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 18574, + "startColumn": 29, + "startLine": 482 + }, + "source": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "target": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19675, + "methodId": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "methodName": "executeDeleteObject", + "methodStartUtf16": 18466, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 18574, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2934, + "targetFieldStartUtf16": 2907, + "tokenEndUtf16": 18579, + "tokenLine": 482, + "tokenStartUtf16": 18574, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 18603, + "fieldId": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db", + "fieldName": "_adminuser", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:f19cceb5f6eabdd6c0302a5b8ac656e83a9b4d2430cc61b8b4b143a84ffe2246", + "kind": "references", + "relationshipSite": { + "endByte": 18603, + "endColumn": 58, + "endLine": 482, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 18593, + "startColumn": 48, + "startLine": 482 + }, + "source": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "target": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19675, + "methodId": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "methodName": "executeDeleteObject", + "methodStartUtf16": 18466, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 18593, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2971, + "targetFieldStartUtf16": 2939, + "tokenEndUtf16": 18603, + "tokenLine": 482, + "tokenStartUtf16": 18593, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 18625, + "fieldId": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db", + "fieldName": "_adminuser", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:011025a5f24a686fd85e1494a690cfa22c95b06427e6b0954fadc34bf813c32e", + "kind": "references", + "relationshipSite": { + "endByte": 18625, + "endColumn": 80, + "endLine": 482, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 18615, + "startColumn": 70, + "startLine": 482 + }, + "source": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "target": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19675, + "methodId": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "methodName": "executeDeleteObject", + "methodStartUtf16": 18466, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 18615, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2971, + "targetFieldStartUtf16": 2939, + "tokenEndUtf16": 18625, + "tokenLine": 482, + "tokenStartUtf16": 18615, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 18649, + "fieldId": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868", + "fieldName": "_adminpass", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:e2ad4b1712ebb0f20403c00927ccab38a5f637ef68db1142acfb306fe310a4d1", + "kind": "references", + "relationshipSite": { + "endByte": 18649, + "endColumn": 104, + "endLine": 482, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 18639, + "startColumn": 94, + "startLine": 482 + }, + "source": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "target": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19675, + "methodId": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "methodName": "executeDeleteObject", + "methodStartUtf16": 18466, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 18639, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3008, + "targetFieldStartUtf16": 2976, + "tokenEndUtf16": 18649, + "tokenLine": 482, + "tokenStartUtf16": 18639, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 18671, + "fieldId": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868", + "fieldName": "_adminpass", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:79e4c54a39a73e550110aed6a9988fdc9e1910130e30603a34a2292af98a0bac", + "kind": "references", + "relationshipSite": { + "endByte": 18671, + "endColumn": 126, + "endLine": 482, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 18661, + "startColumn": 116, + "startLine": 482 + }, + "source": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "target": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19675, + "methodId": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "methodName": "executeDeleteObject", + "methodStartUtf16": 18466, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 18661, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3008, + "targetFieldStartUtf16": 2976, + "tokenEndUtf16": 18671, + "tokenLine": 482, + "tokenStartUtf16": 18661, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 19261, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:98273c0cdad0cde8107f3b2482dadfd261387ec570e26ded406e0d88dbce8aef", + "kind": "references", + "relationshipSite": { + "endByte": 19261, + "endColumn": 24, + "endLine": 497, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 19253, + "startColumn": 16, + "startLine": 497 + }, + "source": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19675, + "methodId": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "methodName": "executeDeleteObject", + "methodStartUtf16": 18466, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 19253, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 19261, + "tokenLine": 497, + "tokenStartUtf16": 19253, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 19484, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b0b079a07baee7c1bc0b5e6185dce27dd8a1e94bb02615d6f030a3fadb360199", + "kind": "references", + "relationshipSite": { + "endByte": 19484, + "endColumn": 20, + "endLine": 502, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 19476, + "startColumn": 12, + "startLine": 502 + }, + "source": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 19675, + "methodId": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "methodName": "executeDeleteObject", + "methodStartUtf16": 18466, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 19476, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 19484, + "tokenLine": 502, + "tokenStartUtf16": 19476, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 19856, + "fieldId": "sha256:cff03c478a6d9c6b6fb9b7e9993b9238e8c8962279574b401884c9f506cf4a3c", + "fieldName": "_client", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:dce9427151948c0fcc0553d0c97c59657c8817455c88607bf9f6e842cd723494", + "kind": "references", + "relationshipSite": { + "endByte": 19856, + "endColumn": 30, + "endLine": 511, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 19849, + "startColumn": 23, + "startLine": 511 + }, + "source": "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7", + "target": "sha256:cff03c478a6d9c6b6fb9b7e9993b9238e8c8962279574b401884c9f506cf4a3c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 20380, + "methodId": "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7", + "methodName": "executeMethod", + "methodStartUtf16": 19681, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 19849, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3050, + "targetFieldStartUtf16": 3014, + "tokenEndUtf16": 19856, + "tokenLine": 511, + "tokenStartUtf16": 19849, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 20042, + "fieldId": "sha256:cff03c478a6d9c6b6fb9b7e9993b9238e8c8962279574b401884c9f506cf4a3c", + "fieldName": "_client", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:a3248a340756f6067bbf3382eece3759918196fd945d661733d5a695d3137be6", + "kind": "references", + "relationshipSite": { + "endByte": 20042, + "endColumn": 34, + "endLine": 514, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 20035, + "startColumn": 27, + "startLine": 514 + }, + "source": "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7", + "target": "sha256:cff03c478a6d9c6b6fb9b7e9993b9238e8c8962279574b401884c9f506cf4a3c" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 20380, + "methodId": "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7", + "methodName": "executeMethod", + "methodStartUtf16": 19681, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 20035, + "status": "bound-direct-field", + "targetFieldEndUtf16": 3050, + "targetFieldStartUtf16": 3014, + "tokenEndUtf16": 20042, + "tokenLine": 514, + "tokenStartUtf16": 20035, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 20134, + "fieldId": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "fieldName": "s_logger", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:c074ae6bb3a23481537a3bfbb913bce6abf48853afc026082642cb091705850b", + "kind": "references", + "relationshipSite": { + "endByte": 20134, + "endColumn": 20, + "endLine": 517, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "startByte": 20126, + "startColumn": 12, + "startLine": 517 + }, + "source": "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7", + "target": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 20380, + "methodId": "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7", + "methodName": "executeMethod", + "methodStartUtf16": 19681, + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "startByte": 20126, + "status": "bound-direct-field", + "targetFieldEndUtf16": 2901, + "targetFieldStartUtf16": 2824, + "tokenEndUtf16": 20134, + "tokenLine": 517, + "tokenStartUtf16": 20126, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1258, + "fieldId": "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033", + "fieldName": "name", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:5a2f9fcf3b3c1c908f2e231a9cf82a60902725575d5759c932c57849b02f0d07", + "kind": "references", + "relationshipSite": { + "endByte": 1258, + "endColumn": 19, + "endLine": 32, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "startByte": 1254, + "startColumn": 15, + "startLine": 32 + }, + "source": "sha256:12f9f388f62ac7c285c0fd66e2338e2dad060ff7e4a84c5403a1a1fa72606d63", + "target": "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1265, + "methodId": "sha256:12f9f388f62ac7c285c0fd66e2338e2dad060ff7e4a84c5403a1a1fa72606d63", + "methodName": "getName", + "methodStartUtf16": 1213, + "sampleId": 8539645, + "sourceFileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "startByte": 1254, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1207, + "targetFieldStartUtf16": 1096, + "tokenEndUtf16": 1258, + "tokenLine": 32, + "tokenStartUtf16": 1254, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1323, + "fieldId": "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033", + "fieldName": "name", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "graphRecordsAtToken": [ + { + "exactAstAnchor": true, + "id": "sha256:b2bd8622c5d87b66ce1266c4ce7b5af565e86b30d1183450fdaf81a88bb0a001", + "kind": "references", + "relationshipSite": { + "endByte": 1323, + "endColumn": 17, + "endLine": 36, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "startByte": 1319, + "startColumn": 13, + "startLine": 36 + }, + "source": "sha256:d610f427834da5212c077f597a677863c177e7726d9e8e4628cf3051e950282d", + "target": "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033" + } + ], + "matchingRecordCount": 1, + "methodEndUtf16": 1337, + "methodId": "sha256:d610f427834da5212c077f597a677863c177e7726d9e8e4628cf3051e950282d", + "methodName": "setName", + "methodStartUtf16": 1271, + "sampleId": 8539645, + "sourceFileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "startByte": 1319, + "status": "bound-direct-field", + "targetFieldEndUtf16": 1207, + "targetFieldStartUtf16": 1096, + "tokenEndUtf16": 1323, + "tokenLine": 36, + "tokenStartUtf16": 1319, + "type": "candidate", + "wrongPairRecordCount": 0 + }, + { + "endByte": 1330, + "fieldName": "name", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "methodEndUtf16": 1337, + "methodName": "setName", + "methodStartUtf16": 1271, + "sampleId": 8539645, + "sourceFileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "startByte": 1326, + "status": "bound-nonfield", + "targetFieldEndUtf16": null, + "targetFieldStartUtf16": null, + "tokenEndUtf16": 1330, + "tokenLine": 36, + "tokenStartUtf16": 1326, + "type": "candidate" + } + ], + "candidateCounts": { + "bound-direct-field": 265, + "bound-nonfield": 3 + }, + "diagnostics": { + "byCode": { + "compiler.err.cant.resolve": 37, + "compiler.err.cant.resolve.args": 3, + "compiler.err.cant.resolve.location": 774, + "compiler.err.cant.resolve.location.args": 5, + "compiler.err.doesnt.exist": 200, + "compiler.err.method.does.not.override.superclass": 26, + "compiler.err.name.clash.same.erasure.no.override": 1, + "compiler.err.name.clash.same.erasure.no.override.1": 1 + }, + "byFile": { + "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java": 8, + "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java": 36, + "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java": 5, + "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java": 134, + "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java": 8, + "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java": 207, + "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java": 500, + "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java": 149 + }, + "counts": { + "all": 1047, + "errors": 1047 + }, + "records": [ + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 25, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 26, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 27, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 28, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 29, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 30, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 31, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 32, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 33, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 34, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 35, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 41, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 49, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 49, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 67, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 88, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 106, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 149, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 149, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 150, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 205, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 287, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 343, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 405, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 19, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 20, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 21, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 22, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 23, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 24, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 25, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 26, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 27, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 28, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 29, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 30, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 54, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 78, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 78, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 77, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 81, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 81, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 86, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 86, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 91, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 91, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 96, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 96, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "ERROR", + "line": 19, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "ERROR", + "line": 24, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "ERROR", + "line": 28, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 16, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 17, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 18, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 19, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 20, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 21, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 22, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 23, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 24, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 25, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 26, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 27, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 28, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 29, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 30, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 31, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 32, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 33, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 34, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 35, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 36, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 37, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 38, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 39, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 40, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 41, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 43, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 45, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 54, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 60, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 64, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 68, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 68, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 95, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 95, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 27, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 30, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 32, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 33, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 34, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 35, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 36, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 38, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 39, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 40, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 41, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 42, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 43, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 44, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 45, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 46, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 47, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 48, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 49, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 50, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 51, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 52, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 53, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 54, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 55, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 56, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 57, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 58, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 59, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 60, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 61, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 62, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 63, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 64, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 65, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 66, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 67, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 68, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 69, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 70, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 71, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 72, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 73, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 74, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 75, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 76, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 77, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 78, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 79, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 80, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 81, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 82, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 83, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 84, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 85, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 86, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 87, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 88, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 89, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 90, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 91, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 92, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 93, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 94, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 95, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 96, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 97, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 98, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 99, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 100, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 101, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 102, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 103, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 104, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 105, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 106, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 107, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 108, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 109, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 110, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 111, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 112, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 113, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 114, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 115, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 116, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 117, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 118, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 119, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 120, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 121, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 122, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 123, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 124, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 125, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 126, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 127, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 128, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 129, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 130, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 131, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 132, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 133, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 134, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 135, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 136, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 137, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 138, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 139, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 141, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 141, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 141, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 144, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 146, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 148, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 150, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 152, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 154, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 156, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 158, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 160, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 162, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 164, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 166, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 168, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 170, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 172, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 174, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 176, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 178, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 180, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 182, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 184, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 186, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 188, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 190, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 192, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 194, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 196, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 198, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 200, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 202, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 205, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 207, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 209, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 211, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 213, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 215, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 218, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 223, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 222, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 375, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 401, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 401, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 418, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 418, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 429, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 435, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 435, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 435, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 599, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 599, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 599, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 679, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 762, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 762, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 763, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 797, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 797, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 798, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 889, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 899, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 899, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 905, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 905, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 905, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1032, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1032, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1032, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1164, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1164, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1164, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1170, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1170, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1170, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1170, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1184, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1184, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1184, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1191, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1191, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1214, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1214, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1214, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1214, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1299, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1299, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 777, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 780, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 784, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "ERROR", + "line": 22, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "ERROR", + "line": 24, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "ERROR", + "line": 31, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "ERROR", + "line": 33, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "ERROR", + "line": 53, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 28, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 29, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 30, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 31, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 33, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 34, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 35, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 36, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 37, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 38, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 39, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 40, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 41, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 42, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 43, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 44, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 45, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 47, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 48, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 49, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 50, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 51, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 52, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 53, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 54, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 55, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 56, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 57, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 58, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 59, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 60, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 61, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 64, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 70, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 72, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 72, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 106, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 106, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 114, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 130, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 130, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 144, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 144, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 159, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 159, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 174, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 174, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 215, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 230, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 247, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 265, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 279, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 295, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 311, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 320, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 355, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 377, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 377, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 402, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 434, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 434, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 481, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 508, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 508, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 508, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 525, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "ERROR", + "line": 19, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "ERROR", + "line": 21, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "ERROR", + "line": 22, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "ERROR", + "line": 24, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "ERROR", + "line": 26, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 143, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 145, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 147, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 149, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 151, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 153, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 155, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 157, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 159, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 161, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 163, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 165, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 167, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 169, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 171, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 173, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 175, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 177, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 179, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 181, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 183, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 185, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 187, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 189, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 191, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 193, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 195, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 197, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 199, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 201, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 203, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 206, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 208, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 210, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 212, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 214, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 221, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 434, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 678, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "ERROR", + "line": 26, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "ERROR", + "line": 26, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "ERROR", + "line": 27, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "ERROR", + "line": 27, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "ERROR", + "line": 28, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 51, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 52, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 55, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 58, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 60, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 61, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 97, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 97, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location.args", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 97, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 107, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 110, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 110, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 110, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 111, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 111, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 117, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 161, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 161, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 162, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 162, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 162, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 170, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 171, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 177, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 180, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 182, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 189, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 189, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 191, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 191, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 191, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 213, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 213, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 214, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 218, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 218, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 218, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 223, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 226, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 229, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 238, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 238, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 240, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 241, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 241, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 243, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 249, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 261, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 261, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 263, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 263, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 263, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 268, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 278, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 278, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location.args", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 278, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 289, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 292, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 292, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 293, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 296, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 299, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 301, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 304, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 304, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 310, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 310, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 315, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 316, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 316, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 317, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 320, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 328, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 332, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 350, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 351, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 352, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 353, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 355, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 356, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 359, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 360, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 364, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 367, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 371, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 373, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 382, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 382, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 385, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 385, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 386, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location.args", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 392, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 397, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 406, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 406, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location.args", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 406, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 416, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 417, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 418, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 419, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 420, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 427, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 427, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 429, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 430, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 431, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 432, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 433, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 449, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "ERROR", + "line": 459, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 55, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 58, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 80, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 82, + "type": "diagnostic" + }, + { + "code": "compiler.err.name.clash.same.erasure.no.override.1", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 86, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 85, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 87, + "type": "diagnostic" + }, + { + "code": "compiler.err.name.clash.same.erasure.no.override", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 91, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 90, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 92, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 95, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "ERROR", + "line": 97, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "ERROR", + "line": 31, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "ERROR", + "line": 33, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 61, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 65, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 69, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 69, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 71, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 71, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 73, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 81, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 81, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 86, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 86, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 96, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 96, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 98, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 98, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 100, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 109, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 109, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 114, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 114, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 126, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 128, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 134, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 140, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 141, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 157, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 158, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 174, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 174, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 175, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 175, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 177, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 177, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 181, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 181, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 183, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 190, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 190, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 191, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 193, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 194, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.args", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 194, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 196, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.args", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 195, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 197, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 197, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 200, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 201, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 209, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 209, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 211, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 211, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 215, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 214, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 216, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 220, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 220, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 221, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 221, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 223, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 223, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 226, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 226, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 228, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 232, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 232, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 233, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 236, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 236, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 242, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 242, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 244, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 248, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 248, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 249, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 252, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 252, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 254, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 255, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 258, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 258, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 266, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 266, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 268, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 273, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 273, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 275, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 277, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 278, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 279, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 281, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 284, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 284, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 286, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 296, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 296, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 302, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 302, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 304, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 308, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 308, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 309, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 311, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 312, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 313, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 315, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 318, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 318, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 320, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 329, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 329, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 335, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 335, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "ERROR", + "line": 337, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 218, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 220, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 226, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 227, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 227, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 231, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 237, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 241, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 246, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 248, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 249, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 254, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 257, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 266, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 283, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 289, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 289, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 293, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 293, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 295, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 295, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 301, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 302, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 302, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 304, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 304, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 303, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 305, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 306, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 314, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 314, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 314, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 302, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 321, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 324, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 328, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 330, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 332, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 335, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 335, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 338, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 339, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 341, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 343, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 345, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 352, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 354, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 360, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 374, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 376, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 376, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 377, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 377, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 378, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 383, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 386, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 393, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 395, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 403, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 403, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 417, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 419, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 422, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 430, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 430, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 438, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 440, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 441, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 444, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 444, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 451, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 451, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 451, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 453, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 453, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 453, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 452, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 458, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 463, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 463, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 467, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 467, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 451, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 476, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 498, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 499, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 501, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 502, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 504, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 506, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 507, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 509, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 511, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 515, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 515, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 516, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 518, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 539, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 540, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 547, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 556, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 568, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 574, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 574, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 575, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 577, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 598, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 601, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 602, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 606, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 609, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 610, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 617, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 621, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 625, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 628, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 633, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 663, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 665, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 666, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 674, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 674, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 680, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 680, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 684, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 684, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 684, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 686, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 686, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 685, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 688, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 692, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 693, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 699, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 684, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 714, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 716, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 716, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 717, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 719, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 741, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 742, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 764, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 764, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 765, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 766, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 766, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 768, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 800, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 801, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 810, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 812, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 814, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 815, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 818, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 821, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 821, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 829, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 829, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 839, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 846, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 863, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 863, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 890, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 901, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 904, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 908, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 914, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 919, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 932, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 938, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 938, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 941, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 943, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 953, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 959, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 965, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 976, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 977, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 993, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 993, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 994, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 994, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 995, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 996, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 997, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1002, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1002, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1011, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1025, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1025, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1031, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1033, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1039, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1040, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1043, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1052, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1052, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1059, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1071, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1073, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1078, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1088, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1088, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1092, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1103, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1104, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1105, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1105, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1107, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1107, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1108, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1116, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1116, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1124, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1136, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1145, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1147, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1148, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1148, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.args", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1149, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1153, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1158, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1163, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1169, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1171, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1175, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1178, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1183, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1185, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1188, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1193, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1193, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1204, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1205, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location.args", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1209, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1210, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1213, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1218, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1224, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1229, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1240, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1246, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1246, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1248, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1249, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1255, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1261, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1273, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1274, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1283, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1283, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1284, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1284, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1285, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1286, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1288, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1288, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1300, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1301, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "ERROR", + "line": 1303, + "type": "diagnostic" + }, + { + "code": "compiler.err.method.does.not.override.superclass", + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "ERROR", + "line": 40, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 64, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 75, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 75, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 78, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 82, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 84, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 86, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 88, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 90, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 98, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 99, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 99, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 107, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 118, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 131, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 131, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 133, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 133, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 138, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 146, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 146, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 147, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 148, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 160, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 160, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 162, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 175, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 175, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 176, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 176, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 180, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 181, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 181, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 182, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 182, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 183, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 183, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 190, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 191, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 192, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 193, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 193, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 194, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 194, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 195, + "type": "diagnostic" + }, + { + "code": "compiler.err.doesnt.exist", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 195, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 204, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 216, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 216, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 217, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 217, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 218, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 218, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 223, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 232, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 232, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 233, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 233, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 234, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 235, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 235, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 241, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 249, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 249, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 250, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 250, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 251, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 252, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 252, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 259, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 280, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 280, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 281, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 281, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 282, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 282, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 288, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 296, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 296, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 297, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 297, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 298, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 299, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 299, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 305, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 313, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 313, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 314, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 317, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 325, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 328, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 328, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 331, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 331, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 333, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 335, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 342, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 347, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 360, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 360, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 361, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 365, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 367, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 379, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 381, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 381, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 381, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 385, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 388, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 389, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 393, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 395, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 404, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 408, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 408, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 410, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 410, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 412, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 414, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 421, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 426, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 436, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 442, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 442, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 444, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 444, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 446, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 448, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 455, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 460, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 473, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 483, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 486, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 486, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 489, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 491, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 498, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 503, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 509, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 512, + "type": "diagnostic" + }, + { + "code": "compiler.err.cant.resolve.location", + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "ERROR", + "line": 519, + "type": "diagnostic" + } + ] + }, + "graphSha256": { + "apache/cloudstack": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "eclipse/eclipse.platform.ui": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74" + }, + "limitations": [ + "The compiler ran without project dependencies and reported 1,047 errors. Only successfully bound direct fields are scored; unresolved or other field uses are not a negative denominator.", + "All 265 bound direct-field sites and all 265 selected stored own-field references agree at method, target and token bytes. This is selected known-Java evidence, not complete source recall or independent held-out quality.", + "No foreign-field access, WMC, TCC, ATFD, god-object classifier, runtime-path or Graphify comparison is established.", + "An initial compiler capture used a 1,000-error reporting cap and preserved identical candidate bindings. The corrected capture raised that cap to the registered 10,000 diagnostic bound and retained all 1,047 errors.", + "The compiler diagnostics reflect an intentionally empty external classpath; these selected bindings cannot establish recall for unresolved or foreign fields." + ], + "matchedOwnedGraphRecords": 265, + "oracleInitialOutputSha256": "e4d4bf511457f3eb3c3c940207edfbca16564cc36882ac4b85c78469188a0412", + "oracleOutputSha256": "dfb9223043ff44f45471ba41ee1ff42d02e9ad312fb1f3a130ef8cf3ae9c5423", + "oracleRepeatByteIdentical": true, + "oracleSourceSha256": "f0d765ef78da6aba5d83a301e186ad53743ffa4fc59abbc6ce27283efa961dd2", + "perCase": [ + { + "boundDirectFieldSites": 55, + "boundNonfieldCandidates": 2, + "classification": "unanimous-major-critical", + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6374724, + "sourceRole": "production-class" + }, + { + "boundDirectFieldSites": 0, + "boundNonfieldCandidates": 0, + "classification": "unanimous-none", + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6391534, + "sourceRole": "production-class" + }, + { + "boundDirectFieldSites": 4, + "boundNonfieldCandidates": 0, + "classification": "unanimous-none", + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6406137, + "sourceRole": "production-class" + }, + { + "boundDirectFieldSites": 15, + "boundNonfieldCandidates": 0, + "classification": "unanimous-major-critical", + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413795, + "sourceRole": "test-class" + }, + { + "boundDirectFieldSites": 142, + "boundNonfieldCandidates": 0, + "classification": "unanimous-major-critical", + "repository": "apache/cloudstack", + "sampleId": 8528735, + "sourceRole": "production-class" + }, + { + "boundDirectFieldSites": 4, + "boundNonfieldCandidates": 0, + "classification": "unanimous-none", + "repository": "apache/cloudstack", + "sampleId": 8537138, + "sourceRole": "production-class" + }, + { + "boundDirectFieldSites": 43, + "boundNonfieldCandidates": 0, + "classification": "unanimous-major-critical", + "repository": "apache/cloudstack", + "sampleId": 8538037, + "sourceRole": "production-class" + }, + { + "boundDirectFieldSites": 2, + "boundNonfieldCandidates": 1, + "classification": "unanimous-none", + "repository": "apache/cloudstack", + "sampleId": 8539645, + "sourceRole": "production-class" + } + ], + "priorExplicitControlsMatched": 5, + "rawRunSha256": "50222d6e1775d9911d4c03595551738e6083fb56e617788c01323e6012e86ea5", + "registrationSha256": "fcdd8c3976975afb46c9323c8422aea66138c5f8548a41f42f1e127181b74d67", + "schema": "compass.mlcq-javac-field-binding-review/1", + "scope": "Compiler-bound direct own-field accesses in eight known rated Java classes; partial attribution with absent project dependencies.", + "unverifiedOwnedGraphRecords": 0, + "verificationRepeatByteIdentical": true, + "verifiedRunSha256": "6389607695e8802900b87ced687f6797ccb6b043fefbce23bca43e3627116139", + "verifierSha256": "41125dd2a20d62296276d08e99c963bf9d0d06672389d4d58c1b9dbfa52da677" +} diff --git a/benchmarks/agent_query/mlcq_member_paired_probe.py b/benchmarks/agent_query/mlcq_member_paired_probe.py new file mode 100644 index 000000000..81160eb9a --- /dev/null +++ b/benchmarks/agent_query/mlcq_member_paired_probe.py @@ -0,0 +1,235 @@ +"""Compare frozen Java source declarations with both stored graph formats. + +This checks selected declaration presence and direct owner links. It does not +validate field-access targets, responsibility cohesion, or god-object labels. +""" + +from __future__ import annotations + +import argparse +from collections import Counter, defaultdict +import hashlib +import json +from pathlib import Path +import re +import subprocess +import sys + + +def sha256(path: Path) -> str: + result = hashlib.sha256() + with path.open("rb") as stream: + for chunk in iter(lambda: stream.read(1024 * 1024), b""): + result.update(chunk) + return result.hexdigest() + + +def graph_line(node: dict, tool: str) -> tuple[str | None, int | None, int | None]: + if tool == "compass": + source = node.get("source", {}) + if not isinstance(source, dict): + return None, None, None + return source.get("file"), source.get("startLine"), source.get("endLine") + location = node.get("source_location") + match = re.fullmatch(r"L([1-9][0-9]*)", location) if isinstance(location, str) else None + return node.get("source_file"), int(match[1]) if match else None, int(match[1]) if match else None + + +def display_name(node: dict) -> str | None: + label = node.get("name", node.get("label")) + if not isinstance(label, str): + return None + if label.startswith(".") and label.endswith("()"): + return label[1:-2] + return label + + +def candidate(node: dict, member: dict, tool: str) -> bool: + kind = member["kind"] + if tool == "compass": + if node.get("kind") != kind: + return False + elif tool == "graphify": + if node.get("_callable_class") is True: + return False + if (node.get("_callable") is True) != (kind == "method"): + return False + else: + raise ValueError("unsupported tool") + file, start, end = graph_line(node, tool) + return (file == member["file"] and type(start) is int and type(end) is int + and start <= member["endLine"] and member["startLine"] <= end + and display_name(node) == member["name"]) + + +def worker(graph_path: Path, registered: dict, cases: list[dict], source_cases: dict, + bounds: dict) -> dict: + if graph_path.stat().st_size != registered["graphBytes"] or graph_path.stat().st_size > bounds["graphBytes"]: + raise ValueError("graph bytes differ from registration") + if sha256(graph_path) != registered["graphSha256"]: + raise ValueError("graph digest differs from registration") + graph = json.loads(graph_path.read_bytes()) + nodes, links = graph["nodes"], graph["links"] + if len(nodes) > bounds["graphNodes"] or len(links) > bounds["graphEdges"]: + raise ValueError("graph item bound exceeded") + by_id = {node["id"]: node for node in nodes} + if len(by_id) != len(nodes): + raise ValueError("duplicate graph node ID") + by_file = defaultdict(list) + for node in nodes: + file, _, _ = graph_line(node, registered["tool"]) + if isinstance(file, str): + by_file[file].append(node) + direct = defaultdict(set) + for edge in links: + direct[(edge["source"], edge["target"])].add(edge.get("kind" if registered["tool"] == "compass" else "relation")) + outputs = [] + for case in cases: + source_case = source_cases[case["sampleId"]] + class_id = case["classGraphIds"][registered["tool"]] + if class_id not in by_id: + raise ValueError("prior verified class identity missing") + rows = [] + for member in source_case["sourceMembers"]: + if member["kind"] not in ("method", "field"): + continue + matches = [node["id"] for node in by_file[member["file"]] + if candidate(node, member, registered["tool"])] + required = ({"contains"} if registered["tool"] == "compass" else + {"method"} if member["kind"] == "method" else {"contains", "field"}) + links_found = {identifier: sorted(direct[class_id, identifier]) + for identifier in matches} + rows.append({"kind": member["kind"], "name": member["name"], + "file": member["file"], "startLine": member["startLine"], + "endLine": member["endLine"], "startUtf16": member["startUtf16"], + "candidateIds": sorted(matches), "directOwnerRelations": links_found, + "directOwnerMatch": len(matches) == 1 and + bool(required.intersection(links_found[matches[0]]))}) + outputs.append({"sampleId": case["sampleId"], "classification": case["classification"], + "sourceRole": case["sourceRole"], "classId": class_id, + "members": rows}) + return {"repository": registered["repository"], "tool": registered["tool"], + "graphSha256": registered["graphSha256"], "directed": graph["directed"], + "nodeCount": len(nodes), "edgeCount": len(links), "cases": outputs} + + +def main(args: argparse.Namespace) -> None: + registration = json.loads(args.registration.read_text()) + if registration["schema"] != "compass.mlcq-member-paired-registration/1": + raise ValueError("unsupported registration") + for path, key in [(args.inputs, "priorInputsSha256"), + (args.prior_review, "priorReleaseReviewSha256"), + (args.member_review, "priorMemberReviewSha256")]: + if sha256(path) != registration[key]: + raise ValueError(f"registered input changed: {key}") + if sha256(Path(__file__).with_name("mlcq_god_source_witnesses.json")) != registration["sourceWitnessesSha256"]: + raise ValueError("source witness manifest changed") + inputs = json.loads(args.inputs.read_text()) + prior = json.loads(args.prior_review.read_text()) + source_review = json.loads(args.member_review.read_text()) + source_cases = {case["sampleId"]: case for case in source_review["fullCases"]} + if len(source_cases) != 8 or {case["sampleId"] for case in registration["cases"]} != set(source_cases): + raise ValueError("source review denominator differs") + prior_ids = {(row["repository"], row["tool"], case["sampleId"]): case["graphIds"] + for row in prior["verification"]["results"] for case in row["cases"]} + for case in registration["cases"]: + source = source_cases[case["sampleId"]] + if any(source[key] != case[value] for key, value in + (("repository", "repository"), ("classification", "classification"), + ("sourceRole", "sourceRole"), ("file", "sourceFile"), + ("sourceFileSha256", "sourceFileSha256"))): + raise ValueError("registered source case differs from independent census") + for tool in ("compass", "graphify"): + if prior_ids[case["repository"], tool, case["sampleId"]] != [case["classGraphIds"][tool]]: + raise ValueError("registered class ID differs from prior source-assisted review") + for repo in registration["repositories"]: + root = args.github_root / repo["name"] + head = subprocess.run(["git", "-C", str(root), "rev-parse", "HEAD"], + check=True, capture_output=True, text=True).stdout.strip() + dirty = subprocess.run(["git", "-C", str(root), "status", "--porcelain=v1"], + check=True, capture_output=True, text=True).stdout.strip() + if head != repo["commit"] or dirty: + raise ValueError("source checkout differs from registration") + for case in registration["cases"]: + if case["repository"] != repo["name"]: + continue + relative = Path(case["sourceFile"]) + if relative.is_absolute() or ".." in relative.parts: + raise ValueError("invalid registered source path") + path = root / relative + if path.stat().st_size > registration["bounds"]["sourceBytesPerFile"] or sha256(path) != case["sourceFileSha256"]: + raise ValueError("source file differs from independent census") + args.raw.mkdir(parents=True, exist_ok=False) + results = [] + for repo in registration["repositories"]: + for tool in ("compass", "graphify"): + registered = {"repository": repo["name"], "tool": tool, **repo["graphs"][tool]} + build = next(row for row in inputs["builds"][repo["name"]]["results"] if row["tool"] == tool) + if build["graphSha256"] != registered["graphSha256"] or build["graphBytes"] != registered["graphBytes"]: + raise ValueError("graph producer manifest changed") + command = [sys.executable, "-m", "benchmarks.agent_query.mlcq_member_paired_probe", + "--worker", "--registration", str(args.registration), + "--member-review", str(args.member_review), + "--repository", repo["name"], "--tool", tool, + "--graph", build["graphPath"]] + try: + process = subprocess.run(command, check=False, capture_output=True, text=True, + timeout=registration["bounds"]["secondsPerGraph"]) + except subprocess.TimeoutExpired as error: + raise ValueError(f"graph worker timed out: {repo['name']}/{tool}") from error + if process.returncode != 0 or len(process.stdout.encode()) > 1024 * 1024 or len(process.stderr.encode()) > 1024 * 1024: + raise ValueError(f"graph worker failed or exceeded output bound: {process.returncode}: {process.stderr[:500]}") + result = json.loads(process.stdout) + if (result["repository"], result["tool"], result["graphSha256"]) != (repo["name"], tool, registered["graphSha256"]): + raise ValueError("worker returned a different graph") + raw_path = args.raw / f"{repo['name'].replace('/', '-')}-{tool}.json" + raw_path.write_text(json.dumps(result, indent=2, sort_keys=True) + "\n") + result["rawSha256"] = sha256(raw_path) + results.append(result) + summaries = [] + for tool in ("compass", "graphify"): + members = [member for result in results if result["tool"] == tool + for case in result["cases"] for member in case["members"]] + reused = Counter(identifier for member in members for identifier in member["candidateIds"]) + for kind in ("method", "field"): + rows = [member for member in members if member["kind"] == kind] + summaries.append({"tool": tool, "kind": kind, "sourceDeclarations": len(rows), + "uniqueNodeMatches": sum(len(row["candidateIds"]) == 1 for row in rows), + "missingNodes": sum(not row["candidateIds"] for row in rows), + "ambiguousNodes": sum(len(row["candidateIds"]) > 1 for row in rows), + "directOwnerMatches": sum(row["directOwnerMatch"] for row in rows), + "distinctIdentityMatches": sum(len(row["candidateIds"]) == 1 and + reused[row["candidateIds"][0]] == 1 for row in rows)}) + output = {"schema": "compass.mlcq-member-paired-review/1", + "scope": __doc__, "registrationSha256": sha256(args.registration), + "probeSha256": sha256(Path(__file__)), "summaries": summaries, "results": results} + args.output.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n") + for item in summaries: + print(item) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--inputs", type=Path) + parser.add_argument("--prior-review", type=Path) + parser.add_argument("--member-review", type=Path, required=True) + parser.add_argument("--github-root", type=Path) + parser.add_argument("--raw", type=Path) + parser.add_argument("--output", type=Path) + parser.add_argument("--worker", action="store_true") + parser.add_argument("--repository") + parser.add_argument("--tool") + parser.add_argument("--graph", type=Path) + args = parser.parse_args() + if args.worker: + registration = json.loads(args.registration.read_text()) + source = {case["sampleId"]: case for case in json.loads(args.member_review.read_text())["fullCases"]} + repo = next(item for item in registration["repositories"] if item["name"] == args.repository) + record = {"repository": args.repository, "tool": args.tool, **repo["graphs"][args.tool]} + cases = [case for case in registration["cases"] if case["repository"] == args.repository] + print(json.dumps(worker(args.graph, record, cases, source, registration["bounds"]), sort_keys=True)) + else: + if any(value is None for value in (args.inputs, args.prior_review, args.github_root, args.raw, args.output)): + parser.error("--inputs, --prior-review, --github-root, --raw and --output are required") + main(args) diff --git a/benchmarks/agent_query/mlcq_member_paired_registration.json b/benchmarks/agent_query/mlcq_member_paired_registration.json new file mode 100644 index 000000000..e326e593a --- /dev/null +++ b/benchmarks/agent_query/mlcq_member_paired_registration.json @@ -0,0 +1,167 @@ +{ + "bounds": { + "graphBytes": 1073741824, + "graphEdges": 2000000, + "graphNodes": 1000000, + "secondsPerGraph": 300, + "sourceBytesPerFile": 2097152, + "sourceFiles": 8 + }, + "cases": [ + { + "classGraphIds": { + "compass": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "graphify": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel" + }, + "className": "BindingModel", + "classification": "unanimous-major-critical", + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6374724, + "sourceFile": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "sourceRole": "production-class" + }, + { + "classGraphIds": { + "compass": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "graphify": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty" + }, + "className": "SimpleValueProperty", + "classification": "unanimous-none", + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6391534, + "sourceFile": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "sourceFileSha256": "50407d33afc5ee8283f1022f5bf38278aa20b4cd82db4cd909eb5ee0e2e22b64", + "sourceRole": "production-class" + }, + { + "classGraphIds": { + "compass": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "graphify": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl" + }, + "className": "CSSValueListImpl", + "classification": "unanimous-none", + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6406137, + "sourceFile": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "sourceFileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "sourceRole": "production-class" + }, + { + "classGraphIds": { + "compass": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "graphify": "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto" + }, + "className": "DeprecatedUIWizardsAuto", + "classification": "unanimous-major-critical", + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413795, + "sourceFile": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "sourceRole": "test-class" + }, + { + "classGraphIds": { + "compass": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "graphify": "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl" + }, + "className": "ExternalLoadBalancerDeviceManagerImpl", + "classification": "unanimous-major-critical", + "repository": "apache/cloudstack", + "sampleId": 8528735, + "sourceFile": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "sourceRole": "production-class" + }, + { + "classGraphIds": { + "compass": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "graphify": "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand" + }, + "className": "HandleConfigDriveIsoCommand", + "classification": "unanimous-none", + "repository": "apache/cloudstack", + "sampleId": 8537138, + "sourceFile": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "sourceRole": "production-class" + }, + { + "classGraphIds": { + "compass": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "graphify": "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi" + }, + "className": "BrocadeVcsApi", + "classification": "unanimous-major-critical", + "repository": "apache/cloudstack", + "sampleId": 8538037, + "sourceFile": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "sourceRole": "production-class" + }, + { + "classGraphIds": { + "compass": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "graphify": "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse" + }, + "className": "DeploymentPlannersResponse", + "classification": "unanimous-none", + "repository": "apache/cloudstack", + "sampleId": 8539645, + "sourceFile": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "sourceFileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "sourceRole": "production-class" + } + ], + "disclosure": "The Compass 95/95 method and 65/65 field source matches, and one Graphify BindingModel graph, were inspected before registration. This is known development data, not held-out evaluation.", + "limitations": [ + "Graphify lacks Compass typed field metadata, so field-name/line candidates are at most declaration-presence evidence and must remain type-unverified.", + "The source census covers only eight known Java files and does not measure all class members in either repository.", + "Missing dependency attribution does not affect this JDK syntax-only member census, but source responsibilities and field-access semantics remain outside this comparison.", + "No classifier, broad superiority, or cross-language conclusion follows from declaration coverage." + ], + "method": { + "candidate": "Require exact repository-relative source file, matching simple name (method display .name() normalized to name; field label exact), compatible node kind/callability and an anchored graph line within the source declaration span. Compass kind method/field; Graphify _callable=true for methods and not true for fields, excluding _callable_class=true. A missing Graphify type tag is not proof of a field, so report field matches as type-unverified.", + "comparison": "Apply the same source witness set to both stored graphs. Report graph direction, extraction coverage and line-anchor limits; do not equate node presence with relationship correctness or god-object severity.", + "cut": "No tuning or threshold. Report per-kind source coverage, source-linked ownership and unique per-declaration identities, all cases, ambiguities and unavailable outcomes. Preserve positive-rated test class.", + "denominator": "Every direct method and field in the frozen independent JDK sourceMembers lists, excluding constructors and nested/inherited/implicit members. Preserve overloads as separate source declarations.", + "identity": "Report zero, one or multiple candidate IDs per source declaration and every graph ID matched to more than one source declaration. A reused ID cannot give separate overload-identity credit. Do not choose by first label or proximity.", + "ownership": "Report direct class-to-candidate links separately: Compass contains; Graphify method for methods and any direct contains or field relation for fields. No containment inferred from the file or class span." + }, + "priorInputsSha256": "663beb33e986c695ec4a6ae8864651f9838baa4c0d183a2da021d8d3197b951e", + "priorMemberReviewSha256": "edff7c60649a6d85389d94b04bfe805f0b046d0667603135e00b56b61c001756", + "priorReleaseReviewSha256": "0db695b5722e741d4d740707ad69888141152ae69e4af02622254293d4e4680b", + "purpose": "Paired source-declaration coverage on the same eight externally rated Java classes, using the prior independent JDK 17 syntax census and frozen Compass/Graphify graphs. This is a prerequisite for evidence-backed cohesion/god-object work, not a classifier.", + "repositories": [ + { + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "graphs": { + "compass": { + "graphBytes": 671502979, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69" + }, + "graphify": { + "graphBytes": 227334534, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72" + } + }, + "name": "apache/cloudstack" + }, + { + "commit": "e3bbb556534a1fb945e1036948325d14a8dd9c7a", + "graphs": { + "compass": { + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74" + }, + "graphify": { + "graphBytes": 189557807, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef" + } + }, + "name": "eclipse/eclipse.platform.ui" + } + ], + "schema": "compass.mlcq-member-paired-registration/1", + "sourceWitnessesSha256": "c35e4202703599acca6f96a807c72f598345d7d764d88cfc3b13f9340e01e675" +} diff --git a/benchmarks/agent_query/mlcq_member_paired_review.json b/benchmarks/agent_query/mlcq_member_paired_review.json new file mode 100644 index 000000000..7901da369 --- /dev/null +++ b/benchmarks/agent_query/mlcq_member_paired_review.json @@ -0,0 +1,5242 @@ +{ + "probeSha256": "7abe2f7978045ba8b2e425776cf3836e07271e564a6bd2011cf1715f4f79533a", + "registrationSha256": "81b5e678aa60a18a0e874d41b931e9643b5ef51ca764c86748ea1d895f5883c2", + "results": [ + { + "cases": [ + { + "classId": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "classification": "unanimous-major-critical", + "members": [ + { + "candidateIds": [ + "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d": [ + "contains" + ] + }, + "endLine": 144, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkExternalLBDao", + "startLine": 143, + "startUtf16": 6447 + }, + { + "candidateIds": [ + "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19": [ + "contains" + ] + }, + "endLine": 146, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_externalLoadBalancerDeviceDao", + "startLine": 145, + "startUtf16": 6517 + }, + { + "candidateIds": [ + "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad": [ + "contains" + ] + }, + "endLine": 148, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_hostDao", + "startLine": 147, + "startUtf16": 6595 + }, + { + "candidateIds": [ + "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341": [ + "contains" + ] + }, + "endLine": 150, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_dcDao", + "startLine": 149, + "startUtf16": 6629 + }, + { + "candidateIds": [ + "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c": [ + "contains" + ] + }, + "endLine": 152, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkModel", + "startLine": 151, + "startUtf16": 6667 + }, + { + "candidateIds": [ + "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c": [ + "contains" + ] + }, + "endLine": 154, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkMgr", + "startLine": 153, + "startUtf16": 6711 + }, + { + "candidateIds": [ + "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca": [ + "contains" + ] + }, + "endLine": 156, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_inlineLoadBalancerNicMapDao", + "startLine": 155, + "startUtf16": 6768 + }, + { + "candidateIds": [ + "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f": [ + "contains" + ] + }, + "endLine": 158, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_nicDao", + "startLine": 157, + "startUtf16": 6842 + }, + { + "candidateIds": [ + "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1": [ + "contains" + ] + }, + "endLine": 160, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_agentMgr", + "startLine": 159, + "startUtf16": 6874 + }, + { + "candidateIds": [ + "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073": [ + "contains" + ] + }, + "endLine": 162, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_resourceMgr", + "startLine": 161, + "startUtf16": 6914 + }, + { + "candidateIds": [ + "sha256:83f0ea4c0f440fe421cb511edfab721429e58bdf70d6051e96763523cabea956" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:83f0ea4c0f440fe421cb511edfab721429e58bdf70d6051e96763523cabea956": [ + "contains" + ] + }, + "endLine": 164, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ipAddressDao", + "startLine": 163, + "startUtf16": 6960 + }, + { + "candidateIds": [ + "sha256:8b25366aa5124c41e4745309379a581a56cf797a917482744dca32fca1d03ecb" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8b25366aa5124c41e4745309379a581a56cf797a917482744dca32fca1d03ecb": [ + "contains" + ] + }, + "endLine": 166, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vlanDao", + "startLine": 165, + "startUtf16": 7004 + }, + { + "candidateIds": [ + "sha256:520753938735383092187588cae8785e8bcc6393b22eb53eafb902fa7384a092" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:520753938735383092187588cae8785e8bcc6393b22eb53eafb902fa7384a092": [ + "contains" + ] + }, + "endLine": 168, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkOfferingDao", + "startLine": 167, + "startUtf16": 7038 + }, + { + "candidateIds": [ + "sha256:6ae2a588540f6200447a1624efff22acb3ebcefb8dee155a2d4d33b258679711" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:6ae2a588540f6200447a1624efff22acb3ebcefb8dee155a2d4d33b258679711": [ + "contains" + ] + }, + "endLine": 170, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_accountDao", + "startLine": 169, + "startUtf16": 7094 + }, + { + "candidateIds": [ + "sha256:8f63d21f7a432574db2808754da27fb8a5f280867d32cbae8daf6aca72821caf" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8f63d21f7a432574db2808754da27fb8a5f280867d32cbae8daf6aca72821caf": [ + "contains" + ] + }, + "endLine": 172, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalNetworkDao", + "startLine": 171, + "startUtf16": 7134 + }, + { + "candidateIds": [ + "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4": [ + "contains" + ] + }, + "endLine": 174, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalNetworkServiceProviderDao", + "startLine": 173, + "startUtf16": 7190 + }, + { + "candidateIds": [ + "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d": [ + "contains" + ] + }, + "endLine": 176, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_accountMgr", + "startLine": 175, + "startUtf16": 7276 + }, + { + "candidateIds": [ + "sha256:6d872f778727749d077abf269f1cbdbe322ceafa91e2ffea290372df21541c4f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:6d872f778727749d077abf269f1cbdbe322ceafa91e2ffea290372df21541c4f": [ + "contains" + ] + }, + "endLine": 178, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_userStatsDao", + "startLine": 177, + "startUtf16": 7320 + }, + { + "candidateIds": [ + "sha256:2098ce30981a4ab56343e8ca1ccb796438bee74d2524b929fba6729a25e7698e" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:2098ce30981a4ab56343e8ca1ccb796438bee74d2524b929fba6729a25e7698e": [ + "contains" + ] + }, + "endLine": 180, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkDao", + "startLine": 179, + "startUtf16": 7369 + }, + { + "candidateIds": [ + "sha256:b45a200b4b16526f12a9840d4376fbae4ce3caa39dac26a928a611ebb7dca93e" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:b45a200b4b16526f12a9840d4376fbae4ce3caa39dac26a928a611ebb7dca93e": [ + "contains" + ] + }, + "endLine": 182, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_routerDao", + "startLine": 181, + "startUtf16": 7409 + }, + { + "candidateIds": [ + "sha256:571aecfb31a7f30d7c774fb5528daa8b6c0fea621d41d9f694768412f06bc9dd" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:571aecfb31a7f30d7c774fb5528daa8b6c0fea621d41d9f694768412f06bc9dd": [ + "contains" + ] + }, + "endLine": 184, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_loadBalancerDao", + "startLine": 183, + "startUtf16": 7453 + }, + { + "candidateIds": [ + "sha256:87c36923e23372b81f4a8985bf1d8846d51d79149848f7cd931d2e4eb3653017" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:87c36923e23372b81f4a8985bf1d8846d51d79149848f7cd931d2e4eb3653017": [ + "contains" + ] + }, + "endLine": 186, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_portForwardingRulesDao", + "startLine": 185, + "startUtf16": 7503 + }, + { + "candidateIds": [ + "sha256:1ebcef1c61713cb6f8314fa6f86cf03965adb8269643fe46abf8dba3c4386166" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:1ebcef1c61713cb6f8314fa6f86cf03965adb8269643fe46abf8dba3c4386166": [ + "contains" + ] + }, + "endLine": 188, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_configDao", + "startLine": 187, + "startUtf16": 7567 + }, + { + "candidateIds": [ + "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd": [ + "contains" + ] + }, + "endLine": 190, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_hostDetailDao", + "startLine": 189, + "startUtf16": 7612 + }, + { + "candidateIds": [ + "sha256:6f2796dc195083076baf982f607d430765bf88b00d757324ebf575399210b253" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:6f2796dc195083076baf982f607d430765bf88b00d757324ebf575399210b253": [ + "contains" + ] + }, + "endLine": 192, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkLBDao", + "startLine": 191, + "startUtf16": 7659 + }, + { + "candidateIds": [ + "sha256:6d7f54f7e690d84260a66c274e6780cce118ed0d220ec5be9ac4cd4bbd738e90" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:6d7f54f7e690d84260a66c274e6780cce118ed0d220ec5be9ac4cd4bbd738e90": [ + "contains" + ] + }, + "endLine": 194, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ntwkSrvcProviderDao", + "startLine": 193, + "startUtf16": 7721 + }, + { + "candidateIds": [ + "sha256:a70bb0240f534f172af6a1599e1b1387c92521e1f3ce1923406335a106220f37" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:a70bb0240f534f172af6a1599e1b1387c92521e1f3ce1923406335a106220f37": [ + "contains" + ] + }, + "endLine": 196, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkExternalFirewallDao", + "startLine": 195, + "startUtf16": 7780 + }, + { + "candidateIds": [ + "sha256:3c075dcbe5d52070a5ab9cf0f5766f0fad33c13725b6fd409de462cf5a6bfa3a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:3c075dcbe5d52070a5ab9cf0f5766f0fad33c13725b6fd409de462cf5a6bfa3a": [ + "contains" + ] + }, + "endLine": 198, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_externalFirewallDeviceDao", + "startLine": 197, + "startUtf16": 7852 + }, + { + "candidateIds": [ + "sha256:df463387e7867f168a977ea770b0c2e42d3ac711c9eaef319d316409b3ff34d5" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:df463387e7867f168a977ea770b0c2e42d3ac711c9eaef319d316409b3ff34d5": [ + "contains" + ] + }, + "endLine": 200, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_podDao", + "startLine": 199, + "startUtf16": 7922 + }, + { + "candidateIds": [ + "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98": [ + "contains" + ] + }, + "endLine": 202, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ipAddrMgr", + "startLine": 201, + "startUtf16": 7975 + }, + { + "candidateIds": [ + "sha256:20e9b04c2483e1bfdf4b1b4c9c9a11480f19f51a38831e97912f1d221565b0ec" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:20e9b04c2483e1bfdf4b1b4c9c9a11480f19f51a38831e97912f1d221565b0ec": [ + "contains" + ] + }, + "endLine": 205, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_itMgr", + "startLine": 203, + "startUtf16": 8020 + }, + { + "candidateIds": [ + "sha256:5429377caf6aa5896f946619b8e10f4c27b7d26df2d868e1ac99552929368066" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:5429377caf6aa5896f946619b8e10f4c27b7d26df2d868e1ac99552929368066": [ + "contains" + ] + }, + "endLine": 207, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vmDao", + "startLine": 206, + "startUtf16": 8080 + }, + { + "candidateIds": [ + "sha256:87a51688289dfbbf03adacfdc474e916d62b21715729ea72965b360df7b93846" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:87a51688289dfbbf03adacfdc474e916d62b21715729ea72965b360df7b93846": [ + "contains" + ] + }, + "endLine": 209, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_templateDao", + "startLine": 208, + "startUtf16": 8118 + }, + { + "candidateIds": [ + "sha256:b94808bee24294075ad29f77711b9b85880f41e95ff1399c912849b0dfc80991" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:b94808bee24294075ad29f77711b9b85880f41e95ff1399c912849b0dfc80991": [ + "contains" + ] + }, + "endLine": 211, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_serviceOfferingDao", + "startLine": 210, + "startUtf16": 8162 + }, + { + "candidateIds": [ + "sha256:afaf119206367274bed1d97faf13a0bd50d010f5b926caa148e2d073d64118f2" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:afaf119206367274bed1d97faf13a0bd50d010f5b926caa148e2d073d64118f2": [ + "contains" + ] + }, + "endLine": 213, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalProviderDao", + "startLine": 212, + "startUtf16": 8218 + }, + { + "candidateIds": [ + "sha256:80ce3bd390663c2fec5a922cf040ac13ebd57870815a71ecd7005c5fecc02147" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:80ce3bd390663c2fec5a922cf040ac13ebd57870815a71ecd7005c5fecc02147": [ + "contains" + ] + }, + "endLine": 215, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vrProviderDao", + "startLine": 214, + "startUtf16": 8290 + }, + { + "candidateIds": [ + "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c": [ + "contains" + ] + }, + "endLine": 217, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_defaultLbCapacity", + "startLine": 217, + "startUtf16": 8348 + }, + { + "candidateIds": [ + "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253": [ + "contains" + ] + }, + "endLine": 218, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "s_logger", + "startLine": 218, + "startUtf16": 8385 + }, + { + "candidateIds": [ + "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe": [ + "contains" + ] + }, + "endLine": 326, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "addExternalLoadBalancer", + "startLine": 220, + "startUtf16": 8509 + }, + { + "candidateIds": [ + "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d": [ + "contains" + ] + }, + "endLine": 372, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "deleteExternalLoadBalancer", + "startLine": 328, + "startUtf16": 14393 + }, + { + "candidateIds": [ + "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14": [ + "contains" + ] + }, + "endLine": 399, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "listExternalLoadBalancers", + "startLine": 374, + "startUtf16": 16690 + }, + { + "candidateIds": [ + "sha256:8adc07923460de74eb5748e360bbb92ef0268fe5e06e67deed7ae0ade9e6c599" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8adc07923460de74eb5748e360bbb92ef0268fe5e06e67deed7ae0ade9e6c599": [ + "contains" + ] + }, + "endLine": 411, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createExternalLoadBalancerResponse", + "startLine": 401, + "startUtf16": 17991 + }, + { + "candidateIds": [ + "sha256:86bf7e6c3535dd83a5d6e0b4b9a0c72843feea0627119e1a0bba516742a4bd82" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:86bf7e6c3535dd83a5d6e0b4b9a0c72843feea0627119e1a0bba516742a4bd82": [ + "contains" + ] + }, + "endLine": 415, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getExternalLoadBalancerResourceGuid", + "startLine": 413, + "startUtf16": 18702 + }, + { + "candidateIds": [ + "sha256:6f0ff34209385f110023262bc92b8dcdf132314e4bf1d98a12fa2ebcc63b19b6" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:6f0ff34209385f110023262bc92b8dcdf132314e4bf1d98a12fa2ebcc63b19b6": [ + "contains" + ] + }, + "endLine": 427, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getExternalLoadBalancerForNetwork", + "startLine": 417, + "startUtf16": 18883 + }, + { + "candidateIds": [ + "sha256:46f0f79d1533633b212cab83d54110ac544397f62812689fda8947b907f3b29f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:46f0f79d1533633b212cab83d54110ac544397f62812689fda8947b907f3b29f": [ + "contains" + ] + }, + "endLine": 432, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "setExternalLoadBalancerForNetwork", + "startLine": 429, + "startUtf16": 19438 + }, + { + "candidateIds": [ + "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f": [ + "contains" + ] + }, + "endLine": 596, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "allocateLoadBalancerForNetwork", + "startLine": 434, + "startUtf16": 19729 + }, + { + "candidateIds": [ + "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21": [ + "contains" + ] + }, + "endLine": 676, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "findSuitableLoadBalancerForNetwork", + "startLine": 598, + "startUtf16": 31774 + }, + { + "candidateIds": [ + "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca": [ + "contains" + ] + }, + "endLine": 760, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "freeLoadBalancerForNetwork", + "startLine": 678, + "startUtf16": 36091 + }, + { + "candidateIds": [ + "sha256:9d9f417a45113f8597ed72b885546110a914bf65f1ba0970fb41711d472176a6" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:9d9f417a45113f8597ed72b885546110a914bf65f1ba0970fb41711d472176a6": [ + "contains" + ] + }, + "endLine": 770, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "applyStaticNatRuleForInlineLBRule", + "startLine": 762, + "startUtf16": 41141 + }, + { + "candidateIds": [ + "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952": [ + "contains" + ] + }, + "endLine": 887, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getLoadBalancingIpNic", + "startLine": 797, + "startUtf16": 42332 + }, + { + "candidateIds": [ + "sha256:752125af788c4b388a7727ebb0bd59d8ad956b6ff850d7f9200ef9f8049b99ae" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:752125af788c4b388a7727ebb0bd59d8ad956b6ff850d7f9200ef9f8049b99ae": [ + "contains" + ] + }, + "endLine": 897, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "isNccServiceProvider", + "startLine": 889, + "startUtf16": 47348 + }, + { + "candidateIds": [ + "sha256:01ab66a3921360bcb5029e7eef6478d533b6bd540cdf3d673871cfcaf9112617" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:01ab66a3921360bcb5029e7eef6478d533b6bd540cdf3d673871cfcaf9112617": [ + "contains" + ] + }, + "endLine": 902, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getNetScalerControlCenterForNetwork", + "startLine": 899, + "startUtf16": 47689 + }, + { + "candidateIds": [ + "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e": [ + "contains" + ] + }, + "endLine": 1029, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "applyLoadBalancerRules", + "startLine": 904, + "startUtf16": 47938 + }, + { + "candidateIds": [ + "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6": [ + "contains" + ] + }, + "endLine": 1143, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "manageGuestNetworkWithExternalLoadBalancer", + "startLine": 1031, + "startUtf16": 54714 + }, + { + "candidateIds": [ + "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28": [ + "contains" + ] + }, + "endLine": 1151, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "configure", + "startLine": 1145, + "startUtf16": 61004 + }, + { + "candidateIds": [ + "sha256:fb590a544c46e226adecd60e84077c8a28f6ff11c01acbdc0de2932cc88cda58" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:fb590a544c46e226adecd60e84077c8a28f6ff11c01acbdc0de2932cc88cda58": [ + "contains" + ] + }, + "endLine": 1156, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "start", + "startLine": 1153, + "startUtf16": 61404 + }, + { + "candidateIds": [ + "sha256:8a635505061c04f703bc712c1741a9ceca50103ed1e34225030d69799b6914c7" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8a635505061c04f703bc712c1741a9ceca50103ed1e34225030d69799b6914c7": [ + "contains" + ] + }, + "endLine": 1161, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "stop", + "startLine": 1158, + "startUtf16": 61475 + }, + { + "candidateIds": [ + "sha256:5d09fb6526536d8993f2f6a4b413da10a6d5649f91180f8477dbff29b95acbaf" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:5d09fb6526536d8993f2f6a4b413da10a6d5649f91180f8477dbff29b95acbaf": [ + "contains" + ] + }, + "endLine": 1167, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createHostVOForConnectedAgent", + "startLine": 1163, + "startUtf16": 61545 + }, + { + "candidateIds": [ + "sha256:2dbf8171417a431813d9292dcb33d4b892235e2b8e030827bad7758c907cb715" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:2dbf8171417a431813d9292dcb33d4b892235e2b8e030827bad7758c907cb715": [ + "contains" + ] + }, + "endLine": 1181, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createHostVOForDirectConnectAgent", + "startLine": 1169, + "startUtf16": 61715 + }, + { + "candidateIds": [ + "sha256:61f2d6e317ab87cf17a10ebc651c77a2a25096f25639073246c0022105274606" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:61f2d6e317ab87cf17a10ebc651c77a2a25096f25639073246c0022105274606": [ + "contains" + ] + }, + "endLine": 1189, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "deleteHost", + "startLine": 1183, + "startUtf16": 62262 + }, + { + "candidateIds": [ + "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42": [ + "contains" + ] + }, + "endLine": 1211, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getIpDeployerForInlineMode", + "startLine": 1191, + "startUtf16": 62575 + }, + { + "candidateIds": [ + "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50": [ + "contains" + ] + }, + "endLine": 1297, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getLBHealthChecks", + "startLine": 1213, + "startUtf16": 63710 + }, + { + "candidateIds": [ + "sha256:0f0ac8b8d8171327954faed1126533db91c1072651d20186db9b60887a4beab3" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:0f0ac8b8d8171327954faed1126533db91c1072651d20186db9b60887a4beab3": [ + "contains" + ] + }, + "endLine": 1309, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getPlaceholderNic", + "startLine": 1299, + "startUtf16": 68119 + } + ], + "sampleId": 8528735, + "sourceRole": "production-class" + }, + { + "classId": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "classification": "unanimous-none", + "members": [ + { + "candidateIds": [ + "sha256:800efd6d52e2127c65ff7f020dabc4e9e0dd3a4058cb35e9363cfb925d1ac80b" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:800efd6d52e2127c65ff7f020dabc4e9e0dd3a4058cb35e9363cfb925d1ac80b": [ + "contains" + ] + }, + "endLine": 27, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "isoData", + "startLine": 26, + "startUtf16": 946 + }, + { + "candidateIds": [ + "sha256:c976047893b66f10cfc82a8fc1771d8a7763cedf7b044323107b27a4202d3817" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:c976047893b66f10cfc82a8fc1771d8a7763cedf7b044323107b27a4202d3817": [ + "contains" + ] + }, + "endLine": 29, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "isoFile", + "startLine": 29, + "startUtf16": 1014 + }, + { + "candidateIds": [ + "sha256:4d475e4306639a2f27d07d42d806992f7f56e980fb78eb2cd6e655fb84017f1d" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:4d475e4306639a2f27d07d42d806992f7f56e980fb78eb2cd6e655fb84017f1d": [ + "contains" + ] + }, + "endLine": 30, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "create", + "startLine": 30, + "startUtf16": 1042 + }, + { + "candidateIds": [ + "sha256:14456682777a4ff64721ed0a34adc9e91a1484ba7594d74ba3931b23d1b058dc" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:14456682777a4ff64721ed0a34adc9e91a1484ba7594d74ba3931b23d1b058dc": [ + "contains" + ] + }, + "endLine": 31, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "destStore", + "startLine": 31, + "startUtf16": 1078 + }, + { + "candidateIds": [ + "sha256:8e64ade8bc0929310169d839594fb25c73641f5e9bf97d1699ce13a16bb62728" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8e64ade8bc0929310169d839594fb25c73641f5e9bf97d1699ce13a16bb62728": [ + "contains" + ] + }, + "endLine": 43, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "executeInSequence", + "startLine": 40, + "startUtf16": 1363 + }, + { + "candidateIds": [ + "sha256:7fa67675b5f04e758a02243355d2fbb68eb9d9c685cdb7b2b1c192d0ea5bd3d1" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:7fa67675b5f04e758a02243355d2fbb68eb9d9c685cdb7b2b1c192d0ea5bd3d1": [ + "contains" + ] + }, + "endLine": 47, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getIsoData", + "startLine": 45, + "startUtf16": 1447 + }, + { + "candidateIds": [ + "sha256:d999831bb8489f58708b7121238ed367baa1a1b1bde30984926039f9a9951052" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:d999831bb8489f58708b7121238ed367baa1a1b1bde30984926039f9a9951052": [ + "contains" + ] + }, + "endLine": 51, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "isCreate", + "startLine": 49, + "startUtf16": 1511 + }, + { + "candidateIds": [ + "sha256:4a8d6dc8071557345615646d5628ca493b826d606fbea4a8a4906bbafc103530" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:4a8d6dc8071557345615646d5628ca493b826d606fbea4a8a4906bbafc103530": [ + "contains" + ] + }, + "endLine": 55, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getDestStore", + "startLine": 53, + "startUtf16": 1573 + }, + { + "candidateIds": [ + "sha256:4353f0a8ccdddeb491539282f4ccf823780cea0bd83399b0c460602c270f9d9a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:4353f0a8ccdddeb491539282f4ccf823780cea0bd83399b0c460602c270f9d9a": [ + "contains" + ] + }, + "endLine": 59, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getIsoFile", + "startLine": 57, + "startUtf16": 1646 + } + ], + "sampleId": 8537138, + "sourceRole": "production-class" + }, + { + "classId": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "classification": "unanimous-major-critical", + "members": [ + { + "candidateIds": [ + "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2": [ + "contains" + ] + }, + "endLine": 64, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "s_logger", + "startLine": 64, + "startUtf16": 2824 + }, + { + "candidateIds": [ + "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae": [ + "contains" + ] + }, + "endLine": 66, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_host", + "startLine": 66, + "startUtf16": 2907 + }, + { + "candidateIds": [ + "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db": [ + "contains" + ] + }, + "endLine": 67, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_adminuser", + "startLine": 67, + "startUtf16": 2939 + }, + { + "candidateIds": [ + "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868": [ + "contains" + ] + }, + "endLine": 68, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_adminpass", + "startLine": 68, + "startUtf16": 2976 + }, + { + "candidateIds": [ + "sha256:cff03c478a6d9c6b6fb9b7e9993b9238e8c8962279574b401884c9f506cf4a3c" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:cff03c478a6d9c6b6fb9b7e9993b9238e8c8962279574b401884c9f506cf4a3c": [ + "contains" + ] + }, + "endLine": 70, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_client", + "startLine": 70, + "startUtf16": 3014 + }, + { + "candidateIds": [ + "sha256:9b1b0b79581c7123928906a67eb2fad96fff3c2c2d4cb778e3d52d9d95a686ff" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:9b1b0b79581c7123928906a67eb2fad96fff3c2c2d4cb778e3d52d9d95a686ff": [ + "contains" + ] + }, + "endLine": 92, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createMethod", + "startLine": 72, + "startUtf16": 3056 + }, + { + "candidateIds": [ + "sha256:888510f556c4e8f31e232a41347374f3ba4e7e6cf33f4d659a906f7476edbdaf" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:888510f556c4e8f31e232a41347374f3ba4e7e6cf33f4d659a906f7476edbdaf": [ + "contains" + ] + }, + "endLine": 109, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "getSwitchStatus", + "startLine": 106, + "startUtf16": 4361 + }, + { + "candidateIds": [ + "sha256:ec1f2cad8ded369ed6c7595e63ae52a51e539a42ad568a730d9699ed29a76486" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:ec1f2cad8ded369ed6c7595e63ae52a51e539a42ad568a730d9699ed29a76486": [ + "contains" + ] + }, + "endLine": 125, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createNetwork", + "startLine": 114, + "startUtf16": 4550 + }, + { + "candidateIds": [ + "sha256:e9217b2c0f50edab646125629b420dcc586b34e2af784ee14408fad1194cf98b" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:e9217b2c0f50edab646125629b420dcc586b34e2af784ee14408fad1194cf98b": [ + "contains" + ] + }, + "endLine": 139, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "activatePortProfile", + "startLine": 130, + "startUtf16": 4968 + }, + { + "candidateIds": [ + "sha256:068d4f1198a76004973f16ecb2d949b4303549b876e9d02b91c94d86f04a2123" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:068d4f1198a76004973f16ecb2d949b4303549b876e9d02b91c94d86f04a2123": [ + "contains" + ] + }, + "endLine": 154, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createPortProfile", + "startLine": 144, + "startUtf16": 5492 + }, + { + "candidateIds": [ + "sha256:0920c1cf1be925468a829e3cc3d24f6076ffe387269b0e2eed1b5a3cbbcdd906" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:0920c1cf1be925468a829e3cc3d24f6076ffe387269b0e2eed1b5a3cbbcdd906": [ + "contains" + ] + }, + "endLine": 166, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createVlanSubProfile", + "startLine": 159, + "startUtf16": 6006 + }, + { + "candidateIds": [ + "sha256:051dd269edf96108bb4e1e3820b135226d187e8f8852c55879e3f7f00b2241c9" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:051dd269edf96108bb4e1e3820b135226d187e8f8852c55879e3f7f00b2241c9": [ + "contains" + ] + }, + "endLine": 210, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "configureVlanSubProfile", + "startLine": 174, + "startUtf16": 6612 + }, + { + "candidateIds": [ + "sha256:c90e535df61b390d74b0efa7dee198e3699d514092870ba6f55099eeed3c1cfc" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:c90e535df61b390d74b0efa7dee198e3699d514092870ba6f55099eeed3c1cfc": [ + "contains" + ] + }, + "endLine": 225, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createInterfaceVlan", + "startLine": 215, + "startUtf16": 8321 + }, + { + "candidateIds": [ + "sha256:c2f13be6a70033e35efc1073ce0df225d417952f21d086c765918bf91d15c76c" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:c2f13be6a70033e35efc1073ce0df225d417952f21d086c765918bf91d15c76c": [ + "contains" + ] + }, + "endLine": 242, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "associateMacToNetwork", + "startLine": 230, + "startUtf16": 8822 + }, + { + "candidateIds": [ + "sha256:d3e1a1a3224e2e680ae9f2d9edeabda19b8afa1f6041a348e0beda2d54919a99" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:d3e1a1a3224e2e680ae9f2d9edeabda19b8afa1f6041a348e0beda2d54919a99": [ + "contains" + ] + }, + "endLine": 260, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "disassociateMacFromNetwork", + "startLine": 247, + "startUtf16": 9536 + }, + { + "candidateIds": [ + "sha256:0838a105e39a8d84253a61f5359d59730a3b32c0af4acdbe8a20788323cefe26" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:0838a105e39a8d84253a61f5359d59730a3b32c0af4acdbe8a20788323cefe26": [ + "contains" + ] + }, + "endLine": 274, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deleteNetwork", + "startLine": 265, + "startUtf16": 10278 + }, + { + "candidateIds": [ + "sha256:ef1dd48e1af37a7cc2fd05bdecc4771cc2cfbddf2a3b68ae17850f0eb80f65f4" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:ef1dd48e1af37a7cc2fd05bdecc4771cc2cfbddf2a3b68ae17850f0eb80f65f4": [ + "contains" + ] + }, + "endLine": 290, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deleteInterfaceVlan", + "startLine": 279, + "startUtf16": 10622 + }, + { + "candidateIds": [ + "sha256:5d3594955636b7c623a86f88136ff00fd1ce6d86b3776fce7e8fd1ce5c74f109" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:5d3594955636b7c623a86f88136ff00fd1ce6d86b3776fce7e8fd1ce5c74f109": [ + "contains" + ] + }, + "endLine": 306, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deactivatePortProfile", + "startLine": 295, + "startUtf16": 11143 + }, + { + "candidateIds": [ + "sha256:6e73ee05bdf87d24c1e4562d6a0ac99e11db7722146f76b640fec2a36bbb5ab6" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:6e73ee05bdf87d24c1e4562d6a0ac99e11db7722146f76b640fec2a36bbb5ab6": [ + "contains" + ] + }, + "endLine": 318, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deletePortProfile", + "startLine": 311, + "startUtf16": 11795 + }, + { + "candidateIds": [ + "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2": [ + "contains" + ] + }, + "endLine": 353, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeUpdateObject", + "startLine": 320, + "startUtf16": 12164 + }, + { + "candidateIds": [ + "sha256:1537123f4043eeafb6e3d6a9ffe2ebe76214eff90502bce2828d5505ca96c7db" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:1537123f4043eeafb6e3d6a9ffe2ebe76214eff90502bce2828d5505ca96c7db": [ + "contains" + ] + }, + "endLine": 375, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "convertToString", + "startLine": 355, + "startUtf16": 13558 + }, + { + "candidateIds": [ + "sha256:a1653a754e7b32dd54c190546d66856b1733a208f69f20cbe30ef629d730cab5" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:a1653a754e7b32dd54c190546d66856b1733a208f69f20cbe30ef629d730cab5": [ + "contains" + ] + }, + "endLine": 400, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "convertToXML", + "startLine": 377, + "startUtf16": 14281 + }, + { + "candidateIds": [ + "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2": [ + "contains" + ] + }, + "endLine": 432, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeCreateObject", + "startLine": 402, + "startUtf16": 15110 + }, + { + "candidateIds": [ + "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f": [ + "contains" + ] + }, + "endLine": 479, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeRetreiveStatus", + "startLine": 434, + "startUtf16": 16495 + }, + { + "candidateIds": [ + "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f": [ + "contains" + ] + }, + "endLine": 506, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeDeleteObject", + "startLine": 481, + "startUtf16": 18466 + }, + { + "candidateIds": [ + "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7": [ + "contains" + ] + }, + "endLine": 523, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeMethod", + "startLine": 508, + "startUtf16": 19681 + }, + { + "candidateIds": [ + "sha256:c33e817de6476414ba26862ff9d053165e0c66ce5145835b2fdc9fc12914f1f0" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:c33e817de6476414ba26862ff9d053165e0c66ce5145835b2fdc9fc12914f1f0": [ + "contains" + ] + }, + "endLine": 540, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "responseToErrorMessage", + "startLine": 525, + "startUtf16": 20386 + } + ], + "sampleId": 8538037, + "sourceRole": "production-class" + }, + { + "classId": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "classification": "unanimous-none", + "members": [ + { + "candidateIds": [ + "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033": [ + "contains" + ] + }, + "endLine": 29, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "field", + "name": "name", + "startLine": 27, + "startUtf16": 1096 + }, + { + "candidateIds": [ + "sha256:12f9f388f62ac7c285c0fd66e2338e2dad060ff7e4a84c5403a1a1fa72606d63" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:12f9f388f62ac7c285c0fd66e2338e2dad060ff7e4a84c5403a1a1fa72606d63": [ + "contains" + ] + }, + "endLine": 33, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "method", + "name": "getName", + "startLine": 31, + "startUtf16": 1213 + }, + { + "candidateIds": [ + "sha256:d610f427834da5212c077f597a677863c177e7726d9e8e4628cf3051e950282d" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:d610f427834da5212c077f597a677863c177e7726d9e8e4628cf3051e950282d": [ + "contains" + ] + }, + "endLine": 37, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "method", + "name": "setName", + "startLine": 35, + "startUtf16": 1271 + } + ], + "sampleId": 8539645, + "sourceRole": "production-class" + } + ], + "directed": true, + "edgeCount": 502158, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "nodeCount": 173689, + "rawSha256": "211c00fffb55f3f74e2dc797036d52323048e544c360069db55d1763fb5b4b77", + "repository": "apache/cloudstack", + "tool": "compass" + }, + { + "cases": [ + { + "classId": "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl", + "classification": "unanimous-major-critical", + "members": [ + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 144, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkExternalLBDao", + "startLine": 143, + "startUtf16": 6447 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 146, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_externalLoadBalancerDeviceDao", + "startLine": 145, + "startUtf16": 6517 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 148, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_hostDao", + "startLine": 147, + "startUtf16": 6595 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 150, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_dcDao", + "startLine": 149, + "startUtf16": 6629 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 152, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkModel", + "startLine": 151, + "startUtf16": 6667 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 154, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkMgr", + "startLine": 153, + "startUtf16": 6711 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 156, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_inlineLoadBalancerNicMapDao", + "startLine": 155, + "startUtf16": 6768 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 158, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_nicDao", + "startLine": 157, + "startUtf16": 6842 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 160, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_agentMgr", + "startLine": 159, + "startUtf16": 6874 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 162, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_resourceMgr", + "startLine": 161, + "startUtf16": 6914 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 164, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ipAddressDao", + "startLine": 163, + "startUtf16": 6960 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 166, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vlanDao", + "startLine": 165, + "startUtf16": 7004 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 168, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkOfferingDao", + "startLine": 167, + "startUtf16": 7038 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 170, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_accountDao", + "startLine": 169, + "startUtf16": 7094 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 172, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalNetworkDao", + "startLine": 171, + "startUtf16": 7134 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 174, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalNetworkServiceProviderDao", + "startLine": 173, + "startUtf16": 7190 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 176, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_accountMgr", + "startLine": 175, + "startUtf16": 7276 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 178, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_userStatsDao", + "startLine": 177, + "startUtf16": 7320 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 180, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkDao", + "startLine": 179, + "startUtf16": 7369 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 182, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_routerDao", + "startLine": 181, + "startUtf16": 7409 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 184, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_loadBalancerDao", + "startLine": 183, + "startUtf16": 7453 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 186, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_portForwardingRulesDao", + "startLine": 185, + "startUtf16": 7503 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 188, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_configDao", + "startLine": 187, + "startUtf16": 7567 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 190, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_hostDetailDao", + "startLine": 189, + "startUtf16": 7612 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 192, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkLBDao", + "startLine": 191, + "startUtf16": 7659 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 194, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ntwkSrvcProviderDao", + "startLine": 193, + "startUtf16": 7721 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 196, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkExternalFirewallDao", + "startLine": 195, + "startUtf16": 7780 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 198, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_externalFirewallDeviceDao", + "startLine": 197, + "startUtf16": 7852 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 200, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_podDao", + "startLine": 199, + "startUtf16": 7922 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 202, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ipAddrMgr", + "startLine": 201, + "startUtf16": 7975 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 205, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_itMgr", + "startLine": 203, + "startUtf16": 8020 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 207, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vmDao", + "startLine": 206, + "startUtf16": 8080 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 209, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_templateDao", + "startLine": 208, + "startUtf16": 8118 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 211, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_serviceOfferingDao", + "startLine": 210, + "startUtf16": 8162 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 213, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalProviderDao", + "startLine": 212, + "startUtf16": 8218 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 215, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vrProviderDao", + "startLine": 214, + "startUtf16": 8290 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 217, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_defaultLbCapacity", + "startLine": 217, + "startUtf16": 8348 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 218, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "s_logger", + "startLine": 218, + "startUtf16": 8385 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_addexternalloadbalancer" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_addexternalloadbalancer": [ + "method" + ] + }, + "endLine": 326, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "addExternalLoadBalancer", + "startLine": 220, + "startUtf16": 8509 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_deleteexternalloadbalancer" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_deleteexternalloadbalancer": [ + "method" + ] + }, + "endLine": 372, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "deleteExternalLoadBalancer", + "startLine": 328, + "startUtf16": 14393 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_listexternalloadbalancers" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_listexternalloadbalancers": [ + "method" + ] + }, + "endLine": 399, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "listExternalLoadBalancers", + "startLine": 374, + "startUtf16": 16690 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_createexternalloadbalancerresponse" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_createexternalloadbalancerresponse": [ + "method" + ] + }, + "endLine": 411, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createExternalLoadBalancerResponse", + "startLine": 401, + "startUtf16": 17991 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getexternalloadbalancerresourceguid" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getexternalloadbalancerresourceguid": [ + "method" + ] + }, + "endLine": 415, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getExternalLoadBalancerResourceGuid", + "startLine": 413, + "startUtf16": 18702 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getexternalloadbalancerfornetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getexternalloadbalancerfornetwork": [ + "method" + ] + }, + "endLine": 427, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getExternalLoadBalancerForNetwork", + "startLine": 417, + "startUtf16": 18883 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_setexternalloadbalancerfornetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_setexternalloadbalancerfornetwork": [ + "method" + ] + }, + "endLine": 432, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "setExternalLoadBalancerForNetwork", + "startLine": 429, + "startUtf16": 19438 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_allocateloadbalancerfornetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_allocateloadbalancerfornetwork": [ + "method" + ] + }, + "endLine": 596, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "allocateLoadBalancerForNetwork", + "startLine": 434, + "startUtf16": 19729 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_findsuitableloadbalancerfornetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_findsuitableloadbalancerfornetwork": [ + "method" + ] + }, + "endLine": 676, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "findSuitableLoadBalancerForNetwork", + "startLine": 598, + "startUtf16": 31774 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_freeloadbalancerfornetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_freeloadbalancerfornetwork": [ + "method" + ] + }, + "endLine": 760, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "freeLoadBalancerForNetwork", + "startLine": 678, + "startUtf16": 36091 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_applystaticnatruleforinlinelbrule" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_applystaticnatruleforinlinelbrule": [ + "method" + ] + }, + "endLine": 770, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "applyStaticNatRuleForInlineLBRule", + "startLine": 762, + "startUtf16": 41141 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getloadbalancingipnic" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getloadbalancingipnic": [ + "method" + ] + }, + "endLine": 887, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getLoadBalancingIpNic", + "startLine": 797, + "startUtf16": 42332 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_isnccserviceprovider" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_isnccserviceprovider": [ + "method" + ] + }, + "endLine": 897, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "isNccServiceProvider", + "startLine": 889, + "startUtf16": 47348 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getnetscalercontrolcenterfornetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getnetscalercontrolcenterfornetwork": [ + "method" + ] + }, + "endLine": 902, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getNetScalerControlCenterForNetwork", + "startLine": 899, + "startUtf16": 47689 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_applyloadbalancerrules" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_applyloadbalancerrules": [ + "method" + ] + }, + "endLine": 1029, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "applyLoadBalancerRules", + "startLine": 904, + "startUtf16": 47938 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_manageguestnetworkwithexternalloadbalancer" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_manageguestnetworkwithexternalloadbalancer": [ + "method" + ] + }, + "endLine": 1143, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "manageGuestNetworkWithExternalLoadBalancer", + "startLine": 1031, + "startUtf16": 54714 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_configure" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_configure": [ + "method" + ] + }, + "endLine": 1151, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "configure", + "startLine": 1145, + "startUtf16": 61004 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_start" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_start": [ + "method" + ] + }, + "endLine": 1156, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "start", + "startLine": 1153, + "startUtf16": 61404 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_stop" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_stop": [ + "method" + ] + }, + "endLine": 1161, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "stop", + "startLine": 1158, + "startUtf16": 61475 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_createhostvoforconnectedagent" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_createhostvoforconnectedagent": [ + "method" + ] + }, + "endLine": 1167, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createHostVOForConnectedAgent", + "startLine": 1163, + "startUtf16": 61545 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_createhostvofordirectconnectagent" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_createhostvofordirectconnectagent": [ + "method" + ] + }, + "endLine": 1181, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createHostVOForDirectConnectAgent", + "startLine": 1169, + "startUtf16": 61715 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_deletehost" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_deletehost": [ + "method" + ] + }, + "endLine": 1189, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "deleteHost", + "startLine": 1183, + "startUtf16": 62262 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getipdeployerforinlinemode" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getipdeployerforinlinemode": [ + "method" + ] + }, + "endLine": 1211, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getIpDeployerForInlineMode", + "startLine": 1191, + "startUtf16": 62575 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getlbhealthchecks" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getlbhealthchecks": [ + "method" + ] + }, + "endLine": 1297, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getLBHealthChecks", + "startLine": 1213, + "startUtf16": 63710 + }, + { + "candidateIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getplaceholdernic" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl_getplaceholdernic": [ + "method" + ] + }, + "endLine": 1309, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getPlaceholderNic", + "startLine": 1299, + "startUtf16": 68119 + } + ], + "sampleId": 8528735, + "sourceRole": "production-class" + }, + { + "classId": "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand", + "classification": "unanimous-none", + "members": [ + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 27, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "isoData", + "startLine": 26, + "startUtf16": 946 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 29, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "isoFile", + "startLine": 29, + "startUtf16": 1014 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 30, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "create", + "startLine": 30, + "startUtf16": 1042 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 31, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "destStore", + "startLine": 31, + "startUtf16": 1078 + }, + { + "candidateIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_executeinsequence" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_executeinsequence": [ + "method" + ] + }, + "endLine": 43, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "executeInSequence", + "startLine": 40, + "startUtf16": 1363 + }, + { + "candidateIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_getisodata" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_getisodata": [ + "method" + ] + }, + "endLine": 47, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getIsoData", + "startLine": 45, + "startUtf16": 1447 + }, + { + "candidateIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_iscreate" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_iscreate": [ + "method" + ] + }, + "endLine": 51, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "isCreate", + "startLine": 49, + "startUtf16": 1511 + }, + { + "candidateIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_getdeststore" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_getdeststore": [ + "method" + ] + }, + "endLine": 55, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getDestStore", + "startLine": 53, + "startUtf16": 1573 + }, + { + "candidateIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_getisofile" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand_getisofile": [ + "method" + ] + }, + "endLine": 59, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getIsoFile", + "startLine": 57, + "startUtf16": 1646 + } + ], + "sampleId": 8537138, + "sourceRole": "production-class" + }, + { + "classId": "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi", + "classification": "unanimous-major-critical", + "members": [ + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 64, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "s_logger", + "startLine": 64, + "startUtf16": 2824 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 66, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_host", + "startLine": 66, + "startUtf16": 2907 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 67, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_adminuser", + "startLine": 67, + "startUtf16": 2939 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 68, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_adminpass", + "startLine": 68, + "startUtf16": 2976 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 70, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_client", + "startLine": 70, + "startUtf16": 3014 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createmethod" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createmethod": [ + "method" + ] + }, + "endLine": 92, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createMethod", + "startLine": 72, + "startUtf16": 3056 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_getswitchstatus" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_getswitchstatus": [ + "method" + ] + }, + "endLine": 109, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "getSwitchStatus", + "startLine": 106, + "startUtf16": 4361 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createnetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createnetwork": [ + "method" + ] + }, + "endLine": 125, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createNetwork", + "startLine": 114, + "startUtf16": 4550 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_activateportprofile" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_activateportprofile": [ + "method" + ] + }, + "endLine": 139, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "activatePortProfile", + "startLine": 130, + "startUtf16": 4968 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createportprofile" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createportprofile": [ + "method" + ] + }, + "endLine": 154, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createPortProfile", + "startLine": 144, + "startUtf16": 5492 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createvlansubprofile" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createvlansubprofile": [ + "method" + ] + }, + "endLine": 166, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createVlanSubProfile", + "startLine": 159, + "startUtf16": 6006 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_configurevlansubprofile" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_configurevlansubprofile": [ + "method" + ] + }, + "endLine": 210, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "configureVlanSubProfile", + "startLine": 174, + "startUtf16": 6612 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createinterfacevlan" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_createinterfacevlan": [ + "method" + ] + }, + "endLine": 225, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createInterfaceVlan", + "startLine": 215, + "startUtf16": 8321 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_associatemactonetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_associatemactonetwork": [ + "method" + ] + }, + "endLine": 242, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "associateMacToNetwork", + "startLine": 230, + "startUtf16": 8822 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_disassociatemacfromnetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_disassociatemacfromnetwork": [ + "method" + ] + }, + "endLine": 260, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "disassociateMacFromNetwork", + "startLine": 247, + "startUtf16": 9536 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_deletenetwork" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_deletenetwork": [ + "method" + ] + }, + "endLine": 274, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deleteNetwork", + "startLine": 265, + "startUtf16": 10278 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_deleteinterfacevlan" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_deleteinterfacevlan": [ + "method" + ] + }, + "endLine": 290, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deleteInterfaceVlan", + "startLine": 279, + "startUtf16": 10622 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_deactivateportprofile" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_deactivateportprofile": [ + "method" + ] + }, + "endLine": 306, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deactivatePortProfile", + "startLine": 295, + "startUtf16": 11143 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_deleteportprofile" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_deleteportprofile": [ + "method" + ] + }, + "endLine": 318, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deletePortProfile", + "startLine": 311, + "startUtf16": 11795 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executeupdateobject" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executeupdateobject": [ + "method" + ] + }, + "endLine": 353, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeUpdateObject", + "startLine": 320, + "startUtf16": 12164 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_converttostring" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_converttostring": [ + "method" + ] + }, + "endLine": 375, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "convertToString", + "startLine": 355, + "startUtf16": 13558 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_converttoxml" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_converttoxml": [ + "method" + ] + }, + "endLine": 400, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "convertToXML", + "startLine": 377, + "startUtf16": 14281 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executecreateobject" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executecreateobject": [ + "method" + ] + }, + "endLine": 432, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeCreateObject", + "startLine": 402, + "startUtf16": 15110 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executeretreivestatus" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executeretreivestatus": [ + "method" + ] + }, + "endLine": 479, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeRetreiveStatus", + "startLine": 434, + "startUtf16": 16495 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executedeleteobject" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executedeleteobject": [ + "method" + ] + }, + "endLine": 506, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeDeleteObject", + "startLine": 481, + "startUtf16": 18466 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executemethod" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_executemethod": [ + "method" + ] + }, + "endLine": 523, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeMethod", + "startLine": 508, + "startUtf16": 19681 + }, + { + "candidateIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_responsetoerrormessage" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi_responsetoerrormessage": [ + "method" + ] + }, + "endLine": 540, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "responseToErrorMessage", + "startLine": 525, + "startUtf16": 20386 + } + ], + "sampleId": 8538037, + "sourceRole": "production-class" + }, + { + "classId": "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse", + "classification": "unanimous-none", + "members": [ + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 29, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "field", + "name": "name", + "startLine": 27, + "startUtf16": 1096 + }, + { + "candidateIds": [ + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse_getname" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse_getname": [ + "method" + ] + }, + "endLine": 33, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "method", + "name": "getName", + "startLine": 31, + "startUtf16": 1213 + }, + { + "candidateIds": [ + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse_setname" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse_setname": [ + "method" + ] + }, + "endLine": 37, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "method", + "name": "setName", + "startLine": 35, + "startUtf16": 1271 + } + ], + "sampleId": 8539645, + "sourceRole": "production-class" + } + ], + "directed": false, + "edgeCount": 340129, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72", + "nodeCount": 93793, + "rawSha256": "b3e19f9d7f3b34a7287735ad816d308bb58716ac5589e12402d3b38a4a2a8c66", + "repository": "apache/cloudstack", + "tool": "graphify" + }, + { + "cases": [ + { + "classId": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "classification": "unanimous-major-critical", + "members": [ + { + "candidateIds": [ + "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5": [ + "contains" + ] + }, + "endLine": 42, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_ADD", + "startLine": 42, + "startUtf16": 1456 + }, + { + "candidateIds": [ + "sha256:e86338032c69f208ec5c55262f82d68ad21b0041b53e362cb85e4b905770535f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:e86338032c69f208ec5c55262f82d68ad21b0041b53e362cb85e4b905770535f": [ + "contains" + ] + }, + "endLine": 43, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_ELEMENT_MAP", + "startLine": 43, + "startUtf16": 1531 + }, + { + "candidateIds": [ + "sha256:48af92072fcc8d4faa6ece712014645fbc674ea1c2585a489c42bedbc0c194b2" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:48af92072fcc8d4faa6ece712014645fbc674ea1c2585a489c42bedbc0c194b2": [ + "contains" + ] + }, + "endLine": 44, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_FILTER", + "startLine": 44, + "startUtf16": 1621 + }, + { + "candidateIds": [ + "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5": [ + "contains" + ] + }, + "endLine": 45, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_REMOVE", + "startLine": 45, + "startUtf16": 1702 + }, + { + "candidateIds": [ + "sha256:46b54e3fcd64d7510776bdef13bddf2d390d2a998af849eb34a7d2a27a4b2c7c" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:46b54e3fcd64d7510776bdef13bddf2d390d2a998af849eb34a7d2a27a4b2c7c": [ + "contains" + ] + }, + "endLine": 46, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDINGS", + "startLine": 46, + "startUtf16": 1783 + }, + { + "candidateIds": [ + "sha256:4a4c257e89d7b7deacb707b8f099649dc836330f8b8d9afcf7faa5d34169001e" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:4a4c257e89d7b7deacb707b8f099649dc836330f8b8d9afcf7faa5d34169001e": [ + "contains" + ] + }, + "endLine": 47, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_CONFLICT_ELEMENT_MAP", + "startLine": 47, + "startUtf16": 1853 + }, + { + "candidateIds": [ + "sha256:abe3945fc735349d15a5fb51549278244a73c793ee5b278ed190efb9dfa65e52" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:abe3945fc735349d15a5fb51549278244a73c793ee5b278ed190efb9dfa65e52": [ + "contains" + ] + }, + "endLine": 64, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "deletes", + "startLine": 49, + "startUtf16": 1945 + }, + { + "candidateIds": [ + "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8": [ + "contains" + ] + }, + "endLine": 66, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "allParameterizedCommands", + "startLine": 66, + "startUtf16": 2550 + }, + { + "candidateIds": [ + "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15": [ + "contains" + ] + }, + "endLine": 67, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingManager", + "startLine": 67, + "startUtf16": 2596 + }, + { + "candidateIds": [ + "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa": [ + "contains" + ] + }, + "endLine": 72, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingElements", + "startLine": 72, + "startUtf16": 2697 + }, + { + "candidateIds": [ + "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8": [ + "contains" + ] + }, + "endLine": 77, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingToElement", + "startLine": 77, + "startUtf16": 2814 + }, + { + "candidateIds": [ + "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590": [ + "contains" + ] + }, + "endLine": 83, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "commandToElement", + "startLine": 83, + "startUtf16": 2945 + }, + { + "candidateIds": [ + "sha256:e6db48cdf4bf54d6fcada565e1f0ae8f1c5f39193d3359e1f28c1e4b54718c11" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:e6db48cdf4bf54d6fcada565e1f0ae8f1c5f39193d3359e1f28c1e4b54718c11": [ + "contains" + ] + }, + "endLine": 99, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "copy", + "startLine": 96, + "startUtf16": 3115 + }, + { + "candidateIds": [ + "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7": [ + "contains" + ] + }, + "endLine": 119, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "copy", + "startLine": 106, + "startUtf16": 3281 + }, + { + "candidateIds": [ + "sha256:4755a0411c85fc28af82c8a79fae3cf3e7d4e7f131c077ea998d6e4fd50a614a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:4755a0411c85fc28af82c8a79fae3cf3e7d4e7f131c077ea998d6e4fd50a614a": [ + "contains" + ] + }, + "endLine": 126, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getBindings", + "startLine": 124, + "startUtf16": 3857 + }, + { + "candidateIds": [ + "sha256:3941d61bd83f869715323ddb5ea2544d8a86f592c3ebd73bdf17cc2a4bb5bf2a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:3941d61bd83f869715323ddb5ea2544d8a86f592c3ebd73bdf17cc2a4bb5bf2a": [ + "contains" + ] + }, + "endLine": 133, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getBindingToElement", + "startLine": 131, + "startUtf16": 3971 + }, + { + "candidateIds": [ + "sha256:2f2d6d938e1e86d8f47a275c7fb6281fe2304e8b4f9fba32e6a854c7f7712d97" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:2f2d6d938e1e86d8f47a275c7fb6281fe2304e8b4f9fba32e6a854c7f7712d97": [ + "contains" + ] + }, + "endLine": 140, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getCommandToElement", + "startLine": 138, + "startUtf16": 4090 + }, + { + "candidateIds": [ + "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3": [ + "contains" + ] + }, + "endLine": 198, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "init", + "startLine": 149, + "startUtf16": 4255 + }, + { + "candidateIds": [ + "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c": [ + "contains" + ] + }, + "endLine": 271, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "refresh", + "startLine": 205, + "startUtf16": 6002 + }, + { + "candidateIds": [ + "sha256:5de804c06b92c3d9f1232936935997b11a73bc19822dcdb0881abf10ed85d78a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:5de804c06b92c3d9f1232936935997b11a73bc19822dcdb0881abf10ed85d78a": [ + "contains" + ] + }, + "endLine": 280, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "remove", + "startLine": 277, + "startUtf16": 8268 + }, + { + "candidateIds": [ + "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe": [ + "contains" + ] + }, + "endLine": 334, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "remove", + "startLine": 287, + "startUtf16": 8474 + }, + { + "candidateIds": [ + "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829": [ + "contains" + ] + }, + "endLine": 398, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "restoreBinding", + "startLine": 343, + "startUtf16": 10390 + }, + { + "candidateIds": [ + "sha256:ebe0acac959f694b9197d93b927d5d62c757b44c204fe69ad731e96e0e79d164" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:ebe0acac959f694b9197d93b927d5d62c757b44c204fe69ad731e96e0e79d164": [ + "contains" + ] + }, + "endLine": 440, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "restoreBinding", + "startLine": 405, + "startUtf16": 12333 + }, + { + "candidateIds": [ + "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a": [ + "contains" + ] + }, + "endLine": 450, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "setBindings", + "startLine": 446, + "startUtf16": 13396 + }, + { + "candidateIds": [ + "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a": [ + "contains" + ] + }, + "endLine": 461, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "setBindingToElement", + "startLine": 456, + "startUtf16": 13669 + } + ], + "sampleId": 6374724, + "sourceRole": "production-class" + }, + { + "classId": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "classification": "unanimous-none", + "members": [ + { + "candidateIds": [ + "sha256:0de842511181a645a1c5b1edb22a6753cfeb304e8bd9f3a2106d708f23bdef04" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:0de842511181a645a1c5b1edb22a6753cfeb304e8bd9f3a2106d708f23bdef04": [ + "contains" + ] + }, + "endLine": 56, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "doGetValue", + "startLine": 55, + "startUtf16": 2415 + }, + { + "candidateIds": [ + "sha256:bc7493b711963bce44c2c29d3384a5b17f1519f00325091548eca0cf9e9591c1" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:bc7493b711963bce44c2c29d3384a5b17f1519f00325091548eca0cf9e9591c1": [ + "contains" + ] + }, + "endLine": 59, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "doSetValue", + "startLine": 58, + "startUtf16": 2471 + }, + { + "candidateIds": [ + "sha256:8758f347b9a5a09265fa75cfcd2d6aff87b5c93c935a75eb28d4629865fc5b04" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8758f347b9a5a09265fa75cfcd2d6aff87b5c93c935a75eb28d4629865fc5b04": [ + "contains" + ] + }, + "endLine": 78, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "adaptListener", + "startLine": 77, + "startUtf16": 3231 + }, + { + "candidateIds": [ + "sha256:45ca0429112d8da14bd8c78fe1e9822d598c80faf9958776cd4fdc5fe3626d99" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:45ca0429112d8da14bd8c78fe1e9822d598c80faf9958776cd4fdc5fe3626d99": [ + "contains" + ] + }, + "endLine": 83, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observe", + "startLine": 80, + "startUtf16": 3356 + }, + { + "candidateIds": [ + "sha256:338048dbcd15e6fab4cf2577df4ecedaae29f38f7522c08f2b37a06152c8ef26" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:338048dbcd15e6fab4cf2577df4ecedaae29f38f7522c08f2b37a06152c8ef26": [ + "contains" + ] + }, + "endLine": 88, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "startLine": 85, + "startUtf16": 3499 + }, + { + "candidateIds": [ + "sha256:9d49b8e964400f8d05bfb0666ab061ccd88290f05336abef2de3cc403029cbb5" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:9d49b8e964400f8d05bfb0666ab061ccd88290f05336abef2de3cc403029cbb5": [ + "contains" + ] + }, + "endLine": 93, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "startLine": 90, + "startUtf16": 3658 + }, + { + "candidateIds": [ + "sha256:45f088a9f53e3e22e77ce7057d862b1f61e087d1934065b2080e10c2469d4679" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:45f088a9f53e3e22e77ce7057d862b1f61e087d1934065b2080e10c2469d4679": [ + "contains" + ] + }, + "endLine": 98, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "startLine": 95, + "startUtf16": 3816 + } + ], + "sampleId": 6391534, + "sourceRole": "production-class" + }, + { + "classId": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "classification": "unanimous-none", + "members": [ + { + "candidateIds": [ + "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605": [ + "contains" + ] + }, + "endLine": 26, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "field", + "name": "values", + "startLine": 26, + "startUtf16": 879 + }, + { + "candidateIds": [ + "sha256:94890255d79eed8dfc72f3ff25d2cf747a32f6637311e8dc38fc6aced0216df4" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:94890255d79eed8dfc72f3ff25d2cf747a32f6637311e8dc38fc6aced0216df4": [ + "contains" + ] + }, + "endLine": 41, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getLength", + "startLine": 38, + "startUtf16": 1160 + }, + { + "candidateIds": [ + "sha256:79cd30c3e452e263e9027183c4017ba020202040e38ad833da4d9108462023c3" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:79cd30c3e452e263e9027183c4017ba020202040e38ad833da4d9108462023c3": [ + "contains" + ] + }, + "endLine": 46, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "item", + "startLine": 43, + "startUtf16": 1225 + }, + { + "candidateIds": [ + "sha256:3637988bf9edece1d0c47e080ad3dd0806abf1f0dc5f7997b7601b4d8d226e9f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:3637988bf9edece1d0c47e080ad3dd0806abf1f0dc5f7997b7601b4d8d226e9f": [ + "contains" + ] + }, + "endLine": 56, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getCssText", + "startLine": 48, + "startUtf16": 1303 + }, + { + "candidateIds": [ + "sha256:31949c69aca7d868e83de432a2034de43d15bc1561242dc6874b007eb64b2700" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:31949c69aca7d868e83de432a2034de43d15bc1561242dc6874b007eb64b2700": [ + "contains" + ] + }, + "endLine": 61, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getCssValueType", + "startLine": 58, + "startUtf16": 1528 + }, + { + "candidateIds": [ + "sha256:23cdcdb6a890c152fb04931c1ac5e32457a025dc6f3a9c87f9df218d4679cd07" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:23cdcdb6a890c152fb04931c1ac5e32457a025dc6f3a9c87f9df218d4679cd07": [ + "contains" + ] + }, + "endLine": 66, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "setCssText", + "startLine": 63, + "startUtf16": 1602 + }, + { + "candidateIds": [ + "sha256:49d95022e2bfafb07103ad7246a6142d3faef61790764535fef2660a701e83cc" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:49d95022e2bfafb07103ad7246a6142d3faef61790764535fef2660a701e83cc": [ + "contains" + ] + }, + "endLine": 75, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "toString", + "startLine": 68, + "startUtf16": 1742 + } + ], + "sampleId": 6406137, + "sourceRole": "production-class" + }, + { + "classId": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "classification": "unanimous-major-critical", + "members": [ + { + "candidateIds": [ + "sha256:8ea2f8bd06166bc1454965ac9f119b4392735032314336c5381c73a01ea83e1e" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8ea2f8bd06166bc1454965ac9f119b4392735032314336c5381c73a01ea83e1e": [ + "contains" + ] + }, + "endLine": 46, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH", + "startLine": 46, + "startUtf16": 2048 + }, + { + "candidateIds": [ + "sha256:ccb6addc4e0421b0b01e3c330ff1b732dc36c88cbbe9af74df00c758653c0248" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:ccb6addc4e0421b0b01e3c330ff1b732dc36c88cbbe9af74df00c758653c0248": [ + "contains" + ] + }, + "endLine": 48, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT", + "startLine": 48, + "startUtf16": 2105 + }, + { + "candidateIds": [ + "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06": [ + "contains" + ] + }, + "endLine": 50, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH_2", + "startLine": 50, + "startUtf16": 2163 + }, + { + "candidateIds": [ + "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368": [ + "contains" + ] + }, + "endLine": 52, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT_2", + "startLine": 52, + "startUtf16": 2222 + }, + { + "candidateIds": [ + "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f": [ + "contains" + ] + }, + "endLine": 54, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "project", + "startLine": 54, + "startUtf16": 2282 + }, + { + "candidateIds": [ + "sha256:f57f58db8834ea4e80eb667fdccc134056fc7316cbd0e7c96b97fe458f802609" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:f57f58db8834ea4e80eb667fdccc134056fc7316cbd0e7c96b97fe458f802609": [ + "contains" + ] + }, + "endLine": 62, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "getShell", + "startLine": 60, + "startUtf16": 2391 + }, + { + "candidateIds": [ + "sha256:1afb1617997a7aefefb167cd7944f22e22795889396c1e55fe955dd128a05637" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:1afb1617997a7aefefb167cd7944f22e22795889396c1e55fe955dd128a05637": [ + "contains" + ] + }, + "endLine": 66, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "getWorkbench", + "startLine": 64, + "startUtf16": 2468 + }, + { + "candidateIds": [ + "sha256:32d4bd92789abc09d7330e5f5f219e62e709ae193f11fcfa6ba0d8a35413065b" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:32d4bd92789abc09d7330e5f5f219e62e709ae193f11fcfa6ba0d8a35413065b": [ + "contains" + ] + }, + "endLine": 93, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "exportWizard", + "startLine": 68, + "startUtf16": 2575 + }, + { + "candidateIds": [ + "sha256:d58d82337ee98bd41da35e7de022206e019cabac84be0e3d07089363bbe96ef0" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:d58d82337ee98bd41da35e7de022206e019cabac84be0e3d07089363bbe96ef0": [ + "contains" + ] + }, + "endLine": 121, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "importWizard", + "startLine": 95, + "startUtf16": 3691 + }, + { + "candidateIds": [ + "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233": [ + "contains" + ] + }, + "endLine": 137, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "tearDown", + "startLine": 126, + "startUtf16": 4872 + }, + { + "candidateIds": [ + "sha256:f78bc8511102afe48c674703f7d62d54782e2432e4a6c68d8dd27abdd57d76f9" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:f78bc8511102afe48c674703f7d62d54782e2432e4a6c68d8dd27abdd57d76f9": [ + "contains" + ] + }, + "endLine": 142, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testExportResources", + "startLine": 139, + "startUtf16": 5188 + }, + { + "candidateIds": [ + "sha256:56971bf7eeb7edde563f3f9e731789ce4f6d3235e56da00fb094b27f8ca8be5a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:56971bf7eeb7edde563f3f9e731789ce4f6d3235e56da00fb094b27f8ca8be5a": [ + "contains" + ] + }, + "endLine": 159, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testImportResources", + "startLine": 156, + "startUtf16": 5843 + }, + { + "candidateIds": [ + "sha256:e54a873b5966e2f238a22e220a28b359e0e5300b7e406ae1d36c8ed09305676a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:e54a873b5966e2f238a22e220a28b359e0e5300b7e406ae1d36c8ed09305676a": [ + "contains" + ] + }, + "endLine": 184, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFile", + "startLine": 173, + "startUtf16": 6564 + }, + { + "candidateIds": [ + "sha256:84d632567a2405ed146814612c2f15a29cb6180dcb63137168fcec56a9fc049b" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:84d632567a2405ed146814612c2f15a29cb6180dcb63137168fcec56a9fc049b": [ + "contains" + ] + }, + "endLine": 217, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFile2", + "startLine": 189, + "startUtf16": 7247 + }, + { + "candidateIds": [ + "sha256:f6e9285d1e575c906c4a2745a4fb347425037c41b0e73e05f0aea32f5cbf7717" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:f6e9285d1e575c906c4a2745a4fb347425037c41b0e73e05f0aea32f5cbf7717": [ + "contains" + ] + }, + "endLine": 229, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFolder", + "startLine": 219, + "startUtf16": 8545 + }, + { + "candidateIds": [ + "sha256:c669d5f72ab4651f722a8c2a00ca215c497ce93662057cad3e1af27dfd3c9ae9" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:c669d5f72ab4651f722a8c2a00ca215c497ce93662057cad3e1af27dfd3c9ae9": [ + "contains" + ] + }, + "endLine": 245, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProjectPage1", + "startLine": 231, + "startUtf16": 9103 + }, + { + "candidateIds": [ + "sha256:eaca2f9a7ff4eb93c781cdaacf4c5167c8edd3983e6c8e1372c3f0cd79a9ea8f" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:eaca2f9a7ff4eb93c781cdaacf4c5167c8edd3983e6c8e1372c3f0cd79a9ea8f": [ + "contains" + ] + }, + "endLine": 269, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProjectPage2", + "startLine": 247, + "startUtf16": 9804 + }, + { + "candidateIds": [ + "sha256:7bc48dcb4430fa7ce5f06b470427fd0b9766a616289bc58f501c7f46f9ea4c7a" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:7bc48dcb4430fa7ce5f06b470427fd0b9766a616289bc58f501c7f46f9ea4c7a": [ + "contains" + ] + }, + "endLine": 305, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProject", + "startLine": 271, + "startUtf16": 10855 + }, + { + "candidateIds": [ + "sha256:1931e4fc19819b6641e89deecf850b3ff055f80f4e47cbd610ebc5274cb73e39" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "sha256:1931e4fc19819b6641e89deecf850b3ff055f80f4e47cbd610ebc5274cb73e39": [ + "contains" + ] + }, + "endLine": 338, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewResource", + "startLine": 307, + "startUtf16": 12339 + } + ], + "sampleId": 6413795, + "sourceRole": "test-class" + } + ], + "directed": true, + "edgeCount": 347974, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "nodeCount": 95084, + "rawSha256": "9aa176340b8c8d59f17d0528acbf182626d49382db125ed5aa4174cfc989106d", + "repository": "eclipse/eclipse.platform.ui", + "tool": "compass" + }, + { + "cases": [ + { + "classId": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel", + "classification": "unanimous-major-critical", + "members": [ + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 42, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_ADD", + "startLine": 42, + "startUtf16": 1456 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 43, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_ELEMENT_MAP", + "startLine": 43, + "startUtf16": 1531 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 44, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_FILTER", + "startLine": 44, + "startUtf16": 1621 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 45, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_REMOVE", + "startLine": 45, + "startUtf16": 1702 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 46, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDINGS", + "startLine": 46, + "startUtf16": 1783 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 47, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_CONFLICT_ELEMENT_MAP", + "startLine": 47, + "startUtf16": 1853 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_deletes" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_deletes": [ + "method" + ] + }, + "endLine": 64, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "deletes", + "startLine": 49, + "startUtf16": 1945 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 66, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "allParameterizedCommands", + "startLine": 66, + "startUtf16": 2550 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 67, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingManager", + "startLine": 67, + "startUtf16": 2596 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 72, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingElements", + "startLine": 72, + "startUtf16": 2697 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 77, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingToElement", + "startLine": 77, + "startUtf16": 2814 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 83, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "commandToElement", + "startLine": 83, + "startUtf16": 2945 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_copy" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_copy": [ + "method" + ] + }, + "endLine": 99, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "copy", + "startLine": 96, + "startUtf16": 3115 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 119, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "copy", + "startLine": 106, + "startUtf16": 3281 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_getbindings" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_getbindings": [ + "method" + ] + }, + "endLine": 126, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getBindings", + "startLine": 124, + "startUtf16": 3857 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_getbindingtoelement" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_getbindingtoelement": [ + "method" + ] + }, + "endLine": 133, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getBindingToElement", + "startLine": 131, + "startUtf16": 3971 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_getcommandtoelement" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_getcommandtoelement": [ + "method" + ] + }, + "endLine": 140, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getCommandToElement", + "startLine": 138, + "startUtf16": 4090 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_init" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_init": [ + "method" + ] + }, + "endLine": 198, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "init", + "startLine": 149, + "startUtf16": 4255 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_refresh" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_refresh": [ + "method" + ] + }, + "endLine": 271, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "refresh", + "startLine": 205, + "startUtf16": 6002 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_remove" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_remove": [ + "method" + ] + }, + "endLine": 280, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "remove", + "startLine": 277, + "startUtf16": 8268 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 334, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "remove", + "startLine": 287, + "startUtf16": 8474 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_restorebinding" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_restorebinding": [ + "method" + ] + }, + "endLine": 398, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "restoreBinding", + "startLine": 343, + "startUtf16": 10390 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 440, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "restoreBinding", + "startLine": 405, + "startUtf16": 12333 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_setbindings" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_setbindings": [ + "method" + ] + }, + "endLine": 450, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "setBindings", + "startLine": 446, + "startUtf16": 13396 + }, + { + "candidateIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_setbindingtoelement" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel_setbindingtoelement": [ + "method" + ] + }, + "endLine": 461, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "setBindingToElement", + "startLine": 456, + "startUtf16": 13669 + } + ], + "sampleId": 6374724, + "sourceRole": "production-class" + }, + { + "classId": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty", + "classification": "unanimous-none", + "members": [ + { + "candidateIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_dogetvalue" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_dogetvalue": [ + "method" + ] + }, + "endLine": 56, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "doGetValue", + "startLine": 55, + "startUtf16": 2415 + }, + { + "candidateIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_dosetvalue" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_dosetvalue": [ + "method" + ] + }, + "endLine": 59, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "doSetValue", + "startLine": 58, + "startUtf16": 2471 + }, + { + "candidateIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_adaptlistener" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_adaptlistener": [ + "method" + ] + }, + "endLine": 78, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "adaptListener", + "startLine": 77, + "startUtf16": 3231 + }, + { + "candidateIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_observe" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_observe": [ + "method" + ] + }, + "endLine": 83, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observe", + "startLine": 80, + "startUtf16": 3356 + }, + { + "candidateIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_observedetail" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty_observedetail": [ + "method" + ] + }, + "endLine": 88, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "startLine": 85, + "startUtf16": 3499 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 93, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "startLine": 90, + "startUtf16": 3658 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 98, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "startLine": 95, + "startUtf16": 3816 + } + ], + "sampleId": 6391534, + "sourceRole": "production-class" + }, + { + "classId": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl", + "classification": "unanimous-none", + "members": [ + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 26, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "field", + "name": "values", + "startLine": 26, + "startUtf16": 879 + }, + { + "candidateIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_getlength" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_getlength": [ + "method" + ] + }, + "endLine": 41, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getLength", + "startLine": 38, + "startUtf16": 1160 + }, + { + "candidateIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_item" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_item": [ + "method" + ] + }, + "endLine": 46, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "item", + "startLine": 43, + "startUtf16": 1225 + }, + { + "candidateIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_getcsstext" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_getcsstext": [ + "method" + ] + }, + "endLine": 56, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getCssText", + "startLine": 48, + "startUtf16": 1303 + }, + { + "candidateIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_getcssvaluetype" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_getcssvaluetype": [ + "method" + ] + }, + "endLine": 61, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getCssValueType", + "startLine": 58, + "startUtf16": 1528 + }, + { + "candidateIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_setcsstext" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_setcsstext": [ + "method" + ] + }, + "endLine": 66, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "setCssText", + "startLine": 63, + "startUtf16": 1602 + }, + { + "candidateIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_tostring" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl_tostring": [ + "method" + ] + }, + "endLine": 75, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "toString", + "startLine": 68, + "startUtf16": 1742 + } + ], + "sampleId": 6406137, + "sourceRole": "production-class" + }, + { + "classId": "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto", + "classification": "unanimous-major-critical", + "members": [ + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 46, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH", + "startLine": 46, + "startUtf16": 2048 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 48, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT", + "startLine": 48, + "startUtf16": 2105 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 50, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH_2", + "startLine": 50, + "startUtf16": 2163 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 52, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT_2", + "startLine": 52, + "startUtf16": 2222 + }, + { + "candidateIds": [], + "directOwnerMatch": false, + "directOwnerRelations": {}, + "endLine": 54, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "project", + "startLine": 54, + "startUtf16": 2282 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_getshell" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_getshell": [ + "method" + ] + }, + "endLine": 62, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "getShell", + "startLine": 60, + "startUtf16": 2391 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_getworkbench" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_getworkbench": [ + "method" + ] + }, + "endLine": 66, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "getWorkbench", + "startLine": 64, + "startUtf16": 2468 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_exportwizard" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_exportwizard": [ + "method" + ] + }, + "endLine": 93, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "exportWizard", + "startLine": 68, + "startUtf16": 2575 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_importwizard" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_importwizard": [ + "method" + ] + }, + "endLine": 121, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "importWizard", + "startLine": 95, + "startUtf16": 3691 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_teardown" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_teardown": [ + "method" + ] + }, + "endLine": 137, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "tearDown", + "startLine": 126, + "startUtf16": 4872 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testexportresources" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testexportresources": [ + "method" + ] + }, + "endLine": 142, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testExportResources", + "startLine": 139, + "startUtf16": 5188 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testimportresources" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testimportresources": [ + "method" + ] + }, + "endLine": 159, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testImportResources", + "startLine": 156, + "startUtf16": 5843 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewfile" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewfile": [ + "method" + ] + }, + "endLine": 184, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFile", + "startLine": 173, + "startUtf16": 6564 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewfile2" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewfile2": [ + "method" + ] + }, + "endLine": 217, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFile2", + "startLine": 189, + "startUtf16": 7247 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewfolder" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewfolder": [ + "method" + ] + }, + "endLine": 229, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFolder", + "startLine": 219, + "startUtf16": 8545 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewprojectpage1" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewprojectpage1": [ + "method" + ] + }, + "endLine": 245, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProjectPage1", + "startLine": 231, + "startUtf16": 9103 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewprojectpage2" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewprojectpage2": [ + "method" + ] + }, + "endLine": 269, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProjectPage2", + "startLine": 247, + "startUtf16": 9804 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewproject" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewproject": [ + "method" + ] + }, + "endLine": 305, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProject", + "startLine": 271, + "startUtf16": 10855 + }, + { + "candidateIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewresource" + ], + "directOwnerMatch": true, + "directOwnerRelations": { + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto_testnewresource": [ + "method" + ] + }, + "endLine": 338, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewResource", + "startLine": 307, + "startUtf16": 12339 + } + ], + "sampleId": 6413795, + "sourceRole": "test-class" + } + ], + "directed": false, + "edgeCount": 258146, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef", + "nodeCount": 70420, + "rawSha256": "271ca0b5fb3c5d11d68dec96a518dffcd92909963fb9a41ad0c524de1d3a77fa", + "repository": "eclipse/eclipse.platform.ui", + "tool": "graphify" + } + ], + "schema": "compass.mlcq-member-paired-review/1", + "scope": "Compare frozen Java source declarations with both stored graph formats.\n\nThis checks selected declaration presence and direct owner links. It does not\nvalidate field-access targets, responsibility cohesion, or god-object labels.\n", + "summaries": [ + { + "ambiguousNodes": 0, + "directOwnerMatches": 95, + "distinctIdentityMatches": 95, + "kind": "method", + "missingNodes": 0, + "sourceDeclarations": 95, + "tool": "compass", + "uniqueNodeMatches": 95 + }, + { + "ambiguousNodes": 0, + "directOwnerMatches": 65, + "distinctIdentityMatches": 65, + "kind": "field", + "missingNodes": 0, + "sourceDeclarations": 65, + "tool": "compass", + "uniqueNodeMatches": 65 + }, + { + "ambiguousNodes": 0, + "directOwnerMatches": 90, + "distinctIdentityMatches": 90, + "kind": "method", + "missingNodes": 5, + "sourceDeclarations": 95, + "tool": "graphify", + "uniqueNodeMatches": 90 + }, + { + "ambiguousNodes": 0, + "directOwnerMatches": 0, + "distinctIdentityMatches": 0, + "kind": "field", + "missingNodes": 65, + "sourceDeclarations": 65, + "tool": "graphify", + "uniqueNodeMatches": 0 + } + ] +} diff --git a/benchmarks/agent_query/mlcq_member_source_registration.json b/benchmarks/agent_query/mlcq_member_source_registration.json new file mode 100644 index 000000000..a8337ba16 --- /dev/null +++ b/benchmarks/agent_query/mlcq_member_source_registration.json @@ -0,0 +1,36 @@ +{ + "schema": "compass.mlcq-member-source-registration/1", + "declaredBeforeExecution": true, + "purpose": "Check stored direct member declarations of the eight externally rated Java classes against an independent JDK syntax parser before using member counts for any responsibility measure.", + "priorRelationReviewSha256": "8271f1777fbeaa81e51cdcaf551b009d8eec0cc231805e0eabc57e4f7baef8d3", + "sourceWitnessesSha256": "648a953a72162910f880e3eb8194200fb95e247af85fb49fe46c18bf864bad2c", + "graphSha256": { + "apache/cloudstack": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "eclipse/eclipse.platform.ui": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74" + }, + "sampleIds": [6374724, 6391534, 6406137, 6413795, 8528735, 8537138, 8538037, 8539645], + "bounds": { + "sourceFiles": 8, + "sourceBytesPerFile": 2097152, + "sourceBytesTotal": 8388608, + "graphBytesPerFile": 1073741824, + "graphRecordBytes": 8388608, + "graphNodesPerFile": 1000000, + "graphEdgesPerFile": 1000000, + "oracleRecords": 10000, + "secondsPerGraph": 300, + "oracleSeconds": 60 + }, + "sourceOracle": { + "implementation": "Use public JDK 17 compiler syntax APIs to parse the exact eight pinned source files without project dependencies or attribution. Capture parse diagnostics and abort on an error. Inspect only direct MethodTree and VariableTree members of the uniquely selected ClassTree at the witnessed class name and source line; do not count nested-class members, inherited members, generated code or implicit constructors.", + "coordinates": "Record each method/constructor and field name, kind, source start/end UTF-16 position and line, preserving overloaded methods and comma-separated field declarations separately. Hash every source file before and after.", + "independenceLimit": "The compiler parser is independent of Compass extraction but is a syntax declaration oracle only. It does not validate call targets, field-access bindings, functional responsibilities or external Blob labels." + }, + "graphMethod": "From each frozen graph, select the previously uniquely joined class ID, then direct directed contains edges to method or field nodes. Preserve edge multiplicity and any member with another distinct class owner. For each selected node record kind, name, file, start/end line and UTF-8 byte span. Compare uniquely by same kind, same name (constructor normalization explicit), same file and overlapping declaration source range. Report unmatched/ambiguous candidates, never choose the first.", + "outputs": "Per-class source and graph method/constructor/field lists, matched/unmatched/ambiguous declarations and graph nodes, all source and graph hashes, parse diagnostics, bounded failures, repeat verification and source-role disclosure. No ranking, classifier threshold, Graphify rerun or held-out claim.", + "interpretation": [ + "One positive external Blob rating is a test class. Preserve that role; do not silently treat it as a production god object.", + "Do not infer class cohesion or low cohesion from counts or missing links. A class-member census is a prerequisite, not a defect diagnosis.", + "The selected eight classes are known development examples. No broad source correctness or cross-language conclusion follows." + ] +} diff --git a/benchmarks/agent_query/mlcq_member_source_review.json b/benchmarks/agent_query/mlcq_member_source_review.json new file mode 100644 index 000000000..7d4f742cd --- /dev/null +++ b/benchmarks/agent_query/mlcq_member_source_review.json @@ -0,0 +1,6420 @@ +{ + "correctedRawRunSha256": "5ce03b063148487e4e087cd11253e9173796cd631271b7531022cbe185b6c479", + "firstRawRunSha256": "96bf7eb3278fe8ba2bbbdf71ec802541a4481ddc81710662be26040fe5b78c58", + "fullCases": [ + { + "classGraph": { + "endByte": 13900, + "endLine": 462, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "kind": "class", + "name": "BindingModel", + "startByte": 1407, + "startLine": 41 + }, + "classId": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "classSource": { + "endLine": 462, + "endUtf16": 13900, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "CLASS", + "name": "BindingModel", + "owner": "", + "recordType": "class", + "startLine": 41, + "startUtf16": 1407 + }, + "classification": "unanimous-major-critical", + "declarationMatches": [ + { + "graphCandidates": [ + "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5" + ], + "source": { + "endLine": 42, + "endUtf16": 1515, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_ADD", + "owner": "BindingModel", + "recordType": "member", + "startLine": 42, + "startUtf16": 1456 + } + }, + { + "graphCandidates": [ + "sha256:e86338032c69f208ec5c55262f82d68ad21b0041b53e362cb85e4b905770535f" + ], + "source": { + "endLine": 43, + "endUtf16": 1605, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_ELEMENT_MAP", + "owner": "BindingModel", + "recordType": "member", + "startLine": 43, + "startUtf16": 1531 + } + }, + { + "graphCandidates": [ + "sha256:48af92072fcc8d4faa6ece712014645fbc674ea1c2585a489c42bedbc0c194b2" + ], + "source": { + "endLine": 44, + "endUtf16": 1686, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_FILTER", + "owner": "BindingModel", + "recordType": "member", + "startLine": 44, + "startUtf16": 1621 + } + }, + { + "graphCandidates": [ + "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5" + ], + "source": { + "endLine": 45, + "endUtf16": 1767, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_REMOVE", + "owner": "BindingModel", + "recordType": "member", + "startLine": 45, + "startUtf16": 1702 + } + }, + { + "graphCandidates": [ + "sha256:46b54e3fcd64d7510776bdef13bddf2d390d2a998af849eb34a7d2a27a4b2c7c" + ], + "source": { + "endLine": 46, + "endUtf16": 1837, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDINGS", + "owner": "BindingModel", + "recordType": "member", + "startLine": 46, + "startUtf16": 1783 + } + }, + { + "graphCandidates": [ + "sha256:4a4c257e89d7b7deacb707b8f099649dc836330f8b8d9afcf7faa5d34169001e" + ], + "source": { + "endLine": 47, + "endUtf16": 1928, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_CONFLICT_ELEMENT_MAP", + "owner": "BindingModel", + "recordType": "member", + "startLine": 47, + "startUtf16": 1853 + } + }, + { + "graphCandidates": [ + "sha256:abe3945fc735349d15a5fb51549278244a73c793ee5b278ed190efb9dfa65e52" + ], + "source": { + "endLine": 64, + "endUtf16": 2547, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "deletes", + "owner": "BindingModel", + "recordType": "member", + "startLine": 49, + "startUtf16": 1945 + } + }, + { + "graphCandidates": [ + "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8" + ], + "source": { + "endLine": 66, + "endUtf16": 2594, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "allParameterizedCommands", + "owner": "BindingModel", + "recordType": "member", + "startLine": 66, + "startUtf16": 2550 + } + }, + { + "graphCandidates": [ + "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15" + ], + "source": { + "endLine": 67, + "endUtf16": 2634, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingManager", + "owner": "BindingModel", + "recordType": "member", + "startLine": 67, + "startUtf16": 2596 + } + }, + { + "graphCandidates": [ + "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa" + ], + "source": { + "endLine": 72, + "endUtf16": 2729, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingElements", + "owner": "BindingModel", + "recordType": "member", + "startLine": 72, + "startUtf16": 2697 + } + }, + { + "graphCandidates": [ + "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8" + ], + "source": { + "endLine": 77, + "endUtf16": 2843, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 77, + "startUtf16": 2814 + } + }, + { + "graphCandidates": [ + "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590" + ], + "source": { + "endLine": 83, + "endUtf16": 2974, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "commandToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 83, + "startUtf16": 2945 + } + }, + { + "graphCandidates": [ + "sha256:e6db48cdf4bf54d6fcada565e1f0ae8f1c5f39193d3359e1f28c1e4b54718c11" + ], + "source": { + "endLine": 99, + "endUtf16": 3221, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "copy", + "owner": "BindingModel", + "recordType": "member", + "startLine": 96, + "startUtf16": 3115 + } + }, + { + "graphCandidates": [ + "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7" + ], + "source": { + "endLine": 119, + "endUtf16": 3810, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "copy", + "owner": "BindingModel", + "recordType": "member", + "startLine": 106, + "startUtf16": 3281 + } + }, + { + "graphCandidates": [ + "sha256:4755a0411c85fc28af82c8a79fae3cf3e7d4e7f131c077ea998d6e4fd50a614a" + ], + "source": { + "endLine": 126, + "endUtf16": 3916, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getBindings", + "owner": "BindingModel", + "recordType": "member", + "startLine": 124, + "startUtf16": 3857 + } + }, + { + "graphCandidates": [ + "sha256:3941d61bd83f869715323ddb5ea2544d8a86f592c3ebd73bdf17cc2a4bb5bf2a" + ], + "source": { + "endLine": 133, + "endUtf16": 4035, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getBindingToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 131, + "startUtf16": 3971 + } + }, + { + "graphCandidates": [ + "sha256:2f2d6d938e1e86d8f47a275c7fb6281fe2304e8b4f9fba32e6a854c7f7712d97" + ], + "source": { + "endLine": 140, + "endUtf16": 4154, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getCommandToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 138, + "startUtf16": 4090 + } + }, + { + "graphCandidates": [ + "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3" + ], + "source": { + "endLine": 198, + "endUtf16": 5882, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "init", + "owner": "BindingModel", + "recordType": "member", + "startLine": 149, + "startUtf16": 4255 + } + }, + { + "graphCandidates": [ + "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c" + ], + "source": { + "endLine": 271, + "endUtf16": 8208, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "refresh", + "owner": "BindingModel", + "recordType": "member", + "startLine": 205, + "startUtf16": 6002 + } + }, + { + "graphCandidates": [ + "sha256:5de804c06b92c3d9f1232936935997b11a73bc19822dcdb0881abf10ed85d78a" + ], + "source": { + "endLine": 280, + "endUtf16": 8378, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "remove", + "owner": "BindingModel", + "recordType": "member", + "startLine": 277, + "startUtf16": 8268 + } + }, + { + "graphCandidates": [ + "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe" + ], + "source": { + "endLine": 334, + "endUtf16": 10194, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "remove", + "owner": "BindingModel", + "recordType": "member", + "startLine": 287, + "startUtf16": 8474 + } + }, + { + "graphCandidates": [ + "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829" + ], + "source": { + "endLine": 398, + "endUtf16": 12247, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "restoreBinding", + "owner": "BindingModel", + "recordType": "member", + "startLine": 343, + "startUtf16": 10390 + } + }, + { + "graphCandidates": [ + "sha256:ebe0acac959f694b9197d93b927d5d62c757b44c204fe69ad731e96e0e79d164" + ], + "source": { + "endLine": 440, + "endUtf16": 13327, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "restoreBinding", + "owner": "BindingModel", + "recordType": "member", + "startLine": 405, + "startUtf16": 12333 + } + }, + { + "graphCandidates": [ + "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a" + ], + "source": { + "endLine": 450, + "endUtf16": 13584, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "setBindings", + "owner": "BindingModel", + "recordType": "member", + "startLine": 446, + "startUtf16": 13396 + } + }, + { + "graphCandidates": [ + "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a" + ], + "source": { + "endLine": 461, + "endUtf16": 13898, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "setBindingToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 456, + "startUtf16": 13669 + } + } + ], + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "graphMembers": [ + { + "endByte": 1823, + "endLine": 46, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:46b54e3fcd64d7510776bdef13bddf2d390d2a998af849eb34a7d2a27a4b2c7c", + "kind": "field", + "name": "PROP_BINDINGS", + "startByte": 1810, + "startLine": 46 + }, + { + "endByte": 1499, + "endLine": 42, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:8d3f1c6156f9302f744cfec35b308007cdcaa5cd99ddda228d1a01581555fbd5", + "kind": "field", + "name": "PROP_BINDING_ADD", + "startByte": 1483, + "startLine": 42 + }, + { + "endByte": 1582, + "endLine": 43, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:e86338032c69f208ec5c55262f82d68ad21b0041b53e362cb85e4b905770535f", + "kind": "field", + "name": "PROP_BINDING_ELEMENT_MAP", + "startByte": 1558, + "startLine": 43 + }, + { + "endByte": 1667, + "endLine": 44, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:48af92072fcc8d4faa6ece712014645fbc674ea1c2585a489c42bedbc0c194b2", + "kind": "field", + "name": "PROP_BINDING_FILTER", + "startByte": 1648, + "startLine": 44 + }, + { + "endByte": 1748, + "endLine": 45, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:3b85a5848207d3c9f995cc60a33b4ad2e393172b66e99416b52b3ba163aa13f5", + "kind": "field", + "name": "PROP_BINDING_REMOVE", + "startByte": 1729, + "startLine": 45 + }, + { + "endByte": 1905, + "endLine": 47, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:4a4c257e89d7b7deacb707b8f099649dc836330f8b8d9afcf7faa5d34169001e", + "kind": "field", + "name": "PROP_CONFLICT_ELEMENT_MAP", + "startByte": 1880, + "startLine": 47 + }, + { + "endByte": 2593, + "endLine": 66, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:19da7c60d118278a7e4977eb5792403ab2dacc2d431bfb368060574d3800b0d8", + "kind": "field", + "name": "allParameterizedCommands", + "startByte": 2569, + "startLine": 66 + }, + { + "endByte": 2728, + "endLine": 72, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:4ee7929d6c49e409e8daf80009251415d642d23c323fd1cb5f4930f9a96b7ffa", + "kind": "field", + "name": "bindingElements", + "startByte": 2713, + "startLine": 72 + }, + { + "endByte": 2633, + "endLine": 67, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:46bcedae82bc495eb521e94c1ee084340b40a1f8ab5f54afd8297259ffc6ba15", + "kind": "field", + "name": "bindingManager", + "startByte": 2619, + "startLine": 67 + }, + { + "endByte": 2842, + "endLine": 77, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:f0d5e46ffc58ba37ff98b2440bb840c16b702d242e39d2bb1e58abe2718fe8b8", + "kind": "field", + "name": "bindingToElement", + "startByte": 2826, + "startLine": 77 + }, + { + "endByte": 2973, + "endLine": 83, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:9d81c5d12bd48f1dba05259243856644d8c96c5ac41b83b558e775107d1df590", + "kind": "field", + "name": "commandToElement", + "startByte": 2957, + "startLine": 83 + }, + { + "endByte": 3221, + "endLine": 99, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:e6db48cdf4bf54d6fcada565e1f0ae8f1c5f39193d3359e1f28c1e4b54718c11", + "kind": "method", + "name": ".copy()", + "startByte": 3115, + "startLine": 96 + }, + { + "endByte": 3810, + "endLine": 119, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:990a0bc3572cebbdbc590e6414bbf1192595156b79707511ec19e1b78fa709f7", + "kind": "method", + "name": ".copy()", + "startByte": 3281, + "startLine": 106 + }, + { + "endByte": 2547, + "endLine": 64, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:abe3945fc735349d15a5fb51549278244a73c793ee5b278ed190efb9dfa65e52", + "kind": "method", + "name": ".deletes()", + "startByte": 1945, + "startLine": 49 + }, + { + "endByte": 4035, + "endLine": 133, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:3941d61bd83f869715323ddb5ea2544d8a86f592c3ebd73bdf17cc2a4bb5bf2a", + "kind": "method", + "name": ".getBindingToElement()", + "startByte": 3971, + "startLine": 131 + }, + { + "endByte": 3916, + "endLine": 126, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:4755a0411c85fc28af82c8a79fae3cf3e7d4e7f131c077ea998d6e4fd50a614a", + "kind": "method", + "name": ".getBindings()", + "startByte": 3857, + "startLine": 124 + }, + { + "endByte": 4154, + "endLine": 140, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:2f2d6d938e1e86d8f47a275c7fb6281fe2304e8b4f9fba32e6a854c7f7712d97", + "kind": "method", + "name": ".getCommandToElement()", + "startByte": 4090, + "startLine": 138 + }, + { + "endByte": 5882, + "endLine": 198, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:418e0d7c59ac2bcca28271541a09f706ba15ad432b8ae6c00e3c76b5dc0e66f3", + "kind": "method", + "name": ".init()", + "startByte": 4255, + "startLine": 149 + }, + { + "endByte": 8208, + "endLine": 271, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:ea287f028021607a99dcfac735ac11893d83a6d897bfc9360362728cb0d4e13c", + "kind": "method", + "name": ".refresh()", + "startByte": 6002, + "startLine": 205 + }, + { + "endByte": 8378, + "endLine": 280, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:5de804c06b92c3d9f1232936935997b11a73bc19822dcdb0881abf10ed85d78a", + "kind": "method", + "name": ".remove()", + "startByte": 8268, + "startLine": 277 + }, + { + "endByte": 10194, + "endLine": 334, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:ca2ab06bde9103dced292e2665e5b34433b9bdfcb1ad77d5c09954c114227bfe", + "kind": "method", + "name": ".remove()", + "startByte": 8474, + "startLine": 287 + }, + { + "endByte": 12247, + "endLine": 398, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:ab51224e37f1b8f69aeb3a3e14139d984ff0c23b4b8b2fd00e3cc0631ea26829", + "kind": "method", + "name": ".restoreBinding()", + "startByte": 10390, + "startLine": 343 + }, + { + "endByte": 13327, + "endLine": 440, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:ebe0acac959f694b9197d93b927d5d62c757b44c204fe69ad731e96e0e79d164", + "kind": "method", + "name": ".restoreBinding()", + "startByte": 12333, + "startLine": 405 + }, + { + "endByte": 13898, + "endLine": 461, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:227115069be85ab77ca2ad3f8a550fb3b9c1add66a6f42e659fc8acec4b8195a", + "kind": "method", + "name": ".setBindingToElement()", + "startByte": 13669, + "startLine": 456 + }, + { + "endByte": 13584, + "endLine": 450, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:97900aab35998e4e4e0f7fc9ad68e92e7b36983a328b79cce8dec93e1fe2961a", + "kind": "method", + "name": ".setBindings()", + "startByte": 13396, + "startLine": 446 + } + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6374724, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "sourceMembers": [ + { + "endLine": 42, + "endUtf16": 1515, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_ADD", + "owner": "BindingModel", + "recordType": "member", + "startLine": 42, + "startUtf16": 1456 + }, + { + "endLine": 43, + "endUtf16": 1605, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_ELEMENT_MAP", + "owner": "BindingModel", + "recordType": "member", + "startLine": 43, + "startUtf16": 1531 + }, + { + "endLine": 44, + "endUtf16": 1686, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_FILTER", + "owner": "BindingModel", + "recordType": "member", + "startLine": 44, + "startUtf16": 1621 + }, + { + "endLine": 45, + "endUtf16": 1767, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDING_REMOVE", + "owner": "BindingModel", + "recordType": "member", + "startLine": 45, + "startUtf16": 1702 + }, + { + "endLine": 46, + "endUtf16": 1837, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_BINDINGS", + "owner": "BindingModel", + "recordType": "member", + "startLine": 46, + "startUtf16": 1783 + }, + { + "endLine": 47, + "endUtf16": 1928, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "PROP_CONFLICT_ELEMENT_MAP", + "owner": "BindingModel", + "recordType": "member", + "startLine": 47, + "startUtf16": 1853 + }, + { + "endLine": 64, + "endUtf16": 2547, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "deletes", + "owner": "BindingModel", + "recordType": "member", + "startLine": 49, + "startUtf16": 1945 + }, + { + "endLine": 66, + "endUtf16": 2594, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "allParameterizedCommands", + "owner": "BindingModel", + "recordType": "member", + "startLine": 66, + "startUtf16": 2550 + }, + { + "endLine": 67, + "endUtf16": 2634, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingManager", + "owner": "BindingModel", + "recordType": "member", + "startLine": 67, + "startUtf16": 2596 + }, + { + "endLine": 72, + "endUtf16": 2729, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingElements", + "owner": "BindingModel", + "recordType": "member", + "startLine": 72, + "startUtf16": 2697 + }, + { + "endLine": 77, + "endUtf16": 2843, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "bindingToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 77, + "startUtf16": 2814 + }, + { + "endLine": 83, + "endUtf16": 2974, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "field", + "name": "commandToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 83, + "startUtf16": 2945 + }, + { + "endLine": 90, + "endUtf16": 3056, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "constructor", + "name": "BindingModel", + "owner": "BindingModel", + "recordType": "member", + "startLine": 88, + "startUtf16": 3001 + }, + { + "endLine": 99, + "endUtf16": 3221, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "copy", + "owner": "BindingModel", + "recordType": "member", + "startLine": 96, + "startUtf16": 3115 + }, + { + "endLine": 119, + "endUtf16": 3810, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "copy", + "owner": "BindingModel", + "recordType": "member", + "startLine": 106, + "startUtf16": 3281 + }, + { + "endLine": 126, + "endUtf16": 3916, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getBindings", + "owner": "BindingModel", + "recordType": "member", + "startLine": 124, + "startUtf16": 3857 + }, + { + "endLine": 133, + "endUtf16": 4035, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getBindingToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 131, + "startUtf16": 3971 + }, + { + "endLine": 140, + "endUtf16": 4154, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "getCommandToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 138, + "startUtf16": 4090 + }, + { + "endLine": 198, + "endUtf16": 5882, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "init", + "owner": "BindingModel", + "recordType": "member", + "startLine": 149, + "startUtf16": 4255 + }, + { + "endLine": 271, + "endUtf16": 8208, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "refresh", + "owner": "BindingModel", + "recordType": "member", + "startLine": 205, + "startUtf16": 6002 + }, + { + "endLine": 280, + "endUtf16": 8378, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "remove", + "owner": "BindingModel", + "recordType": "member", + "startLine": 277, + "startUtf16": 8268 + }, + { + "endLine": 334, + "endUtf16": 10194, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "remove", + "owner": "BindingModel", + "recordType": "member", + "startLine": 287, + "startUtf16": 8474 + }, + { + "endLine": 398, + "endUtf16": 12247, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "restoreBinding", + "owner": "BindingModel", + "recordType": "member", + "startLine": 343, + "startUtf16": 10390 + }, + { + "endLine": 440, + "endUtf16": 13327, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "restoreBinding", + "owner": "BindingModel", + "recordType": "member", + "startLine": 405, + "startUtf16": 12333 + }, + { + "endLine": 450, + "endUtf16": 13584, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "setBindings", + "owner": "BindingModel", + "recordType": "member", + "startLine": 446, + "startUtf16": 13396 + }, + { + "endLine": 461, + "endUtf16": 13898, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "kind": "method", + "name": "setBindingToElement", + "owner": "BindingModel", + "recordType": "member", + "startLine": 456, + "startUtf16": 13669 + } + ], + "sourceRole": "production-class", + "unmatchedGraphIds": [] + }, + { + "classGraph": { + "endByte": 3979, + "endLine": 99, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "kind": "class", + "name": "SimpleValueProperty", + "startByte": 2336, + "startLine": 54 + }, + "classId": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "classSource": { + "endLine": 99, + "endUtf16": 3979, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "CLASS", + "name": "SimpleValueProperty", + "owner": "", + "recordType": "class", + "startLine": 54, + "startUtf16": 2336 + }, + "classification": "unanimous-none", + "declarationMatches": [ + { + "graphCandidates": [ + "sha256:0de842511181a645a1c5b1edb22a6753cfeb304e8bd9f3a2106d708f23bdef04" + ], + "source": { + "endLine": 56, + "endUtf16": 2468, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "doGetValue", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 55, + "startUtf16": 2415 + } + }, + { + "graphCandidates": [ + "sha256:bc7493b711963bce44c2c29d3384a5b17f1519f00325091548eca0cf9e9591c1" + ], + "source": { + "endLine": 59, + "endUtf16": 2536, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "doSetValue", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 58, + "startUtf16": 2471 + } + }, + { + "graphCandidates": [ + "sha256:8758f347b9a5a09265fa75cfcd2d6aff87b5c93c935a75eb28d4629865fc5b04" + ], + "source": { + "endLine": 78, + "endUtf16": 3353, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "adaptListener", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 77, + "startUtf16": 3231 + } + }, + { + "graphCandidates": [ + "sha256:45ca0429112d8da14bd8c78fe1e9822d598c80faf9958776cd4fdc5fe3626d99" + ], + "source": { + "endLine": 83, + "endUtf16": 3496, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observe", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 80, + "startUtf16": 3356 + } + }, + { + "graphCandidates": [ + "sha256:338048dbcd15e6fab4cf2577df4ecedaae29f38f7522c08f2b37a06152c8ef26" + ], + "source": { + "endLine": 88, + "endUtf16": 3655, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 85, + "startUtf16": 3499 + } + }, + { + "graphCandidates": [ + "sha256:9d49b8e964400f8d05bfb0666ab061ccd88290f05336abef2de3cc403029cbb5" + ], + "source": { + "endLine": 93, + "endUtf16": 3813, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 90, + "startUtf16": 3658 + } + }, + { + "graphCandidates": [ + "sha256:45f088a9f53e3e22e77ce7057d862b1f61e087d1934065b2080e10c2469d4679" + ], + "source": { + "endLine": 98, + "endUtf16": 3977, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 95, + "startUtf16": 3816 + } + } + ], + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "graphMembers": [ + { + "endByte": 3353, + "endLine": 78, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:8758f347b9a5a09265fa75cfcd2d6aff87b5c93c935a75eb28d4629865fc5b04", + "kind": "method", + "name": ".adaptListener()", + "startByte": 3231, + "startLine": 77 + }, + { + "endByte": 2468, + "endLine": 56, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:0de842511181a645a1c5b1edb22a6753cfeb304e8bd9f3a2106d708f23bdef04", + "kind": "method", + "name": ".doGetValue()", + "startByte": 2415, + "startLine": 55 + }, + { + "endByte": 2536, + "endLine": 59, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:bc7493b711963bce44c2c29d3384a5b17f1519f00325091548eca0cf9e9591c1", + "kind": "method", + "name": ".doSetValue()", + "startByte": 2471, + "startLine": 58 + }, + { + "endByte": 3496, + "endLine": 83, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:45ca0429112d8da14bd8c78fe1e9822d598c80faf9958776cd4fdc5fe3626d99", + "kind": "method", + "name": ".observe()", + "startByte": 3356, + "startLine": 80 + }, + { + "endByte": 3655, + "endLine": 88, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:338048dbcd15e6fab4cf2577df4ecedaae29f38f7522c08f2b37a06152c8ef26", + "kind": "method", + "name": ".observeDetail()", + "startByte": 3499, + "startLine": 85 + }, + { + "endByte": 3813, + "endLine": 93, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:9d49b8e964400f8d05bfb0666ab061ccd88290f05336abef2de3cc403029cbb5", + "kind": "method", + "name": ".observeDetail()", + "startByte": 3658, + "startLine": 90 + }, + { + "endByte": 3977, + "endLine": 98, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:45f088a9f53e3e22e77ce7057d862b1f61e087d1934065b2080e10c2469d4679", + "kind": "method", + "name": ".observeDetail()", + "startByte": 3816, + "startLine": 95 + } + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6391534, + "sourceFileSha256": "50407d33afc5ee8283f1022f5bf38278aa20b4cd82db4cd909eb5ee0e2e22b64", + "sourceMembers": [ + { + "endLine": 56, + "endUtf16": 2468, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "doGetValue", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 55, + "startUtf16": 2415 + }, + { + "endLine": 59, + "endUtf16": 2536, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "doSetValue", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 58, + "startUtf16": 2471 + }, + { + "endLine": 78, + "endUtf16": 3353, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "adaptListener", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 77, + "startUtf16": 3231 + }, + { + "endLine": 83, + "endUtf16": 3496, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observe", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 80, + "startUtf16": 3356 + }, + { + "endLine": 88, + "endUtf16": 3655, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 85, + "startUtf16": 3499 + }, + { + "endLine": 93, + "endUtf16": 3813, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 90, + "startUtf16": 3658 + }, + { + "endLine": 98, + "endUtf16": 3977, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "kind": "method", + "name": "observeDetail", + "owner": "SimpleValueProperty", + "recordType": "member", + "startLine": 95, + "startUtf16": 3816 + } + ], + "sourceRole": "production-class", + "unmatchedGraphIds": [] + }, + { + "classGraph": { + "endByte": 1936, + "endLine": 77, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "kind": "class", + "name": "CSSValueListImpl", + "startByte": 797, + "startLine": 24 + }, + "classId": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "classSource": { + "endLine": 77, + "endUtf16": 1936, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "CLASS", + "name": "CSSValueListImpl", + "owner": "", + "recordType": "class", + "startLine": 24, + "startUtf16": 797 + }, + "classification": "unanimous-none", + "declarationMatches": [ + { + "graphCandidates": [ + "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605" + ], + "source": { + "endLine": 26, + "endUtf16": 901, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "field", + "name": "values", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 26, + "startUtf16": 879 + } + }, + { + "graphCandidates": [ + "sha256:94890255d79eed8dfc72f3ff25d2cf747a32f6637311e8dc38fc6aced0216df4" + ], + "source": { + "endLine": 41, + "endUtf16": 1222, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getLength", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 38, + "startUtf16": 1160 + } + }, + { + "graphCandidates": [ + "sha256:79cd30c3e452e263e9027183c4017ba020202040e38ad833da4d9108462023c3" + ], + "source": { + "endLine": 46, + "endUtf16": 1300, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "item", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 43, + "startUtf16": 1225 + } + }, + { + "graphCandidates": [ + "sha256:3637988bf9edece1d0c47e080ad3dd0806abf1f0dc5f7997b7601b4d8d226e9f" + ], + "source": { + "endLine": 56, + "endUtf16": 1525, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getCssText", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 48, + "startUtf16": 1303 + } + }, + { + "graphCandidates": [ + "sha256:31949c69aca7d868e83de432a2034de43d15bc1561242dc6874b007eb64b2700" + ], + "source": { + "endLine": 61, + "endUtf16": 1599, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getCssValueType", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 58, + "startUtf16": 1528 + } + }, + { + "graphCandidates": [ + "sha256:23cdcdb6a890c152fb04931c1ac5e32457a025dc6f3a9c87f9df218d4679cd07" + ], + "source": { + "endLine": 66, + "endUtf16": 1739, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "setCssText", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 63, + "startUtf16": 1602 + } + }, + { + "graphCandidates": [ + "sha256:49d95022e2bfafb07103ad7246a6142d3faef61790764535fef2660a701e83cc" + ], + "source": { + "endLine": 75, + "endUtf16": 1933, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "toString", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 68, + "startUtf16": 1742 + } + } + ], + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "graphMembers": [ + { + "endByte": 900, + "endLine": 26, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:24476d449b56d62d9d48b8b1c5cf7fd66c006f76e1610500423543e654ae2605", + "kind": "field", + "name": "values", + "startByte": 894, + "startLine": 26 + }, + { + "endByte": 1525, + "endLine": 56, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:3637988bf9edece1d0c47e080ad3dd0806abf1f0dc5f7997b7601b4d8d226e9f", + "kind": "method", + "name": ".getCssText()", + "startByte": 1303, + "startLine": 48 + }, + { + "endByte": 1599, + "endLine": 61, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:31949c69aca7d868e83de432a2034de43d15bc1561242dc6874b007eb64b2700", + "kind": "method", + "name": ".getCssValueType()", + "startByte": 1528, + "startLine": 58 + }, + { + "endByte": 1222, + "endLine": 41, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:94890255d79eed8dfc72f3ff25d2cf747a32f6637311e8dc38fc6aced0216df4", + "kind": "method", + "name": ".getLength()", + "startByte": 1160, + "startLine": 38 + }, + { + "endByte": 1300, + "endLine": 46, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:79cd30c3e452e263e9027183c4017ba020202040e38ad833da4d9108462023c3", + "kind": "method", + "name": ".item()", + "startByte": 1225, + "startLine": 43 + }, + { + "endByte": 1739, + "endLine": 66, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:23cdcdb6a890c152fb04931c1ac5e32457a025dc6f3a9c87f9df218d4679cd07", + "kind": "method", + "name": ".setCssText()", + "startByte": 1602, + "startLine": 63 + }, + { + "endByte": 1933, + "endLine": 75, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:49d95022e2bfafb07103ad7246a6142d3faef61790764535fef2660a701e83cc", + "kind": "method", + "name": ".toString()", + "startByte": 1742, + "startLine": 68 + } + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6406137, + "sourceFileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "sourceMembers": [ + { + "endLine": 26, + "endUtf16": 901, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "field", + "name": "values", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 26, + "startUtf16": 879 + }, + { + "endLine": 36, + "endUtf16": 1157, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "constructor", + "name": "CSSValueListImpl", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 28, + "startUtf16": 904 + }, + { + "endLine": 41, + "endUtf16": 1222, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getLength", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 38, + "startUtf16": 1160 + }, + { + "endLine": 46, + "endUtf16": 1300, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "item", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 43, + "startUtf16": 1225 + }, + { + "endLine": 56, + "endUtf16": 1525, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getCssText", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 48, + "startUtf16": 1303 + }, + { + "endLine": 61, + "endUtf16": 1599, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "getCssValueType", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 58, + "startUtf16": 1528 + }, + { + "endLine": 66, + "endUtf16": 1739, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "setCssText", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 63, + "startUtf16": 1602 + }, + { + "endLine": 75, + "endUtf16": 1933, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "kind": "method", + "name": "toString", + "owner": "CSSValueListImpl", + "recordType": "member", + "startLine": 68, + "startUtf16": 1742 + } + ], + "sourceRole": "production-class", + "unmatchedGraphIds": [] + }, + { + "classGraph": { + "endByte": 13705, + "endLine": 340, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "kind": "class", + "name": "DeprecatedUIWizardsAuto", + "startByte": 1988, + "startLine": 45 + }, + "classId": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "classSource": { + "endLine": 340, + "endUtf16": 13705, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "CLASS", + "name": "DeprecatedUIWizardsAuto", + "owner": "", + "recordType": "class", + "startLine": 45, + "startUtf16": 1988 + }, + "classification": "unanimous-major-critical", + "declarationMatches": [ + { + "graphCandidates": [ + "sha256:8ea2f8bd06166bc1454965ac9f119b4392735032314336c5381c73a01ea83e1e" + ], + "source": { + "endLine": 46, + "endUtf16": 2099, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 46, + "startUtf16": 2048 + } + }, + { + "graphCandidates": [ + "sha256:ccb6addc4e0421b0b01e3c330ff1b732dc36c88cbbe9af74df00c758653c0248" + ], + "source": { + "endLine": 48, + "endUtf16": 2157, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 48, + "startUtf16": 2105 + } + }, + { + "graphCandidates": [ + "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06" + ], + "source": { + "endLine": 50, + "endUtf16": 2216, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH_2", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 50, + "startUtf16": 2163 + } + }, + { + "graphCandidates": [ + "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368" + ], + "source": { + "endLine": 52, + "endUtf16": 2276, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT_2", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 52, + "startUtf16": 2222 + } + }, + { + "graphCandidates": [ + "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f" + ], + "source": { + "endLine": 54, + "endUtf16": 2307, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "project", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 54, + "startUtf16": 2282 + } + }, + { + "graphCandidates": [ + "sha256:f57f58db8834ea4e80eb667fdccc134056fc7316cbd0e7c96b97fe458f802609" + ], + "source": { + "endLine": 62, + "endUtf16": 2462, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "getShell", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 60, + "startUtf16": 2391 + } + }, + { + "graphCandidates": [ + "sha256:1afb1617997a7aefefb167cd7944f22e22795889396c1e55fe955dd128a05637" + ], + "source": { + "endLine": 66, + "endUtf16": 2569, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "getWorkbench", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 64, + "startUtf16": 2468 + } + }, + { + "graphCandidates": [ + "sha256:32d4bd92789abc09d7330e5f5f219e62e709ae193f11fcfa6ba0d8a35413065b" + ], + "source": { + "endLine": 93, + "endUtf16": 3685, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "exportWizard", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 68, + "startUtf16": 2575 + } + }, + { + "graphCandidates": [ + "sha256:d58d82337ee98bd41da35e7de022206e019cabac84be0e3d07089363bbe96ef0" + ], + "source": { + "endLine": 121, + "endUtf16": 4802, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "importWizard", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 95, + "startUtf16": 3691 + } + }, + { + "graphCandidates": [ + "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233" + ], + "source": { + "endLine": 137, + "endUtf16": 5182, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "tearDown", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 126, + "startUtf16": 4872 + } + }, + { + "graphCandidates": [ + "sha256:f78bc8511102afe48c674703f7d62d54782e2432e4a6c68d8dd27abdd57d76f9" + ], + "source": { + "endLine": 142, + "endUtf16": 5354, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testExportResources", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 139, + "startUtf16": 5188 + } + }, + { + "graphCandidates": [ + "sha256:56971bf7eeb7edde563f3f9e731789ce4f6d3235e56da00fb094b27f8ca8be5a" + ], + "source": { + "endLine": 159, + "endUtf16": 6009, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testImportResources", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 156, + "startUtf16": 5843 + } + }, + { + "graphCandidates": [ + "sha256:e54a873b5966e2f238a22e220a28b359e0e5300b7e406ae1d36c8ed09305676a" + ], + "source": { + "endLine": 184, + "endUtf16": 7107, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFile", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 173, + "startUtf16": 6564 + } + }, + { + "graphCandidates": [ + "sha256:84d632567a2405ed146814612c2f15a29cb6180dcb63137168fcec56a9fc049b" + ], + "source": { + "endLine": 217, + "endUtf16": 8539, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFile2", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 189, + "startUtf16": 7247 + } + }, + { + "graphCandidates": [ + "sha256:f6e9285d1e575c906c4a2745a4fb347425037c41b0e73e05f0aea32f5cbf7717" + ], + "source": { + "endLine": 229, + "endUtf16": 9097, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFolder", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 219, + "startUtf16": 8545 + } + }, + { + "graphCandidates": [ + "sha256:c669d5f72ab4651f722a8c2a00ca215c497ce93662057cad3e1af27dfd3c9ae9" + ], + "source": { + "endLine": 245, + "endUtf16": 9798, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProjectPage1", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 231, + "startUtf16": 9103 + } + }, + { + "graphCandidates": [ + "sha256:eaca2f9a7ff4eb93c781cdaacf4c5167c8edd3983e6c8e1372c3f0cd79a9ea8f" + ], + "source": { + "endLine": 269, + "endUtf16": 10849, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProjectPage2", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 247, + "startUtf16": 9804 + } + }, + { + "graphCandidates": [ + "sha256:7bc48dcb4430fa7ce5f06b470427fd0b9766a616289bc58f501c7f46f9ea4c7a" + ], + "source": { + "endLine": 305, + "endUtf16": 12333, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProject", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 271, + "startUtf16": 10855 + } + }, + { + "graphCandidates": [ + "sha256:1931e4fc19819b6641e89deecf850b3ff055f80f4e47cbd610ebc5274cb73e39" + ], + "source": { + "endLine": 338, + "endUtf16": 13702, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewResource", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 307, + "startUtf16": 12339 + } + } + ], + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "graphMembers": [ + { + "endByte": 2150, + "endLine": 48, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:ccb6addc4e0421b0b01e3c330ff1b732dc36c88cbbe9af74df00c758653c0248", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT", + "startByte": 2130, + "startLine": 48 + }, + { + "endByte": 2269, + "endLine": 52, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:eb60ad514a9ec3e0a14ae0222d060e007a3ef0290a0af63af4c8f6785bd83368", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT_2", + "startByte": 2247, + "startLine": 52 + }, + { + "endByte": 2092, + "endLine": 46, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:8ea2f8bd06166bc1454965ac9f119b4392735032314336c5381c73a01ea83e1e", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH", + "startByte": 2073, + "startLine": 46 + }, + { + "endByte": 2209, + "endLine": 50, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:ce49466e859213bcc4de55446a947134a34c7a6f36fc91fdc6920c940dd58c06", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH_2", + "startByte": 2188, + "startLine": 50 + }, + { + "endByte": 2306, + "endLine": 54, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:38f8e3d6f94c653d8cfb3860dd1d04227974f7a3db528237f56352dad4296b6f", + "kind": "field", + "name": "project", + "startByte": 2299, + "startLine": 54 + }, + { + "endByte": 3685, + "endLine": 93, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:32d4bd92789abc09d7330e5f5f219e62e709ae193f11fcfa6ba0d8a35413065b", + "kind": "method", + "name": ".exportWizard()", + "startByte": 2575, + "startLine": 68 + }, + { + "endByte": 2462, + "endLine": 62, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:f57f58db8834ea4e80eb667fdccc134056fc7316cbd0e7c96b97fe458f802609", + "kind": "method", + "name": ".getShell()", + "startByte": 2391, + "startLine": 60 + }, + { + "endByte": 2569, + "endLine": 66, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:1afb1617997a7aefefb167cd7944f22e22795889396c1e55fe955dd128a05637", + "kind": "method", + "name": ".getWorkbench()", + "startByte": 2468, + "startLine": 64 + }, + { + "endByte": 4802, + "endLine": 121, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:d58d82337ee98bd41da35e7de022206e019cabac84be0e3d07089363bbe96ef0", + "kind": "method", + "name": ".importWizard()", + "startByte": 3691, + "startLine": 95 + }, + { + "endByte": 5182, + "endLine": 137, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:8178680ef670ffb37bd83ad57100937a77cd66f424a01b43f881689a39f73233", + "kind": "method", + "name": ".tearDown()", + "startByte": 4872, + "startLine": 126 + }, + { + "endByte": 5354, + "endLine": 142, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:f78bc8511102afe48c674703f7d62d54782e2432e4a6c68d8dd27abdd57d76f9", + "kind": "method", + "name": ".testExportResources()", + "startByte": 5188, + "startLine": 139 + }, + { + "endByte": 6009, + "endLine": 159, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:56971bf7eeb7edde563f3f9e731789ce4f6d3235e56da00fb094b27f8ca8be5a", + "kind": "method", + "name": ".testImportResources()", + "startByte": 5843, + "startLine": 156 + }, + { + "endByte": 7107, + "endLine": 184, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:e54a873b5966e2f238a22e220a28b359e0e5300b7e406ae1d36c8ed09305676a", + "kind": "method", + "name": ".testNewFile()", + "startByte": 6564, + "startLine": 173 + }, + { + "endByte": 8539, + "endLine": 217, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:84d632567a2405ed146814612c2f15a29cb6180dcb63137168fcec56a9fc049b", + "kind": "method", + "name": ".testNewFile2()", + "startByte": 7247, + "startLine": 189 + }, + { + "endByte": 9097, + "endLine": 229, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:f6e9285d1e575c906c4a2745a4fb347425037c41b0e73e05f0aea32f5cbf7717", + "kind": "method", + "name": ".testNewFolder()", + "startByte": 8545, + "startLine": 219 + }, + { + "endByte": 12333, + "endLine": 305, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:7bc48dcb4430fa7ce5f06b470427fd0b9766a616289bc58f501c7f46f9ea4c7a", + "kind": "method", + "name": ".testNewProject()", + "startByte": 10855, + "startLine": 271 + }, + { + "endByte": 9798, + "endLine": 245, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:c669d5f72ab4651f722a8c2a00ca215c497ce93662057cad3e1af27dfd3c9ae9", + "kind": "method", + "name": ".testNewProjectPage1()", + "startByte": 9103, + "startLine": 231 + }, + { + "endByte": 10849, + "endLine": 269, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:eaca2f9a7ff4eb93c781cdaacf4c5167c8edd3983e6c8e1372c3f0cd79a9ea8f", + "kind": "method", + "name": ".testNewProjectPage2()", + "startByte": 9804, + "startLine": 247 + }, + { + "endByte": 13702, + "endLine": 338, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:1931e4fc19819b6641e89deecf850b3ff055f80f4e47cbd610ebc5274cb73e39", + "kind": "method", + "name": ".testNewResource()", + "startByte": 12339, + "startLine": 307 + } + ], + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413795, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "sourceMembers": [ + { + "endLine": 46, + "endUtf16": 2099, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 46, + "startUtf16": 2048 + }, + { + "endLine": 48, + "endUtf16": 2157, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 48, + "startUtf16": 2105 + }, + { + "endLine": 50, + "endUtf16": 2216, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_WIDTH_2", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 50, + "startUtf16": 2163 + }, + { + "endLine": 52, + "endUtf16": 2276, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "SIZING_WIZARD_HEIGHT_2", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 52, + "startUtf16": 2222 + }, + { + "endLine": 54, + "endUtf16": 2307, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "field", + "name": "project", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 54, + "startUtf16": 2282 + }, + { + "endLine": 58, + "endUtf16": 2385, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "constructor", + "name": "DeprecatedUIWizardsAuto", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 56, + "startUtf16": 2313 + }, + { + "endLine": 62, + "endUtf16": 2462, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "getShell", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 60, + "startUtf16": 2391 + }, + { + "endLine": 66, + "endUtf16": 2569, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "getWorkbench", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 64, + "startUtf16": 2468 + }, + { + "endLine": 93, + "endUtf16": 3685, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "exportWizard", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 68, + "startUtf16": 2575 + }, + { + "endLine": 121, + "endUtf16": 4802, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "importWizard", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 95, + "startUtf16": 3691 + }, + { + "endLine": 137, + "endUtf16": 5182, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "tearDown", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 126, + "startUtf16": 4872 + }, + { + "endLine": 142, + "endUtf16": 5354, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testExportResources", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 139, + "startUtf16": 5188 + }, + { + "endLine": 159, + "endUtf16": 6009, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testImportResources", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 156, + "startUtf16": 5843 + }, + { + "endLine": 184, + "endUtf16": 7107, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFile", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 173, + "startUtf16": 6564 + }, + { + "endLine": 217, + "endUtf16": 8539, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFile2", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 189, + "startUtf16": 7247 + }, + { + "endLine": 229, + "endUtf16": 9097, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewFolder", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 219, + "startUtf16": 8545 + }, + { + "endLine": 245, + "endUtf16": 9798, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProjectPage1", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 231, + "startUtf16": 9103 + }, + { + "endLine": 269, + "endUtf16": 10849, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProjectPage2", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 247, + "startUtf16": 9804 + }, + { + "endLine": 305, + "endUtf16": 12333, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewProject", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 271, + "startUtf16": 10855 + }, + { + "endLine": 338, + "endUtf16": 13702, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "kind": "method", + "name": "testNewResource", + "owner": "DeprecatedUIWizardsAuto", + "recordType": "member", + "startLine": 307, + "startUtf16": 12339 + } + ], + "sourceRole": "test-class", + "unmatchedGraphIds": [] + }, + { + "classGraph": { + "endByte": 68720, + "endLine": 1311, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "kind": "class", + "name": "ExternalLoadBalancerDeviceManagerImpl", + "startByte": 6293, + "startLine": 141 + }, + "classId": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "classSource": { + "endLine": 1311, + "endUtf16": 68720, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "CLASS", + "name": "ExternalLoadBalancerDeviceManagerImpl", + "owner": "", + "recordType": "class", + "startLine": 141, + "startUtf16": 6293 + }, + "classification": "unanimous-major-critical", + "declarationMatches": [ + { + "graphCandidates": [ + "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d" + ], + "source": { + "endLine": 144, + "endUtf16": 6512, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkExternalLBDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 143, + "startUtf16": 6447 + } + }, + { + "graphCandidates": [ + "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19" + ], + "source": { + "endLine": 146, + "endUtf16": 6590, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_externalLoadBalancerDeviceDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 145, + "startUtf16": 6517 + } + }, + { + "graphCandidates": [ + "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad" + ], + "source": { + "endLine": 148, + "endUtf16": 6624, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_hostDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 147, + "startUtf16": 6595 + } + }, + { + "graphCandidates": [ + "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341" + ], + "source": { + "endLine": 150, + "endUtf16": 6662, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_dcDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 149, + "startUtf16": 6629 + } + }, + { + "graphCandidates": [ + "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c" + ], + "source": { + "endLine": 152, + "endUtf16": 6706, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkModel", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 151, + "startUtf16": 6667 + } + }, + { + "graphCandidates": [ + "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c" + ], + "source": { + "endLine": 154, + "endUtf16": 6763, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 153, + "startUtf16": 6711 + } + }, + { + "graphCandidates": [ + "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca" + ], + "source": { + "endLine": 156, + "endUtf16": 6837, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_inlineLoadBalancerNicMapDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 155, + "startUtf16": 6768 + } + }, + { + "graphCandidates": [ + "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f" + ], + "source": { + "endLine": 158, + "endUtf16": 6869, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_nicDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 157, + "startUtf16": 6842 + } + }, + { + "graphCandidates": [ + "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1" + ], + "source": { + "endLine": 160, + "endUtf16": 6909, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_agentMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 159, + "startUtf16": 6874 + } + }, + { + "graphCandidates": [ + "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073" + ], + "source": { + "endLine": 162, + "endUtf16": 6955, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_resourceMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 161, + "startUtf16": 6914 + } + }, + { + "graphCandidates": [ + "sha256:83f0ea4c0f440fe421cb511edfab721429e58bdf70d6051e96763523cabea956" + ], + "source": { + "endLine": 164, + "endUtf16": 6999, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ipAddressDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 163, + "startUtf16": 6960 + } + }, + { + "graphCandidates": [ + "sha256:8b25366aa5124c41e4745309379a581a56cf797a917482744dca32fca1d03ecb" + ], + "source": { + "endLine": 166, + "endUtf16": 7033, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vlanDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 165, + "startUtf16": 7004 + } + }, + { + "graphCandidates": [ + "sha256:520753938735383092187588cae8785e8bcc6393b22eb53eafb902fa7384a092" + ], + "source": { + "endLine": 168, + "endUtf16": 7089, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkOfferingDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 167, + "startUtf16": 7038 + } + }, + { + "graphCandidates": [ + "sha256:6ae2a588540f6200447a1624efff22acb3ebcefb8dee155a2d4d33b258679711" + ], + "source": { + "endLine": 170, + "endUtf16": 7129, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_accountDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 169, + "startUtf16": 7094 + } + }, + { + "graphCandidates": [ + "sha256:8f63d21f7a432574db2808754da27fb8a5f280867d32cbae8daf6aca72821caf" + ], + "source": { + "endLine": 172, + "endUtf16": 7185, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalNetworkDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 171, + "startUtf16": 7134 + } + }, + { + "graphCandidates": [ + "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4" + ], + "source": { + "endLine": 174, + "endUtf16": 7271, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalNetworkServiceProviderDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 173, + "startUtf16": 7190 + } + }, + { + "graphCandidates": [ + "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d" + ], + "source": { + "endLine": 176, + "endUtf16": 7315, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_accountMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 175, + "startUtf16": 7276 + } + }, + { + "graphCandidates": [ + "sha256:6d872f778727749d077abf269f1cbdbe322ceafa91e2ffea290372df21541c4f" + ], + "source": { + "endLine": 178, + "endUtf16": 7364, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_userStatsDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 177, + "startUtf16": 7320 + } + }, + { + "graphCandidates": [ + "sha256:2098ce30981a4ab56343e8ca1ccb796438bee74d2524b929fba6729a25e7698e" + ], + "source": { + "endLine": 180, + "endUtf16": 7404, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 179, + "startUtf16": 7369 + } + }, + { + "graphCandidates": [ + "sha256:b45a200b4b16526f12a9840d4376fbae4ce3caa39dac26a928a611ebb7dca93e" + ], + "source": { + "endLine": 182, + "endUtf16": 7448, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_routerDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 181, + "startUtf16": 7409 + } + }, + { + "graphCandidates": [ + "sha256:571aecfb31a7f30d7c774fb5528daa8b6c0fea621d41d9f694768412f06bc9dd" + ], + "source": { + "endLine": 184, + "endUtf16": 7498, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_loadBalancerDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 183, + "startUtf16": 7453 + } + }, + { + "graphCandidates": [ + "sha256:87c36923e23372b81f4a8985bf1d8846d51d79149848f7cd931d2e4eb3653017" + ], + "source": { + "endLine": 186, + "endUtf16": 7562, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_portForwardingRulesDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 185, + "startUtf16": 7503 + } + }, + { + "graphCandidates": [ + "sha256:1ebcef1c61713cb6f8314fa6f86cf03965adb8269643fe46abf8dba3c4386166" + ], + "source": { + "endLine": 188, + "endUtf16": 7607, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_configDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 187, + "startUtf16": 7567 + } + }, + { + "graphCandidates": [ + "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd" + ], + "source": { + "endLine": 190, + "endUtf16": 7654, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_hostDetailDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 189, + "startUtf16": 7612 + } + }, + { + "graphCandidates": [ + "sha256:6f2796dc195083076baf982f607d430765bf88b00d757324ebf575399210b253" + ], + "source": { + "endLine": 192, + "endUtf16": 7716, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkLBDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 191, + "startUtf16": 7659 + } + }, + { + "graphCandidates": [ + "sha256:6d7f54f7e690d84260a66c274e6780cce118ed0d220ec5be9ac4cd4bbd738e90" + ], + "source": { + "endLine": 194, + "endUtf16": 7775, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ntwkSrvcProviderDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 193, + "startUtf16": 7721 + } + }, + { + "graphCandidates": [ + "sha256:a70bb0240f534f172af6a1599e1b1387c92521e1f3ce1923406335a106220f37" + ], + "source": { + "endLine": 196, + "endUtf16": 7847, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkExternalFirewallDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 195, + "startUtf16": 7780 + } + }, + { + "graphCandidates": [ + "sha256:3c075dcbe5d52070a5ab9cf0f5766f0fad33c13725b6fd409de462cf5a6bfa3a" + ], + "source": { + "endLine": 198, + "endUtf16": 7917, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_externalFirewallDeviceDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 197, + "startUtf16": 7852 + } + }, + { + "graphCandidates": [ + "sha256:df463387e7867f168a977ea770b0c2e42d3ac711c9eaef319d316409b3ff34d5" + ], + "source": { + "endLine": 200, + "endUtf16": 7970, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_podDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 199, + "startUtf16": 7922 + } + }, + { + "graphCandidates": [ + "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98" + ], + "source": { + "endLine": 202, + "endUtf16": 8015, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ipAddrMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 201, + "startUtf16": 7975 + } + }, + { + "graphCandidates": [ + "sha256:20e9b04c2483e1bfdf4b1b4c9c9a11480f19f51a38831e97912f1d221565b0ec" + ], + "source": { + "endLine": 205, + "endUtf16": 8075, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_itMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 203, + "startUtf16": 8020 + } + }, + { + "graphCandidates": [ + "sha256:5429377caf6aa5896f946619b8e10f4c27b7d26df2d868e1ac99552929368066" + ], + "source": { + "endLine": 207, + "endUtf16": 8113, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vmDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 206, + "startUtf16": 8080 + } + }, + { + "graphCandidates": [ + "sha256:87a51688289dfbbf03adacfdc474e916d62b21715729ea72965b360df7b93846" + ], + "source": { + "endLine": 209, + "endUtf16": 8157, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_templateDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 208, + "startUtf16": 8118 + } + }, + { + "graphCandidates": [ + "sha256:b94808bee24294075ad29f77711b9b85880f41e95ff1399c912849b0dfc80991" + ], + "source": { + "endLine": 211, + "endUtf16": 8213, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_serviceOfferingDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 210, + "startUtf16": 8162 + } + }, + { + "graphCandidates": [ + "sha256:afaf119206367274bed1d97faf13a0bd50d010f5b926caa148e2d073d64118f2" + ], + "source": { + "endLine": 213, + "endUtf16": 8285, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalProviderDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 212, + "startUtf16": 8218 + } + }, + { + "graphCandidates": [ + "sha256:80ce3bd390663c2fec5a922cf040ac13ebd57870815a71ecd7005c5fecc02147" + ], + "source": { + "endLine": 215, + "endUtf16": 8342, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vrProviderDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 214, + "startUtf16": 8290 + } + }, + { + "graphCandidates": [ + "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c" + ], + "source": { + "endLine": 217, + "endUtf16": 8380, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_defaultLbCapacity", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 217, + "startUtf16": 8348 + } + }, + { + "graphCandidates": [ + "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253" + ], + "source": { + "endLine": 218, + "endUtf16": 8503, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "s_logger", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 218, + "startUtf16": 8385 + } + }, + { + "graphCandidates": [ + "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe" + ], + "source": { + "endLine": 326, + "endUtf16": 14387, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "addExternalLoadBalancer", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 220, + "startUtf16": 8509 + } + }, + { + "graphCandidates": [ + "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d" + ], + "source": { + "endLine": 372, + "endUtf16": 16684, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "deleteExternalLoadBalancer", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 328, + "startUtf16": 14393 + } + }, + { + "graphCandidates": [ + "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14" + ], + "source": { + "endLine": 399, + "endUtf16": 17985, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "listExternalLoadBalancers", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 374, + "startUtf16": 16690 + } + }, + { + "graphCandidates": [ + "sha256:8adc07923460de74eb5748e360bbb92ef0268fe5e06e67deed7ae0ade9e6c599" + ], + "source": { + "endLine": 411, + "endUtf16": 18696, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createExternalLoadBalancerResponse", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 401, + "startUtf16": 17991 + } + }, + { + "graphCandidates": [ + "sha256:86bf7e6c3535dd83a5d6e0b4b9a0c72843feea0627119e1a0bba516742a4bd82" + ], + "source": { + "endLine": 415, + "endUtf16": 18877, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getExternalLoadBalancerResourceGuid", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 413, + "startUtf16": 18702 + } + }, + { + "graphCandidates": [ + "sha256:6f0ff34209385f110023262bc92b8dcdf132314e4bf1d98a12fa2ebcc63b19b6" + ], + "source": { + "endLine": 427, + "endUtf16": 19432, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getExternalLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 417, + "startUtf16": 18883 + } + }, + { + "graphCandidates": [ + "sha256:46f0f79d1533633b212cab83d54110ac544397f62812689fda8947b907f3b29f" + ], + "source": { + "endLine": 432, + "endUtf16": 19723, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "setExternalLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 429, + "startUtf16": 19438 + } + }, + { + "graphCandidates": [ + "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f" + ], + "source": { + "endLine": 596, + "endUtf16": 31768, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "allocateLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 434, + "startUtf16": 19729 + } + }, + { + "graphCandidates": [ + "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21" + ], + "source": { + "endLine": 676, + "endUtf16": 36085, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "findSuitableLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 598, + "startUtf16": 31774 + } + }, + { + "graphCandidates": [ + "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca" + ], + "source": { + "endLine": 760, + "endUtf16": 41135, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "freeLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 678, + "startUtf16": 36091 + } + }, + { + "graphCandidates": [ + "sha256:9d9f417a45113f8597ed72b885546110a914bf65f1ba0970fb41711d472176a6" + ], + "source": { + "endLine": 770, + "endUtf16": 41837, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "applyStaticNatRuleForInlineLBRule", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 762, + "startUtf16": 41141 + } + }, + { + "graphCandidates": [ + "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952" + ], + "source": { + "endLine": 887, + "endUtf16": 47342, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getLoadBalancingIpNic", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 797, + "startUtf16": 42332 + } + }, + { + "graphCandidates": [ + "sha256:752125af788c4b388a7727ebb0bd59d8ad956b6ff850d7f9200ef9f8049b99ae" + ], + "source": { + "endLine": 897, + "endUtf16": 47683, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "isNccServiceProvider", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 889, + "startUtf16": 47348 + } + }, + { + "graphCandidates": [ + "sha256:01ab66a3921360bcb5029e7eef6478d533b6bd540cdf3d673871cfcaf9112617" + ], + "source": { + "endLine": 902, + "endUtf16": 47932, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getNetScalerControlCenterForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 899, + "startUtf16": 47689 + } + }, + { + "graphCandidates": [ + "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e" + ], + "source": { + "endLine": 1029, + "endUtf16": 54708, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "applyLoadBalancerRules", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 904, + "startUtf16": 47938 + } + }, + { + "graphCandidates": [ + "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6" + ], + "source": { + "endLine": 1143, + "endUtf16": 60998, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "manageGuestNetworkWithExternalLoadBalancer", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1031, + "startUtf16": 54714 + } + }, + { + "graphCandidates": [ + "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28" + ], + "source": { + "endLine": 1151, + "endUtf16": 61398, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "configure", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1145, + "startUtf16": 61004 + } + }, + { + "graphCandidates": [ + "sha256:fb590a544c46e226adecd60e84077c8a28f6ff11c01acbdc0de2932cc88cda58" + ], + "source": { + "endLine": 1156, + "endUtf16": 61469, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "start", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1153, + "startUtf16": 61404 + } + }, + { + "graphCandidates": [ + "sha256:8a635505061c04f703bc712c1741a9ceca50103ed1e34225030d69799b6914c7" + ], + "source": { + "endLine": 1161, + "endUtf16": 61539, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "stop", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1158, + "startUtf16": 61475 + } + }, + { + "graphCandidates": [ + "sha256:5d09fb6526536d8993f2f6a4b413da10a6d5649f91180f8477dbff29b95acbaf" + ], + "source": { + "endLine": 1167, + "endUtf16": 61709, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createHostVOForConnectedAgent", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1163, + "startUtf16": 61545 + } + }, + { + "graphCandidates": [ + "sha256:2dbf8171417a431813d9292dcb33d4b892235e2b8e030827bad7758c907cb715" + ], + "source": { + "endLine": 1181, + "endUtf16": 62256, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createHostVOForDirectConnectAgent", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1169, + "startUtf16": 61715 + } + }, + { + "graphCandidates": [ + "sha256:61f2d6e317ab87cf17a10ebc651c77a2a25096f25639073246c0022105274606" + ], + "source": { + "endLine": 1189, + "endUtf16": 62569, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "deleteHost", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1183, + "startUtf16": 62262 + } + }, + { + "graphCandidates": [ + "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42" + ], + "source": { + "endLine": 1211, + "endUtf16": 63704, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getIpDeployerForInlineMode", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1191, + "startUtf16": 62575 + } + }, + { + "graphCandidates": [ + "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50" + ], + "source": { + "endLine": 1297, + "endUtf16": 68113, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getLBHealthChecks", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1213, + "startUtf16": 63710 + } + }, + { + "graphCandidates": [ + "sha256:0f0ac8b8d8171327954faed1126533db91c1072651d20186db9b60887a4beab3" + ], + "source": { + "endLine": 1309, + "endUtf16": 68717, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getPlaceholderNic", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1299, + "startUtf16": 68119 + } + } + ], + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "graphMembers": [ + { + "endByte": 7128, + "endLine": 170, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:6ae2a588540f6200447a1624efff22acb3ebcefb8dee155a2d4d33b258679711", + "kind": "field", + "name": "_accountDao", + "startByte": 7117, + "startLine": 170 + }, + { + "endByte": 7314, + "endLine": 176, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:b285c8f5b46e37e98ec7694d651a9f71b27ee71701631386f3dc6914340a1f4d", + "kind": "field", + "name": "_accountMgr", + "startByte": 7303, + "startLine": 176 + }, + { + "endByte": 6908, + "endLine": 160, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:deeec2399d81c304bd5dc8210a3e16269f0936715328dd1c27f161a826dbadf1", + "kind": "field", + "name": "_agentMgr", + "startByte": 6899, + "startLine": 160 + }, + { + "endByte": 7606, + "endLine": 188, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:1ebcef1c61713cb6f8314fa6f86cf03965adb8269643fe46abf8dba3c4386166", + "kind": "field", + "name": "_configDao", + "startByte": 7596, + "startLine": 188 + }, + { + "endByte": 6661, + "endLine": 150, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:464b235dc0dd5c93065bee791c786dbbbd96bcdd0950a13d9a64e515f8c82341", + "kind": "field", + "name": "_dcDao", + "startByte": 6655, + "startLine": 150 + }, + { + "endByte": 8379, + "endLine": 217, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:a845a95f7e7fea51cdd93255bc425fa6f33c8780f4cdb56a20b46fce890d243c", + "kind": "field", + "name": "_defaultLbCapacity", + "startByte": 8361, + "startLine": 217 + }, + { + "endByte": 7916, + "endLine": 198, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:3c075dcbe5d52070a5ab9cf0f5766f0fad33c13725b6fd409de462cf5a6bfa3a", + "kind": "field", + "name": "_externalFirewallDeviceDao", + "startByte": 7890, + "startLine": 198 + }, + { + "endByte": 6589, + "endLine": 146, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:e20199d3bf894760e39529536d192131fed15c2adf4f7ce2c0ef6fe55e2a3f19", + "kind": "field", + "name": "_externalLoadBalancerDeviceDao", + "startByte": 6559, + "startLine": 146 + }, + { + "endByte": 6623, + "endLine": 148, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:c4d3f0e4ccecb7377ae044958375e3bad9fde0b2ddcf88cb3aa5a102a6d8b0ad", + "kind": "field", + "name": "_hostDao", + "startByte": 6615, + "startLine": 148 + }, + { + "endByte": 7653, + "endLine": 190, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:2167c780dd5a908667c976ed72effd57611d992c3b0ee0d138d600710765f3cd", + "kind": "field", + "name": "_hostDetailDao", + "startByte": 7639, + "startLine": 190 + }, + { + "endByte": 6836, + "endLine": 156, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:695fee15d6b6e6b46ba3df1b0a65006e6e29bf62dafaeb7b7e3758dafc3774ca", + "kind": "field", + "name": "_inlineLoadBalancerNicMapDao", + "startByte": 6808, + "startLine": 156 + }, + { + "endByte": 8014, + "endLine": 202, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:6e28234b44ffdf525b7730febe11325c50c1539ca08b42711b477953add0eb98", + "kind": "field", + "name": "_ipAddrMgr", + "startByte": 8004, + "startLine": 202 + }, + { + "endByte": 6998, + "endLine": 164, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:83f0ea4c0f440fe421cb511edfab721429e58bdf70d6051e96763523cabea956", + "kind": "field", + "name": "_ipAddressDao", + "startByte": 6985, + "startLine": 164 + }, + { + "endByte": 8074, + "endLine": 205, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:20e9b04c2483e1bfdf4b1b4c9c9a11480f19f51a38831e97912f1d221565b0ec", + "kind": "field", + "name": "_itMgr", + "startByte": 8068, + "startLine": 205 + }, + { + "endByte": 7497, + "endLine": 184, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:571aecfb31a7f30d7c774fb5528daa8b6c0fea621d41d9f694768412f06bc9dd", + "kind": "field", + "name": "_loadBalancerDao", + "startByte": 7481, + "startLine": 184 + }, + { + "endByte": 7403, + "endLine": 180, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:2098ce30981a4ab56343e8ca1ccb796438bee74d2524b929fba6729a25e7698e", + "kind": "field", + "name": "_networkDao", + "startByte": 7392, + "startLine": 180 + }, + { + "endByte": 7846, + "endLine": 196, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:a70bb0240f534f172af6a1599e1b1387c92521e1f3ce1923406335a106220f37", + "kind": "field", + "name": "_networkExternalFirewallDao", + "startByte": 7819, + "startLine": 196 + }, + { + "endByte": 6511, + "endLine": 144, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:d48a4d36aa43f6537614080268ff1da4d4c4c5d5fde49d835eca5a7e0aa9db0d", + "kind": "field", + "name": "_networkExternalLBDao", + "startByte": 6490, + "startLine": 144 + }, + { + "endByte": 7715, + "endLine": 192, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:6f2796dc195083076baf982f607d430765bf88b00d757324ebf575399210b253", + "kind": "field", + "name": "_networkLBDao", + "startByte": 7702, + "startLine": 192 + }, + { + "endByte": 6762, + "endLine": 154, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:4a1a0b0d60d94471178884803df78afb13b125fc7b21094b6f0118e7e1c7653c", + "kind": "field", + "name": "_networkMgr", + "startByte": 6751, + "startLine": 154 + }, + { + "endByte": 6705, + "endLine": 152, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:1c204f6d7888ed96f9b988eeb73cdd3e57d9131c413f6ba142b9891d5e63342c", + "kind": "field", + "name": "_networkModel", + "startByte": 6692, + "startLine": 152 + }, + { + "endByte": 7088, + "endLine": 168, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:520753938735383092187588cae8785e8bcc6393b22eb53eafb902fa7384a092", + "kind": "field", + "name": "_networkOfferingDao", + "startByte": 7069, + "startLine": 168 + }, + { + "endByte": 6868, + "endLine": 158, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:c83ab6a06eea20bdcb991c325a449df17364a7ed533917af719a63883a49a79f", + "kind": "field", + "name": "_nicDao", + "startByte": 6861, + "startLine": 158 + }, + { + "endByte": 7774, + "endLine": 194, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:6d7f54f7e690d84260a66c274e6780cce118ed0d220ec5be9ac4cd4bbd738e90", + "kind": "field", + "name": "_ntwkSrvcProviderDao", + "startByte": 7754, + "startLine": 194 + }, + { + "endByte": 7184, + "endLine": 172, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:8f63d21f7a432574db2808754da27fb8a5f280867d32cbae8daf6aca72821caf", + "kind": "field", + "name": "_physicalNetworkDao", + "startByte": 7165, + "startLine": 172 + }, + { + "endByte": 7270, + "endLine": 174, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:74ab8e11e79c44e51b03cde689d926d5346fc46aaa4f70c0e9ea9598eac1b9c4", + "kind": "field", + "name": "_physicalNetworkServiceProviderDao", + "startByte": 7236, + "startLine": 174 + }, + { + "endByte": 8284, + "endLine": 213, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:afaf119206367274bed1d97faf13a0bd50d010f5b926caa148e2d073d64118f2", + "kind": "field", + "name": "_physicalProviderDao", + "startByte": 8264, + "startLine": 213 + }, + { + "endByte": 7962, + "endLine": 200, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:df463387e7867f168a977ea770b0c2e42d3ac711c9eaef319d316409b3ff34d5", + "kind": "field", + "name": "_podDao", + "startByte": 7955, + "startLine": 200 + }, + { + "endByte": 7561, + "endLine": 186, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:87c36923e23372b81f4a8985bf1d8846d51d79149848f7cd931d2e4eb3653017", + "kind": "field", + "name": "_portForwardingRulesDao", + "startByte": 7538, + "startLine": 186 + }, + { + "endByte": 6954, + "endLine": 162, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:70b570d017818c8d9a9bfe6ce2caf4fb555980a75d60952487ba34e588955073", + "kind": "field", + "name": "_resourceMgr", + "startByte": 6942, + "startLine": 162 + }, + { + "endByte": 7447, + "endLine": 182, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:b45a200b4b16526f12a9840d4376fbae4ce3caa39dac26a928a611ebb7dca93e", + "kind": "field", + "name": "_routerDao", + "startByte": 7437, + "startLine": 182 + }, + { + "endByte": 8212, + "endLine": 211, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:b94808bee24294075ad29f77711b9b85880f41e95ff1399c912849b0dfc80991", + "kind": "field", + "name": "_serviceOfferingDao", + "startByte": 8193, + "startLine": 211 + }, + { + "endByte": 8156, + "endLine": 209, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:87a51688289dfbbf03adacfdc474e916d62b21715729ea72965b360df7b93846", + "kind": "field", + "name": "_templateDao", + "startByte": 8144, + "startLine": 209 + }, + { + "endByte": 7363, + "endLine": 178, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:6d872f778727749d077abf269f1cbdbe322ceafa91e2ffea290372df21541c4f", + "kind": "field", + "name": "_userStatsDao", + "startByte": 7350, + "startLine": 178 + }, + { + "endByte": 7032, + "endLine": 166, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:8b25366aa5124c41e4745309379a581a56cf797a917482744dca32fca1d03ecb", + "kind": "field", + "name": "_vlanDao", + "startByte": 7024, + "startLine": 166 + }, + { + "endByte": 8112, + "endLine": 207, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:5429377caf6aa5896f946619b8e10f4c27b7d26df2d868e1ac99552929368066", + "kind": "field", + "name": "_vmDao", + "startByte": 8106, + "startLine": 207 + }, + { + "endByte": 8341, + "endLine": 215, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:80ce3bd390663c2fec5a922cf040ac13ebd57870815a71ecd7005c5fecc02147", + "kind": "field", + "name": "_vrProviderDao", + "startByte": 8327, + "startLine": 215 + }, + { + "endByte": 8438, + "endLine": 218, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:e67703fc174b2826ca723f886a731bde82bca9e4e24b6b6e7b5f49a5c8334253", + "kind": "field", + "name": "s_logger", + "startByte": 8430, + "startLine": 218 + }, + { + "endByte": 14387, + "endLine": 326, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:ec2dc0ac3b9b9b7b3c1d710794c9af631162b2bb023e5cfd4a5c25d1dd523cbe", + "kind": "method", + "name": ".addExternalLoadBalancer()", + "startByte": 8509, + "startLine": 220 + }, + { + "endByte": 31768, + "endLine": 596, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:98a711d5e6d3543ab5ba22ad9d698401ea813948beb17e1db3227f2e941cb19f", + "kind": "method", + "name": ".allocateLoadBalancerForNetwork()", + "startByte": 19729, + "startLine": 434 + }, + { + "endByte": 54708, + "endLine": 1029, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:7c783f67bde866f202842ef0e4ff7e9991786ac6160eea44902d6bbb1a067f8e", + "kind": "method", + "name": ".applyLoadBalancerRules()", + "startByte": 47938, + "startLine": 904 + }, + { + "endByte": 41837, + "endLine": 770, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:9d9f417a45113f8597ed72b885546110a914bf65f1ba0970fb41711d472176a6", + "kind": "method", + "name": ".applyStaticNatRuleForInlineLBRule()", + "startByte": 41141, + "startLine": 762 + }, + { + "endByte": 61398, + "endLine": 1151, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:799774e65c4c831b2c7d61b78779d82cc82362f22706adb5968e985f232eed28", + "kind": "method", + "name": ".configure()", + "startByte": 61004, + "startLine": 1145 + }, + { + "endByte": 18696, + "endLine": 411, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:8adc07923460de74eb5748e360bbb92ef0268fe5e06e67deed7ae0ade9e6c599", + "kind": "method", + "name": ".createExternalLoadBalancerResponse()", + "startByte": 17991, + "startLine": 401 + }, + { + "endByte": 61709, + "endLine": 1167, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:5d09fb6526536d8993f2f6a4b413da10a6d5649f91180f8477dbff29b95acbaf", + "kind": "method", + "name": ".createHostVOForConnectedAgent()", + "startByte": 61545, + "startLine": 1163 + }, + { + "endByte": 62256, + "endLine": 1181, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:2dbf8171417a431813d9292dcb33d4b892235e2b8e030827bad7758c907cb715", + "kind": "method", + "name": ".createHostVOForDirectConnectAgent()", + "startByte": 61715, + "startLine": 1169 + }, + { + "endByte": 16684, + "endLine": 372, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:348b0e6c0efbdf3aeae24839cc269b518e4d413f7227039805796ad78ac3a39d", + "kind": "method", + "name": ".deleteExternalLoadBalancer()", + "startByte": 14393, + "startLine": 328 + }, + { + "endByte": 62569, + "endLine": 1189, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:61f2d6e317ab87cf17a10ebc651c77a2a25096f25639073246c0022105274606", + "kind": "method", + "name": ".deleteHost()", + "startByte": 62262, + "startLine": 1183 + }, + { + "endByte": 36085, + "endLine": 676, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:4640b01438dbb5cd8c96f5f9bccf27640a4644ab4a37e42e6cf0f609a2cebb21", + "kind": "method", + "name": ".findSuitableLoadBalancerForNetwork()", + "startByte": 31774, + "startLine": 598 + }, + { + "endByte": 41135, + "endLine": 760, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:31abdd7f06d8bcc22680f27b4d6c531405c8f313a1348360def2b79dbba492ca", + "kind": "method", + "name": ".freeLoadBalancerForNetwork()", + "startByte": 36091, + "startLine": 678 + }, + { + "endByte": 19432, + "endLine": 427, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:6f0ff34209385f110023262bc92b8dcdf132314e4bf1d98a12fa2ebcc63b19b6", + "kind": "method", + "name": ".getExternalLoadBalancerForNetwork()", + "startByte": 18883, + "startLine": 417 + }, + { + "endByte": 18877, + "endLine": 415, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:86bf7e6c3535dd83a5d6e0b4b9a0c72843feea0627119e1a0bba516742a4bd82", + "kind": "method", + "name": ".getExternalLoadBalancerResourceGuid()", + "startByte": 18702, + "startLine": 413 + }, + { + "endByte": 63704, + "endLine": 1211, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:b39acfd43bbb28c31e6412bbf369a6dbcedd2415a5b6f72f1873264a4b810b42", + "kind": "method", + "name": ".getIpDeployerForInlineMode()", + "startByte": 62575, + "startLine": 1191 + }, + { + "endByte": 68113, + "endLine": 1297, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:c4c3ad4b56cb4977c4768f0724cecdb5949dbf1d1c3c5d7a4d514eedd5e06e50", + "kind": "method", + "name": ".getLBHealthChecks()", + "startByte": 63710, + "startLine": 1213 + }, + { + "endByte": 47342, + "endLine": 887, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:953221c4c6de391586544e245a67e111a0f0255407787021742436badd1d0952", + "kind": "method", + "name": ".getLoadBalancingIpNic()", + "startByte": 42332, + "startLine": 797 + }, + { + "endByte": 47932, + "endLine": 902, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:01ab66a3921360bcb5029e7eef6478d533b6bd540cdf3d673871cfcaf9112617", + "kind": "method", + "name": ".getNetScalerControlCenterForNetwork()", + "startByte": 47689, + "startLine": 899 + }, + { + "endByte": 68717, + "endLine": 1309, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:0f0ac8b8d8171327954faed1126533db91c1072651d20186db9b60887a4beab3", + "kind": "method", + "name": ".getPlaceholderNic()", + "startByte": 68119, + "startLine": 1299 + }, + { + "endByte": 47683, + "endLine": 897, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:752125af788c4b388a7727ebb0bd59d8ad956b6ff850d7f9200ef9f8049b99ae", + "kind": "method", + "name": ".isNccServiceProvider()", + "startByte": 47348, + "startLine": 889 + }, + { + "endByte": 17985, + "endLine": 399, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:24386f2892ef0f468e71b7cada810e6f23aa0d1fc69e60178371a5f958a03d14", + "kind": "method", + "name": ".listExternalLoadBalancers()", + "startByte": 16690, + "startLine": 374 + }, + { + "endByte": 60998, + "endLine": 1143, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:80341559df564e263ffb77b23aabc31244d7f86b99712ecc31444ece66b280f6", + "kind": "method", + "name": ".manageGuestNetworkWithExternalLoadBalancer()", + "startByte": 54714, + "startLine": 1031 + }, + { + "endByte": 19723, + "endLine": 432, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:46f0f79d1533633b212cab83d54110ac544397f62812689fda8947b907f3b29f", + "kind": "method", + "name": ".setExternalLoadBalancerForNetwork()", + "startByte": 19438, + "startLine": 429 + }, + { + "endByte": 61469, + "endLine": 1156, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:fb590a544c46e226adecd60e84077c8a28f6ff11c01acbdc0de2932cc88cda58", + "kind": "method", + "name": ".start()", + "startByte": 61404, + "startLine": 1153 + }, + { + "endByte": 61539, + "endLine": 1161, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:8a635505061c04f703bc712c1741a9ceca50103ed1e34225030d69799b6914c7", + "kind": "method", + "name": ".stop()", + "startByte": 61475, + "startLine": 1158 + } + ], + "repository": "apache/cloudstack", + "sampleId": 8528735, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "sourceMembers": [ + { + "endLine": 144, + "endUtf16": 6512, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkExternalLBDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 143, + "startUtf16": 6447 + }, + { + "endLine": 146, + "endUtf16": 6590, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_externalLoadBalancerDeviceDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 145, + "startUtf16": 6517 + }, + { + "endLine": 148, + "endUtf16": 6624, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_hostDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 147, + "startUtf16": 6595 + }, + { + "endLine": 150, + "endUtf16": 6662, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_dcDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 149, + "startUtf16": 6629 + }, + { + "endLine": 152, + "endUtf16": 6706, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkModel", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 151, + "startUtf16": 6667 + }, + { + "endLine": 154, + "endUtf16": 6763, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 153, + "startUtf16": 6711 + }, + { + "endLine": 156, + "endUtf16": 6837, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_inlineLoadBalancerNicMapDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 155, + "startUtf16": 6768 + }, + { + "endLine": 158, + "endUtf16": 6869, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_nicDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 157, + "startUtf16": 6842 + }, + { + "endLine": 160, + "endUtf16": 6909, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_agentMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 159, + "startUtf16": 6874 + }, + { + "endLine": 162, + "endUtf16": 6955, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_resourceMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 161, + "startUtf16": 6914 + }, + { + "endLine": 164, + "endUtf16": 6999, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ipAddressDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 163, + "startUtf16": 6960 + }, + { + "endLine": 166, + "endUtf16": 7033, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vlanDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 165, + "startUtf16": 7004 + }, + { + "endLine": 168, + "endUtf16": 7089, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkOfferingDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 167, + "startUtf16": 7038 + }, + { + "endLine": 170, + "endUtf16": 7129, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_accountDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 169, + "startUtf16": 7094 + }, + { + "endLine": 172, + "endUtf16": 7185, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalNetworkDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 171, + "startUtf16": 7134 + }, + { + "endLine": 174, + "endUtf16": 7271, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalNetworkServiceProviderDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 173, + "startUtf16": 7190 + }, + { + "endLine": 176, + "endUtf16": 7315, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_accountMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 175, + "startUtf16": 7276 + }, + { + "endLine": 178, + "endUtf16": 7364, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_userStatsDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 177, + "startUtf16": 7320 + }, + { + "endLine": 180, + "endUtf16": 7404, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 179, + "startUtf16": 7369 + }, + { + "endLine": 182, + "endUtf16": 7448, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_routerDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 181, + "startUtf16": 7409 + }, + { + "endLine": 184, + "endUtf16": 7498, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_loadBalancerDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 183, + "startUtf16": 7453 + }, + { + "endLine": 186, + "endUtf16": 7562, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_portForwardingRulesDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 185, + "startUtf16": 7503 + }, + { + "endLine": 188, + "endUtf16": 7607, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_configDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 187, + "startUtf16": 7567 + }, + { + "endLine": 190, + "endUtf16": 7654, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_hostDetailDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 189, + "startUtf16": 7612 + }, + { + "endLine": 192, + "endUtf16": 7716, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkLBDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 191, + "startUtf16": 7659 + }, + { + "endLine": 194, + "endUtf16": 7775, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ntwkSrvcProviderDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 193, + "startUtf16": 7721 + }, + { + "endLine": 196, + "endUtf16": 7847, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_networkExternalFirewallDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 195, + "startUtf16": 7780 + }, + { + "endLine": 198, + "endUtf16": 7917, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_externalFirewallDeviceDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 197, + "startUtf16": 7852 + }, + { + "endLine": 200, + "endUtf16": 7970, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_podDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 199, + "startUtf16": 7922 + }, + { + "endLine": 202, + "endUtf16": 8015, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_ipAddrMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 201, + "startUtf16": 7975 + }, + { + "endLine": 205, + "endUtf16": 8075, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_itMgr", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 203, + "startUtf16": 8020 + }, + { + "endLine": 207, + "endUtf16": 8113, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vmDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 206, + "startUtf16": 8080 + }, + { + "endLine": 209, + "endUtf16": 8157, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_templateDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 208, + "startUtf16": 8118 + }, + { + "endLine": 211, + "endUtf16": 8213, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_serviceOfferingDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 210, + "startUtf16": 8162 + }, + { + "endLine": 213, + "endUtf16": 8285, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_physicalProviderDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 212, + "startUtf16": 8218 + }, + { + "endLine": 215, + "endUtf16": 8342, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_vrProviderDao", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 214, + "startUtf16": 8290 + }, + { + "endLine": 217, + "endUtf16": 8380, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "_defaultLbCapacity", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 217, + "startUtf16": 8348 + }, + { + "endLine": 218, + "endUtf16": 8503, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "field", + "name": "s_logger", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 218, + "startUtf16": 8385 + }, + { + "endLine": 326, + "endUtf16": 14387, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "addExternalLoadBalancer", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 220, + "startUtf16": 8509 + }, + { + "endLine": 372, + "endUtf16": 16684, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "deleteExternalLoadBalancer", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 328, + "startUtf16": 14393 + }, + { + "endLine": 399, + "endUtf16": 17985, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "listExternalLoadBalancers", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 374, + "startUtf16": 16690 + }, + { + "endLine": 411, + "endUtf16": 18696, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createExternalLoadBalancerResponse", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 401, + "startUtf16": 17991 + }, + { + "endLine": 415, + "endUtf16": 18877, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getExternalLoadBalancerResourceGuid", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 413, + "startUtf16": 18702 + }, + { + "endLine": 427, + "endUtf16": 19432, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getExternalLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 417, + "startUtf16": 18883 + }, + { + "endLine": 432, + "endUtf16": 19723, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "setExternalLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 429, + "startUtf16": 19438 + }, + { + "endLine": 596, + "endUtf16": 31768, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "allocateLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 434, + "startUtf16": 19729 + }, + { + "endLine": 676, + "endUtf16": 36085, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "findSuitableLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 598, + "startUtf16": 31774 + }, + { + "endLine": 760, + "endUtf16": 41135, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "freeLoadBalancerForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 678, + "startUtf16": 36091 + }, + { + "endLine": 770, + "endUtf16": 41837, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "applyStaticNatRuleForInlineLBRule", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 762, + "startUtf16": 41141 + }, + { + "endLine": 887, + "endUtf16": 47342, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getLoadBalancingIpNic", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 797, + "startUtf16": 42332 + }, + { + "endLine": 897, + "endUtf16": 47683, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "isNccServiceProvider", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 889, + "startUtf16": 47348 + }, + { + "endLine": 902, + "endUtf16": 47932, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getNetScalerControlCenterForNetwork", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 899, + "startUtf16": 47689 + }, + { + "endLine": 1029, + "endUtf16": 54708, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "applyLoadBalancerRules", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 904, + "startUtf16": 47938 + }, + { + "endLine": 1143, + "endUtf16": 60998, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "manageGuestNetworkWithExternalLoadBalancer", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1031, + "startUtf16": 54714 + }, + { + "endLine": 1151, + "endUtf16": 61398, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "configure", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1145, + "startUtf16": 61004 + }, + { + "endLine": 1156, + "endUtf16": 61469, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "start", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1153, + "startUtf16": 61404 + }, + { + "endLine": 1161, + "endUtf16": 61539, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "stop", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1158, + "startUtf16": 61475 + }, + { + "endLine": 1167, + "endUtf16": 61709, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createHostVOForConnectedAgent", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1163, + "startUtf16": 61545 + }, + { + "endLine": 1181, + "endUtf16": 62256, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "createHostVOForDirectConnectAgent", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1169, + "startUtf16": 61715 + }, + { + "endLine": 1189, + "endUtf16": 62569, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "deleteHost", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1183, + "startUtf16": 62262 + }, + { + "endLine": 1211, + "endUtf16": 63704, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getIpDeployerForInlineMode", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1191, + "startUtf16": 62575 + }, + { + "endLine": 1297, + "endUtf16": 68113, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getLBHealthChecks", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1213, + "startUtf16": 63710 + }, + { + "endLine": 1309, + "endUtf16": 68717, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "kind": "method", + "name": "getPlaceholderNic", + "owner": "ExternalLoadBalancerDeviceManagerImpl", + "recordType": "member", + "startLine": 1299, + "startUtf16": 68119 + } + ], + "sourceRole": "production-class", + "unmatchedGraphIds": [] + }, + { + "classGraph": { + "endByte": 1706, + "endLine": 60, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "kind": "class", + "name": "HandleConfigDriveIsoCommand", + "startByte": 882, + "startLine": 24 + }, + "classId": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "classSource": { + "endLine": 60, + "endUtf16": 1706, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "CLASS", + "name": "HandleConfigDriveIsoCommand", + "owner": "", + "recordType": "class", + "startLine": 24, + "startUtf16": 882 + }, + "classification": "unanimous-none", + "declarationMatches": [ + { + "graphCandidates": [ + "sha256:800efd6d52e2127c65ff7f020dabc4e9e0dd3a4058cb35e9363cfb925d1ac80b" + ], + "source": { + "endLine": 27, + "endUtf16": 1008, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "isoData", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 26, + "startUtf16": 946 + } + }, + { + "graphCandidates": [ + "sha256:c976047893b66f10cfc82a8fc1771d8a7763cedf7b044323107b27a4202d3817" + ], + "source": { + "endLine": 29, + "endUtf16": 1037, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "isoFile", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 29, + "startUtf16": 1014 + } + }, + { + "graphCandidates": [ + "sha256:4d475e4306639a2f27d07d42d806992f7f56e980fb78eb2cd6e655fb84017f1d" + ], + "source": { + "endLine": 30, + "endUtf16": 1073, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "create", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 30, + "startUtf16": 1042 + } + }, + { + "graphCandidates": [ + "sha256:14456682777a4ff64721ed0a34adc9e91a1484ba7594d74ba3931b23d1b058dc" + ], + "source": { + "endLine": 31, + "endUtf16": 1108, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "destStore", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 31, + "startUtf16": 1078 + } + }, + { + "graphCandidates": [ + "sha256:8e64ade8bc0929310169d839594fb25c73641f5e9bf97d1699ce13a16bb62728" + ], + "source": { + "endLine": 43, + "endUtf16": 1441, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "executeInSequence", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 40, + "startUtf16": 1363 + } + }, + { + "graphCandidates": [ + "sha256:7fa67675b5f04e758a02243355d2fbb68eb9d9c685cdb7b2b1c192d0ea5bd3d1" + ], + "source": { + "endLine": 47, + "endUtf16": 1505, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getIsoData", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 45, + "startUtf16": 1447 + } + }, + { + "graphCandidates": [ + "sha256:d999831bb8489f58708b7121238ed367baa1a1b1bde30984926039f9a9951052" + ], + "source": { + "endLine": 51, + "endUtf16": 1567, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "isCreate", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 49, + "startUtf16": 1511 + } + }, + { + "graphCandidates": [ + "sha256:4a8d6dc8071557345615646d5628ca493b826d606fbea4a8a4906bbafc103530" + ], + "source": { + "endLine": 55, + "endUtf16": 1640, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getDestStore", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 53, + "startUtf16": 1573 + } + }, + { + "graphCandidates": [ + "sha256:4353f0a8ccdddeb491539282f4ccf823780cea0bd83399b0c460602c270f9d9a" + ], + "source": { + "endLine": 59, + "endUtf16": 1704, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getIsoFile", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 57, + "startUtf16": 1646 + } + } + ], + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "graphMembers": [ + { + "endByte": 1064, + "endLine": 30, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:4d475e4306639a2f27d07d42d806992f7f56e980fb78eb2cd6e655fb84017f1d", + "kind": "field", + "name": "create", + "startByte": 1058, + "startLine": 30 + }, + { + "endByte": 1107, + "endLine": 31, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:14456682777a4ff64721ed0a34adc9e91a1484ba7594d74ba3931b23d1b058dc", + "kind": "field", + "name": "destStore", + "startByte": 1098, + "startLine": 31 + }, + { + "endByte": 1007, + "endLine": 27, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:800efd6d52e2127c65ff7f020dabc4e9e0dd3a4058cb35e9363cfb925d1ac80b", + "kind": "field", + "name": "isoData", + "startByte": 1000, + "startLine": 27 + }, + { + "endByte": 1036, + "endLine": 29, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:c976047893b66f10cfc82a8fc1771d8a7763cedf7b044323107b27a4202d3817", + "kind": "field", + "name": "isoFile", + "startByte": 1029, + "startLine": 29 + }, + { + "endByte": 1441, + "endLine": 43, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:8e64ade8bc0929310169d839594fb25c73641f5e9bf97d1699ce13a16bb62728", + "kind": "method", + "name": ".executeInSequence()", + "startByte": 1363, + "startLine": 40 + }, + { + "endByte": 1640, + "endLine": 55, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:4a8d6dc8071557345615646d5628ca493b826d606fbea4a8a4906bbafc103530", + "kind": "method", + "name": ".getDestStore()", + "startByte": 1573, + "startLine": 53 + }, + { + "endByte": 1505, + "endLine": 47, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:7fa67675b5f04e758a02243355d2fbb68eb9d9c685cdb7b2b1c192d0ea5bd3d1", + "kind": "method", + "name": ".getIsoData()", + "startByte": 1447, + "startLine": 45 + }, + { + "endByte": 1704, + "endLine": 59, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:4353f0a8ccdddeb491539282f4ccf823780cea0bd83399b0c460602c270f9d9a", + "kind": "method", + "name": ".getIsoFile()", + "startByte": 1646, + "startLine": 57 + }, + { + "endByte": 1567, + "endLine": 51, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:d999831bb8489f58708b7121238ed367baa1a1b1bde30984926039f9a9951052", + "kind": "method", + "name": ".isCreate()", + "startByte": 1511, + "startLine": 49 + } + ], + "repository": "apache/cloudstack", + "sampleId": 8537138, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "sourceMembers": [ + { + "endLine": 27, + "endUtf16": 1008, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "isoData", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 26, + "startUtf16": 946 + }, + { + "endLine": 29, + "endUtf16": 1037, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "isoFile", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 29, + "startUtf16": 1014 + }, + { + "endLine": 30, + "endUtf16": 1073, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "create", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 30, + "startUtf16": 1042 + }, + { + "endLine": 31, + "endUtf16": 1108, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "field", + "name": "destStore", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 31, + "startUtf16": 1078 + }, + { + "endLine": 38, + "endUtf16": 1357, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "constructor", + "name": "HandleConfigDriveIsoCommand", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 33, + "startUtf16": 1114 + }, + { + "endLine": 43, + "endUtf16": 1441, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "executeInSequence", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 40, + "startUtf16": 1363 + }, + { + "endLine": 47, + "endUtf16": 1505, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getIsoData", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 45, + "startUtf16": 1447 + }, + { + "endLine": 51, + "endUtf16": 1567, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "isCreate", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 49, + "startUtf16": 1511 + }, + { + "endLine": 55, + "endUtf16": 1640, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getDestStore", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 53, + "startUtf16": 1573 + }, + { + "endLine": 59, + "endUtf16": 1704, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "kind": "method", + "name": "getIsoFile", + "owner": "HandleConfigDriveIsoCommand", + "recordType": "member", + "startLine": 57, + "startUtf16": 1646 + } + ], + "sourceRole": "production-class", + "unmatchedGraphIds": [] + }, + { + "classGraph": { + "endByte": 21007, + "endLine": 542, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "kind": "class", + "name": "BrocadeVcsApi", + "startByte": 2791, + "startLine": 63 + }, + "classId": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "classSource": { + "endLine": 542, + "endUtf16": 21007, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "CLASS", + "name": "BrocadeVcsApi", + "owner": "", + "recordType": "class", + "startLine": 63, + "startUtf16": 2791 + }, + "classification": "unanimous-major-critical", + "declarationMatches": [ + { + "graphCandidates": [ + "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2" + ], + "source": { + "endLine": 64, + "endUtf16": 2901, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "s_logger", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 64, + "startUtf16": 2824 + } + }, + { + "graphCandidates": [ + "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae" + ], + "source": { + "endLine": 66, + "endUtf16": 2934, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_host", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 66, + "startUtf16": 2907 + } + }, + { + "graphCandidates": [ + "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db" + ], + "source": { + "endLine": 67, + "endUtf16": 2971, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_adminuser", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 67, + "startUtf16": 2939 + } + }, + { + "graphCandidates": [ + "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868" + ], + "source": { + "endLine": 68, + "endUtf16": 3008, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_adminpass", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 68, + "startUtf16": 2976 + } + }, + { + "graphCandidates": [ + "sha256:cff03c478a6d9c6b6fb9b7e9993b9238e8c8962279574b401884c9f506cf4a3c" + ], + "source": { + "endLine": 70, + "endUtf16": 3050, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_client", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 70, + "startUtf16": 3014 + } + }, + { + "graphCandidates": [ + "sha256:9b1b0b79581c7123928906a67eb2fad96fff3c2c2d4cb778e3d52d9d95a686ff" + ], + "source": { + "endLine": 92, + "endUtf16": 3966, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createMethod", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 72, + "startUtf16": 3056 + } + }, + { + "graphCandidates": [ + "sha256:888510f556c4e8f31e232a41347374f3ba4e7e6cf33f4d659a906f7476edbdaf" + ], + "source": { + "endLine": 109, + "endUtf16": 4491, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "getSwitchStatus", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 106, + "startUtf16": 4361 + } + }, + { + "graphCandidates": [ + "sha256:ec1f2cad8ded369ed6c7595e63ae52a51e539a42ad568a730d9699ed29a76486" + ], + "source": { + "endLine": 125, + "endUtf16": 4914, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createNetwork", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 114, + "startUtf16": 4550 + } + }, + { + "graphCandidates": [ + "sha256:e9217b2c0f50edab646125629b420dcc586b34e2af784ee14408fad1194cf98b" + ], + "source": { + "endLine": 139, + "endUtf16": 5436, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "activatePortProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 130, + "startUtf16": 4968 + } + }, + { + "graphCandidates": [ + "sha256:068d4f1198a76004973f16ecb2d949b4303549b876e9d02b91c94d86f04a2123" + ], + "source": { + "endLine": 154, + "endUtf16": 5937, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createPortProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 144, + "startUtf16": 5492 + } + }, + { + "graphCandidates": [ + "sha256:0920c1cf1be925468a829e3cc3d24f6076ffe387269b0e2eed1b5a3cbbcdd906" + ], + "source": { + "endLine": 166, + "endUtf16": 6385, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createVlanSubProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 159, + "startUtf16": 6006 + } + }, + { + "graphCandidates": [ + "sha256:051dd269edf96108bb4e1e3820b135226d187e8f8852c55879e3f7f00b2241c9" + ], + "source": { + "endLine": 210, + "endUtf16": 8267, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "configureVlanSubProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 174, + "startUtf16": 6612 + } + }, + { + "graphCandidates": [ + "sha256:c90e535df61b390d74b0efa7dee198e3699d514092870ba6f55099eeed3c1cfc" + ], + "source": { + "endLine": 225, + "endUtf16": 8749, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createInterfaceVlan", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 215, + "startUtf16": 8321 + } + }, + { + "graphCandidates": [ + "sha256:c2f13be6a70033e35efc1073ce0df225d417952f21d086c765918bf91d15c76c" + ], + "source": { + "endLine": 242, + "endUtf16": 9458, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "associateMacToNetwork", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 230, + "startUtf16": 8822 + } + }, + { + "graphCandidates": [ + "sha256:d3e1a1a3224e2e680ae9f2d9edeabda19b8afa1f6041a348e0beda2d54919a99" + ], + "source": { + "endLine": 260, + "endUtf16": 10219, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "disassociateMacFromNetwork", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 247, + "startUtf16": 9536 + } + }, + { + "graphCandidates": [ + "sha256:0838a105e39a8d84253a61f5359d59730a3b32c0af4acdbe8a20788323cefe26" + ], + "source": { + "endLine": 274, + "endUtf16": 10568, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deleteNetwork", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 265, + "startUtf16": 10278 + } + }, + { + "graphCandidates": [ + "sha256:ef1dd48e1af37a7cc2fd05bdecc4771cc2cfbddf2a3b68ae17850f0eb80f65f4" + ], + "source": { + "endLine": 290, + "endUtf16": 11087, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deleteInterfaceVlan", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 279, + "startUtf16": 10622 + } + }, + { + "graphCandidates": [ + "sha256:5d3594955636b7c623a86f88136ff00fd1ce6d86b3776fce7e8fd1ce5c74f109" + ], + "source": { + "endLine": 306, + "endUtf16": 11739, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deactivatePortProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 295, + "startUtf16": 11143 + } + }, + { + "graphCandidates": [ + "sha256:6e73ee05bdf87d24c1e4562d6a0ac99e11db7722146f76b640fec2a36bbb5ab6" + ], + "source": { + "endLine": 318, + "endUtf16": 12158, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deletePortProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 311, + "startUtf16": 11795 + } + }, + { + "graphCandidates": [ + "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2" + ], + "source": { + "endLine": 353, + "endUtf16": 13552, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeUpdateObject", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 320, + "startUtf16": 12164 + } + }, + { + "graphCandidates": [ + "sha256:1537123f4043eeafb6e3d6a9ffe2ebe76214eff90502bce2828d5505ca96c7db" + ], + "source": { + "endLine": 375, + "endUtf16": 14275, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "convertToString", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 355, + "startUtf16": 13558 + } + }, + { + "graphCandidates": [ + "sha256:a1653a754e7b32dd54c190546d66856b1733a208f69f20cbe30ef629d730cab5" + ], + "source": { + "endLine": 400, + "endUtf16": 15104, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "convertToXML", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 377, + "startUtf16": 14281 + } + }, + { + "graphCandidates": [ + "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2" + ], + "source": { + "endLine": 432, + "endUtf16": 16489, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeCreateObject", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 402, + "startUtf16": 15110 + } + }, + { + "graphCandidates": [ + "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f" + ], + "source": { + "endLine": 479, + "endUtf16": 18460, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeRetreiveStatus", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 434, + "startUtf16": 16495 + } + }, + { + "graphCandidates": [ + "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f" + ], + "source": { + "endLine": 506, + "endUtf16": 19675, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeDeleteObject", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 481, + "startUtf16": 18466 + } + }, + { + "graphCandidates": [ + "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7" + ], + "source": { + "endLine": 523, + "endUtf16": 20380, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeMethod", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 508, + "startUtf16": 19681 + } + }, + { + "graphCandidates": [ + "sha256:c33e817de6476414ba26862ff9d053165e0c66ce5145835b2fdc9fc12914f1f0" + ], + "source": { + "endLine": 540, + "endUtf16": 21004, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "responseToErrorMessage", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 525, + "startUtf16": 20386 + } + } + ], + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "graphMembers": [ + { + "endByte": 3007, + "endLine": 68, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:87fc493b8d0fa88f77bc2296d7775bb6ad2178067b839ef7f922f8bee7523868", + "kind": "field", + "name": "_adminpass", + "startByte": 2997, + "startLine": 68 + }, + { + "endByte": 2970, + "endLine": 67, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:9287ffff4b7061dadc807375de9630cbe2241c38d150c3fb3ce0ff7612e509db", + "kind": "field", + "name": "_adminuser", + "startByte": 2960, + "startLine": 67 + }, + { + "endByte": 3049, + "endLine": 70, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:cff03c478a6d9c6b6fb9b7e9993b9238e8c8962279574b401884c9f506cf4a3c", + "kind": "field", + "name": "_client", + "startByte": 3042, + "startLine": 70 + }, + { + "endByte": 2933, + "endLine": 66, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:9b35617e2bdf7c6c054a2e7a76d1c541606f64fd9001b9dc4d4055b3aaaf0dae", + "kind": "field", + "name": "_host", + "startByte": 2928, + "startLine": 66 + }, + { + "endByte": 2860, + "endLine": 64, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:5d2eb023b68aa36d5946ae30c5b638693b03264cc3c28abdfa44cbd2fc439cc2", + "kind": "field", + "name": "s_logger", + "startByte": 2852, + "startLine": 64 + }, + { + "endByte": 5436, + "endLine": 139, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:e9217b2c0f50edab646125629b420dcc586b34e2af784ee14408fad1194cf98b", + "kind": "method", + "name": ".activatePortProfile()", + "startByte": 4968, + "startLine": 130 + }, + { + "endByte": 9458, + "endLine": 242, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:c2f13be6a70033e35efc1073ce0df225d417952f21d086c765918bf91d15c76c", + "kind": "method", + "name": ".associateMacToNetwork()", + "startByte": 8822, + "startLine": 230 + }, + { + "endByte": 8267, + "endLine": 210, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:051dd269edf96108bb4e1e3820b135226d187e8f8852c55879e3f7f00b2241c9", + "kind": "method", + "name": ".configureVlanSubProfile()", + "startByte": 6612, + "startLine": 174 + }, + { + "endByte": 14275, + "endLine": 375, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:1537123f4043eeafb6e3d6a9ffe2ebe76214eff90502bce2828d5505ca96c7db", + "kind": "method", + "name": ".convertToString()", + "startByte": 13558, + "startLine": 355 + }, + { + "endByte": 15104, + "endLine": 400, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:a1653a754e7b32dd54c190546d66856b1733a208f69f20cbe30ef629d730cab5", + "kind": "method", + "name": ".convertToXML()", + "startByte": 14281, + "startLine": 377 + }, + { + "endByte": 8749, + "endLine": 225, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:c90e535df61b390d74b0efa7dee198e3699d514092870ba6f55099eeed3c1cfc", + "kind": "method", + "name": ".createInterfaceVlan()", + "startByte": 8321, + "startLine": 215 + }, + { + "endByte": 3966, + "endLine": 92, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:9b1b0b79581c7123928906a67eb2fad96fff3c2c2d4cb778e3d52d9d95a686ff", + "kind": "method", + "name": ".createMethod()", + "startByte": 3056, + "startLine": 72 + }, + { + "endByte": 4914, + "endLine": 125, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:ec1f2cad8ded369ed6c7595e63ae52a51e539a42ad568a730d9699ed29a76486", + "kind": "method", + "name": ".createNetwork()", + "startByte": 4550, + "startLine": 114 + }, + { + "endByte": 5937, + "endLine": 154, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:068d4f1198a76004973f16ecb2d949b4303549b876e9d02b91c94d86f04a2123", + "kind": "method", + "name": ".createPortProfile()", + "startByte": 5492, + "startLine": 144 + }, + { + "endByte": 6385, + "endLine": 166, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:0920c1cf1be925468a829e3cc3d24f6076ffe387269b0e2eed1b5a3cbbcdd906", + "kind": "method", + "name": ".createVlanSubProfile()", + "startByte": 6006, + "startLine": 159 + }, + { + "endByte": 11739, + "endLine": 306, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:5d3594955636b7c623a86f88136ff00fd1ce6d86b3776fce7e8fd1ce5c74f109", + "kind": "method", + "name": ".deactivatePortProfile()", + "startByte": 11143, + "startLine": 295 + }, + { + "endByte": 11087, + "endLine": 290, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:ef1dd48e1af37a7cc2fd05bdecc4771cc2cfbddf2a3b68ae17850f0eb80f65f4", + "kind": "method", + "name": ".deleteInterfaceVlan()", + "startByte": 10622, + "startLine": 279 + }, + { + "endByte": 10568, + "endLine": 274, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:0838a105e39a8d84253a61f5359d59730a3b32c0af4acdbe8a20788323cefe26", + "kind": "method", + "name": ".deleteNetwork()", + "startByte": 10278, + "startLine": 265 + }, + { + "endByte": 12158, + "endLine": 318, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:6e73ee05bdf87d24c1e4562d6a0ac99e11db7722146f76b640fec2a36bbb5ab6", + "kind": "method", + "name": ".deletePortProfile()", + "startByte": 11795, + "startLine": 311 + }, + { + "endByte": 10219, + "endLine": 260, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:d3e1a1a3224e2e680ae9f2d9edeabda19b8afa1f6041a348e0beda2d54919a99", + "kind": "method", + "name": ".disassociateMacFromNetwork()", + "startByte": 9536, + "startLine": 247 + }, + { + "endByte": 16489, + "endLine": 432, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:711612640ce446bd4eb22e6145e1b338e656646703ef016bd46bc22a2ab605e2", + "kind": "method", + "name": ".executeCreateObject()", + "startByte": 15110, + "startLine": 402 + }, + { + "endByte": 19675, + "endLine": 506, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:97a514601a100bfc8a0021d69ed7744925171c16be8966757646f510d5da7d0f", + "kind": "method", + "name": ".executeDeleteObject()", + "startByte": 18466, + "startLine": 481 + }, + { + "endByte": 20380, + "endLine": 523, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:8c2f885e0612473c187a2119189b1cb7d14b362d51a3f4a4b6a94f71fe1e6de7", + "kind": "method", + "name": ".executeMethod()", + "startByte": 19681, + "startLine": 508 + }, + { + "endByte": 18460, + "endLine": 479, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:7e9be100d3abd1c789f4a8abaeec2fbaf72bf2300c81acc24d1ada98a499300f", + "kind": "method", + "name": ".executeRetreiveStatus()", + "startByte": 16495, + "startLine": 434 + }, + { + "endByte": 13552, + "endLine": 353, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:7808cefa35dac49da2071d015488925833898016769b3770f6fb20f5a47a08d2", + "kind": "method", + "name": ".executeUpdateObject()", + "startByte": 12164, + "startLine": 320 + }, + { + "endByte": 4491, + "endLine": 109, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:888510f556c4e8f31e232a41347374f3ba4e7e6cf33f4d659a906f7476edbdaf", + "kind": "method", + "name": ".getSwitchStatus()", + "startByte": 4361, + "startLine": 106 + }, + { + "endByte": 21004, + "endLine": 540, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:c33e817de6476414ba26862ff9d053165e0c66ce5145835b2fdc9fc12914f1f0", + "kind": "method", + "name": ".responseToErrorMessage()", + "startByte": 20386, + "startLine": 525 + } + ], + "repository": "apache/cloudstack", + "sampleId": 8538037, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "sourceMembers": [ + { + "endLine": 64, + "endUtf16": 2901, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "s_logger", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 64, + "startUtf16": 2824 + }, + { + "endLine": 66, + "endUtf16": 2934, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_host", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 66, + "startUtf16": 2907 + }, + { + "endLine": 67, + "endUtf16": 2971, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_adminuser", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 67, + "startUtf16": 2939 + }, + { + "endLine": 68, + "endUtf16": 3008, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_adminpass", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 68, + "startUtf16": 2976 + }, + { + "endLine": 70, + "endUtf16": 3050, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "field", + "name": "_client", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 70, + "startUtf16": 3014 + }, + { + "endLine": 92, + "endUtf16": 3966, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createMethod", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 72, + "startUtf16": 3056 + }, + { + "endLine": 101, + "endUtf16": 4310, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "constructor", + "name": "BrocadeVcsApi", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 94, + "startUtf16": 3972 + }, + { + "endLine": 109, + "endUtf16": 4491, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "getSwitchStatus", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 106, + "startUtf16": 4361 + }, + { + "endLine": 125, + "endUtf16": 4914, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createNetwork", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 114, + "startUtf16": 4550 + }, + { + "endLine": 139, + "endUtf16": 5436, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "activatePortProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 130, + "startUtf16": 4968 + }, + { + "endLine": 154, + "endUtf16": 5937, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createPortProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 144, + "startUtf16": 5492 + }, + { + "endLine": 166, + "endUtf16": 6385, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createVlanSubProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 159, + "startUtf16": 6006 + }, + { + "endLine": 210, + "endUtf16": 8267, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "configureVlanSubProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 174, + "startUtf16": 6612 + }, + { + "endLine": 225, + "endUtf16": 8749, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "createInterfaceVlan", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 215, + "startUtf16": 8321 + }, + { + "endLine": 242, + "endUtf16": 9458, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "associateMacToNetwork", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 230, + "startUtf16": 8822 + }, + { + "endLine": 260, + "endUtf16": 10219, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "disassociateMacFromNetwork", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 247, + "startUtf16": 9536 + }, + { + "endLine": 274, + "endUtf16": 10568, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deleteNetwork", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 265, + "startUtf16": 10278 + }, + { + "endLine": 290, + "endUtf16": 11087, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deleteInterfaceVlan", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 279, + "startUtf16": 10622 + }, + { + "endLine": 306, + "endUtf16": 11739, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deactivatePortProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 295, + "startUtf16": 11143 + }, + { + "endLine": 318, + "endUtf16": 12158, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "deletePortProfile", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 311, + "startUtf16": 11795 + }, + { + "endLine": 353, + "endUtf16": 13552, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeUpdateObject", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 320, + "startUtf16": 12164 + }, + { + "endLine": 375, + "endUtf16": 14275, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "convertToString", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 355, + "startUtf16": 13558 + }, + { + "endLine": 400, + "endUtf16": 15104, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "convertToXML", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 377, + "startUtf16": 14281 + }, + { + "endLine": 432, + "endUtf16": 16489, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeCreateObject", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 402, + "startUtf16": 15110 + }, + { + "endLine": 479, + "endUtf16": 18460, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeRetreiveStatus", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 434, + "startUtf16": 16495 + }, + { + "endLine": 506, + "endUtf16": 19675, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeDeleteObject", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 481, + "startUtf16": 18466 + }, + { + "endLine": 523, + "endUtf16": 20380, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "executeMethod", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 508, + "startUtf16": 19681 + }, + { + "endLine": 540, + "endUtf16": 21004, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "kind": "method", + "name": "responseToErrorMessage", + "owner": "BrocadeVcsApi", + "recordType": "member", + "startLine": 525, + "startUtf16": 20386 + } + ], + "sourceRole": "production-class", + "unmatchedGraphIds": [] + }, + { + "classGraph": { + "endByte": 1339, + "endLine": 38, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "id": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "kind": "class", + "name": "DeploymentPlannersResponse", + "startByte": 1029, + "startLine": 26 + }, + "classId": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "classSource": { + "endLine": 38, + "endUtf16": 1339, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "CLASS", + "name": "DeploymentPlannersResponse", + "owner": "", + "recordType": "class", + "startLine": 26, + "startUtf16": 1029 + }, + "classification": "unanimous-none", + "declarationMatches": [ + { + "graphCandidates": [ + "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033" + ], + "source": { + "endLine": 29, + "endUtf16": 1207, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "field", + "name": "name", + "owner": "DeploymentPlannersResponse", + "recordType": "member", + "startLine": 27, + "startUtf16": 1096 + } + }, + { + "graphCandidates": [ + "sha256:12f9f388f62ac7c285c0fd66e2338e2dad060ff7e4a84c5403a1a1fa72606d63" + ], + "source": { + "endLine": 33, + "endUtf16": 1265, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "method", + "name": "getName", + "owner": "DeploymentPlannersResponse", + "recordType": "member", + "startLine": 31, + "startUtf16": 1213 + } + }, + { + "graphCandidates": [ + "sha256:d610f427834da5212c077f597a677863c177e7726d9e8e4628cf3051e950282d" + ], + "source": { + "endLine": 37, + "endUtf16": 1337, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "method", + "name": "setName", + "owner": "DeploymentPlannersResponse", + "recordType": "member", + "startLine": 35, + "startUtf16": 1271 + } + } + ], + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "graphMembers": [ + { + "endByte": 1206, + "endLine": 29, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "id": "sha256:2d6ac8222d4bad9d2c9b469c6e6589cf78e9bd7ed4dbbd7d29fa20f50d134033", + "kind": "field", + "name": "name", + "startByte": 1202, + "startLine": 29 + }, + { + "endByte": 1265, + "endLine": 33, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "id": "sha256:12f9f388f62ac7c285c0fd66e2338e2dad060ff7e4a84c5403a1a1fa72606d63", + "kind": "method", + "name": ".getName()", + "startByte": 1213, + "startLine": 31 + }, + { + "endByte": 1337, + "endLine": 37, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "id": "sha256:d610f427834da5212c077f597a677863c177e7726d9e8e4628cf3051e950282d", + "kind": "method", + "name": ".setName()", + "startByte": 1271, + "startLine": 35 + } + ], + "repository": "apache/cloudstack", + "sampleId": 8539645, + "sourceFileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "sourceMembers": [ + { + "endLine": 29, + "endUtf16": 1207, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "field", + "name": "name", + "owner": "DeploymentPlannersResponse", + "recordType": "member", + "startLine": 27, + "startUtf16": 1096 + }, + { + "endLine": 33, + "endUtf16": 1265, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "method", + "name": "getName", + "owner": "DeploymentPlannersResponse", + "recordType": "member", + "startLine": 31, + "startUtf16": 1213 + }, + { + "endLine": 37, + "endUtf16": 1337, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "kind": "method", + "name": "setName", + "owner": "DeploymentPlannersResponse", + "recordType": "member", + "startLine": 35, + "startUtf16": 1271 + } + ], + "sourceRole": "production-class", + "unmatchedGraphIds": [] + } + ], + "limitations": [ + "Syntax-only JDK 17 parser over eight known rated classes; no attribution of calls or field accesses.", + "Graph comparisons cover direct method and field nodes. Five source constructors are reported but not compared to graph constructor nodes under this registration.", + "The first graph comparison used literal Compass display names and left 95 methods unmatched; the corrected comparison strips the documented .name() display wrapper. Both raw runs are retained.", + "One consensus-positive class is a test class. These eight development labels do not establish generalization or a god-object classifier." + ], + "oracleOutputSha256": "4dfa350e54d588b72f0abe5620761af3d6a477831536e5689bbf8403a0eba2ef", + "oracleRepeatByteIdentical": true, + "oracleSourceSha256": "9b2167d477a79d855c838cc0e91014970414c1cd2f1c9b4fb4b9ab7f177b410d", + "registrationSha256": "5288683928cfbfb9811b0edcf8a0ad2b197636385c1687440ea6154169ee4d04", + "schema": "compass.mlcq-member-source-review/1", + "scope": "Syntax declaration coverage in eight known externally rated Java classes; no source binding, defect ranking or held-out inference.", + "summaries": [ + { + "classId": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "classification": "unanimous-major-critical", + "fieldStartLineDifferences": 0, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "matchedGraphFields": 11, + "matchedGraphMethods": 14, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6374724, + "sourceConstructorCount": 1, + "sourceFieldCount": 11, + "sourceFileSha256": "c322857c126421a01dddc5b7f1d93fba2bc07de72453c19c5f30091f7048b01c", + "sourceMethodCount": 14, + "sourceRole": "production-class" + }, + { + "classId": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "classification": "unanimous-none", + "fieldStartLineDifferences": 0, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "matchedGraphFields": 0, + "matchedGraphMethods": 7, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6391534, + "sourceConstructorCount": 0, + "sourceFieldCount": 0, + "sourceFileSha256": "50407d33afc5ee8283f1022f5bf38278aa20b4cd82db4cd909eb5ee0e2e22b64", + "sourceMethodCount": 7, + "sourceRole": "production-class" + }, + { + "classId": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "classification": "unanimous-none", + "fieldStartLineDifferences": 0, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "matchedGraphFields": 1, + "matchedGraphMethods": 6, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6406137, + "sourceConstructorCount": 1, + "sourceFieldCount": 1, + "sourceFileSha256": "b45eedb84f09f0a8a258ff2eaa4327dae60fa2e7365ec4046fd3ca53dd9b4d69", + "sourceMethodCount": 6, + "sourceRole": "production-class" + }, + { + "classId": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "classification": "unanimous-major-critical", + "fieldStartLineDifferences": 0, + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "matchedGraphFields": 5, + "matchedGraphMethods": 14, + "repository": "eclipse/eclipse.platform.ui", + "sampleId": 6413795, + "sourceConstructorCount": 1, + "sourceFieldCount": 5, + "sourceFileSha256": "9a70d77d824154488332a1dcced6c6cf50af5943b1f601ef376832edc73202c7", + "sourceMethodCount": 14, + "sourceRole": "test-class" + }, + { + "classId": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "classification": "unanimous-major-critical", + "fieldStartLineDifferences": 36, + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "matchedGraphFields": 38, + "matchedGraphMethods": 25, + "repository": "apache/cloudstack", + "sampleId": 8528735, + "sourceConstructorCount": 0, + "sourceFieldCount": 38, + "sourceFileSha256": "411ae1dbbd20a532d38af6c39c2fbaf0ece284d758c175be6c6f97618aba19bf", + "sourceMethodCount": 25, + "sourceRole": "production-class" + }, + { + "classId": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "classification": "unanimous-none", + "fieldStartLineDifferences": 1, + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "matchedGraphFields": 4, + "matchedGraphMethods": 5, + "repository": "apache/cloudstack", + "sampleId": 8537138, + "sourceConstructorCount": 1, + "sourceFieldCount": 4, + "sourceFileSha256": "b82d5af74a4561851bcc6b51790a037b41084db40418f12e263069973aef842b", + "sourceMethodCount": 5, + "sourceRole": "production-class" + }, + { + "classId": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "classification": "unanimous-major-critical", + "fieldStartLineDifferences": 0, + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "matchedGraphFields": 5, + "matchedGraphMethods": 22, + "repository": "apache/cloudstack", + "sampleId": 8538037, + "sourceConstructorCount": 1, + "sourceFieldCount": 5, + "sourceFileSha256": "c6999596499204d035357bd6862badaa4d3dcd809d064b9934254917bb6407c9", + "sourceMethodCount": 22, + "sourceRole": "production-class" + }, + { + "classId": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "classification": "unanimous-none", + "fieldStartLineDifferences": 1, + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "matchedGraphFields": 1, + "matchedGraphMethods": 2, + "repository": "apache/cloudstack", + "sampleId": 8539645, + "sourceConstructorCount": 0, + "sourceFieldCount": 1, + "sourceFileSha256": "af541c9ae7f6f630462a6aaf61239482ac485188d1837f28888637edd145bea2", + "sourceMethodCount": 2, + "sourceRole": "production-class" + } + ], + "totals": { + "constructor": 5, + "field": 65, + "fieldStartLineDifferences": 38, + "method": 95 + }, + "verificationRepeatByteIdentical": true, + "verifiedRunSha256": "376fffcfc481c6aca75249fc2ed06afa544141a1a35c66ccba76a9b7a687b4b6", + "verifierSha256": "1892e71e615c7ed01422248621a2687ef5add7c3e897faf0f7ee3a948d456303" +} diff --git a/benchmarks/agent_query/mlcq_relation_evidence_registration.json b/benchmarks/agent_query/mlcq_relation_evidence_registration.json new file mode 100644 index 000000000..5cbbe204d --- /dev/null +++ b/benchmarks/agent_query/mlcq_relation_evidence_registration.json @@ -0,0 +1,52 @@ +{ + "bounds": { + "graphBytes": 1073741824, + "maxClasses": 100000, + "maxDistinctRelationshipTargets": 1000000, + "maxEdges": 1000000, + "maxNodes": 1000000, + "maxOwnerCandidates": 1000000, + "maxSecondsPerGraph": 300, + "recordBytes": 8388608 + }, + "declaredBeforeExecution": true, + "graphArtifacts": [ + { + "graphBytes": 671502979, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "producerBinarySha256": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4", + "producerNote": "CloudStack is the 9df5dcf3 release extraction, not a new candidate build.", + "repository": "apache/cloudstack" + }, + { + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "producerBinarySha256": "80a970c1c403892fcafd82eac7e6461afec119f2008db9f9117419432e387ca6", + "producerNote": "CloudStack is the 9df5dcf3 release result; Eclipse is the earlier development extraction. Query this existing artifact without rerunning extraction.", + "repository": "eclipse/eclipse.platform.ui" + } + ], + "interpretation": [ + "This is a known Java development cohort and no independent holdout.", + "A relation in the graph is a stored observation, not independently verified source truth.", + "Unique class ownership is required before class-level attribution; ambiguous and unresolved relations remain explicit.", + "Cross-language graph/query ability and authored explanations require separate evaluation.", + "Do not change or rerun Graphify, source repositories or frozen graph producers for this inventory." + ], + "outputs": "Preserve every class ID and its method/field/relationship coverage counts, aggregate distributions across all classes, relation/evidence totals, all 55 sample joins, ambiguity and limit outcomes, raw graph/source hashes, and repeated verification. Keep prior Graphify/Compass native hub rankings unchanged.", + "ownership": { + "provenance": "Count source-anchor, exact AST, inferred and other evidence separately. Record class-member relation multiplicity and missing endpoints.", + "rule": "A direct directed typed contains edge from a node of kind class to a node of kind method or field creates an owner candidate. Deduplicate the owner IDs per member. If zero or multiple distinct class owners, member ownership is unavailable or ambiguous; never choose the first." + }, + "priorNativeHubReviewSha256": "0db695b5722e741d4d740707ad69888141152ae69e4af02622254293d4e4680b", + "priorSpanProbeReviewSha256": "27bef64838d9068c9d3a5298f59a0750c99e8950d8e5539a1f1dc31436e8f45f", + "purpose": "Inventory source-backed class ownership and method/field relationships across every class in both frozen Java graphs before designing any responsibility or cohesion score. This is not a defect classifier.", + "relationships": { + "cohesionLimit": "Do not infer low cohesion from methods without field references: extraction coverage and dynamic dispatch may be incomplete. Do not compute TCC, WMC, ATFD or a god-object score from this inventory.", + "fieldReferences": "For each directed references edge from a uniquely class-owned method to a field node, count own-class, foreign-class and unresolved field targets. Track methods with observed own/foreign field references, distinct targets and exact anchored occurrences.", + "methodCalls": "For each directed calls edge from a uniquely class-owned method, count distinct internal, foreign and unresolved method targets and exact anchored occurrences. Preserve repeated edge records separately." + }, + "samplePolicy": "Retain all 55 external Blob reviews; eight consensus primary cases and all 47 secondary cases. Never tune thresholds on the eight known cases or reinterpret missing facts as a negative label.", + "schema": "compass.mlcq-relation-evidence-registration/1", + "sourceLabelRegistrationSha256": "a08e6a0970c605154b329acbfebaa0d9684859f1fad2fa0ed8e8717772866ef1" +} diff --git a/benchmarks/agent_query/mlcq_relation_evidence_review.json b/benchmarks/agent_query/mlcq_relation_evidence_review.json new file mode 100644 index 000000000..9a159b487 --- /dev/null +++ b/benchmarks/agent_query/mlcq_relation_evidence_review.json @@ -0,0 +1,2084 @@ +{ + "all55Cases": [ + { + "classId": null, + "classification": "minor-or-disagreement", + "exactMatchCount": 0, + "metrics": null, + "sampleId": 8491397 + }, + { + "classId": "sha256:573ca6bffd3ba6ab9674f7020f46fe0e521dd0556d47eba62176ed527bcbd661", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 1, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 1, + "distinctOwnFieldTargets": 3, + "fieldCount": 4, + "id": "sha256:573ca6bffd3ba6ab9674f7020f46fe0e521dd0556d47eba62176ed527bcbd661", + "methodCount": 9, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 1, + "methodsWithOwnFieldReferences": 6, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 13, + "foreignCallRecords": 1, + "foreignExactAnchoredCallRecords": 1, + "internalCallRecords": 1, + "internalExactAnchoredCallRecords": 1, + "ownExactAnchoredFieldReferenceRecords": 12, + "ownFieldReferenceRecords": 12, + "unresolvedCallRecords": 1, + "unresolvedExactAnchoredCallRecords": 1 + } + }, + "sampleId": 8494605 + }, + { + "classId": "sha256:bd754c67c67ff00c49b8a3345ce718a9942e740cbabe61a8b82e28b75d2dd65a", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 4, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 5, + "fieldCount": 5, + "id": "sha256:bd754c67c67ff00c49b8a3345ce718a9942e740cbabe61a8b82e28b75d2dd65a", + "methodCount": 5, + "methodsWithForeignCalls": 5, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 5, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 10, + "foreignCallRecords": 14, + "foreignExactAnchoredCallRecords": 14, + "ownExactAnchoredFieldReferenceRecords": 7, + "ownFieldReferenceRecords": 7 + } + }, + "sampleId": 8497585 + }, + { + "classId": null, + "classification": "minor-or-disagreement", + "exactMatchCount": 0, + "metrics": null, + "sampleId": 8497687 + }, + { + "classId": "sha256:c9fada4684df3357d595d7faee6b94bb5562315fea986bb64b5a0e1fbe4c0546", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 8, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:c9fada4684df3357d595d7faee6b94bb5562315fea986bb64b5a0e1fbe4c0546", + "methodCount": 1, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 1, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 2, + "foreignCallRecords": 12, + "foreignExactAnchoredCallRecords": 12, + "ownExactAnchoredFieldReferenceRecords": 6, + "ownFieldReferenceRecords": 6 + } + }, + "sampleId": 8501968 + }, + { + "classId": "sha256:e03e64f9267706722b55e0379e95642fab191daa0d5c88b2e26a8acefbed35ab", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 10, + "distinctForeignFieldTargets": 6, + "distinctInternalCallTargets": 3, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:e03e64f9267706722b55e0379e95642fab191daa0d5c88b2e26a8acefbed35ab", + "methodCount": 5, + "methodsWithForeignCalls": 5, + "methodsWithForeignFieldReferences": 4, + "methodsWithInternalCalls": 1, + "methodsWithOwnFieldReferences": 3, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 6, + "foreignCallRecords": 18, + "foreignExactAnchoredCallRecords": 18, + "foreignExactAnchoredFieldReferenceRecords": 10, + "foreignFieldReferenceRecords": 10, + "internalCallRecords": 4, + "internalExactAnchoredCallRecords": 4, + "ownExactAnchoredFieldReferenceRecords": 4, + "ownFieldReferenceRecords": 4, + "unresolvedCallRecords": 3, + "unresolvedExactAnchoredCallRecords": 3 + } + }, + "sampleId": 8501970 + }, + { + "classId": "sha256:537bff8f8df4c26e3b05bf3fe3b3d062a2fe023abaf5ca52f9256cc919e9ffc6", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 2, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 4, + "distinctOwnFieldTargets": 5, + "fieldCount": 5, + "id": "sha256:537bff8f8df4c26e3b05bf3fe3b3d062a2fe023abaf5ca52f9256cc919e9ffc6", + "methodCount": 8, + "methodsWithForeignCalls": 2, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 1, + "methodsWithOwnFieldReferences": 6, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 13, + "foreignCallRecords": 2, + "foreignExactAnchoredCallRecords": 2, + "internalCallRecords": 4, + "internalExactAnchoredCallRecords": 4, + "ownExactAnchoredFieldReferenceRecords": 8, + "ownFieldReferenceRecords": 8, + "unresolvedCallRecords": 1, + "unresolvedExactAnchoredCallRecords": 1 + } + }, + "sampleId": 8502684 + }, + { + "classId": "sha256:f7d514eb3a61774eaca9b30dd4a696f8185aba895d2549a6acaf3fb03a480998", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 14, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 15, + "distinctOwnFieldTargets": 7, + "fieldCount": 7, + "id": "sha256:f7d514eb3a61774eaca9b30dd4a696f8185aba895d2549a6acaf3fb03a480998", + "methodCount": 19, + "methodsWithForeignCalls": 10, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 8, + "methodsWithOwnFieldReferences": 8, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 26, + "foreignCallRecords": 41, + "foreignExactAnchoredCallRecords": 41, + "internalCallRecords": 21, + "internalExactAnchoredCallRecords": 21, + "ownExactAnchoredFieldReferenceRecords": 40, + "ownFieldReferenceRecords": 40 + } + }, + "sampleId": 8507718 + }, + { + "classId": "sha256:75cb162c933e8f5af2fb399d12a0321c6542fddfc6221867f91241c5fea5cded", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 27, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:75cb162c933e8f5af2fb399d12a0321c6542fddfc6221867f91241c5fea5cded", + "methodCount": 1, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 1, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 2, + "foreignCallRecords": 36, + "foreignExactAnchoredCallRecords": 36, + "ownExactAnchoredFieldReferenceRecords": 1, + "ownFieldReferenceRecords": 1, + "unresolvedCallRecords": 3, + "unresolvedExactAnchoredCallRecords": 3 + } + }, + "sampleId": 8510347 + }, + { + "classId": null, + "classification": "single-reviewer", + "exactMatchCount": 0, + "metrics": null, + "sampleId": 8511088 + }, + { + "classId": "sha256:ce5c5c31323f4bbc799721eeb6d1fa982389170f9785543ae48cee675163e15e", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 1, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 5, + "distinctOwnFieldTargets": 6, + "fieldCount": 6, + "id": "sha256:ce5c5c31323f4bbc799721eeb6d1fa982389170f9785543ae48cee675163e15e", + "methodCount": 12, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 4, + "methodsWithOwnFieldReferences": 7, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 18, + "foreignCallRecords": 1, + "foreignExactAnchoredCallRecords": 1, + "internalCallRecords": 8, + "internalExactAnchoredCallRecords": 8, + "ownExactAnchoredFieldReferenceRecords": 10, + "ownFieldReferenceRecords": 10 + } + }, + "sampleId": 8514954 + }, + { + "classId": "sha256:8f5e5100ee2d79560887b1d71680e14dba3d232397ff445a4ce32ca24834de9b", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 25, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 3, + "distinctOwnFieldTargets": 19, + "fieldCount": 19, + "id": "sha256:8f5e5100ee2d79560887b1d71680e14dba3d232397ff445a4ce32ca24834de9b", + "methodCount": 7, + "methodsWithForeignCalls": 4, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 2, + "methodsWithOwnFieldReferences": 5, + "methodsWithUnresolvedCalls": 4, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 26, + "foreignCallRecords": 29, + "foreignExactAnchoredCallRecords": 29, + "internalCallRecords": 4, + "internalExactAnchoredCallRecords": 4, + "ownExactAnchoredFieldReferenceRecords": 33, + "ownFieldReferenceRecords": 33, + "unresolvedCallRecords": 13, + "unresolvedExactAnchoredCallRecords": 13 + } + }, + "sampleId": 8515776 + }, + { + "classId": "sha256:606a6c28e5ee9445e7985f5e6206d1cc38dd6d7ec94cacf513151aff6b33bd27", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 12, + "fieldCount": 12, + "id": "sha256:606a6c28e5ee9445e7985f5e6206d1cc38dd6d7ec94cacf513151aff6b33bd27", + "methodCount": 25, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 25, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 37, + "ownExactAnchoredFieldReferenceRecords": 29, + "ownFieldReferenceRecords": 29 + } + }, + "sampleId": 8516029 + }, + { + "classId": "sha256:36b7814c82d66c65752bbc58bd537d5c9368bb439151f166c4d6ce67da7bc225", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 0, + "fieldCount": 0, + "id": "sha256:36b7814c82d66c65752bbc58bd537d5c9368bb439151f166c4d6ce67da7bc225", + "methodCount": 0, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": {} + }, + "sampleId": 8517396 + }, + { + "classId": null, + "classification": "minor-or-disagreement", + "exactMatchCount": 0, + "metrics": null, + "sampleId": 8522716 + }, + { + "classId": "sha256:66538b3ff66a54fd545c41ad0c13be759817922ba4cfa3e042255e4aa1768472", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 8, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:66538b3ff66a54fd545c41ad0c13be759817922ba4cfa3e042255e4aa1768472", + "methodCount": 1, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 1, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 2, + "foreignCallRecords": 9, + "foreignExactAnchoredCallRecords": 9, + "ownExactAnchoredFieldReferenceRecords": 4, + "ownFieldReferenceRecords": 4 + } + }, + "sampleId": 8526483 + }, + { + "classId": "sha256:52eababd34521216fdc02c142906b15574e8694a0a665c50bcc2fdbfb83376c8", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 6, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 1, + "distinctOwnFieldTargets": 2, + "fieldCount": 2, + "id": "sha256:52eababd34521216fdc02c142906b15574e8694a0a665c50bcc2fdbfb83376c8", + "methodCount": 35, + "methodsWithForeignCalls": 6, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 1, + "methodsWithOwnFieldReferences": 13, + "methodsWithUnresolvedCalls": 6, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 37, + "foreignCallRecords": 6, + "foreignExactAnchoredCallRecords": 6, + "internalCallRecords": 1, + "internalExactAnchoredCallRecords": 1, + "ownExactAnchoredFieldReferenceRecords": 26, + "ownFieldReferenceRecords": 26, + "unresolvedCallRecords": 6, + "unresolvedExactAnchoredCallRecords": 6 + } + }, + "sampleId": 8526485 + }, + { + "classId": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 88, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 13, + "distinctOwnFieldTargets": 25, + "fieldCount": 38, + "id": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "methodCount": 25, + "methodsWithForeignCalls": 15, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 8, + "methodsWithOwnFieldReferences": 19, + "methodsWithUnresolvedCalls": 18, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 63, + "foreignCallRecords": 134, + "foreignExactAnchoredCallRecords": 134, + "internalCallRecords": 23, + "internalExactAnchoredCallRecords": 23, + "ownExactAnchoredFieldReferenceRecords": 142, + "ownFieldReferenceRecords": 142, + "unresolvedCallRecords": 110, + "unresolvedExactAnchoredCallRecords": 110 + } + }, + "sampleId": 8528735 + }, + { + "classId": "sha256:60b26f62e27fc38e52f1a746d0d942f8f8429abf9dbe3ec505dc3df530e8e499", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 2, + "fieldCount": 2, + "id": "sha256:60b26f62e27fc38e52f1a746d0d942f8f8429abf9dbe3ec505dc3df530e8e499", + "methodCount": 3, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 2, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 5, + "ownExactAnchoredFieldReferenceRecords": 2, + "ownFieldReferenceRecords": 2 + } + }, + "sampleId": 8533230 + }, + { + "classId": "sha256:be771a36dbfcb422759048a55605d35b173fc670bc55be210b99431a408de6c1", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 1, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 11, + "distinctOwnFieldTargets": 11, + "fieldCount": 12, + "id": "sha256:be771a36dbfcb422759048a55605d35b173fc670bc55be210b99431a408de6c1", + "methodCount": 18, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 2, + "methodsWithOwnFieldReferences": 15, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 30, + "foreignCallRecords": 1, + "foreignExactAnchoredCallRecords": 1, + "internalCallRecords": 16, + "internalExactAnchoredCallRecords": 16, + "ownExactAnchoredFieldReferenceRecords": 20, + "ownFieldReferenceRecords": 20, + "unresolvedCallRecords": 2, + "unresolvedExactAnchoredCallRecords": 2 + } + }, + "sampleId": 8533645 + }, + { + "classId": "sha256:248c456ccd43a03c3d8d38141f3af6015fc84b7bb734ad0e215061fa36cd3cf8", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 15, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 1, + "distinctOwnFieldTargets": 1, + "fieldCount": 2, + "id": "sha256:248c456ccd43a03c3d8d38141f3af6015fc84b7bb734ad0e215061fa36cd3cf8", + "methodCount": 3, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 1, + "methodsWithOwnFieldReferences": 1, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 5, + "foreignCallRecords": 15, + "foreignExactAnchoredCallRecords": 15, + "internalCallRecords": 1, + "internalExactAnchoredCallRecords": 1, + "ownExactAnchoredFieldReferenceRecords": 1, + "ownFieldReferenceRecords": 1 + } + }, + "sampleId": 8533750 + }, + { + "classId": "sha256:3babcd2c278f7348ac8e458c30364ae96ef6f7943f471073ddd9f52aa3793b45", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 2, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 1, + "distinctOwnFieldTargets": 0, + "fieldCount": 0, + "id": "sha256:3babcd2c278f7348ac8e458c30364ae96ef6f7943f471073ddd9f52aa3793b45", + "methodCount": 2, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 2, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 2, + "foreignCallRecords": 2, + "foreignExactAnchoredCallRecords": 2, + "internalCallRecords": 2, + "internalExactAnchoredCallRecords": 2 + } + }, + "sampleId": 8533873 + }, + { + "classId": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "classification": "unanimous-none", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 4, + "fieldCount": 4, + "id": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "methodCount": 5, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 4, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 9, + "ownExactAnchoredFieldReferenceRecords": 4, + "ownFieldReferenceRecords": 4 + } + }, + "sampleId": 8537138 + }, + { + "classId": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 16, + "distinctOwnFieldTargets": 5, + "fieldCount": 5, + "id": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "methodCount": 22, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 17, + "methodsWithOwnFieldReferences": 8, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 27, + "internalCallRecords": 36, + "internalExactAnchoredCallRecords": 36, + "ownExactAnchoredFieldReferenceRecords": 43, + "ownFieldReferenceRecords": 43 + } + }, + "sampleId": 8538037 + }, + { + "classId": "sha256:38284587360b3b49dbb4f5a62e61da7265017e65e4d0f3273483c38fd6f59413", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 6, + "distinctForeignFieldTargets": 1, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:38284587360b3b49dbb4f5a62e61da7265017e65e4d0f3273483c38fd6f59413", + "methodCount": 1, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 1, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 1, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 2, + "foreignCallRecords": 6, + "foreignExactAnchoredCallRecords": 6, + "foreignExactAnchoredFieldReferenceRecords": 1, + "foreignFieldReferenceRecords": 1, + "ownExactAnchoredFieldReferenceRecords": 5, + "ownFieldReferenceRecords": 5 + } + }, + "sampleId": 8539540 + }, + { + "classId": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "classification": "unanimous-none", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "methodCount": 2, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 2, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 3, + "ownExactAnchoredFieldReferenceRecords": 2, + "ownFieldReferenceRecords": 2 + } + }, + "sampleId": 8539645 + }, + { + "classId": "sha256:3eae3eb896a5e0a9672beb7055286b500afc83cd6866887b6e488daf7e55d780", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 4, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 3, + "distinctOwnFieldTargets": 3, + "fieldCount": 3, + "id": "sha256:3eae3eb896a5e0a9672beb7055286b500afc83cd6866887b6e488daf7e55d780", + "methodCount": 7, + "methodsWithForeignCalls": 3, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 3, + "methodsWithOwnFieldReferences": 3, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 10, + "foreignCallRecords": 6, + "foreignExactAnchoredCallRecords": 6, + "internalCallRecords": 5, + "internalExactAnchoredCallRecords": 5, + "ownExactAnchoredFieldReferenceRecords": 3, + "ownFieldReferenceRecords": 3, + "unresolvedCallRecords": 1, + "unresolvedExactAnchoredCallRecords": 1 + } + }, + "sampleId": 8541418 + }, + { + "classId": "sha256:944a1b36f5b23ad222434d66733c9f991275aa0eab16d898496504878196a5e6", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 16, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 5, + "distinctOwnFieldTargets": 8, + "fieldCount": 9, + "id": "sha256:944a1b36f5b23ad222434d66733c9f991275aa0eab16d898496504878196a5e6", + "methodCount": 6, + "methodsWithForeignCalls": 5, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 2, + "methodsWithOwnFieldReferences": 4, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 15, + "foreignCallRecords": 20, + "foreignExactAnchoredCallRecords": 20, + "internalCallRecords": 5, + "internalExactAnchoredCallRecords": 5, + "ownExactAnchoredFieldReferenceRecords": 43, + "ownFieldReferenceRecords": 43 + } + }, + "sampleId": 8547261 + }, + { + "classId": null, + "classification": "single-reviewer", + "exactMatchCount": 0, + "metrics": null, + "sampleId": 6369779 + }, + { + "classId": "sha256:2406de0a7d6d60a3285ffd6c08255cbb1ca0caea9758a152269cdb77a148add1", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 2, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 3, + "distinctOwnFieldTargets": 3, + "fieldCount": 5, + "id": "sha256:2406de0a7d6d60a3285ffd6c08255cbb1ca0caea9758a152269cdb77a148add1", + "methodCount": 8, + "methodsWithForeignCalls": 2, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 3, + "methodsWithOwnFieldReferences": 7, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 13, + "foreignCallRecords": 2, + "foreignExactAnchoredCallRecords": 2, + "internalCallRecords": 4, + "internalExactAnchoredCallRecords": 4, + "ownExactAnchoredFieldReferenceRecords": 18, + "ownFieldReferenceRecords": 18 + } + }, + "sampleId": 6371049 + }, + { + "classId": "sha256:314148a91f14e6961b357cb5e4f4aa5a81b1be65c8ca726d4baf6afae561b9c5", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 1, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 2, + "fieldCount": 2, + "id": "sha256:314148a91f14e6961b357cb5e4f4aa5a81b1be65c8ca726d4baf6afae561b9c5", + "methodCount": 3, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 3, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 5, + "foreignCallRecords": 1, + "foreignExactAnchoredCallRecords": 1, + "ownExactAnchoredFieldReferenceRecords": 10, + "ownFieldReferenceRecords": 10, + "unresolvedCallRecords": 10, + "unresolvedExactAnchoredCallRecords": 10 + } + }, + "sampleId": 6372633 + }, + { + "classId": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 23, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 5, + "distinctOwnFieldTargets": 10, + "fieldCount": 11, + "id": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "methodCount": 14, + "methodsWithForeignCalls": 9, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 4, + "methodsWithOwnFieldReferences": 11, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 25, + "foreignCallRecords": 47, + "foreignExactAnchoredCallRecords": 47, + "internalCallRecords": 5, + "internalExactAnchoredCallRecords": 5, + "ownExactAnchoredFieldReferenceRecords": 55, + "ownFieldReferenceRecords": 55, + "unresolvedCallRecords": 3, + "unresolvedExactAnchoredCallRecords": 3 + } + }, + "sampleId": 6374724 + }, + { + "classId": "sha256:37b79ae353d248eb203600de85dbe7573454fa88e5f8ae97e546f195609f7a42", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 6, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 5, + "distinctOwnFieldTargets": 0, + "fieldCount": 0, + "id": "sha256:37b79ae353d248eb203600de85dbe7573454fa88e5f8ae97e546f195609f7a42", + "methodCount": 6, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 1, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 6, + "foreignCallRecords": 6, + "foreignExactAnchoredCallRecords": 6, + "internalCallRecords": 5, + "internalExactAnchoredCallRecords": 5 + } + }, + "sampleId": 6375252 + }, + { + "classId": "sha256:b60c2c635e95ea09774e70e6ffb28c8ebc5471b8a071c2b1a05ef74b56d697e0", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 1, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 14, + "distinctOwnFieldTargets": 4, + "fieldCount": 4, + "id": "sha256:b60c2c635e95ea09774e70e6ffb28c8ebc5471b8a071c2b1a05ef74b56d697e0", + "methodCount": 15, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 8, + "methodsWithOwnFieldReferences": 9, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 19, + "foreignCallRecords": 1, + "foreignExactAnchoredCallRecords": 1, + "internalCallRecords": 21, + "internalExactAnchoredCallRecords": 21, + "ownExactAnchoredFieldReferenceRecords": 27, + "ownFieldReferenceRecords": 27 + } + }, + "sampleId": 6375517 + }, + { + "classId": "sha256:21e5eebc28b2d54b59d725c18a9d2adb26cb0dd025665f9d7d320e6cb8e769c2", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 7, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 17, + "distinctOwnFieldTargets": 23, + "fieldCount": 32, + "id": "sha256:21e5eebc28b2d54b59d725c18a9d2adb26cb0dd025665f9d7d320e6cb8e769c2", + "methodCount": 46, + "methodsWithForeignCalls": 6, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 14, + "methodsWithOwnFieldReferences": 44, + "methodsWithUnresolvedCalls": 5, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 78, + "foreignCallRecords": 11, + "foreignExactAnchoredCallRecords": 11, + "internalCallRecords": 41, + "internalExactAnchoredCallRecords": 41, + "ownExactAnchoredFieldReferenceRecords": 99, + "ownFieldReferenceRecords": 99, + "unresolvedCallRecords": 9, + "unresolvedExactAnchoredCallRecords": 9 + } + }, + "sampleId": 6379553 + }, + { + "classId": "sha256:1245c6c02e5ce0dcef7062094ffc5e2e96059a0e49a4414cc079477bff4d1dc2", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 1, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 1, + "distinctOwnFieldTargets": 4, + "fieldCount": 4, + "id": "sha256:1245c6c02e5ce0dcef7062094ffc5e2e96059a0e49a4414cc079477bff4d1dc2", + "methodCount": 7, + "methodsWithForeignCalls": 2, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 1, + "methodsWithOwnFieldReferences": 7, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 11, + "foreignCallRecords": 2, + "foreignExactAnchoredCallRecords": 2, + "internalCallRecords": 1, + "internalExactAnchoredCallRecords": 1, + "ownExactAnchoredFieldReferenceRecords": 13, + "ownFieldReferenceRecords": 13 + } + }, + "sampleId": 6383930 + }, + { + "classId": "sha256:c3a2696121c376e47b8b56df142dcff6fa5964482ec4134c70d6f19f6d8f8c50", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 8, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:c3a2696121c376e47b8b56df142dcff6fa5964482ec4134c70d6f19f6d8f8c50", + "methodCount": 8, + "methodsWithForeignCalls": 8, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 8, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 9, + "foreignCallRecords": 8, + "foreignExactAnchoredCallRecords": 8, + "ownExactAnchoredFieldReferenceRecords": 8, + "ownFieldReferenceRecords": 8 + } + }, + "sampleId": 6385711 + }, + { + "classId": null, + "classification": "single-reviewer", + "exactMatchCount": 0, + "metrics": null, + "sampleId": 6387077 + }, + { + "classId": "sha256:a54c43d61dfb3df58ff9b6eb356070ef5040b5bbe3cc5c91c930c1ff37aead83", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 0, + "fieldCount": 1, + "id": "sha256:a54c43d61dfb3df58ff9b6eb356070ef5040b5bbe3cc5c91c930c1ff37aead83", + "methodCount": 0, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 1 + } + }, + "sampleId": 6387249 + }, + { + "classId": "sha256:8a79b8fecfc7cf66c5c6ee96ca37e92a9ca966b1de0fd7ddefc70622de492c43", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:8a79b8fecfc7cf66c5c6ee96ca37e92a9ca966b1de0fd7ddefc70622de492c43", + "methodCount": 2, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 2, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 3, + "ownExactAnchoredFieldReferenceRecords": 4, + "ownFieldReferenceRecords": 4 + } + }, + "sampleId": 6388458 + }, + { + "classId": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "classification": "unanimous-none", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 0, + "fieldCount": 0, + "id": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "methodCount": 7, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 7 + } + }, + "sampleId": 6391534 + }, + { + "classId": "sha256:95081c0a06121da3dd58decd200efa14a67b6861f98ccec889aee3c97f8400eb", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:95081c0a06121da3dd58decd200efa14a67b6861f98ccec889aee3c97f8400eb", + "methodCount": 1, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 1, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 2, + "ownExactAnchoredFieldReferenceRecords": 1, + "ownFieldReferenceRecords": 1 + } + }, + "sampleId": 6393486 + }, + { + "classId": "sha256:eb1072f20cf2738fde7929fac849f050d3968f449c5fca0ba8a5076db6a66791", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 6, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 8, + "distinctOwnFieldTargets": 0, + "fieldCount": 0, + "id": "sha256:eb1072f20cf2738fde7929fac849f050d3968f449c5fca0ba8a5076db6a66791", + "methodCount": 11, + "methodsWithForeignCalls": 6, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 6, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 11, + "foreignCallRecords": 8, + "foreignExactAnchoredCallRecords": 8, + "internalCallRecords": 12, + "internalExactAnchoredCallRecords": 12, + "unresolvedCallRecords": 1, + "unresolvedExactAnchoredCallRecords": 1 + } + }, + "sampleId": 6398820 + }, + { + "classId": "sha256:1e001562f35ebf96d35bebfca21ec5d7e7dae156b0922bd27d95b23abf91dcc1", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 2, + "fieldCount": 2, + "id": "sha256:1e001562f35ebf96d35bebfca21ec5d7e7dae156b0922bd27d95b23abf91dcc1", + "methodCount": 3, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 3, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 5, + "ownExactAnchoredFieldReferenceRecords": 6, + "ownFieldReferenceRecords": 6 + } + }, + "sampleId": 6404028 + }, + { + "classId": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "classification": "unanimous-none", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "methodCount": 6, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 4, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 7, + "ownExactAnchoredFieldReferenceRecords": 4, + "ownFieldReferenceRecords": 4 + } + }, + "sampleId": 6406137 + }, + { + "classId": "sha256:7331c00a4419b1f8fc817a09d1b99688d726761df40bfcf00cc0f206d99ac476", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 5, + "distinctOwnFieldTargets": 8, + "fieldCount": 8, + "id": "sha256:7331c00a4419b1f8fc817a09d1b99688d726761df40bfcf00cc0f206d99ac476", + "methodCount": 15, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 5, + "methodsWithOwnFieldReferences": 15, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 7, + "recordCounts": { + "exactAnchoredMemberRecords": 23, + "internalCallRecords": 10, + "internalExactAnchoredCallRecords": 10, + "ownExactAnchoredFieldReferenceRecords": 29, + "ownFieldReferenceRecords": 29, + "unresolvedExactAnchoredFieldReferenceRecords": 7, + "unresolvedFieldReferenceRecords": 7 + } + }, + "sampleId": 6412439 + }, + { + "classId": "sha256:f2e1191484f82d8827e3b7b16753cdc9307dd2845dde8ad64ad1ada6627dbffd", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 2, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 4, + "distinctOwnFieldTargets": 4, + "fieldCount": 4, + "id": "sha256:f2e1191484f82d8827e3b7b16753cdc9307dd2845dde8ad64ad1ada6627dbffd", + "methodCount": 5, + "methodsWithForeignCalls": 2, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 2, + "methodsWithOwnFieldReferences": 4, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 9, + "foreignCallRecords": 3, + "foreignExactAnchoredCallRecords": 3, + "internalCallRecords": 4, + "internalExactAnchoredCallRecords": 4, + "ownExactAnchoredFieldReferenceRecords": 15, + "ownFieldReferenceRecords": 15, + "unresolvedCallRecords": 1, + "unresolvedExactAnchoredCallRecords": 1 + } + }, + "sampleId": 6413248 + }, + { + "classId": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 16, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 5, + "distinctOwnFieldTargets": 5, + "fieldCount": 5, + "id": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "methodCount": 14, + "methodsWithForeignCalls": 13, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 12, + "methodsWithOwnFieldReferences": 7, + "methodsWithUnresolvedCalls": 4, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 19, + "foreignCallRecords": 46, + "foreignExactAnchoredCallRecords": 46, + "internalCallRecords": 18, + "internalExactAnchoredCallRecords": 18, + "ownExactAnchoredFieldReferenceRecords": 15, + "ownFieldReferenceRecords": 15, + "unresolvedCallRecords": 10, + "unresolvedExactAnchoredCallRecords": 10 + } + }, + "sampleId": 6413795 + }, + { + "classId": "sha256:47855833c826f9b124f009509d3ddf8d44e7b28eb237602dd130d3974195c5f8", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 1, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 2, + "fieldCount": 2, + "id": "sha256:47855833c826f9b124f009509d3ddf8d44e7b28eb237602dd130d3974195c5f8", + "methodCount": 5, + "methodsWithForeignCalls": 1, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 3, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 7, + "foreignCallRecords": 1, + "foreignExactAnchoredCallRecords": 1, + "ownExactAnchoredFieldReferenceRecords": 5, + "ownFieldReferenceRecords": 5 + } + }, + "sampleId": 6414719 + }, + { + "classId": "sha256:b4a4369d4e5d88bd8e5b458550726d0c510a7bf908e58870afc48af059400aa1", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 0, + "fieldCount": 0, + "id": "sha256:b4a4369d4e5d88bd8e5b458550726d0c510a7bf908e58870afc48af059400aa1", + "methodCount": 2, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 2 + } + }, + "sampleId": 6416620 + }, + { + "classId": "sha256:8b309073c5c35c6b478e7e619d60e7a65a1ea7630ad30fbd09d737a14d109b94", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 3, + "fieldCount": 3, + "id": "sha256:8b309073c5c35c6b478e7e619d60e7a65a1ea7630ad30fbd09d737a14d109b94", + "methodCount": 6, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 6, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 9, + "ownExactAnchoredFieldReferenceRecords": 8, + "ownFieldReferenceRecords": 8 + } + }, + "sampleId": 6424656 + }, + { + "classId": null, + "classification": "single-reviewer", + "exactMatchCount": 0, + "metrics": null, + "sampleId": 6424683 + }, + { + "classId": "sha256:b32f905b4ac8fb166f2d336fbbd11277610b2580af4ab5dffd204eed05f14784", + "classification": "minor-or-disagreement", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 0, + "fieldCount": 0, + "id": "sha256:b32f905b4ac8fb166f2d336fbbd11277610b2580af4ab5dffd204eed05f14784", + "methodCount": 2, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 2 + } + }, + "sampleId": 6425142 + }, + { + "classId": "sha256:5df25a82acf0b628680b19b4a5f5880a41a7dde448d2a42fb10aaeb3f5b3f817", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 0, + "fieldCount": 1, + "id": "sha256:5df25a82acf0b628680b19b4a5f5880a41a7dde448d2a42fb10aaeb3f5b3f817", + "methodCount": 0, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 1 + } + }, + "sampleId": 6427227 + }, + { + "classId": "sha256:12bd289af06352482c17a07e499d1b592b21d7d4a31b4915bfe9dcf25938aae0", + "classification": "single-reviewer", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 2, + "distinctOwnFieldTargets": 3, + "fieldCount": 3, + "id": "sha256:12bd289af06352482c17a07e499d1b592b21d7d4a31b4915bfe9dcf25938aae0", + "methodCount": 9, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 6, + "methodsWithOwnFieldReferences": 3, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 12, + "internalCallRecords": 6, + "internalExactAnchoredCallRecords": 6, + "ownExactAnchoredFieldReferenceRecords": 4, + "ownFieldReferenceRecords": 4 + } + }, + "sampleId": 6428158 + } + ], + "collectorSha256": "9d6ed07f2dd1912cbb97482281e05ae254d3c98633ad0ce6a421d0f80a5dd782", + "graphs": [ + { + "ambiguousMemberOwnerCount": 0, + "classCount": 6373, + "classesWithForeignCalls": 2613, + "classesWithForeignFieldReferences": 253, + "classesWithInternalCalls": 2325, + "classesWithOwnFieldReferences": 4020, + "classesWithTwoOrMoreMethods": 5001, + "directClassMemberEdgeRecords": 84998, + "edgeCount": 502158, + "evidenceCounts": [ + { + "confidence": "exact", + "count": 1, + "relation": "aliases" + }, + { + "confidence": "exact", + "count": 106591, + "relation": "calls" + }, + { + "confidence": "exact", + "count": 161690, + "relation": "contains" + }, + { + "confidence": "exact", + "count": 1337, + "relation": "depends_on" + }, + { + "confidence": "exact", + "count": 3516, + "relation": "documents" + }, + { + "confidence": "exact", + "count": 4, + "relation": "exports" + }, + { + "confidence": "exact", + "count": 3876, + "relation": "extends" + }, + { + "confidence": "exact", + "count": 1703, + "relation": "implements" + }, + { + "confidence": "exact", + "count": 41826, + "relation": "imports" + }, + { + "confidence": "exact", + "count": 19475, + "relation": "instantiates" + }, + { + "confidence": "exact", + "count": 26, + "relation": "maps_to" + }, + { + "confidence": "exact", + "count": 1042, + "relation": "reads" + }, + { + "confidence": "exact", + "count": 153503, + "relation": "references" + }, + { + "confidence": "exact", + "count": 984, + "relation": "registers" + }, + { + "confidence": "exact", + "count": 286, + "relation": "returns" + }, + { + "confidence": "exact", + "count": 9, + "relation": "routes_to" + }, + { + "confidence": "exact", + "count": 128, + "relation": "type_of" + }, + { + "confidence": "exact", + "count": 6161, + "relation": "writes" + } + ], + "exactAnchoredCounts": [ + { + "count": 1, + "exactAnchored": true, + "relation": "aliases" + }, + { + "count": 106591, + "exactAnchored": true, + "relation": "calls" + }, + { + "count": 11932, + "exactAnchored": false, + "relation": "contains" + }, + { + "count": 149758, + "exactAnchored": true, + "relation": "contains" + }, + { + "count": 111, + "exactAnchored": false, + "relation": "depends_on" + }, + { + "count": 1226, + "exactAnchored": true, + "relation": "depends_on" + }, + { + "count": 3516, + "exactAnchored": true, + "relation": "documents" + }, + { + "count": 4, + "exactAnchored": true, + "relation": "exports" + }, + { + "count": 3876, + "exactAnchored": true, + "relation": "extends" + }, + { + "count": 1703, + "exactAnchored": true, + "relation": "implements" + }, + { + "count": 41826, + "exactAnchored": true, + "relation": "imports" + }, + { + "count": 19475, + "exactAnchored": true, + "relation": "instantiates" + }, + { + "count": 26, + "exactAnchored": true, + "relation": "maps_to" + }, + { + "count": 1042, + "exactAnchored": false, + "relation": "reads" + }, + { + "count": 562, + "exactAnchored": false, + "relation": "references" + }, + { + "count": 152941, + "exactAnchored": true, + "relation": "references" + }, + { + "count": 984, + "exactAnchored": true, + "relation": "registers" + }, + { + "count": 286, + "exactAnchored": true, + "relation": "returns" + }, + { + "count": 9, + "exactAnchored": true, + "relation": "routes_to" + }, + { + "count": 128, + "exactAnchored": true, + "relation": "type_of" + }, + { + "count": 6161, + "exactAnchored": false, + "relation": "writes" + } + ], + "fieldsWithoutUniqueOwner": 856, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "methodSourceEdgesWithoutUniqueOwner": 5773, + "methodsWithoutUniqueOwner": 6987, + "missingEndpointCounts": {}, + "nodeCount": 173689, + "nodeKindCounts": { + "annotation": 21, + "class": 6373, + "component": 989, + "constant": 262, + "constructor": 4062, + "database": 119, + "database_column": 3413, + "database_constraint": 1170, + "database_procedure": 5, + "database_schema": 104, + "database_table": 1655, + "database_view": 84, + "enum": 359, + "enum_member": 2470, + "export": 1, + "field": 30873, + "file": 6635, + "function": 2960, + "interface": 981, + "method": 61968, + "module": 171, + "namespace": 69, + "package": 724, + "parameter": 7455, + "property": 18675, + "query": 5254, + "resource": 3600, + "route": 9, + "struct": 3, + "variable": 13225 + }, + "relationCounts": { + "aliases": 1, + "calls": 106591, + "contains": 161690, + "depends_on": 1337, + "documents": 3516, + "exports": 4, + "extends": 3876, + "implements": 1703, + "imports": 41826, + "instantiates": 19475, + "maps_to": 26, + "reads": 1042, + "references": 153503, + "registers": 984, + "returns": 286, + "routes_to": 9, + "type_of": 128, + "writes": 6161 + }, + "repository": "apache/cloudstack", + "uniqueMemberOwnerCount": 84998 + }, + { + "ambiguousMemberOwnerCount": 0, + "classCount": 6628, + "classesWithForeignCalls": 3838, + "classesWithForeignFieldReferences": 653, + "classesWithInternalCalls": 3250, + "classesWithOwnFieldReferences": 4176, + "classesWithTwoOrMoreMethods": 5120, + "directClassMemberEdgeRecords": 69878, + "edgeCount": 347974, + "evidenceCounts": [ + { + "confidence": "exact", + "count": 85944, + "relation": "calls" + }, + { + "confidence": "exact", + "count": 88915, + "relation": "contains" + }, + { + "confidence": "exact", + "count": 3, + "relation": "depends_on" + }, + { + "confidence": "exact", + "count": 3803, + "relation": "extends" + }, + { + "confidence": "exact", + "count": 1615, + "relation": "implements" + }, + { + "confidence": "exact", + "count": 28649, + "relation": "imports" + }, + { + "confidence": "exact", + "count": 12183, + "relation": "instantiates" + }, + { + "confidence": "exact", + "count": 126862, + "relation": "references" + } + ], + "exactAnchoredCounts": [ + { + "count": 85944, + "exactAnchored": true, + "relation": "calls" + }, + { + "count": 88915, + "exactAnchored": true, + "relation": "contains" + }, + { + "count": 3, + "exactAnchored": false, + "relation": "depends_on" + }, + { + "count": 3803, + "exactAnchored": true, + "relation": "extends" + }, + { + "count": 1615, + "exactAnchored": true, + "relation": "implements" + }, + { + "count": 28649, + "exactAnchored": true, + "relation": "imports" + }, + { + "count": 12183, + "exactAnchored": true, + "relation": "instantiates" + }, + { + "count": 126862, + "exactAnchored": true, + "relation": "references" + } + ], + "fieldsWithoutUniqueOwner": 2751, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "methodSourceEdgesWithoutUniqueOwner": 3001, + "methodsWithoutUniqueOwner": 3824, + "missingEndpointCounts": {}, + "nodeCount": 95084, + "nodeKindCounts": { + "annotation": 12, + "class": 6628, + "constructor": 4789, + "enum": 13, + "enum_member": 44, + "field": 26921, + "file": 6069, + "function": 32, + "interface": 944, + "method": 49532, + "package": 100 + }, + "relationCounts": { + "calls": 85944, + "contains": 88915, + "depends_on": 3, + "extends": 3803, + "implements": 1615, + "imports": 28649, + "instantiates": 12183, + "references": 126862 + }, + "repository": "eclipse/eclipse.platform.ui", + "uniqueMemberOwnerCount": 69878 + } + ], + "interpretation": [ + "The eight consensus classes all have zero foreign-field references under this registered references-only rule. This cannot establish that the source methods never access foreign state.", + "CloudStack has 1,042 reads and 6,161 writes edges outside the registered field-reference rule. Eclipse was extracted by an older producer and has no such relations. They must be studied separately before combining categories.", + "Method-to-own-field references and method-call links are available in many classes, but coverage and source truth are unverified. Missing edges cannot be interpreted as low cohesion.", + "These are known Java development graphs. No WMC, ATFD, TCC or god-object score, Graphify rerun, independent holdout, or cross-language conclusion is present." + ], + "limits": [ + "A graph relation is stored producer evidence, not independent source verification.", + "Only direct class-to-method/field contains edges and method calls/references were inventoried. CloudStack also has reads/writes relations; treating them as equivalent requires a separate declared analysis.", + "Missing field references do not establish low cohesion. WMC, ATFD, TCC and god-object scores were not computed.", + "These are two known Java development graphs from different Compass producer versions; no Graphify rerun or new holdout was used." + ], + "method": { + "calls": "Directed method calls method edges, split by uniquely owned internal, foreign, and unresolved method targets.", + "field": "Directed method references field edges, split by uniquely owned own, foreign, and unresolved field targets.", + "ownership": "Only direct directed class contains method/field edges; a member must have exactly one distinct class owner.", + "provenance": "Stored relation confidence and exact source-anchor counts are retained separately; neither validates the source target independently.", + "sampleJoin": "The previously registered exact file/name/span identity join, with no fallback for unavailable cases." + }, + "primaryCases": [ + { + "classId": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 88, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 13, + "distinctOwnFieldTargets": 25, + "fieldCount": 38, + "id": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "methodCount": 25, + "methodsWithForeignCalls": 15, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 8, + "methodsWithOwnFieldReferences": 19, + "methodsWithUnresolvedCalls": 18, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 63, + "foreignCallRecords": 134, + "foreignExactAnchoredCallRecords": 134, + "internalCallRecords": 23, + "internalExactAnchoredCallRecords": 23, + "ownExactAnchoredFieldReferenceRecords": 142, + "ownFieldReferenceRecords": 142, + "unresolvedCallRecords": 110, + "unresolvedExactAnchoredCallRecords": 110 + } + }, + "sampleId": 8528735 + }, + { + "classId": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "classification": "unanimous-none", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 4, + "fieldCount": 4, + "id": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "methodCount": 5, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 4, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 9, + "ownExactAnchoredFieldReferenceRecords": 4, + "ownFieldReferenceRecords": 4 + } + }, + "sampleId": 8537138 + }, + { + "classId": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 16, + "distinctOwnFieldTargets": 5, + "fieldCount": 5, + "id": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "methodCount": 22, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 17, + "methodsWithOwnFieldReferences": 8, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 27, + "internalCallRecords": 36, + "internalExactAnchoredCallRecords": 36, + "ownExactAnchoredFieldReferenceRecords": 43, + "ownFieldReferenceRecords": 43 + } + }, + "sampleId": 8538037 + }, + { + "classId": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "classification": "unanimous-none", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "methodCount": 2, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 2, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 3, + "ownExactAnchoredFieldReferenceRecords": 2, + "ownFieldReferenceRecords": 2 + } + }, + "sampleId": 8539645 + }, + { + "classId": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 23, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 5, + "distinctOwnFieldTargets": 10, + "fieldCount": 11, + "id": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "methodCount": 14, + "methodsWithForeignCalls": 9, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 4, + "methodsWithOwnFieldReferences": 11, + "methodsWithUnresolvedCalls": 1, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 25, + "foreignCallRecords": 47, + "foreignExactAnchoredCallRecords": 47, + "internalCallRecords": 5, + "internalExactAnchoredCallRecords": 5, + "ownExactAnchoredFieldReferenceRecords": 55, + "ownFieldReferenceRecords": 55, + "unresolvedCallRecords": 3, + "unresolvedExactAnchoredCallRecords": 3 + } + }, + "sampleId": 6374724 + }, + { + "classId": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "classification": "unanimous-none", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 0, + "fieldCount": 0, + "id": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "methodCount": 7, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 0, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 7 + } + }, + "sampleId": 6391534 + }, + { + "classId": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "classification": "unanimous-none", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 0, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 0, + "distinctOwnFieldTargets": 1, + "fieldCount": 1, + "id": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "methodCount": 6, + "methodsWithForeignCalls": 0, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 0, + "methodsWithOwnFieldReferences": 4, + "methodsWithUnresolvedCalls": 0, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 7, + "ownExactAnchoredFieldReferenceRecords": 4, + "ownFieldReferenceRecords": 4 + } + }, + "sampleId": 6406137 + }, + { + "classId": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "classification": "unanimous-major-critical", + "exactMatchCount": 1, + "metrics": { + "distinctForeignCallTargets": 16, + "distinctForeignFieldTargets": 0, + "distinctInternalCallTargets": 5, + "distinctOwnFieldTargets": 5, + "fieldCount": 5, + "id": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "methodCount": 14, + "methodsWithForeignCalls": 13, + "methodsWithForeignFieldReferences": 0, + "methodsWithInternalCalls": 12, + "methodsWithOwnFieldReferences": 7, + "methodsWithUnresolvedCalls": 4, + "methodsWithUnresolvedFieldReferences": 0, + "recordCounts": { + "exactAnchoredMemberRecords": 19, + "foreignCallRecords": 46, + "foreignExactAnchoredCallRecords": 46, + "internalCallRecords": 18, + "internalExactAnchoredCallRecords": 18, + "ownExactAnchoredFieldReferenceRecords": 15, + "ownFieldReferenceRecords": 15, + "unresolvedCallRecords": 10, + "unresolvedExactAnchoredCallRecords": 10 + } + }, + "sampleId": 6413795 + } + ], + "purpose": "Inventory graph-stored class/member relationships before designing a responsibility or cohesion measure; no defect classifier or new competitor score.", + "rawPerClassRecord": "All 13,001 class IDs and their relationship counts remain in the hash-bound external raw run; this public review includes aggregate graph counts and all 55 reviewed class records.", + "rawRunSha256": "b4101f549c0abbb6514f6c3aa9e3a4b6df4f4b4d9f6159becc2ae1d47abd1139", + "registrationSha256": "153b158b7db7c8b942b159dc5f48443a3d3c26cfd70d469d506d8a01c914e99c", + "reviewedClassCount": 55, + "schema": "compass.mlcq-relation-evidence-review/1", + "unavailableReviewedClassJoins": 7, + "uniqueReviewedClassJoins": 48, + "verificationRepeatByteIdentical": true, + "verifiedRunSha256": "a233db994fd2feb740b92cb7855c21fb884b318ddddb2e6634775cc1ce7a1224", + "verifierSha256": "5f101695cb2c6be64c2a5e7402167510a322fb4b202306e3b23fa62a66f2b228" +} diff --git a/benchmarks/agent_query/mlcq_release_followup_registration.json b/benchmarks/agent_query/mlcq_release_followup_registration.json new file mode 100644 index 000000000..b32c53e04 --- /dev/null +++ b/benchmarks/agent_query/mlcq_release_followup_registration.json @@ -0,0 +1,62 @@ +{ + "schema": "compass.mlcq-release-followup-registration/1", + "originalRegistrationSha256": "a08e6a0970c605154b329acbfebaa0d9684859f1fad2fa0ed8e8717772866ef1", + "purpose": "Re-run the same eight-class development audit after the registered complete-source release follow-up; preserve both previous admission attempts and all failures.", + "disclosure": "Both prior native ranking panels and source-assisted diagnostics were inspected. The classes, labels, queries, cutoffs and limits remain unchanged. This is development follow-up, not held-out or independent adjudication.", + "maxGraphBytes": 1073741824, + "otherLimits": { + "maxSourceFileBytes": 4194304, + "maxGraphBytes": 1073741824, + "maxExtractSeconds": 1200, + "maxExtractStreamBytes": 16777216, + "maxMcpSessionBytes": 67108864 + }, + "nativeHubCapture": { + "method": "god_nodes", + "arguments": { + "top_n": 100 + }, + "timeoutSeconds": 120, + "maxResponseBytes": 16777216 + }, + "primarySampleIds": [ + 6374724, + 6391534, + 6406137, + 6413795, + 8528735, + 8537138, + 8538037, + 8539645 + ], + "frozenSuccessfulGraphs": [ + { + "repository": "apache/cloudstack", + "tool": "graphify", + "graphBytes": 227334534, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72" + }, + { + "repository": "eclipse/eclipse.platform.ui", + "tool": "compass", + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74" + }, + { + "repository": "eclipse/eclipse.platform.ui", + "tool": "graphify", + "graphBytes": 189557807, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef" + } + ], + "compassCloudStack": "Use only the candidate result of sql-regex-cache-01/whole/run.json after both declared release extractions terminate and repeated whole-run verification agrees. Require candidate success and the existing 1 GiB graph bound; otherwise retain it as unavailable, without fallback to the baseline or a reduced scope.", + "requests": "Fresh MCP sessions: same god_nodes(top_n=100), same public exact source-coordinate resolvers and one unfiltered neighbor call per resolved primary class. Graphify neighbor token_budget=262144; both tools retain the same 120-second request timeout, 16 MiB response and 64 MiB session caps. Keep raw requests/responses, failed and partial captures, native IDs, ambiguous labels and graph omission warnings.", + "judgment": "At fixed cutoffs 10/50/100 report consensus-positive class retrieval out of four and consensus-none class retrieval out of four separately. Nonreturned, missing extraction and unresolved output identity remain distinct. Unlabeled hubs cannot become false positives or true negatives. No precision-at-k, population accuracy or classifier score from this partial label set. Preserve every candidate and rating disagreement.", + "forbiddenClaims": "Do not replace original failed outcomes, tune on these eight classes and call them held-out, substitute source-assisted neighbors for the ranking score, or claim population precision/overall superiority.", + "priorAdmissionRegistrationSha256": "1fc72b0ef22d980041eebeb104124ffdf23efd4e53e5eecc39a602f67160ee5d", + "wholeReleaseRegistrationSha256": "085d9148f4beb624a69f140fc103c7c18248d5b404be436177606332216c110b", + "compassServerBinarySha256": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4", + "frozenEclipseGraph": "The Compass Eclipse graph was produced by the earlier frozen development binary. Its producer hash/provenance remains unchanged. Query it using the same release server as CloudStack, and disclose the graph-producer/server distinction. Do not call it a fresh extraction by this candidate.", + "queryTiming": "Record operational request times, with identical request bounds but no repeated query timing experiment or speed ranking. No extraction or compilation by this task may overlap capture.", + "graphifyCoverageDisclosure": "The frozen Graphify CloudStack extraction skipped all 119 SQL files because the optional parser was absent. Keep that environment and graph unchanged, disclose unequal emitted language coverage, and do not derive a runtime ranking." +} diff --git a/benchmarks/agent_query/mlcq_release_followup_review.json b/benchmarks/agent_query/mlcq_release_followup_review.json new file mode 100644 index 000000000..bcc17ce5e --- /dev/null +++ b/benchmarks/agent_query/mlcq_release_followup_review.json @@ -0,0 +1,6938 @@ +{ + "schema": "compass.mlcq-release-review/1", + "scope": "Same eight externally rated Java classes, queried with the frozen release server and declared 1 GiB graph cap. Development follow-up; earlier outcomes stay unchanged.", + "externalRun": "sql-regex-cache-01/blob-followup", + "originalReviewSha256": "59d6b22c908e7c7872b46caaac39d49aedbb277fc8b4f1766f23a6885f07258f", + "priorAdmissionReviewSha256": "8c9e041f567738b80e1bae600f51c861d5e8fc1156a0efd02f9816348862c3cb", + "wholeReleaseReviewSha256": "4d694ec2cce46b9c2009b7b7af3beb8e8f884599df50199c848d264e2b23dab6", + "registrationSha256": "bac4975faaf377abf15c5e92c9f95021d2fa7a21bcf26161bc9d29d91739f159", + "sourceWitnessesSha256": "c35e4202703599acca6f96a807c72f598345d7d764d88cfc3b13f9340e01e675", + "sourceReviewSha256": "c126379ccdbdfe0991ac28205b06ee6d92f40e5bc5713ca7f45ab1778e2853f7", + "dataset": { + "title": "MLCQ: Industry-relevant code smell data set", + "authors": [ + "Lech Madeyski", + "Tomasz Lewowski" + ], + "version": "1.1", + "doi": "10.5281/zenodo.3666840", + "paperDoi": "10.1145/3383219.3383264", + "recordUrl": "https://zenodo.org/records/3666840", + "license": "CC-BY-4.0", + "file": "MLCQCodeSmellSamples.csv", + "sha256": "8e05db55150a984f0b08ab211f5f612374790ea918ba08afc290cf122b63551b", + "publishedMd5": "9019beae88089838d2d13dc12e69241b" + }, + "maxGraphBytes": 1073741824, + "candidateBinarySha256": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4", + "candidateBuildCommit": "9df5dcf32f9581c1d9eeb299eb2123d807afe60c", + "verification": { + "captureSha256": "72e8fa540b298a1e426218b5c72b35a7e11eb049cf82c09734a3ec2bce7264d6", + "neighborAuditorSha256": "fef9268b1f88d8c46d0d6dda6d6acbb5fa576cddedeea992b374984bcd6111d8", + "results": [ + { + "build": { + "exitCode": 0, + "graphBytes": 671502979, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "timedOut": false, + "withinRegisteredGraphBound": true + }, + "captureError": null, + "captureStatus": "completed", + "cases": [ + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d" + ], + "rank": null, + "sampleId": 8528735 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6" + ], + "rank": null, + "sampleId": 8537138 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819" + ], + "rank": null, + "sampleId": 8538037 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e" + ], + "rank": null, + "sampleId": 8539645 + } + ], + "connectivityChecks": [ + { + "id": "sha256:54fbe6227a081358523dd1beaf1b08e4c9b18110d80b83a8194d0bc1323bfa67", + "rank": 1, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2297e7cdd1815d9ddc0cd8c3f33f7a9400b8a51c5ce5ad35605a0a5756beb64f", + "rank": 2, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:4e5d5484d8ab7eb5472cacbe60ab1f1986928e7f0ac46d32284030526412de2b", + "rank": 3, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d4ddf18c8e862d09c1385a4d3511275fd2605a7d824c41ae0dfb245c0bb07bc7", + "rank": 4, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d2e4ecb92cae98091789e380fbfda0cdee48c13f08249e454173bb711a973128", + "rank": 5, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:545226fdc24c83cd592be4ecc6169191dd009ed3528ab290a28fe86288819cc7", + "rank": 6, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:974a69471e642a8130e247e6c20d8f860f344e6b4a45d005beea889671b56260", + "rank": 7, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1ef184b8f57c32a0ab6b3bdc9f5c41a504446e6a435740e61ff87fd6fe89a390", + "rank": 8, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:dc197decba7245aff13d90baed5b68a2ad59f52e18d66d127a383066e212b8d3", + "rank": 9, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:4827d4f759d138137b202b1a103d0b938ce15851625bfe55a32b797569a2b18d", + "rank": 10, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:763394e17767bbba6c021b7d8ebcdb376421bc8d3660877062abb0888486083c", + "rank": 11, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:335c21ec863ddb9e1a203e019dec24915c17e6c2a4f49a7ffe734491eec290e6", + "rank": 12, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d313498579de79561900754db2e65c2df05e21bbdbecb07e73d3491fec60eba8", + "rank": 13, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:8b1ac209e0f9f0081a2c512c103b9a5a8c85002599c7de473d9f98f0c925e1ce", + "rank": 14, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e1c8d18d476b27ef92c4306d1a85f3a654def3259c3c1325511819247bab5016", + "rank": 15, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:adee8751183e501ac47e2022d9c9e46123b42b1deb21dd691fb6864484c6ea42", + "rank": 16, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:564e0bb9f7da42bc2715981597a7b09d57ee5ce6ef8c1ffca0d281560e04bfc7", + "rank": 17, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:63cb3dc1370942ae6e187a052bc43c9417d2408e1b2ab904700b34a01cc6b21a", + "rank": 18, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:09671d94316346943c7fbcb6a15adc76e628cdc9c15fac26d8d1be56e77e5df7", + "rank": 19, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a5ea55a556d396b69c16b9c89fe1156916f77dca567af963af3d839bb3a496fb", + "rank": 20, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2e8b7f56c4a7b79f077606a3d2ebcc063c76a7dbd8af9bed8dc32c48eddfb9ec", + "rank": 21, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:10b9d8e53eb9370004ad21a5ee78d23b80775d88248d96bf3838b9c4565a8eb9", + "rank": 22, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1ee724324eeaed6618195534cf12d5ddede5292321e83c84d4010e4a08e50579", + "rank": 23, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c23af943ba03e627afacbc0ae8a672756988a5f00085ee3d42427547ca4ce11e", + "rank": 24, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c5f5bd898889fde8da0d31bf501e3759718362258b3a93f86f2af3b67156a1cb", + "rank": 25, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e08f1deacb36697f2428f0a4552874acaaeafeb19acc0dedc2999f93658ccdce", + "rank": 26, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:8b9666af32e760c3692969f1fab2b9d7c1a2cc3cabbe6996fba7fc4a8781619a", + "rank": 27, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e8525c6d3152345bd8dbf750520f62b9e2e092189cf2686071e757346d75f2e9", + "rank": 28, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d994830f06ae067fbb21bb055a9303e17de111c176637c378acd6d350844f73b", + "rank": 29, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:15acf633b82e4b42cd27198c6e400b343125e30139ffedd1c83eb60801d5d8d8", + "rank": 30, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:fb8c6a60cd2b0e582c49204f6b74e98f53da5a9174e24bcc4f1edb27849b6671", + "rank": 31, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:fdfc5239e6b8768ff182d9d5aec18340f55dd4dda7c45412dac4d73e1ec1750d", + "rank": 32, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5a5135111ba0801a036179946307b20e13f20f038fd93b09efb3b44f8cb79069", + "rank": 33, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e487db7e715e515fb9cda8b9bba319cb49109e33c06d4c41f5796af35aa78993", + "rank": 34, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:58e92219053a7a4ec0bcacc7e40693f084eaab31fdb5fc1eccc3c31e46778b06", + "rank": 35, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:44cfb2dd87b276d416e9662d2a2e687e94ab9ec808719b295d211e1234dcc96d", + "rank": 36, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a5f1b82caff83cc93f08ffa638f4f502f45e71ce8ae55f2ff79b1c66578e7c7a", + "rank": 37, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:40a293187af2e127f4627aabb7eccc2d3d18eec049ebe6aeb4df0f1bf5015de5", + "rank": 38, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:f7b64de19f8747ae1369d9a4f7e44772215eb58e44e041ec7179b3516c1683b3", + "rank": 39, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:40704b0381a67c6c7bc3c209c10293f49e830a125a67c8bf8bd77f50a11cba32", + "rank": 40, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1d7635266a1a15998167f6e7d6fcbbdbcd99f3d95173732f7ad01117f2fcf95d", + "rank": 41, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:21ff6c88d93534072ec7d0b1ca133f1ffcaeade5d6679cd02684dfe4587f77a3", + "rank": 42, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:fbf0db418043d6398967ee1db20335abc5d40ad12c92e2b2cc6d187303bbf107", + "rank": 43, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:af92ff4c586713792244fae3ed5479b020ac8189de750285ca7a98a552a93ec1", + "rank": 44, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:933b27661896271af12acc470bc715ceabf8d18c89fe75f5a45dd397436af1d9", + "rank": 45, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:9197a4f3db20fc6356e53d6e1ee2b8e6475a8468f425d0511b4b70134da8cda6", + "rank": 46, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2f4d2d5e48388d3698b015fe888732f8fd84dcff7a1f5fc3cc5219311231c0f6", + "rank": 47, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2ed7f5aace287679efe47403d9d61c57a9562e436319d2c27a776d0a87dd96d7", + "rank": 48, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:353f4ca113c738e9bb88c1ac824bb7abea4625d81d78f91526883cc71e4d7a03", + "rank": 49, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d57faa2beb351dcd84d28054dea60837fd40033c116880fa44f562a55de29080", + "rank": 50, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:0ae9d940f53705ad60e7093a3828aad76965ad7ef5ce168e06c9cef81a5535c4", + "rank": 51, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c0f02e9d05415b2f8757df800d010adb33e8882b258ad6e86c23a100944ba423", + "rank": 52, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:db1d189495dd40ac4d3702836527c0e6f9429794a6a8b98792710e8a36ad7cdf", + "rank": 53, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:18201c7e9cf9f42f86178640bd75833c2a133cc4205c866b232500e266cd1645", + "rank": 54, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:79ba46da4eb85850bb2bbf4715f932ab4df40367c139b0e45be3f0a9d7e5e020", + "rank": 55, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:21f6207563d28461d137d67e34a47288d63ee58bee4baa6432c2475870eefc8e", + "rank": 56, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:f7adb25df812b0cc8b661075ffdd9b6c0f31c854f2f1c75a51b47ad6efef8ba9", + "rank": 57, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:98215871f47ebd9d0a71641dac7402153fe97d2b815d9a9566606ea0836972ca", + "rank": 58, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:3d0c43b59cb417641c8f430197ff2057b21e31aeb94c5e5141567c82338778ed", + "rank": 59, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:8faf6e13ddc0024965f440fa93ab81b9bdcbbaca6aaa0af36c5a697a67e4cef0", + "rank": 60, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:556308c59cf4f77ee190f0bb1b1dfb87b040593e5e200648e3937498dcb830d9", + "rank": 61, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7be03978054b8014d10c2aae1fff9d6fbae51f554e759fc9d52d4e5e8160bd94", + "rank": 62, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:981d059adb8345ef85859f2eff37f7eaf9c740d8f274611c24e93c04f9761f8f", + "rank": 63, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:f0272e08f8faa43a509719e7de9501b28467d6900c98cb2327a4c5e3656d8242", + "rank": 64, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5833adad689f6c0e3a8c3acc6067edf49b75d122e4da180f72a41fd1fc3987cc", + "rank": 65, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:20972045c082fc34317db5c524392fbe3acd83b1df6bb346565be74a627ab58c", + "rank": 66, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:baacd29554cc9d1500be8659b6c0b274f1bc9d091fe77809e6996fe0224ae768", + "rank": 67, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:f0f2ef902a83a335e0235910beaf3984af13f8d4a4a7f0fe2ffeddbbbe585883", + "rank": 68, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d07ab21e064202572dbddd6a6a8675015466c5d348882fc09a5dbde0ab74242d", + "rank": 69, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:0198a39e833e2795907caa6d0a5ea328e29cb959bf82881bcc4ea1b6d2eab68e", + "rank": 70, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:294d8990508f9c5341a84c3de349d6cabf826c3ed1af3bb40341e46b728170c4", + "rank": 71, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:8bc9c43ea213e01fd83fe5a07b378d3a3e99157897deb9e76abff0f367b955bd", + "rank": 72, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5702f1c2714190594468642d9275cce5562320f29dbf33e8d9d02c1a67f632ef", + "rank": 73, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:eff992aae2f3de5d7a20c97fbcfafe3ae8c93924e5b1bce5d12020058598aacd", + "rank": 74, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:69e0fdd3c35a8fd80aa330f916e466e5a245a0538ad5dc52879bb4593bf8aef0", + "rank": 75, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7a3cbed27a8b0fdb2801dd6ddd0d9252dd4928cf62484a85fc08593a63b8194d", + "rank": 76, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:32e7e7d94903474ac973d337975bf77f2f12e1da491d505354a8ca776a4893ca", + "rank": 77, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:44a771e9d6c6206dabe20ad6dd16e37424b92106a9ccdd2359a2db92713d55ff", + "rank": 78, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c15a21582ec895486816097c3599a4b331ae694773e6d19988e95da2c6f8a8cc", + "rank": 79, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:eb851ce4a8f9afb1295173bf873a1500948dc753b67315a25ff0ebca26f9c21e", + "rank": 80, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:33998566769537dad04ce6725d0e8a562614f6cef98e854292ebd2eafb80bbce", + "rank": 81, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:3b5be2961ed450d7208d1654d24276b40da3c35d4d01fdb8ab31280e3598fca9", + "rank": 82, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:502ae1e063bf5a3e1eff2b5b71b709f102b1272da14edf7ac6743d59df273fe9", + "rank": 83, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:10e2e80ddb963db6f803b02411636819efcc1bff86264eb6251c4d7c27cf8d0b", + "rank": 84, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7a79cd9f0d21c2d649f3f2a8f599596873024114cc81fb02d477ac955277063d", + "rank": 85, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:0468ff687c98aaae88ba12e1fac3b4d6b6bc7c0c65b34070430f45159e899f2b", + "rank": 86, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:59e274929092b714c8c19a1d109b88148387c4f693b85898e7960699df105725", + "rank": 87, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a8f7679e45858762cd10b2796d5236f35d41a15e417e83434891c5fdcdd77466", + "rank": 88, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:98aac0dac14671d4064646fcf5a844cbbde3b9da98b2e1e84baeab0e5d33c339", + "rank": 89, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:26882507e5f5d8057986b3854f81eb79a6fef81c94dc7c726f2e40119f28e418", + "rank": 90, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:88cd2c67e4d8d4b7561861d11ead74870f367cad2e520c1ff3bcebde23a4d068", + "rank": 91, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e32d96028e5d1f3d4608a8f1a2c75e1a289f9825088f116e716d42d196578d07", + "rank": 92, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:31d2d0cdc8750e9e44261c0f8ebe9cf9192797db3411f8fd5dbce4f8950dbd8f", + "rank": 93, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e0fdf3fd6f6890a4e1735792162028f5870afba2db81173ec78e51aa3366bc9a", + "rank": 94, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:3c3c831c3f6237fab7f94c44e4e552f0eed9dbb3ac89b4f69dff03c58749f15c", + "rank": 95, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:22e9b7f98ad424e02ec7fc30c1e5dbd4133d8fae9c13dc008fda0c44a4041747", + "rank": 96, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d179f9cd5d77e95070fad023a5d5892967cf2536050a517a675c91646be055a1", + "rank": 97, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:47f0b827831b89461f03228e939d787748c50f64262587383c25697939f1dda7", + "rank": 98, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:6ab86b0c97d8987d4a492084a992bbbd59b67b08642f4bbfe1e48ec1e1bfb9a0", + "rank": 99, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:bed59c92f1328956c5c68bff8ab58b468dec4dedf843b43954e66a2542614961", + "rank": 100, + "summaryMatches": true, + "textRowsMatch": true + } + ], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + } + }, + "extractionDiagnostics": [ + { + "stream": "stderr", + "text": "warning: Compass published a partial graph after omitting 1 nodes and 45 edges; 0 identity collisions quarantined.", + "textTruncated": false + } + ], + "graphConsistency": { + "executionSucceeded": true, + "explicitIdentities": 100, + "hubs": [ + { + "degree": 4473, + "degreeMatches": true, + "expectedDegree": 4473, + "explicitId": "sha256:54fbe6227a081358523dd1beaf1b08e4c9b18110d80b83a8194d0bc1323bfa67", + "file": "ui/scripts/system.js", + "id": "sha256:54fbe6227a081358523dd1beaf1b08e4c9b18110d80b83a8194d0bc1323bfa67", + "identityCandidates": 1, + "label": "system", + "line": 1, + "rank": 1, + "sourceAnchorMatches": true + }, + { + "degree": 4143, + "degreeMatches": true, + "expectedDegree": 4143, + "explicitId": "sha256:2297e7cdd1815d9ddc0cd8c3f33f7a9400b8a51c5ce5ad35605a0a5756beb64f", + "file": "ui/lib/jquery-ui/js/jquery-ui.js", + "id": "sha256:2297e7cdd1815d9ddc0cd8c3f33f7a9400b8a51c5ce5ad35605a0a5756beb64f", + "identityCandidates": 1, + "label": "jquery-ui", + "line": 1, + "rank": 2, + "sourceAnchorMatches": true + }, + { + "degree": 2932, + "degreeMatches": true, + "expectedDegree": 2932, + "explicitId": "sha256:4e5d5484d8ab7eb5472cacbe60ab1f1986928e7f0ac46d32284030526412de2b", + "file": "api/src/main/java/org/apache/cloudstack/api/Parameter.java", + "id": "sha256:4e5d5484d8ab7eb5472cacbe60ab1f1986928e7f0ac46d32284030526412de2b", + "identityCandidates": 1, + "label": "Parameter", + "line": 28, + "rank": 3, + "sourceAnchorMatches": true + }, + { + "degree": 2415, + "degreeMatches": true, + "expectedDegree": 2415, + "explicitId": "sha256:d4ddf18c8e862d09c1385a4d3511275fd2605a7d824c41ae0dfb245c0bb07bc7", + "file": "api/src/main/java/com/cloud/serializer/Param.java", + "id": "sha256:d4ddf18c8e862d09c1385a4d3511275fd2605a7d824c41ae0dfb245c0bb07bc7", + "identityCandidates": 1, + "label": "Param", + "line": 24, + "rank": 4, + "sourceAnchorMatches": true + }, + { + "degree": 2260, + "degreeMatches": true, + "expectedDegree": 2260, + "explicitId": "sha256:d2e4ecb92cae98091789e380fbfda0cdee48c13f08249e454173bb711a973128", + "file": "utils/src/main/java/com/cloud/utils/exception/CloudRuntimeException.java", + "id": "sha256:d2e4ecb92cae98091789e380fbfda0cdee48c13f08249e454173bb711a973128", + "identityCandidates": 1, + "label": "CloudRuntimeException", + "line": 34, + "rank": 5, + "sourceAnchorMatches": true + }, + { + "degree": 1873, + "degreeMatches": true, + "expectedDegree": 1873, + "explicitId": "sha256:545226fdc24c83cd592be4ecc6169191dd009ed3528ab290a28fe86288819cc7", + "file": "tools/ngui/static/js/lib/jquery-1.7.2.js", + "id": "sha256:545226fdc24c83cd592be4ecc6169191dd009ed3528ab290a28fe86288819cc7", + "identityCandidates": 1, + "label": "jquery-1.7.2", + "line": 1, + "rank": 6, + "sourceAnchorMatches": true + }, + { + "degree": 1646, + "degreeMatches": true, + "expectedDegree": 1646, + "explicitId": "sha256:974a69471e642a8130e247e6c20d8f860f344e6b4a45d005beea889671b56260", + "file": "ui/lib/jquery.js", + "id": "sha256:974a69471e642a8130e247e6c20d8f860f344e6b4a45d005beea889671b56260", + "identityCandidates": 1, + "label": "jquery", + "line": 1, + "rank": 7, + "sourceAnchorMatches": true + }, + { + "degree": 1644, + "degreeMatches": true, + "expectedDegree": 1644, + "explicitId": "sha256:1ef184b8f57c32a0ab6b3bdc9f5c41a504446e6a435740e61ff87fd6fe89a390", + "file": "engine/schema/src/main/resources/META-INF/db/schema-430to440.sql", + "id": "sha256:1ef184b8f57c32a0ab6b3bdc9f5c41a504446e6a435740e61ff87fd6fe89a390", + "identityCandidates": 1, + "label": "guest_os_hypervisor", + "line": 767, + "rank": 8, + "sourceAnchorMatches": true + }, + { + "degree": 1564, + "degreeMatches": true, + "expectedDegree": 1564, + "explicitId": "sha256:dc197decba7245aff13d90baed5b68a2ad59f52e18d66d127a383066e212b8d3", + "file": "api/src/main/java/com/cloud/agent/api/Answer.java", + "id": "sha256:dc197decba7245aff13d90baed5b68a2ad59f52e18d66d127a383066e212b8d3", + "identityCandidates": 1, + "label": "Answer", + "line": 21, + "rank": 9, + "sourceAnchorMatches": true + }, + { + "degree": 1551, + "degreeMatches": true, + "expectedDegree": 1551, + "explicitId": "sha256:4827d4f759d138137b202b1a103d0b938ce15851625bfe55a32b797569a2b18d", + "file": "ui/scripts/network.js", + "id": "sha256:4827d4f759d138137b202b1a103d0b938ce15851625bfe55a32b797569a2b18d", + "identityCandidates": 1, + "label": "network", + "line": 1, + "rank": 10, + "sourceAnchorMatches": true + }, + { + "degree": 1471, + "degreeMatches": true, + "expectedDegree": 1471, + "explicitId": "sha256:763394e17767bbba6c021b7d8ebcdb376421bc8d3660877062abb0888486083c", + "file": "api/src/main/java/org/apache/cloudstack/api/ApiConstants.java", + "id": "sha256:763394e17767bbba6c021b7d8ebcdb376421bc8d3660877062abb0888486083c", + "identityCandidates": 1, + "label": "ApiConstants", + "line": 19, + "rank": 11, + "sourceAnchorMatches": true + }, + { + "degree": 1327, + "degreeMatches": true, + "expectedDegree": 1327, + "explicitId": "sha256:335c21ec863ddb9e1a203e019dec24915c17e6c2a4f49a7ffe734491eec290e6", + "file": "api/src/main/java/org/apache/cloudstack/api/APICommand.java", + "id": "sha256:335c21ec863ddb9e1a203e019dec24915c17e6c2a4f49a7ffe734491eec290e6", + "identityCandidates": 1, + "label": "APICommand", + "line": 28, + "rank": 12, + "sourceAnchorMatches": true + }, + { + "degree": 1304, + "degreeMatches": true, + "expectedDegree": 1304, + "explicitId": "sha256:d313498579de79561900754db2e65c2df05e21bbdbecb07e73d3491fec60eba8", + "file": "api/src/main/java/com/cloud/network/Network.java", + "id": "sha256:d313498579de79561900754db2e65c2df05e21bbdbecb07e73d3491fec60eba8", + "identityCandidates": 1, + "label": "Network", + "line": 41, + "rank": 13, + "sourceAnchorMatches": true + }, + { + "degree": 1268, + "degreeMatches": true, + "expectedDegree": 1268, + "explicitId": "sha256:8b1ac209e0f9f0081a2c512c103b9a5a8c85002599c7de473d9f98f0c925e1ce", + "file": "ui/scripts/vpc.js", + "id": "sha256:8b1ac209e0f9f0081a2c512c103b9a5a8c85002599c7de473d9f98f0c925e1ce", + "identityCandidates": 1, + "label": "vpc", + "line": 1, + "rank": 14, + "sourceAnchorMatches": true + }, + { + "degree": 1234, + "degreeMatches": true, + "expectedDegree": 1234, + "explicitId": "sha256:e1c8d18d476b27ef92c4306d1a85f3a654def3259c3c1325511819247bab5016", + "file": "framework/db/src/main/java/com/cloud/utils/db/SearchCriteria.java", + "id": "sha256:e1c8d18d476b27ef92c4306d1a85f3a654def3259c3c1325511819247bab5016", + "identityCandidates": 1, + "label": ".setParameters()", + "line": 160, + "rank": 15, + "sourceAnchorMatches": true + }, + { + "degree": 1207, + "degreeMatches": true, + "expectedDegree": 1207, + "explicitId": "sha256:adee8751183e501ac47e2022d9c9e46123b42b1deb21dd691fb6864484c6ea42", + "file": "api/src/main/java/com/cloud/exception/InvalidParameterValueException.java", + "id": "sha256:adee8751183e501ac47e2022d9c9e46123b42b1deb21dd691fb6864484c6ea42", + "identityCandidates": 1, + "label": "InvalidParameterValueException", + "line": 21, + "rank": 16, + "sourceAnchorMatches": true + }, + { + "degree": 1198, + "degreeMatches": true, + "expectedDegree": 1198, + "explicitId": "sha256:564e0bb9f7da42bc2715981597a7b09d57ee5ce6ef8c1ffca0d281560e04bfc7", + "file": "api/src/main/java/com/cloud/user/Account.java", + "id": "sha256:564e0bb9f7da42bc2715981597a7b09d57ee5ce6ef8c1ffca0d281560e04bfc7", + "identityCandidates": 1, + "label": "Account", + "line": 25, + "rank": 17, + "sourceAnchorMatches": true + }, + { + "degree": 1103, + "degreeMatches": true, + "expectedDegree": 1103, + "explicitId": "sha256:63cb3dc1370942ae6e187a052bc43c9417d2408e1b2ab904700b34a01cc6b21a", + "file": "framework/db/src/main/java/com/cloud/utils/db/SearchBuilder.java", + "id": "sha256:63cb3dc1370942ae6e187a052bc43c9417d2408e1b2ab904700b34a01cc6b21a", + "identityCandidates": 1, + "label": "SearchBuilder", + "line": 56, + "rank": 18, + "sourceAnchorMatches": true + }, + { + "degree": 1092, + "degreeMatches": true, + "expectedDegree": 1092, + "explicitId": "sha256:09671d94316346943c7fbcb6a15adc76e628cdc9c15fac26d8d1be56e77e5df7", + "file": "ui/scripts/zoneWizard.js", + "id": "sha256:09671d94316346943c7fbcb6a15adc76e628cdc9c15fac26d8d1be56e77e5df7", + "identityCandidates": 1, + "label": "zoneWizard", + "line": 1, + "rank": 19, + "sourceAnchorMatches": true + }, + { + "degree": 1088, + "degreeMatches": true, + "expectedDegree": 1088, + "explicitId": "sha256:a5ea55a556d396b69c16b9c89fe1156916f77dca567af963af3d839bb3a496fb", + "file": "api/src/main/java/org/apache/cloudstack/api/ServerApiException.java", + "id": "sha256:a5ea55a556d396b69c16b9c89fe1156916f77dca567af963af3d839bb3a496fb", + "identityCandidates": 1, + "label": "ServerApiException", + "line": 26, + "rank": 20, + "sourceAnchorMatches": true + }, + { + "degree": 1070, + "degreeMatches": true, + "expectedDegree": 1070, + "explicitId": "sha256:2e8b7f56c4a7b79f077606a3d2ebcc063c76a7dbd8af9bed8dc32c48eddfb9ec", + "file": "systemvm/agent/js/jquery.js", + "id": "sha256:2e8b7f56c4a7b79f077606a3d2ebcc063c76a7dbd8af9bed8dc32c48eddfb9ec", + "identityCandidates": 1, + "label": "jquery", + "line": 1, + "rank": 21, + "sourceAnchorMatches": true + }, + { + "degree": 902, + "degreeMatches": true, + "expectedDegree": 902, + "explicitId": "sha256:10b9d8e53eb9370004ad21a5ee78d23b80775d88248d96bf3838b9c4565a8eb9", + "file": "utils/src/main/java/com/cloud/utils/Pair.java", + "id": "sha256:10b9d8e53eb9370004ad21a5ee78d23b80775d88248d96bf3838b9c4565a8eb9", + "identityCandidates": 1, + "label": "Pair", + "line": 24, + "rank": 22, + "sourceAnchorMatches": true + }, + { + "degree": 902, + "degreeMatches": true, + "expectedDegree": 902, + "explicitId": "sha256:1ee724324eeaed6618195534cf12d5ddede5292321e83c84d4010e4a08e50579", + "file": "ui/scripts/configuration.js", + "id": "sha256:1ee724324eeaed6618195534cf12d5ddede5292321e83c84d4010e4a08e50579", + "identityCandidates": 1, + "label": "configuration", + "line": 1, + "rank": 23, + "sourceAnchorMatches": true + }, + { + "degree": 882, + "degreeMatches": true, + "expectedDegree": 882, + "explicitId": "sha256:c23af943ba03e627afacbc0ae8a672756988a5f00085ee3d42427547ca4ce11e", + "file": "engine/schema/src/main/resources/META-INF/db/create-default-role-api-mappings.sql", + "id": "sha256:c23af943ba03e627afacbc0ae8a672756988a5f00085ee3d42427547ca4ce11e", + "identityCandidates": 1, + "label": "rule", + "line": 20, + "rank": 24, + "sourceAnchorMatches": true + }, + { + "degree": 882, + "degreeMatches": true, + "expectedDegree": 882, + "explicitId": "sha256:c5f5bd898889fde8da0d31bf501e3759718362258b3a93f86f2af3b67156a1cb", + "file": "engine/schema/src/main/resources/META-INF/db/create-default-role-api-mappings.sql", + "id": "sha256:c5f5bd898889fde8da0d31bf501e3759718362258b3a93f86f2af3b67156a1cb", + "identityCandidates": 1, + "label": "role_permissions", + "line": 20, + "rank": 25, + "sourceAnchorMatches": true + }, + { + "degree": 835, + "degreeMatches": true, + "expectedDegree": 835, + "explicitId": "sha256:e08f1deacb36697f2428f0a4552874acaaeafeb19acc0dedc2999f93658ccdce", + "file": "api/src/main/java/org/apache/cloudstack/context/CallContext.java", + "id": "sha256:e08f1deacb36697f2428f0a4552874acaaeafeb19acc0dedc2999f93658ccdce", + "identityCandidates": 1, + "label": ".current()", + "line": 129, + "rank": 26, + "sourceAnchorMatches": true + }, + { + "degree": 828, + "degreeMatches": true, + "expectedDegree": 828, + "explicitId": "sha256:8b9666af32e760c3692969f1fab2b9d7c1a2cc3cabbe6996fba7fc4a8781619a", + "file": "framework/db/src/main/java/com/cloud/utils/db/DB.java", + "id": "sha256:8b9666af32e760c3692969f1fab2b9d7c1a2cc3cabbe6996fba7fc4a8781619a", + "identityCandidates": 1, + "label": "DB", + "line": 40, + "rank": 27, + "sourceAnchorMatches": true + }, + { + "degree": 776, + "degreeMatches": true, + "expectedDegree": 776, + "explicitId": "sha256:e8525c6d3152345bd8dbf750520f62b9e2e092189cf2686071e757346d75f2e9", + "file": "framework/db/src/main/java/com/cloud/utils/db/GenericDao.java", + "id": "sha256:e8525c6d3152345bd8dbf750520f62b9e2e092189cf2686071e757346d75f2e9", + "identityCandidates": 1, + "label": "GenericDao", + "line": 30, + "rank": 28, + "sourceAnchorMatches": true + }, + { + "degree": 771, + "degreeMatches": true, + "expectedDegree": 771, + "explicitId": "sha256:d994830f06ae067fbb21bb055a9303e17de111c176637c378acd6d350844f73b", + "file": "tools/ngui/static/js/lib/angular.js", + "id": "sha256:d994830f06ae067fbb21bb055a9303e17de111c176637c378acd6d350844f73b", + "identityCandidates": 1, + "label": "angular", + "line": 1, + "rank": 29, + "sourceAnchorMatches": true + }, + { + "degree": 768, + "degreeMatches": true, + "expectedDegree": 768, + "explicitId": "sha256:15acf633b82e4b42cd27198c6e400b343125e30139ffedd1c83eb60801d5d8d8", + "file": "engine/schema/src/main/java/com/cloud/host/HostVO.java", + "id": "sha256:15acf633b82e4b42cd27198c6e400b343125e30139ffedd1c83eb60801d5d8d8", + "identityCandidates": 1, + "label": "HostVO", + "line": 47, + "rank": 30, + "sourceAnchorMatches": true + }, + { + "degree": 746, + "degreeMatches": true, + "expectedDegree": 746, + "explicitId": "sha256:fb8c6a60cd2b0e582c49204f6b74e98f53da5a9174e24bcc4f1edb27849b6671", + "file": "api/src/main/java/com/cloud/agent/api/Command.java", + "id": "sha256:fb8c6a60cd2b0e582c49204f6b74e98f53da5a9174e24bcc4f1edb27849b6671", + "identityCandidates": 1, + "label": "Command", + "line": 28, + "rank": 31, + "sourceAnchorMatches": true + }, + { + "degree": 731, + "degreeMatches": true, + "expectedDegree": 731, + "explicitId": "sha256:fdfc5239e6b8768ff182d9d5aec18340f55dd4dda7c45412dac4d73e1ec1750d", + "file": "api/src/main/java/com/cloud/host/Host.java", + "id": "sha256:fdfc5239e6b8768ff182d9d5aec18340f55dd4dda7c45412dac4d73e1ec1750d", + "identityCandidates": 1, + "label": "Host", + "line": 31, + "rank": 32, + "sourceAnchorMatches": true + }, + { + "degree": 715, + "degreeMatches": true, + "expectedDegree": 715, + "explicitId": "sha256:5a5135111ba0801a036179946307b20e13f20f038fd93b09efb3b44f8cb79069", + "file": "framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java", + "id": "sha256:5a5135111ba0801a036179946307b20e13f20f038fd93b09efb3b44f8cb79069", + "identityCandidates": 1, + "label": "GenericDaoBase", + "line": 116, + "rank": 33, + "sourceAnchorMatches": true + }, + { + "degree": 712, + "degreeMatches": true, + "expectedDegree": 712, + "explicitId": "sha256:e487db7e715e515fb9cda8b9bba319cb49109e33c06d4c41f5796af35aa78993", + "file": "tools/ngui/static/js/lib/angular-ui.min.js", + "id": "sha256:e487db7e715e515fb9cda8b9bba319cb49109e33c06d4c41f5796af35aa78993", + "identityCandidates": 1, + "label": "angular-ui.min", + "line": 1, + "rank": 34, + "sourceAnchorMatches": true + }, + { + "degree": 698, + "degreeMatches": true, + "expectedDegree": 698, + "explicitId": "sha256:58e92219053a7a4ec0bcacc7e40693f084eaab31fdb5fc1eccc3c31e46778b06", + "file": "api/src/main/java/com/cloud/event/EventTypes.java", + "id": "sha256:58e92219053a7a4ec0bcacc7e40693f084eaab31fdb5fc1eccc3c31e46778b06", + "identityCandidates": 1, + "label": "EventTypes", + "line": 79, + "rank": 35, + "sourceAnchorMatches": true + }, + { + "degree": 685, + "degreeMatches": true, + "expectedDegree": 685, + "explicitId": "sha256:44cfb2dd87b276d416e9662d2a2e687e94ab9ec808719b295d211e1234dcc96d", + "file": "ui/scripts/templates.js", + "id": "sha256:44cfb2dd87b276d416e9662d2a2e687e94ab9ec808719b295d211e1234dcc96d", + "identityCandidates": 1, + "label": "templates", + "line": 1, + "rank": 36, + "sourceAnchorMatches": true + }, + { + "degree": 651, + "degreeMatches": true, + "expectedDegree": 651, + "explicitId": "sha256:a5f1b82caff83cc93f08ffa638f4f502f45e71ce8ae55f2ff79b1c66578e7c7a", + "file": "api/src/main/java/com/cloud/vm/VirtualMachineProfile.java", + "id": "sha256:a5f1b82caff83cc93f08ffa638f4f502f45e71ce8ae55f2ff79b1c66578e7c7a", + "identityCandidates": 1, + "label": "VirtualMachineProfile", + "line": 35, + "rank": 37, + "sourceAnchorMatches": true + }, + { + "degree": 650, + "degreeMatches": true, + "expectedDegree": 650, + "explicitId": "sha256:40a293187af2e127f4627aabb7eccc2d3d18eec049ebe6aeb4df0f1bf5015de5", + "file": "ui/scripts/instances.js", + "id": "sha256:40a293187af2e127f4627aabb7eccc2d3d18eec049ebe6aeb4df0f1bf5015de5", + "identityCandidates": 1, + "label": "instances", + "line": 1, + "rank": 38, + "sourceAnchorMatches": true + }, + { + "degree": 592, + "degreeMatches": true, + "expectedDegree": 592, + "explicitId": "sha256:f7b64de19f8747ae1369d9a4f7e44772215eb58e44e041ec7179b3516c1683b3", + "file": "api/src/main/java/com/cloud/vm/NicProfile.java", + "id": "sha256:f7b64de19f8747ae1369d9a4f7e44772215eb58e44e041ec7179b3516c1683b3", + "identityCandidates": 1, + "label": "NicProfile", + "line": 31, + "rank": 39, + "sourceAnchorMatches": true + }, + { + "degree": 545, + "degreeMatches": true, + "expectedDegree": 545, + "explicitId": "sha256:40704b0381a67c6c7bc3c209c10293f49e830a125a67c8bf8bd77f50a11cba32", + "file": "engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java", + "id": "sha256:40704b0381a67c6c7bc3c209c10293f49e830a125a67c8bf8bd77f50a11cba32", + "identityCandidates": 1, + "label": "DataStore", + "line": 22, + "rank": 40, + "sourceAnchorMatches": true + }, + { + "degree": 537, + "degreeMatches": true, + "expectedDegree": 537, + "explicitId": "sha256:1d7635266a1a15998167f6e7d6fcbbdbcd99f3d95173732f7ad01117f2fcf95d", + "file": "systemvm/agent/js/ajaxviewer.js", + "id": "sha256:1d7635266a1a15998167f6e7d6fcbbdbcd99f3d95173732f7ad01117f2fcf95d", + "identityCandidates": 1, + "label": "ajaxviewer", + "line": 1, + "rank": 41, + "sourceAnchorMatches": true + }, + { + "degree": 526, + "degreeMatches": true, + "expectedDegree": 526, + "explicitId": "sha256:21ff6c88d93534072ec7d0b1ca133f1ffcaeade5d6679cd02684dfe4587f77a3", + "file": "api/src/main/java/com/cloud/agent/api/Answer.java", + "id": "sha256:21ff6c88d93534072ec7d0b1ca133f1ffcaeade5d6679cd02684dfe4587f77a3", + "identityCandidates": 1, + "label": ".getResult()", + "line": 42, + "rank": 42, + "sourceAnchorMatches": true + }, + { + "degree": 521, + "degreeMatches": true, + "expectedDegree": 521, + "explicitId": "sha256:fbf0db418043d6398967ee1db20335abc5d40ad12c92e2b2cc6d187303bbf107", + "file": "api/src/main/java/org/apache/cloudstack/api/BaseCmd.java", + "id": "sha256:fbf0db418043d6398967ee1db20335abc5d40ad12c92e2b2cc6d187303bbf107", + "identityCandidates": 1, + "label": "BaseCmd", + "line": 85, + "rank": 43, + "sourceAnchorMatches": true + }, + { + "degree": 520, + "degreeMatches": true, + "expectedDegree": 520, + "explicitId": "sha256:af92ff4c586713792244fae3ed5479b020ac8189de750285ca7a98a552a93ec1", + "file": "ui/scripts/storage.js", + "id": "sha256:af92ff4c586713792244fae3ed5479b020ac8189de750285ca7a98a552a93ec1", + "identityCandidates": 1, + "label": "storage", + "line": 1, + "rank": 44, + "sourceAnchorMatches": true + }, + { + "degree": 518, + "degreeMatches": true, + "expectedDegree": 518, + "explicitId": "sha256:933b27661896271af12acc470bc715ceabf8d18c89fe75f5a45dd397436af1d9", + "file": "framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java", + "id": "sha256:933b27661896271af12acc470bc715ceabf8d18c89fe75f5a45dd397436af1d9", + "identityCandidates": 1, + "label": "ConfigKey", + "line": 31, + "rank": 45, + "sourceAnchorMatches": true + }, + { + "degree": 509, + "degreeMatches": true, + "expectedDegree": 509, + "explicitId": "sha256:9197a4f3db20fc6356e53d6e1ee2b8e6475a8468f425d0511b4b70134da8cda6", + "file": "api/src/main/java/org/apache/cloudstack/api/ApiErrorCode.java", + "id": "sha256:9197a4f3db20fc6356e53d6e1ee2b8e6475a8468f425d0511b4b70134da8cda6", + "identityCandidates": 1, + "label": "ApiErrorCode", + "line": 23, + "rank": 46, + "sourceAnchorMatches": true + }, + { + "degree": 506, + "degreeMatches": true, + "expectedDegree": 506, + "explicitId": "sha256:2f4d2d5e48388d3698b015fe888732f8fd84dcff7a1f5fc3cc5219311231c0f6", + "file": "api/src/main/java/com/cloud/vm/VirtualMachine.java", + "id": "sha256:2f4d2d5e48388d3698b015fe888732f8fd84dcff7a1f5fc3cc5219311231c0f6", + "identityCandidates": 1, + "label": "VirtualMachine", + "line": 36, + "rank": 47, + "sourceAnchorMatches": true + }, + { + "degree": 505, + "degreeMatches": true, + "expectedDegree": 505, + "explicitId": "sha256:2ed7f5aace287679efe47403d9d61c57a9562e436319d2c27a776d0a87dd96d7", + "file": "api/src/main/java/com/cloud/exception/ResourceUnavailableException.java", + "id": "sha256:2ed7f5aace287679efe47403d9d61c57a9562e436319d2c27a776d0a87dd96d7", + "identityCandidates": 1, + "label": "ResourceUnavailableException", + "line": 21, + "rank": 48, + "sourceAnchorMatches": true + }, + { + "degree": 504, + "degreeMatches": true, + "expectedDegree": 504, + "explicitId": "sha256:353f4ca113c738e9bb88c1ac824bb7abea4625d81d78f91526883cc71e4d7a03", + "file": "api/src/main/java/org/apache/cloudstack/context/CallContext.java", + "id": "sha256:353f4ca113c738e9bb88c1ac824bb7abea4625d81d78f91526883cc71e4d7a03", + "identityCandidates": 1, + "label": "CallContext", + "line": 42, + "rank": 49, + "sourceAnchorMatches": true + }, + { + "degree": 494, + "degreeMatches": true, + "expectedDegree": 494, + "explicitId": "sha256:d57faa2beb351dcd84d28054dea60837fd40033c116880fa44f562a55de29080", + "file": "server/src/main/java/com/cloud/api/ApiDBUtils.java", + "id": "sha256:d57faa2beb351dcd84d28054dea60837fd40033c116880fa44f562a55de29080", + "identityCandidates": 1, + "label": "ApiDBUtils", + "line": 318, + "rank": 50, + "sourceAnchorMatches": true + }, + { + "degree": 490, + "degreeMatches": true, + "expectedDegree": 490, + "explicitId": "sha256:0ae9d940f53705ad60e7093a3828aad76965ad7ef5ce168e06c9cef81a5535c4", + "file": "framework/db/src/main/java/com/cloud/utils/db/SearchCriteria.java", + "id": "sha256:0ae9d940f53705ad60e7093a3828aad76965ad7ef5ce168e06c9cef81a5535c4", + "identityCandidates": 1, + "label": "SearchCriteria", + "line": 33, + "rank": 51, + "sourceAnchorMatches": true + }, + { + "degree": 489, + "degreeMatches": true, + "expectedDegree": 489, + "explicitId": "sha256:c0f02e9d05415b2f8757df800d010adb33e8882b258ad6e86c23a100944ba423", + "file": "api/src/main/java/org/apache/cloudstack/api/InternalIdentity.java", + "id": "sha256:c0f02e9d05415b2f8757df800d010adb33e8882b258ad6e86c23a100944ba423", + "identityCandidates": 1, + "label": "InternalIdentity", + "line": 26, + "rank": 52, + "sourceAnchorMatches": true + }, + { + "degree": 464, + "degreeMatches": true, + "expectedDegree": 464, + "explicitId": "sha256:db1d189495dd40ac4d3702836527c0e6f9429794a6a8b98792710e8a36ad7cdf", + "file": "ui/scripts/sharedFunctions.js", + "id": "sha256:db1d189495dd40ac4d3702836527c0e6f9429794a6a8b98792710e8a36ad7cdf", + "identityCandidates": 1, + "label": "sharedFunctions", + "line": 1, + "rank": 53, + "sourceAnchorMatches": true + }, + { + "degree": 463, + "degreeMatches": true, + "expectedDegree": 463, + "explicitId": "sha256:18201c7e9cf9f42f86178640bd75833c2a133cc4205c866b232500e266cd1645", + "file": "api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java", + "id": "sha256:18201c7e9cf9f42f86178640bd75833c2a133cc4205c866b232500e266cd1645", + "identityCandidates": 1, + "label": "BaseAsyncCmd", + "line": 25, + "rank": 54, + "sourceAnchorMatches": true + }, + { + "degree": 459, + "degreeMatches": true, + "expectedDegree": 459, + "explicitId": "sha256:79ba46da4eb85850bb2bbf4715f932ab4df40367c139b0e45be3f0a9d7e5e020", + "file": "engine/schema/src/main/java/com/cloud/network/dao/NetworkVO.java", + "id": "sha256:79ba46da4eb85850bb2bbf4715f932ab4df40367c139b0e45be3f0a9d7e5e020", + "identityCandidates": 1, + "label": "NetworkVO", + "line": 46, + "rank": 55, + "sourceAnchorMatches": true + }, + { + "degree": 456, + "degreeMatches": true, + "expectedDegree": 456, + "explicitId": "sha256:21f6207563d28461d137d67e34a47288d63ee58bee4baa6432c2475870eefc8e", + "file": "plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java", + "id": "sha256:21f6207563d28461d137d67e34a47288d63ee58bee4baa6432c2475870eefc8e", + "identityCandidates": 1, + "label": "LibvirtComputingResource", + "line": 198, + "rank": 56, + "sourceAnchorMatches": true + }, + { + "degree": 456, + "degreeMatches": true, + "expectedDegree": 456, + "explicitId": "sha256:f7adb25df812b0cc8b661075ffdd9b6c0f31c854f2f1c75a51b47ad6efef8ba9", + "file": "ui/scripts/accounts.js", + "id": "sha256:f7adb25df812b0cc8b661075ffdd9b6c0f31c854f2f1c75a51b47ad6efef8ba9", + "identityCandidates": 1, + "label": "accounts", + "line": 1, + "rank": 57, + "sourceAnchorMatches": true + }, + { + "degree": 447, + "degreeMatches": true, + "expectedDegree": 447, + "explicitId": "sha256:98215871f47ebd9d0a71641dac7402153fe97d2b815d9a9566606ea0836972ca", + "file": "framework/config/src/main/java/org/apache/cloudstack/framework/config/dao/ConfigurationDao.java", + "id": "sha256:98215871f47ebd9d0a71641dac7402153fe97d2b815d9a9566606ea0836972ca", + "identityCandidates": 1, + "label": "ConfigurationDao", + "line": 25, + "rank": 58, + "sourceAnchorMatches": true + }, + { + "degree": 442, + "degreeMatches": true, + "expectedDegree": 442, + "explicitId": "sha256:3d0c43b59cb417641c8f430197ff2057b21e31aeb94c5e5141567c82338778ed", + "file": "tools/ngui/static/bootstrap/js/bootstrap.min.js", + "id": "sha256:3d0c43b59cb417641c8f430197ff2057b21e31aeb94c5e5141567c82338778ed", + "identityCandidates": 1, + "label": "bootstrap.min", + "line": 1, + "rank": 59, + "sourceAnchorMatches": true + }, + { + "degree": 442, + "degreeMatches": true, + "expectedDegree": 442, + "explicitId": "sha256:8faf6e13ddc0024965f440fa93ab81b9bdcbbaca6aaa0af36c5a697a67e4cef0", + "file": "engine/schema/src/main/java/com/cloud/host/dao/HostDao.java", + "id": "sha256:8faf6e13ddc0024965f440fa93ab81b9bdcbbaca6aaa0af36c5a697a67e4cef0", + "identityCandidates": 1, + "label": "HostDao", + "line": 37, + "rank": 60, + "sourceAnchorMatches": true + }, + { + "degree": 437, + "degreeMatches": true, + "expectedDegree": 437, + "explicitId": "sha256:556308c59cf4f77ee190f0bb1b1dfb87b040593e5e200648e3937498dcb830d9", + "file": "services/console-proxy/rdpconsole/src/main/java/streamer/ByteBuffer.java", + "id": "sha256:556308c59cf4f77ee190f0bb1b1dfb87b040593e5e200648e3937498dcb830d9", + "identityCandidates": 1, + "label": "ByteBuffer", + "line": 29, + "rank": 61, + "sourceAnchorMatches": true + }, + { + "degree": 436, + "degreeMatches": true, + "expectedDegree": 436, + "explicitId": "sha256:7be03978054b8014d10c2aae1fff9d6fbae51f554e759fc9d52d4e5e8160bd94", + "file": "api/src/main/java/com/cloud/deploy/DeployDestination.java", + "id": "sha256:7be03978054b8014d10c2aae1fff9d6fbae51f554e759fc9d52d4e5e8160bd94", + "identityCandidates": 1, + "label": "DeployDestination", + "line": 30, + "rank": 62, + "sourceAnchorMatches": true + }, + { + "degree": 435, + "degreeMatches": true, + "expectedDegree": 435, + "explicitId": "sha256:981d059adb8345ef85859f2eff37f7eaf9c740d8f274611c24e93c04f9761f8f", + "file": "api/src/main/java/com/cloud/vm/ReservationContext.java", + "id": "sha256:981d059adb8345ef85859f2eff37f7eaf9c740d8f274611c24e93c04f9761f8f", + "identityCandidates": 1, + "label": "ReservationContext", + "line": 28, + "rank": 63, + "sourceAnchorMatches": true + }, + { + "degree": 434, + "degreeMatches": true, + "expectedDegree": 434, + "explicitId": "sha256:f0272e08f8faa43a509719e7de9501b28467d6900c98cb2327a4c5e3656d8242", + "file": "api/src/main/java/org/apache/cloudstack/api/response/ListResponse.java", + "id": "sha256:f0272e08f8faa43a509719e7de9501b28467d6900c98cb2327a4c5e3656d8242", + "identityCandidates": 1, + "label": "ListResponse", + "line": 24, + "rank": 64, + "sourceAnchorMatches": true + }, + { + "degree": 431, + "degreeMatches": true, + "expectedDegree": 431, + "explicitId": "sha256:5833adad689f6c0e3a8c3acc6067edf49b75d122e4da180f72a41fd1fc3987cc", + "file": "api/src/main/java/org/apache/cloudstack/api/BaseResponse.java", + "id": "sha256:5833adad689f6c0e3a8c3acc6067edf49b75d122e4da180f72a41fd1fc3987cc", + "identityCandidates": 1, + "label": "BaseResponse", + "line": 23, + "rank": 65, + "sourceAnchorMatches": true + }, + { + "degree": 422, + "degreeMatches": true, + "expectedDegree": 422, + "explicitId": "sha256:20972045c082fc34317db5c524392fbe3acd83b1df6bb346565be74a627ab58c", + "file": "server/src/main/java/com/cloud/configuration/Config.java", + "id": "sha256:20972045c082fc34317db5c524392fbe3acd83b1df6bb346565be74a627ab58c", + "identityCandidates": 1, + "label": "Config", + "line": 45, + "rank": 66, + "sourceAnchorMatches": true + }, + { + "degree": 422, + "degreeMatches": true, + "expectedDegree": 422, + "explicitId": "sha256:baacd29554cc9d1500be8659b6c0b274f1bc9d091fe77809e6996fe0224ae768", + "file": "tools/ngui/static/bootstrap/js/bootstrap.js", + "id": "sha256:baacd29554cc9d1500be8659b6c0b274f1bc9d091fe77809e6996fe0224ae768", + "identityCandidates": 1, + "label": "bootstrap", + "line": 1, + "rank": 67, + "sourceAnchorMatches": true + }, + { + "degree": 403, + "degreeMatches": true, + "expectedDegree": 403, + "explicitId": "sha256:f0f2ef902a83a335e0235910beaf3984af13f8d4a4a7f0fe2ffeddbbbe585883", + "file": "plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java", + "id": "sha256:f0f2ef902a83a335e0235910beaf3984af13f8d4a4a7f0fe2ffeddbbbe585883", + "identityCandidates": 1, + "label": "CitrixResourceBase", + "line": 173, + "rank": 68, + "sourceAnchorMatches": true + }, + { + "degree": 398, + "degreeMatches": true, + "expectedDegree": 398, + "explicitId": "sha256:d07ab21e064202572dbddd6a6a8675015466c5d348882fc09a5dbde0ab74242d", + "file": "engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java", + "id": "sha256:d07ab21e064202572dbddd6a6a8675015466c5d348882fc09a5dbde0ab74242d", + "identityCandidates": 1, + "label": "VMInstanceVO", + "line": 48, + "rank": 69, + "sourceAnchorMatches": true + }, + { + "degree": 378, + "degreeMatches": true, + "expectedDegree": 378, + "explicitId": "sha256:0198a39e833e2795907caa6d0a5ea328e29cb959bf82881bcc4ea1b6d2eab68e", + "file": "api/src/main/java/com/cloud/offering/NetworkOffering.java", + "id": "sha256:0198a39e833e2795907caa6d0a5ea328e29cb959bf82881bcc4ea1b6d2eab68e", + "identityCandidates": 1, + "label": "NetworkOffering", + "line": 30, + "rank": 70, + "sourceAnchorMatches": true + }, + { + "degree": 373, + "degreeMatches": true, + "expectedDegree": 373, + "explicitId": "sha256:294d8990508f9c5341a84c3de349d6cabf826c3ed1af3bb40341e46b728170c4", + "file": "core/src/main/java/com/cloud/resource/ResourceWrapper.java", + "id": "sha256:294d8990508f9c5341a84c3de349d6cabf826c3ed1af3bb40341e46b728170c4", + "identityCandidates": 1, + "label": "ResourceWrapper", + "line": 29, + "rank": 71, + "sourceAnchorMatches": true + }, + { + "degree": 366, + "degreeMatches": true, + "expectedDegree": 366, + "explicitId": "sha256:8bc9c43ea213e01fd83fe5a07b378d3a3e99157897deb9e76abff0f367b955bd", + "file": "engine/components-api/src/main/java/com/cloud/agent/AgentManager.java", + "id": "sha256:8bc9c43ea213e01fd83fe5a07b378d3a3e99157897deb9e76abff0f367b955bd", + "identityCandidates": 1, + "label": "AgentManager", + "line": 37, + "rank": 72, + "sourceAnchorMatches": true + }, + { + "degree": 358, + "degreeMatches": true, + "expectedDegree": 358, + "explicitId": "sha256:5702f1c2714190594468642d9275cce5562320f29dbf33e8d9d02c1a67f632ef", + "file": "core/src/main/java/com/cloud/resource/CommandWrapper.java", + "id": "sha256:5702f1c2714190594468642d9275cce5562320f29dbf33e8d9d02c1a67f632ef", + "identityCandidates": 1, + "label": "CommandWrapper", + "line": 25, + "rank": 73, + "sourceAnchorMatches": true + }, + { + "degree": 357, + "degreeMatches": true, + "expectedDegree": 357, + "explicitId": "sha256:eff992aae2f3de5d7a20c97fbcfafe3ae8c93924e5b1bce5d12020058598aacd", + "file": "core/src/main/java/com/cloud/agent/api/StartupCommand.java", + "id": "sha256:eff992aae2f3de5d7a20c97fbcfafe3ae8c93924e5b1bce5d12020058598aacd", + "identityCandidates": 1, + "label": "StartupCommand", + "line": 24, + "rank": 74, + "sourceAnchorMatches": true + }, + { + "degree": 354, + "degreeMatches": true, + "expectedDegree": 354, + "explicitId": "sha256:69e0fdd3c35a8fd80aa330f916e466e5a245a0538ad5dc52879bb4593bf8aef0", + "file": "api/src/main/java/com/cloud/network/NetworkModel.java", + "id": "sha256:69e0fdd3c35a8fd80aa330f916e466e5a245a0538ad5dc52879bb4593bf8aef0", + "identityCandidates": 1, + "label": "NetworkModel", + "line": 52, + "rank": 75, + "sourceAnchorMatches": true + }, + { + "degree": 352, + "degreeMatches": true, + "expectedDegree": 352, + "explicitId": "sha256:7a3cbed27a8b0fdb2801dd6ddd0d9252dd4928cf62484a85fc08593a63b8194d", + "file": "api/src/main/java/com/cloud/exception/ConcurrentOperationException.java", + "id": "sha256:7a3cbed27a8b0fdb2801dd6ddd0d9252dd4928cf62484a85fc08593a63b8194d", + "identityCandidates": 1, + "label": "ConcurrentOperationException", + "line": 22, + "rank": 76, + "sourceAnchorMatches": true + }, + { + "degree": 350, + "degreeMatches": true, + "expectedDegree": 350, + "explicitId": "sha256:32e7e7d94903474ac973d337975bf77f2f12e1da491d505354a8ca776a4893ca", + "file": "api/src/main/java/com/cloud/event/ActionEvent.java", + "id": "sha256:32e7e7d94903474ac973d337975bf77f2f12e1da491d505354a8ca776a4893ca", + "identityCandidates": 1, + "label": "ActionEvent", + "line": 26, + "rank": 77, + "sourceAnchorMatches": true + }, + { + "degree": 349, + "degreeMatches": true, + "expectedDegree": 349, + "explicitId": "sha256:44a771e9d6c6206dabe20ad6dd16e37424b92106a9ccdd2359a2db92713d55ff", + "file": "engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDao.java", + "id": "sha256:44a771e9d6c6206dabe20ad6dd16e37424b92106a9ccdd2359a2db92713d55ff", + "identityCandidates": 1, + "label": "DataCenterDao", + "line": 26, + "rank": 78, + "sourceAnchorMatches": true + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "explicitId": "sha256:c15a21582ec895486816097c3599a4b331ae694773e6d19988e95da2c6f8a8cc", + "file": "api/src/main/java/com/cloud/storage/StoragePool.java", + "id": "sha256:c15a21582ec895486816097c3599a4b331ae694773e6d19988e95da2c6f8a8cc", + "identityCandidates": 1, + "label": "StoragePool", + "line": 27, + "rank": 79, + "sourceAnchorMatches": true + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "explicitId": "sha256:eb851ce4a8f9afb1295173bf873a1500948dc753b67315a25ff0ebca26f9c21e", + "file": "utils/src/main/java/com/cloud/utils/Pair.java", + "id": "sha256:eb851ce4a8f9afb1295173bf873a1500948dc753b67315a25ff0ebca26f9c21e", + "identityCandidates": 1, + "label": ".first()", + "line": 38, + "rank": 80, + "sourceAnchorMatches": true + }, + { + "degree": 336, + "degreeMatches": true, + "expectedDegree": 336, + "explicitId": "sha256:33998566769537dad04ce6725d0e8a562614f6cef98e854292ebd2eafb80bbce", + "file": "engine/schema/src/main/java/com/cloud/user/AccountVO.java", + "id": "sha256:33998566769537dad04ce6725d0e8a562614f6cef98e854292ebd2eafb80bbce", + "identityCandidates": 1, + "label": "AccountVO", + "line": 33, + "rank": 81, + "sourceAnchorMatches": true + }, + { + "degree": 333, + "degreeMatches": true, + "expectedDegree": 333, + "explicitId": "sha256:3b5be2961ed450d7208d1654d24276b40da3c35d4d01fdb8ab31280e3598fca9", + "file": "ui/lib/jquery.validate.js", + "id": "sha256:3b5be2961ed450d7208d1654d24276b40da3c35d4d01fdb8ab31280e3598fca9", + "identityCandidates": 1, + "label": "jquery.validate", + "line": 1, + "rank": 82, + "sourceAnchorMatches": true + }, + { + "degree": 333, + "degreeMatches": true, + "expectedDegree": 333, + "explicitId": "sha256:502ae1e063bf5a3e1eff2b5b71b709f102b1272da14edf7ac6743d59df273fe9", + "file": "framework/db/src/main/java/com/cloud/utils/db/Filter.java", + "id": "sha256:502ae1e063bf5a3e1eff2b5b71b709f102b1272da14edf7ac6743d59df273fe9", + "identityCandidates": 1, + "label": "Filter", + "line": 36, + "rank": 83, + "sourceAnchorMatches": true + }, + { + "degree": 330, + "degreeMatches": true, + "expectedDegree": 330, + "explicitId": "sha256:10e2e80ddb963db6f803b02411636819efcc1bff86264eb6251c4d7c27cf8d0b", + "file": "engine/schema/src/main/java/com/cloud/storage/VolumeVO.java", + "id": "sha256:10e2e80ddb963db6f803b02411636819efcc1bff86264eb6251c4d7c27cf8d0b", + "identityCandidates": 1, + "label": "VolumeVO", + "line": 40, + "rank": 84, + "sourceAnchorMatches": true + }, + { + "degree": 329, + "degreeMatches": true, + "expectedDegree": 329, + "explicitId": "sha256:7a79cd9f0d21c2d649f3f2a8f599596873024114cc81fb02d477ac955277063d", + "file": "ui/scripts/projects.js", + "id": "sha256:7a79cd9f0d21c2d649f3f2a8f599596873024114cc81fb02d477ac955277063d", + "identityCandidates": 1, + "label": "projects", + "line": 1, + "rank": 85, + "sourceAnchorMatches": true + }, + { + "degree": 324, + "degreeMatches": true, + "expectedDegree": 324, + "explicitId": "sha256:0468ff687c98aaae88ba12e1fac3b4d6b6bc7c0c65b34070430f45159e899f2b", + "file": "engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java", + "id": "sha256:0468ff687c98aaae88ba12e1fac3b4d6b6bc7c0c65b34070430f45159e899f2b", + "identityCandidates": 1, + "label": "DataObject", + "line": 25, + "rank": 86, + "sourceAnchorMatches": true + }, + { + "degree": 319, + "degreeMatches": true, + "expectedDegree": 319, + "explicitId": "sha256:59e274929092b714c8c19a1d109b88148387c4f693b85898e7960699df105725", + "file": "server/src/main/java/com/cloud/user/AccountManager.java", + "id": "sha256:59e274929092b714c8c19a1d109b88148387c4f693b85898e7960699df105725", + "identityCandidates": 1, + "label": "AccountManager", + "line": 44, + "rank": 87, + "sourceAnchorMatches": true + }, + { + "degree": 319, + "degreeMatches": true, + "expectedDegree": 319, + "explicitId": "sha256:a8f7679e45858762cd10b2796d5236f35d41a15e417e83434891c5fdcdd77466", + "file": "engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java", + "id": "sha256:a8f7679e45858762cd10b2796d5236f35d41a15e417e83434891c5fdcdd77466", + "identityCandidates": 1, + "label": "VMTemplateVO", + "line": 40, + "rank": 88, + "sourceAnchorMatches": true + }, + { + "degree": 318, + "degreeMatches": true, + "expectedDegree": 318, + "explicitId": "sha256:98aac0dac14671d4064646fcf5a844cbbde3b9da98b2e1e84baeab0e5d33c339", + "file": "api/src/main/java/org/apache/cloudstack/api/response/SuccessResponse.java", + "id": "sha256:98aac0dac14671d4064646fcf5a844cbbde3b9da98b2e1e84baeab0e5d33c339", + "identityCandidates": 1, + "label": "SuccessResponse", + "line": 25, + "rank": 89, + "sourceAnchorMatches": true + }, + { + "degree": 317, + "degreeMatches": true, + "expectedDegree": 317, + "explicitId": "sha256:26882507e5f5d8057986b3854f81eb79a6fef81c94dc7c726f2e40119f28e418", + "file": "api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java", + "id": "sha256:26882507e5f5d8057986b3854f81eb79a6fef81c94dc7c726f2e40119f28e418", + "identityCandidates": 1, + "label": "ApiCommandJobType", + "line": 19, + "rank": 90, + "sourceAnchorMatches": true + }, + { + "degree": 312, + "degreeMatches": true, + "expectedDegree": 312, + "explicitId": "sha256:88cd2c67e4d8d4b7561861d11ead74870f367cad2e520c1ff3bcebde23a4d068", + "file": "api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java", + "id": "sha256:88cd2c67e4d8d4b7561861d11ead74870f367cad2e520c1ff3bcebde23a4d068", + "identityCandidates": 1, + "label": "UserVmResponse", + "line": 36, + "rank": 91, + "sourceAnchorMatches": true + }, + { + "degree": 304, + "degreeMatches": true, + "expectedDegree": 304, + "explicitId": "sha256:e32d96028e5d1f3d4608a8f1a2c75e1a289f9825088f116e716d42d196578d07", + "file": "engine/schema/src/main/java/com/cloud/network/dao/NetworkDao.java", + "id": "sha256:e32d96028e5d1f3d4608a8f1a2c75e1a289f9825088f116e716d42d196578d07", + "identityCandidates": 1, + "label": "NetworkDao", + "line": 30, + "rank": 92, + "sourceAnchorMatches": true + }, + { + "degree": 303, + "degreeMatches": true, + "expectedDegree": 303, + "explicitId": "sha256:31d2d0cdc8750e9e44261c0f8ebe9cf9192797db3411f8fd5dbce4f8950dbd8f", + "file": "api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java", + "id": "sha256:31d2d0cdc8750e9e44261c0f8ebe9cf9192797db3411f8fd5dbce4f8950dbd8f", + "identityCandidates": 1, + "label": "VirtualMachineTO", + "line": 27, + "rank": 93, + "sourceAnchorMatches": true + }, + { + "degree": 302, + "degreeMatches": true, + "expectedDegree": 302, + "explicitId": "sha256:e0fdf3fd6f6890a4e1735792162028f5870afba2db81173ec78e51aa3366bc9a", + "file": "ui/lib/qunit/qunit.js", + "id": "sha256:e0fdf3fd6f6890a4e1735792162028f5870afba2db81173ec78e51aa3366bc9a", + "identityCandidates": 1, + "label": "qunit", + "line": 1, + "rank": 94, + "sourceAnchorMatches": true + }, + { + "degree": 301, + "degreeMatches": true, + "expectedDegree": 301, + "explicitId": "sha256:3c3c831c3f6237fab7f94c44e4e552f0eed9dbb3ac89b4f69dff03c58749f15c", + "file": "utils/src/main/java/com/cloud/utils/Pair.java", + "id": "sha256:3c3c831c3f6237fab7f94c44e4e552f0eed9dbb3ac89b4f69dff03c58749f15c", + "identityCandidates": 1, + "label": ".second()", + "line": 42, + "rank": 95, + "sourceAnchorMatches": true + }, + { + "degree": 300, + "degreeMatches": true, + "expectedDegree": 300, + "explicitId": "sha256:22e9b7f98ad424e02ec7fc30c1e5dbd4133d8fae9c13dc008fda0c44a4041747", + "file": "engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java", + "id": "sha256:22e9b7f98ad424e02ec7fc30c1e5dbd4133d8fae9c13dc008fda0c44a4041747", + "identityCandidates": 1, + "label": "VMInstanceDao", + "line": 34, + "rank": 96, + "sourceAnchorMatches": true + }, + { + "degree": 300, + "degreeMatches": true, + "expectedDegree": 300, + "explicitId": "sha256:d179f9cd5d77e95070fad023a5d5892967cf2536050a517a675c91646be055a1", + "file": "framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java", + "id": "sha256:d179f9cd5d77e95070fad023a5d5892967cf2536050a517a675c91646be055a1", + "identityCandidates": 1, + "label": "TransactionLegacy", + "line": 65, + "rank": 97, + "sourceAnchorMatches": true + }, + { + "degree": 298, + "degreeMatches": true, + "expectedDegree": 298, + "explicitId": "sha256:47f0b827831b89461f03228e939d787748c50f64262587383c25697939f1dda7", + "file": "api/src/main/java/com/cloud/exception/InsufficientCapacityException.java", + "id": "sha256:47f0b827831b89461f03228e939d787748c50f64262587383c25697939f1dda7", + "identityCandidates": 1, + "label": "InsufficientCapacityException", + "line": 25, + "rank": 98, + "sourceAnchorMatches": true + }, + { + "degree": 298, + "degreeMatches": true, + "expectedDegree": 298, + "explicitId": "sha256:6ab86b0c97d8987d4a492084a992bbbd59b67b08642f4bbfe1e48ec1e1bfb9a0", + "file": "setup/db/templates.sql", + "id": "sha256:6ab86b0c97d8987d4a492084a992bbbd59b67b08642f4bbfe1e48ec1e1bfb9a0", + "identityCandidates": 1, + "label": "guest_os_hypervisor", + "line": 287, + "rank": 99, + "sourceAnchorMatches": true + }, + { + "degree": 286, + "degreeMatches": true, + "expectedDegree": 286, + "explicitId": "sha256:bed59c92f1328956c5c68bff8ab58b468dec4dedf843b43954e66a2542614961", + "file": "ui/scripts/regions.js", + "id": "sha256:bed59c92f1328956c5c68bff8ab58b468dec4dedf843b43954e66a2542614961", + "identityCandidates": 1, + "label": "regions", + "line": 1, + "rank": 100, + "sourceAnchorMatches": true + } + ], + "matchingDegrees": 100, + "matchingSourceAnchors": 100, + "question": "hubs", + "repository": "apache/cloudstack", + "returned": 100, + "tool": "compass", + "verifiedIdentities": 100 + }, + "graphCounts": { + "edges": 502158, + "nodes": 173689 + }, + "omittedDiagnosticLines": 0, + "repository": "apache/cloudstack", + "secondary": [ + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 75, + "returnedRecordAppearances": 75, + "status": "checked" + }, + "sampleId": 8528735, + "selection": { + "matchedIds": [ + "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d" + ], + "returnedAnchors": [ + { + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "line": 141, + "symbols": [ + "ExternalLoadBalancerDeviceManagerImpl" + ] + } + ], + "selector": "sha256:1613fba326c0d4fab139818f25f68b8d258e6e275c4f458823ce7ec60669756d", + "status": "resolved" + } + }, + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 25, + "returnedRecordAppearances": 25, + "status": "checked" + }, + "sampleId": 8537138, + "selection": { + "matchedIds": [ + "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6" + ], + "returnedAnchors": [ + { + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "line": 24, + "symbols": [ + "HandleConfigDriveIsoCommand" + ] + } + ], + "selector": "sha256:5161c6de87f6130d2843144463ab70a6cd702304343a2cc33a2c45c7dc6234e6", + "status": "resolved" + } + }, + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 36, + "returnedRecordAppearances": 37, + "status": "checked" + }, + "sampleId": 8538037, + "selection": { + "matchedIds": [ + "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819" + ], + "returnedAnchors": [ + { + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "line": 63, + "symbols": [ + "BrocadeVcsApi" + ] + } + ], + "selector": "sha256:fcedee4b5392c934e25aae072af853f9f11da03d48bb1aff45c1a2a10fe71819", + "status": "resolved" + } + }, + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 7, + "returnedRecordAppearances": 7, + "status": "checked" + }, + "sampleId": 8539645, + "selection": { + "matchedIds": [ + "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e" + ], + "returnedAnchors": [ + { + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "id": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "line": 26, + "symbols": [ + "DeploymentPlannersResponse" + ] + } + ], + "selector": "sha256:1d9b7f2bb6ec24833bbc1d91e1223e725c6c5e340941fb132509ee089e496d6e", + "status": "resolved" + } + } + ], + "tool": "compass" + }, + { + "build": { + "exitCode": 0, + "graphBytes": 227334534, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72", + "timedOut": false, + "withinRegisteredGraphBound": true + }, + "captureError": null, + "captureStatus": "completed", + "cases": [ + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl" + ], + "rank": null, + "sampleId": 8528735 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand" + ], + "rank": null, + "sampleId": 8537138 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi" + ], + "rank": null, + "sampleId": 8538037 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse" + ], + "rank": null, + "sampleId": 8539645 + } + ], + "connectivityChecks": [], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + } + }, + "extractionDiagnostics": [ + { + "stream": "stderr", + "text": " warning: skill at /.claude/skills/graphify is from graphify 0.9.30, package is 0.9.67. Run 'graphify install --platform claude' to update it (a plain 'graphify install' refreshes only the detected platform).", + "textTruncated": false + }, + { + "stream": "stderr", + "text": " warning: 119 .sql file(s) contributed nothing to the graph because a dependency is missing: tree_sitter_sql not installed. Install it with: pip install \"graphifyy[sql]\" (#1745)", + "textTruncated": false + }, + { + "stream": "stderr", + "text": " warning: 3 file(s) had syntax errors and may be partially extracted: scripts/vm/hypervisor/xenserver/cloudlog (first error at line 26, no symbols extracted), test/integration/component/test_acl_isolatednetwork.py (first error at line 17, 76 symbol(s) extracted), test/integration/component/test_acl_isolatednetwork_delete.py (first error at line 17, 28 symbol(s) extracted)", + "textTruncated": false + } + ], + "graphConsistency": { + "executionSucceeded": true, + "explicitIdentities": 0, + "hubs": [ + { + "degree": 2273, + "identityCandidates": 3, + "label": "CloudRuntimeException", + "rank": 1 + }, + { + "degree": 1458, + "degreeMatches": true, + "expectedDegree": 1458, + "file": "api/src/main/java/com/cloud/agent/api/Answer.java", + "id": "api_src_main_java_com_cloud_agent_api_answer_answer", + "identityCandidates": 1, + "label": "Answer", + "line": 21, + "rank": 2 + }, + { + "degree": 1332, + "degreeMatches": true, + "expectedDegree": 1332, + "file": "api/src/main/java/org/apache/cloudstack/api/APICommand.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apicommand_apicommand", + "identityCandidates": 1, + "label": "APICommand", + "line": 28, + "rank": 3 + }, + { + "degree": 1293, + "identityCandidates": 9, + "label": "Network", + "rank": 4 + }, + { + "degree": 1149, + "identityCandidates": 10, + "label": "Account", + "rank": 5 + }, + { + "degree": 932, + "identityCandidates": 2, + "label": "cleanup_resources()", + "rank": 6 + }, + { + "degree": 799, + "degreeMatches": true, + "expectedDegree": 799, + "file": "framework/db/src/main/java/com/cloud/utils/db/DB.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_db_db", + "identityCandidates": 1, + "label": "DB", + "line": 40, + "rank": 7 + }, + { + "degree": 798, + "identityCandidates": 2, + "label": "Pair", + "rank": 8 + }, + { + "degree": 780, + "degreeMatches": true, + "expectedDegree": 780, + "file": "api/src/main/java/org/apache/cloudstack/api/ApiConstants.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apiconstants_apiconstants", + "identityCandidates": 1, + "label": "ApiConstants", + "line": 19, + "rank": 9 + }, + { + "degree": 758, + "degreeMatches": true, + "expectedDegree": 758, + "file": "framework/db/src/main/java/com/cloud/utils/db/GenericDao.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_genericdao_genericdao", + "identityCandidates": 1, + "label": "GenericDao", + "line": 30, + "rank": 10 + }, + { + "degree": 711, + "identityCandidates": 8, + "label": "Host", + "rank": 11 + }, + { + "degree": 683, + "identityCandidates": 4, + "label": "Command", + "rank": 12 + }, + { + "degree": 663, + "degreeMatches": true, + "expectedDegree": 663, + "file": "framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_genericdaobase_genericdaobase", + "identityCandidates": 1, + "label": "GenericDaoBase", + "line": 116, + "rank": 13 + }, + { + "degree": 657, + "degreeMatches": true, + "expectedDegree": 657, + "file": "engine/schema/src/main/java/com/cloud/host/HostVO.java", + "id": "engine_schema_src_main_java_com_cloud_host_hostvo_hostvo", + "identityCandidates": 1, + "label": "HostVO", + "line": 47, + "rank": 14 + }, + { + "degree": 639, + "degreeMatches": true, + "expectedDegree": 639, + "file": "api/src/main/java/com/cloud/vm/VirtualMachineProfile.java", + "id": "api_src_main_java_com_cloud_vm_virtualmachineprofile_virtualmachineprofile", + "identityCandidates": 1, + "label": "VirtualMachineProfile", + "line": 35, + "rank": 15 + }, + { + "degree": 587, + "degreeMatches": true, + "expectedDegree": 587, + "file": "api/src/main/java/org/apache/cloudstack/api/Parameter.java", + "id": "api_src_main_java_org_apache_cloudstack_api_parameter_parameter", + "identityCandidates": 1, + "label": "Parameter", + "line": 28, + "rank": 16 + }, + { + "degree": 582, + "degreeMatches": true, + "expectedDegree": 582, + "file": "api/src/main/java/com/cloud/hypervisor/Hypervisor.java", + "id": "api_src_main_java_com_cloud_hypervisor_hypervisor_hypervisortype", + "identityCandidates": 1, + "label": "HypervisorType", + "line": 23, + "rank": 17 + }, + { + "degree": 578, + "identityCandidates": 9, + "label": "VirtualMachine", + "rank": 18 + }, + { + "degree": 560, + "degreeMatches": true, + "expectedDegree": 560, + "file": "framework/db/src/main/java/com/cloud/utils/db/SearchBuilder.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_searchbuilder_searchbuilder", + "identityCandidates": 1, + "label": "SearchBuilder", + "line": 56, + "rank": 19 + }, + { + "degree": 540, + "degreeMatches": true, + "expectedDegree": 540, + "file": "api/src/main/java/org/apache/cloudstack/api/ServerApiException.java", + "id": "api_src_main_java_org_apache_cloudstack_api_serverapiexception_serverapiexception", + "identityCandidates": 1, + "label": "ServerApiException", + "line": 26, + "rank": 20 + }, + { + "degree": 523, + "degreeMatches": true, + "expectedDegree": 523, + "file": "api/src/main/java/com/cloud/vm/NicProfile.java", + "id": "api_src_main_java_com_cloud_vm_nicprofile_nicprofile", + "identityCandidates": 1, + "label": "NicProfile", + "line": 31, + "rank": 21 + }, + { + "degree": 521, + "degreeMatches": true, + "expectedDegree": 521, + "file": "tools/marvin/marvin/cloudstackTestCase.py", + "id": "tools_marvin_marvin_cloudstacktestcase_cloudstacktestcase", + "identityCandidates": 1, + "label": "cloudstackTestCase", + "line": 37, + "rank": 22 + }, + { + "degree": 521, + "degreeMatches": true, + "expectedDegree": 521, + "file": "engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java", + "id": "engine_api_src_main_java_org_apache_cloudstack_engine_subsystem_api_storage_datastore_datastore", + "identityCandidates": 1, + "label": "DataStore", + "line": 22, + "rank": 23 + }, + { + "degree": 512, + "degreeMatches": true, + "expectedDegree": 512, + "file": "api/src/main/java/org/apache/cloudstack/api/BaseCmd.java", + "id": "api_src_main_java_org_apache_cloudstack_api_basecmd_basecmd", + "identityCandidates": 1, + "label": "BaseCmd", + "line": 85, + "rank": 24 + }, + { + "degree": 507, + "degreeMatches": true, + "expectedDegree": 507, + "file": "api/src/main/java/org/apache/cloudstack/api/ApiErrorCode.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apierrorcode_apierrorcode", + "identityCandidates": 1, + "label": "ApiErrorCode", + "line": 23, + "rank": 25 + }, + { + "degree": 505, + "degreeMatches": true, + "expectedDegree": 505, + "file": "api/src/main/java/com/cloud/exception/ResourceUnavailableException.java", + "id": "api_src_main_java_com_cloud_exception_resourceunavailableexception_resourceunavailableexception", + "identityCandidates": 1, + "label": "ResourceUnavailableException", + "line": 21, + "rank": 26 + }, + { + "degree": 499, + "degreeMatches": true, + "expectedDegree": 499, + "file": "api/src/main/java/com/cloud/exception/InvalidParameterValueException.java", + "id": "api_src_main_java_com_cloud_exception_invalidparametervalueexception_invalidparametervalueexception", + "identityCandidates": 1, + "label": "InvalidParameterValueException", + "line": 21, + "rank": 27 + }, + { + "degree": 494, + "identityCandidates": 2, + "label": "get_zone()", + "rank": 28 + }, + { + "degree": 489, + "degreeMatches": true, + "expectedDegree": 489, + "file": "api/src/main/java/org/apache/cloudstack/api/InternalIdentity.java", + "id": "api_src_main_java_org_apache_cloudstack_api_internalidentity_internalidentity", + "identityCandidates": 1, + "label": "InternalIdentity", + "line": 26, + "rank": 29 + }, + { + "degree": 478, + "degreeMatches": true, + "expectedDegree": 478, + "file": "api/src/main/java/org/apache/cloudstack/context/CallContext.java", + "id": "api_src_main_java_org_apache_cloudstack_context_callcontext_callcontext", + "identityCandidates": 1, + "label": "CallContext", + "line": 42, + "rank": 30 + }, + { + "degree": 457, + "degreeMatches": true, + "expectedDegree": 457, + "file": "framework/db/src/main/java/com/cloud/utils/db/SearchCriteria.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_searchcriteria_searchcriteria", + "identityCandidates": 1, + "label": "SearchCriteria", + "line": 33, + "rank": 31 + }, + { + "degree": 455, + "identityCandidates": 3, + "label": "get_domain()", + "rank": 32 + }, + { + "degree": 454, + "identityCandidates": 10, + "label": "Account", + "rank": 33 + }, + { + "degree": 454, + "degreeMatches": true, + "expectedDegree": 454, + "file": "api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java", + "id": "api_src_main_java_org_apache_cloudstack_api_baseasynccmd_baseasynccmd", + "identityCandidates": 1, + "label": "BaseAsyncCmd", + "line": 25, + "rank": 34 + }, + { + "degree": 434, + "degreeMatches": true, + "expectedDegree": 434, + "file": "api/src/main/java/com/cloud/vm/ReservationContext.java", + "id": "api_src_main_java_com_cloud_vm_reservationcontext_reservationcontext", + "identityCandidates": 1, + "label": "ReservationContext", + "line": 28, + "rank": 35 + }, + { + "degree": 434, + "degreeMatches": true, + "expectedDegree": 434, + "file": "api/src/main/java/org/apache/cloudstack/api/BaseResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_baseresponse_baseresponse", + "identityCandidates": 1, + "label": "BaseResponse", + "line": 23, + "rank": 36 + }, + { + "degree": 433, + "identityCandidates": 9, + "label": "VirtualMachine", + "rank": 37 + }, + { + "degree": 431, + "degreeMatches": true, + "expectedDegree": 431, + "file": "api/src/main/java/org/apache/cloudstack/api/response/ListResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_listresponse_listresponse", + "identityCandidates": 1, + "label": "ListResponse", + "line": 24, + "rank": 38 + }, + { + "degree": 415, + "degreeMatches": true, + "expectedDegree": 415, + "file": "plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java", + "id": "plugins_hypervisors_kvm_src_main_java_com_cloud_hypervisor_kvm_resource_libvirtcomputingresource_libvirtcomputingresource", + "identityCandidates": 1, + "label": "LibvirtComputingResource", + "line": 198, + "rank": 39 + }, + { + "degree": 409, + "identityCandidates": 2, + "label": "Config", + "rank": 40 + }, + { + "degree": 408, + "degreeMatches": true, + "expectedDegree": 408, + "file": "engine/schema/src/main/java/com/cloud/host/dao/HostDao.java", + "id": "engine_schema_src_main_java_com_cloud_host_dao_hostdao_hostdao", + "identityCandidates": 1, + "label": "HostDao", + "line": 37, + "rank": 41 + }, + { + "degree": 408, + "degreeMatches": true, + "expectedDegree": 408, + "file": "plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java", + "id": "plugins_hypervisors_xenserver_src_main_java_com_cloud_hypervisor_xenserver_resource_citrixresourcebase_citrixresourcebase", + "identityCandidates": 1, + "label": "CitrixResourceBase", + "line": 173, + "rank": 42 + }, + { + "degree": 406, + "degreeMatches": true, + "expectedDegree": 406, + "file": "api/src/main/java/com/cloud/deploy/DeployDestination.java", + "id": "api_src_main_java_com_cloud_deploy_deploydestination_deploydestination", + "identityCandidates": 1, + "label": "DeployDestination", + "line": 30, + "rank": 43 + }, + { + "degree": 403, + "identityCandidates": 4, + "label": "ServiceOffering", + "rank": 44 + }, + { + "degree": 400, + "degreeMatches": true, + "expectedDegree": 400, + "file": "tools/marvin/marvin/lib/utils.py", + "id": "tools_marvin_marvin_lib_utils_validatelist", + "identityCandidates": 1, + "label": "validateList()", + "line": 386, + "rank": 45 + }, + { + "degree": 390, + "degreeMatches": true, + "expectedDegree": 390, + "file": "framework/config/src/main/java/org/apache/cloudstack/framework/config/dao/ConfigurationDao.java", + "id": "framework_config_src_main_java_org_apache_cloudstack_framework_config_dao_configurationdao_configurationdao", + "identityCandidates": 1, + "label": "ConfigurationDao", + "line": 25, + "rank": 46 + }, + { + "degree": 382, + "identityCandidates": 2, + "label": "get_template()", + "rank": 47 + }, + { + "degree": 379, + "degreeMatches": true, + "expectedDegree": 379, + "file": "server/src/main/java/com/cloud/api/ApiDBUtils.java", + "id": "server_src_main_java_com_cloud_api_apidbutils_apidbutils", + "identityCandidates": 1, + "label": "ApiDBUtils", + "line": 318, + "rank": 48 + }, + { + "degree": 376, + "degreeMatches": true, + "expectedDegree": 376, + "file": "core/src/main/java/com/cloud/resource/ResourceWrapper.java", + "id": "core_src_main_java_com_cloud_resource_resourcewrapper_resourcewrapper", + "identityCandidates": 1, + "label": "ResourceWrapper", + "line": 29, + "rank": 49 + }, + { + "degree": 359, + "identityCandidates": 6, + "label": "Service", + "rank": 50 + }, + { + "degree": 354, + "identityCandidates": 3, + "label": "NetworkOffering", + "rank": 51 + }, + { + "degree": 353, + "degreeMatches": true, + "expectedDegree": 353, + "file": "core/src/main/java/com/cloud/resource/CommandWrapper.java", + "id": "core_src_main_java_com_cloud_resource_commandwrapper_commandwrapper", + "identityCandidates": 1, + "label": "CommandWrapper", + "line": 25, + "rank": 52 + }, + { + "degree": 352, + "degreeMatches": true, + "expectedDegree": 352, + "file": "engine/schema/src/main/java/com/cloud/network/dao/NetworkVO.java", + "id": "engine_schema_src_main_java_com_cloud_network_dao_networkvo_networkvo", + "identityCandidates": 1, + "label": "NetworkVO", + "line": 46, + "rank": 53 + }, + { + "degree": 345, + "degreeMatches": true, + "expectedDegree": 345, + "file": "api/src/main/java/com/cloud/event/EventTypes.java", + "id": "api_src_main_java_com_cloud_event_eventtypes_eventtypes", + "identityCandidates": 1, + "label": "EventTypes", + "line": 79, + "rank": 54 + }, + { + "degree": 340, + "degreeMatches": true, + "expectedDegree": 340, + "file": "services/console-proxy/rdpconsole/src/main/java/streamer/ByteBuffer.java", + "id": "services_console_proxy_rdpconsole_src_main_java_streamer_bytebuffer_bytebuffer", + "identityCandidates": 1, + "label": "ByteBuffer", + "line": 29, + "rank": 55 + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "file": "api/src/main/java/com/cloud/event/ActionEvent.java", + "id": "api_src_main_java_com_cloud_event_actionevent_actionevent", + "identityCandidates": 1, + "label": "ActionEvent", + "line": 26, + "rank": 56 + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "file": "engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java", + "id": "engine_schema_src_main_java_com_cloud_vm_vminstancevo_vminstancevo", + "identityCandidates": 1, + "label": "VMInstanceVO", + "line": 48, + "rank": 57 + }, + { + "degree": 336, + "degreeMatches": true, + "expectedDegree": 336, + "file": "engine/components-api/src/main/java/com/cloud/agent/AgentManager.java", + "id": "engine_components_api_src_main_java_com_cloud_agent_agentmanager_agentmanager", + "identityCandidates": 1, + "label": "AgentManager", + "line": 37, + "rank": 58 + }, + { + "degree": 329, + "degreeMatches": true, + "expectedDegree": 329, + "file": "core/src/main/java/com/cloud/agent/api/StartupCommand.java", + "id": "core_src_main_java_com_cloud_agent_api_startupcommand_startupcommand", + "identityCandidates": 1, + "label": "StartupCommand", + "line": 24, + "rank": 59 + }, + { + "degree": 329, + "degreeMatches": true, + "expectedDegree": 329, + "file": "api/src/main/java/com/cloud/exception/ConcurrentOperationException.java", + "id": "api_src_main_java_com_cloud_exception_concurrentoperationexception_concurrentoperationexception", + "identityCandidates": 1, + "label": "ConcurrentOperationException", + "line": 22, + "rank": 60 + }, + { + "degree": 321, + "degreeMatches": true, + "expectedDegree": 321, + "file": "engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDao.java", + "id": "engine_schema_src_main_java_com_cloud_dc_dao_datacenterdao_datacenterdao", + "identityCandidates": 1, + "label": "DataCenterDao", + "line": 26, + "rank": 61 + }, + { + "degree": 321, + "identityCandidates": 5, + "label": "StoragePool", + "rank": 62 + }, + { + "degree": 317, + "degreeMatches": true, + "expectedDegree": 317, + "file": "api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java", + "id": "api_src_main_java_org_apache_cloudstack_api_apicommandjobtype_apicommandjobtype", + "identityCandidates": 1, + "label": "ApiCommandJobType", + "line": 19, + "rank": 63 + }, + { + "degree": 316, + "degreeMatches": true, + "expectedDegree": 316, + "file": "api/src/main/java/org/apache/cloudstack/api/response/SuccessResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_successresponse_successresponse", + "identityCandidates": 1, + "label": "SuccessResponse", + "line": 25, + "rank": 64 + }, + { + "degree": 313, + "degreeMatches": true, + "expectedDegree": 313, + "file": "api/src/main/java/com/cloud/network/NetworkModel.java", + "id": "api_src_main_java_com_cloud_network_networkmodel_networkmodel", + "identityCandidates": 1, + "label": "NetworkModel", + "line": 52, + "rank": 65 + }, + { + "degree": 307, + "degreeMatches": true, + "expectedDegree": 307, + "file": "engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java", + "id": "engine_api_src_main_java_org_apache_cloudstack_engine_subsystem_api_storage_dataobject_dataobject", + "identityCandidates": 1, + "label": "DataObject", + "line": 25, + "rank": 66 + }, + { + "degree": 294, + "identityCandidates": 2, + "label": "InsufficientCapacityException", + "rank": 67 + }, + { + "degree": 292, + "degreeMatches": true, + "expectedDegree": 292, + "file": "api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_uservmresponse_uservmresponse", + "identityCandidates": 1, + "label": "UserVmResponse", + "line": 36, + "rank": 68 + }, + { + "degree": 289, + "identityCandidates": 18, + "label": "TrafficType", + "rank": 69 + }, + { + "degree": 286, + "degreeMatches": true, + "expectedDegree": 286, + "file": "engine/schema/src/main/java/com/cloud/user/AccountVO.java", + "id": "engine_schema_src_main_java_com_cloud_user_accountvo_accountvo", + "identityCandidates": 1, + "label": "AccountVO", + "line": 33, + "rank": 70 + }, + { + "degree": 285, + "degreeMatches": true, + "expectedDegree": 285, + "file": "server/src/main/java/com/cloud/user/AccountManager.java", + "id": "server_src_main_java_com_cloud_user_accountmanager_accountmanager", + "identityCandidates": 1, + "label": "AccountManager", + "line": 44, + "rank": 71 + }, + { + "degree": 280, + "degreeMatches": true, + "expectedDegree": 280, + "file": "engine/schema/src/main/java/com/cloud/network/dao/NetworkDao.java", + "id": "engine_schema_src_main_java_com_cloud_network_dao_networkdao_networkdao", + "identityCandidates": 1, + "label": "NetworkDao", + "line": 30, + "rank": 72 + }, + { + "degree": 278, + "degreeMatches": true, + "expectedDegree": 278, + "file": "engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java", + "id": "engine_schema_src_main_java_com_cloud_vm_dao_vminstancedao_vminstancedao", + "identityCandidates": 1, + "label": "VMInstanceDao", + "line": 34, + "rank": 73 + }, + { + "degree": 275, + "identityCandidates": 7, + "label": "Volume", + "rank": 74 + }, + { + "degree": 272, + "degreeMatches": true, + "expectedDegree": 272, + "file": "engine/schema/src/main/java/com/cloud/storage/VolumeVO.java", + "id": "engine_schema_src_main_java_com_cloud_storage_volumevo_volumevo", + "identityCandidates": 1, + "label": "VolumeVO", + "line": 40, + "rank": 75 + }, + { + "degree": 266, + "degreeMatches": true, + "expectedDegree": 266, + "file": "plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/IntegrationTestConfiguration.java", + "id": "plugins_network_elements_juniper_contrail_src_test_java_org_apache_cloudstack_network_contrail_management_integrationtestconfiguration_integrationtestconfiguration", + "identityCandidates": 1, + "label": "IntegrationTestConfiguration", + "line": 304, + "rank": 76 + }, + { + "degree": 264, + "degreeMatches": true, + "expectedDegree": 264, + "file": "utils/src/main/java/com/cloud/utils/component/ManagerBase.java", + "id": "utils_src_main_java_com_cloud_utils_component_managerbase_managerbase", + "identityCandidates": 1, + "label": "ManagerBase", + "line": 22, + "rank": 77 + }, + { + "degree": 262, + "identityCandidates": 2, + "label": "VolumeInfo", + "rank": 78 + }, + { + "degree": 262, + "degreeMatches": true, + "expectedDegree": 262, + "file": "api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java", + "id": "api_src_main_java_com_cloud_agent_api_to_virtualmachineto_virtualmachineto", + "identityCandidates": 1, + "label": "VirtualMachineTO", + "line": 27, + "rank": 79 + }, + { + "degree": 260, + "identityCandidates": 2, + "label": "VirtualRouter", + "rank": 80 + }, + { + "degree": 260, + "degreeMatches": true, + "expectedDegree": 260, + "file": "engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java", + "id": "engine_schema_src_main_java_com_cloud_storage_vmtemplatevo_vmtemplatevo", + "identityCandidates": 1, + "label": "VMTemplateVO", + "line": 40, + "rank": 81 + }, + { + "degree": 260, + "degreeMatches": true, + "expectedDegree": 260, + "file": "api/src/main/java/com/cloud/exception/ResourceAllocationException.java", + "id": "api_src_main_java_com_cloud_exception_resourceallocationexception_resourceallocationexception", + "identityCandidates": 1, + "label": "ResourceAllocationException", + "line": 21, + "rank": 82 + }, + { + "degree": 258, + "identityCandidates": 2, + "label": "Filter", + "rank": 83 + }, + { + "degree": 257, + "degreeMatches": true, + "expectedDegree": 257, + "file": "engine/components-api/src/main/java/com/cloud/resource/ResourceManager.java", + "id": "engine_components_api_src_main_java_com_cloud_resource_resourcemanager_resourcemanager", + "identityCandidates": 1, + "label": "ResourceManager", + "line": 48, + "rank": 84 + }, + { + "degree": 256, + "degreeMatches": true, + "expectedDegree": 256, + "file": "framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java", + "id": "framework_config_src_main_java_org_apache_cloudstack_framework_config_configkey_configkey", + "identityCandidates": 1, + "label": "ConfigKey", + "line": 31, + "rank": 85 + }, + { + "degree": 255, + "degreeMatches": true, + "expectedDegree": 255, + "file": "framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java", + "id": "framework_db_src_main_java_com_cloud_utils_db_transactionlegacy_transactionlegacy", + "identityCandidates": 1, + "label": "TransactionLegacy", + "line": 65, + "rank": 86 + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "file": "api/src/main/java/com/cloud/dc/DataCenter.java", + "id": "api_src_main_java_com_cloud_dc_datacenter_datacenter", + "identityCandidates": 1, + "label": "DataCenter", + "line": 28, + "rank": 87 + }, + { + "degree": 249, + "identityCandidates": 10, + "label": "User", + "rank": 88 + }, + { + "degree": 243, + "degreeMatches": true, + "expectedDegree": 243, + "file": "utils/src/main/java/com/cloud/utils/net/NetUtils.java", + "id": "utils_src_main_java_com_cloud_utils_net_netutils_netutils", + "identityCandidates": 1, + "label": "NetUtils", + "line": 59, + "rank": 89 + }, + { + "degree": 241, + "degreeMatches": true, + "expectedDegree": 241, + "file": "utils/src/main/java/com/cloud/utils/script/Script.java", + "id": "utils_src_main_java_com_cloud_utils_script_script_script", + "identityCandidates": 1, + "label": "Script", + "line": 49, + "rank": 90 + }, + { + "degree": 240, + "degreeMatches": true, + "expectedDegree": 240, + "file": "engine/schema/src/main/java/com/cloud/vm/DomainRouterVO.java", + "id": "engine_schema_src_main_java_com_cloud_vm_domainroutervo_domainroutervo", + "identityCandidates": 1, + "label": "DomainRouterVO", + "line": 32, + "rank": 91 + }, + { + "degree": 239, + "identityCandidates": 5, + "label": "Provider", + "rank": 92 + }, + { + "degree": 235, + "degreeMatches": true, + "expectedDegree": 235, + "file": "api/src/main/java/org/apache/cloudstack/api/EntityReference.java", + "id": "api_src_main_java_org_apache_cloudstack_api_entityreference_entityreference", + "identityCandidates": 1, + "label": "EntityReference", + "line": 25, + "rank": 93 + }, + { + "degree": 233, + "degreeMatches": true, + "expectedDegree": 233, + "file": "engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java", + "id": "engine_schema_src_main_java_org_apache_cloudstack_storage_datastore_db_storagepoolvo_storagepoolvo", + "identityCandidates": 1, + "label": "StoragePoolVO", + "line": 40, + "rank": 94 + }, + { + "degree": 232, + "identityCandidates": 8, + "label": "Param", + "rank": 95 + }, + { + "degree": 232, + "degreeMatches": true, + "expectedDegree": 232, + "file": "api/src/main/java/org/apache/cloudstack/acl/RoleType.java", + "id": "api_src_main_java_org_apache_cloudstack_acl_roletype_roletype", + "identityCandidates": 1, + "label": "RoleType", + "line": 24, + "rank": 96 + }, + { + "degree": 231, + "degreeMatches": true, + "expectedDegree": 231, + "file": "tools/marvin/marvin/sshClient.py", + "id": "tools_marvin_marvin_sshclient_sshclient", + "identityCandidates": 1, + "label": "SshClient", + "line": 38, + "rank": 97 + }, + { + "degree": 231, + "degreeMatches": true, + "expectedDegree": 231, + "file": "engine/schema/src/main/java/com/cloud/dc/DataCenterVO.java", + "id": "engine_schema_src_main_java_com_cloud_dc_datacentervo_datacentervo", + "identityCandidates": 1, + "label": "DataCenterVO", + "line": 38, + "rank": 98 + }, + { + "degree": 227, + "identityCandidates": 36, + "label": "Status", + "rank": 99 + }, + { + "degree": 225, + "degreeMatches": true, + "expectedDegree": 225, + "file": "engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java", + "id": "engine_schema_src_main_java_com_cloud_storage_dao_volumedao_volumedao", + "identityCandidates": 1, + "label": "VolumeDao", + "line": 31, + "rank": 100 + } + ], + "matchingDegrees": 72, + "matchingSourceAnchors": 0, + "question": "hubs", + "repository": "apache/cloudstack", + "returned": 100, + "tool": "graphify", + "verifiedIdentities": 72 + }, + "graphCounts": { + "edges": 340129, + "nodes": 93793 + }, + "omittedDiagnosticLines": 0, + "repository": "apache/cloudstack", + "secondary": [ + { + "projection": { + "expectedRows": 71, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 71 + }, + "sampleId": 8528735, + "selection": { + "matchedIds": [ + "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl" + ], + "returnedAnchors": [ + { + "file": "server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java", + "id": "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl", + "line": 141, + "symbols": [ + "ExternalLoadBalancerDeviceManagerImpl" + ] + } + ], + "selector": "server_src_main_java_com_cloud_network_externalloadbalancerdevicemanagerimpl_externalloadbalancerdevicemanagerimpl", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 21, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 21 + }, + "sampleId": 8537138, + "selection": { + "matchedIds": [ + "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand" + ], + "returnedAnchors": [ + { + "file": "core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java", + "id": "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand", + "line": 24, + "symbols": [ + "HandleConfigDriveIsoCommand" + ] + } + ], + "selector": "core_src_main_java_com_cloud_agent_api_handleconfigdriveisocommand_handleconfigdriveisocommand", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 32, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 32 + }, + "sampleId": 8538037, + "selection": { + "matchedIds": [ + "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi" + ], + "returnedAnchors": [ + { + "file": "plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java", + "id": "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi", + "line": 63, + "symbols": [ + "BrocadeVcsApi" + ] + } + ], + "selector": "plugins_network_elements_brocade_vcs_src_main_java_com_cloud_network_brocade_brocadevcsapi_brocadevcsapi", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 6, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 6 + }, + "sampleId": 8539645, + "selection": { + "matchedIds": [ + "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse" + ], + "returnedAnchors": [ + { + "file": "api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java", + "id": "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse", + "line": 26, + "symbols": [ + "DeploymentPlannersResponse" + ] + } + ], + "selector": "api_src_main_java_org_apache_cloudstack_api_response_deploymentplannersresponse_deploymentplannersresponse", + "status": "resolved" + } + } + ], + "tool": "graphify" + }, + { + "build": { + "exitCode": 0, + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "timedOut": false, + "withinRegisteredGraphBound": true + }, + "captureError": null, + "captureStatus": "completed", + "cases": [ + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8" + ], + "rank": null, + "sampleId": 6374724 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d" + ], + "rank": null, + "sampleId": 6391534 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06" + ], + "rank": null, + "sampleId": 6406137 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6" + ], + "rank": null, + "sampleId": 6413795 + } + ], + "connectivityChecks": [ + { + "id": "sha256:e708d23db81026e47a3683017b15d54b1eaa2c1ca677527dafc26deff961503d", + "rank": 1, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:b84640502ab95f464f9337fffdd1aa7392c167ec6b006e6d3c454998426050a6", + "rank": 2, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:3eba7652c207818ec7caaa3eead51ac5e3c087665d590ddee15eee5f940b8ffe", + "rank": 3, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7451e9761b6ce2a86af5dd8de99b564a8ba3fc72421a7ee65c08221d141ab99b", + "rank": 4, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2620a7c3781366a2d1276ef4b554b77cc8f4f84ee7ac3254250de7af34d93969", + "rank": 5, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a0f264b2c9d2fa65c5cf4880c8c0cecc1555e7ab38d259293480b11b7c2e710b", + "rank": 6, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:bf77b18db427cf4b42a323d3e11a5ead2b27b5a0e65f955984653a2bfabeef41", + "rank": 7, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:cee1e8f5ab5069a690bef638b5159a81d8edf07bc27a8bfaded753df3e6a6a23", + "rank": 8, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:55306c98f61017cbb2a220a64723fa8f09ab59de840f0ab992d36265a717d78d", + "rank": 9, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:74344eda53a7d47347cd9bd13f967e70c3771afd51ee38034ebbf348db80d2d8", + "rank": 10, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:91afa88ca73a1d57f151d5aab5167c510f727ef4af89084b16bd87a2fa2776a6", + "rank": 11, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:774d346f96292c326ecbb42ba284600276f9e0774f018fb44c730602070ca7f2", + "rank": 12, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d08454cf2c5868bba7ea19f84d7e8e8b8407278861ae1ca96d7e8e7623a47281", + "rank": 13, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:20ac60d4cdc9aa29c2943d7482e8e94b6df6ff77f109bbf070ec7a38c2893403", + "rank": 14, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a4b36f85b9ae732ded5738492c19f5b1923e0e772d9f9b16fc6501869f5282e1", + "rank": 15, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:6cb77036c4c8fbc14a9d23519c561cb5c3f468b55b21ef6e19566b31c24971bf", + "rank": 16, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:b3fe27fa216e8438ddccfa03579b4144feb1f867a9f57ab536b9bf8ac6fa1d02", + "rank": 17, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:b3c51212ee203aa6ff27a86e7d44aa55f3b6398471108fdc90af6a3606c5788d", + "rank": 18, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:9401ba758eaf69803275e812d10a4d61d249592cba57e6314616f21f5259c8e8", + "rank": 19, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:edcbe9b6897dd81bb68a9709b23087522fbabfa5ac5a9deb6ae811ddf4276c9f", + "rank": 20, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:f807e1c07ff282e258c15090403807cd10ab391601ddab9e78033e60fd78b155", + "rank": 21, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:32c9771a6001d723382486823a763213098b88e19dd1dd695025556dcb7b4125", + "rank": 22, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:ee9f3c4d4d27137c86977e778f28a929631361e3944b09a0960974d33f85483a", + "rank": 23, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:0e0c6001e76e806395a9a9b38dd20da576525c3a1305aec4cdcdc94d8994f153", + "rank": 24, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7f20223794302f0189dcfdb7886d8f38c6724f999e7340899b3626730aacf114", + "rank": 25, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:724280c5c7fe8eacedef9bcfb993b9bbf47457b517fc1f74e1ec8ccc770b4a05", + "rank": 26, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:65ad1e155299d8c1cf7b9415cc10eb275a94f81808ab562fd9a6094213873107", + "rank": 27, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:40cf47719df3ebf54a53033264c75399e17ddad7a935bbcb374018c43b2b404c", + "rank": 28, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1da175605d586860e51bc85ee9bd4686633fb854d137dfd0c4fcc783293842a5", + "rank": 29, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:db9247db35614e289a6cdd4615731180d5635529056f34d144e1aa05f9a97e6e", + "rank": 30, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:bdba1aab396f78d00a7065136d8136f5d06c89e7ac46275bf235aeb8349891c9", + "rank": 31, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d4ad81e44fc72e2c6954e1cd5c4a04a77f8515ff16731fadb12cb688ee5abb7c", + "rank": 32, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:553ba9ee8afab8528ee471a486c27b57b80448e0e04180623c5612b56389d065", + "rank": 33, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:884b8a6fb733feb2a5913f0628b2f528b5883924eef084e86aa5d4eebbbccd55", + "rank": 34, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:8f5cb44a08875b1e47fed07565b56506d2ae8b8b2ab295e94cee4b197ab39a23", + "rank": 35, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c69536f954af627d483bfd26b20e99a72f10a53ef5cd69b5d69c0ec8fbd2f013", + "rank": 36, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e0689a83391d963ad5b91ef843ca01b2076a4efbf8ee44448d960bb361ad78b6", + "rank": 37, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:328e69d3dc5ff0575f88655ef4c8ed5227d97e607778a07ea5f61b9260505d32", + "rank": 38, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2144a08c2fe8633b6c879681f2726f207c2238a61760184f62780fbc8aec3361", + "rank": 39, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e86b0fc90680d443d42802935829da0048c7cf4e85dc2429251f48708c337837", + "rank": 40, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:3705418aa7840cd0e692b03b35f3b7338e34e7c93434efe5d5a57ef7ae26ed0f", + "rank": 41, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2e44e2ca5c515fbeb4222d90fa4959a9001b2ef2cb9c3ca13bb66ca73633122c", + "rank": 42, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:dd11feaec62906800dd12f296e67a7b3492cfcde88bd30dacbf2916a238f49fe", + "rank": 43, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2d6e8401b36ceb51113a9e12c2eda76842ee3fa0fbeb563ba0426b7b798d4ee0", + "rank": 44, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:43ddf535c64365c6c96965a5729cc2dc5e26c9d8b43547fa67b62ab76be07477", + "rank": 45, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:52aed01d2c5bb5190b3fe6efd3a4024f714f2970db56a254c4a56ee93dfddcda", + "rank": 46, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:515d43b2052b51f6ddd0c2ae6b6e897472e81040888a7cc3f086cfa8a870782b", + "rank": 47, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:12d448dc45726abd47dfdc481c7f01cadce0728dc9703a3e82fc5b8d1f57ef2f", + "rank": 48, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:4920e82df7fb817efdd474384dc9cc042ffe250f81fd99f04a84a56a8aa40ca0", + "rank": 49, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1c909424d4f5af37a74e0f5091631f9f4426346c725cbbfac3462f870b14172a", + "rank": 50, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:4167fc9fbe5397d99fce9e603495437ec2759585ce3f1fcf5f0f21357076ed56", + "rank": 51, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:069bcf281ffa217e26014d054d078dd68b7c332c5f89043d88703f5712a2f110", + "rank": 52, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a34e2c2c097c0e1584b8cdcbaefb87114d3ee8bbc3f3d824e586319b5d8704cd", + "rank": 53, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:81006a81c4064a6437e259811ba1915d026548f9e55c053a1ad56f04c1d2efa3", + "rank": 54, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:e7946022aee266e2d86dc590024f07dc6f90ecb62237d027d3547868649c8646", + "rank": 55, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5401dbacf52c3dda2755bbd86ba079ef4ea911c7f3397cb191f0b83d23e4a355", + "rank": 56, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c93aa39a5672eb10c304644f48012b2b1a0f2bc1c8021a423e8e4dcac680bf19", + "rank": 57, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:ad960c23afffc73291728ffc36b3e7535dd1a9ebc6986e1e01056ca8aa8b7598", + "rank": 58, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5482eb5f5b38e03617d265adae8b3de6d682cd7e7249c303739351af3ad7cecc", + "rank": 59, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:0056868a827fc246abb5196f9af85e7771ef93cfeca9aef2568748e4a6237610", + "rank": 60, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:6fe18933cedcea17b94e51019bd24d790c42f92367e750adc6c09181e2e3f5e7", + "rank": 61, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c1555c70b9cdbe93a2df8e9bbf7be66b566da2c47d25fcc88ea60409383c761b", + "rank": 62, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:79d4dae71825770407d2d015e74c615f65f36e4264dfd9f3a161854d4d9172f6", + "rank": 63, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c04f495994a3a6498d744466134c2528ac7e371921dc54f62198271e3f8571b1", + "rank": 64, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:fef9a21a0608ed8f8d6d72c0a1affb936733cc3c2f724dae3385a3de557150c6", + "rank": 65, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:09da78c53b02ef732ec00767705a8d7e302780f87cc123c88979697f1e3c3a96", + "rank": 66, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:2683b9c93c202fc1f13e91f7c475fb01f14b625d15c8a302ec152288af084a40", + "rank": 67, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:70c4dbe8c5037d26794dca9dcbca06078b58ca6982863f2f74cf1f9207ab9ccd", + "rank": 68, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1922835f9250dde6db45183b75dc0e77bb5b3880f20b1f4620cf00f5680e15da", + "rank": 69, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:1acdcdfa2c098a2d56d6cb2f77461aa5424be3b94be2045cb297e5a5eb4eacdb", + "rank": 70, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:26b9445eadccbc738a827c34d94ed3b4820b36ea50b3724b24c2a60d4c4abd5c", + "rank": 71, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:782e0cd6b50d0dd717c15bdb665e9298227d5b75c47f6489c9f7220f40f6700b", + "rank": 72, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:59666be57da810f7e744c3306acfb059252daa9c0ef410373562be803b4a5074", + "rank": 73, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5301854e28157e543726e5be1b8f7e679fbfc58a205318b3fd3e6e32cea9d2ba", + "rank": 74, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:b2c96c07db3cbb8c76f8aa9d18ca030f08747e929c20f69998382d04be40beee", + "rank": 75, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:81715cb5f7559463bb87e6b72b22eab2fa918bab82b287c82326539f7b3d8afd", + "rank": 76, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:c1706fc8f66c30bb51d4631963bde0b36e9f4a5f34a3ff0ae3faf66227209604", + "rank": 77, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:555be66ebc85385891d9bb834536482b809d7f4d0be821df42591f726d5f08a9", + "rank": 78, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:6260d986754766a771e68e20ab1a68afd83deae64bde14b9cf7f0adfed4e16a6", + "rank": 79, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:28e8cb6682a5215d0e948a7ef0f4fdab0a4cb065b028bf31cca35e5054b3a33a", + "rank": 80, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:572a32ed5656052add7dc357f752fe4b5a27256f4cdffa181b0a32d099964368", + "rank": 81, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7f0c2ba27e47866c5663d709cbf0b973fa66c6311075ba9c6484706711a274b0", + "rank": 82, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:be9e97427e2bd09dd5f21601b023225b3244084ea4fa21f7e2caf98b5edd5406", + "rank": 83, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:780cf788cd9144d2ff990eb7bde9effc4d200d098e662bbee6123ab9b3cbe47b", + "rank": 84, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:8255b2e95176dd2dee5b8d4d3b2a85c60ef7e8bfef41d37e9c10dde388c1f18e", + "rank": 85, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:af235bb0b5c3d3af5c83eb3fbc3a742725d059ea8e251baf2eea255f8c3e8002", + "rank": 86, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:32dfc39a27677a81d5dcacd87cf0df87c5c38c3b6bf885c2f50e4ded58b3dd45", + "rank": 87, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:ff8e7d8cb93ce00fd7a0276f4249ad8fa4a1bddcd5a5404cbf3bb4bfc15c0516", + "rank": 88, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a5ae4aacf5a11eb239f566ad2c9586ad1ef882a6c107315fbe026a96c380e820", + "rank": 89, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7c15aadaa0152a60282aacfe9a5f98acc19069a48ec705250949ef7c05c9ba47", + "rank": 90, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:d347c5f6948b1d1a2391b401bf250d94b23de72c5b51dbf6a98fcd9d9f4bb817", + "rank": 91, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:a0fb2887d7e48ac6c3d58e2c232c70b484056f08540f31913f9b4a0218bbe2ba", + "rank": 92, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:444cd6aa50c27f4099e110fc194e5ef9a90d31e46a88faa3353ed5d9cdf2a5fb", + "rank": 93, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:4dea947c761dd00b49fa13ee403853d3ab4cff263012fac92a4daf57bcee4e5b", + "rank": 94, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5e8a23b3a9dc5de336ed846da8b4c94222de821930fd76a7669e896e642a4eca", + "rank": 95, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:059a811c9a7cd528f570d50749bc8f1cbd39db48a3f97528f75a99dae4d0e1bf", + "rank": 96, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:5b059637fb7ae01c546b6af2c8438935600f598662efeced21dac62b6f356501", + "rank": 97, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:7e70d4db7cc2eb0eb7aa0cc8932cf38f7ea0ce7886c11e6e20176bbb7d3179b0", + "rank": 98, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:51dd50ef136297b31c010eb4995f10138bc31f38f2921c286c6785e7496370fc", + "rank": 99, + "summaryMatches": true, + "textRowsMatch": true + }, + { + "id": "sha256:cef0e0438f1e55e5fb7c73943f4f41bff352edc21fb3734197cba5c3bccef2c5", + "rank": 100, + "summaryMatches": true, + "textRowsMatch": true + } + ], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + } + }, + "extractionDiagnostics": [ + { + "stream": "stderr", + "text": "warning: Compass published a partial graph after omitting 0 nodes and 62 edges; 0 identity collisions quarantined.", + "textTruncated": false + } + ], + "graphConsistency": { + "executionSucceeded": true, + "explicitIdentities": 100, + "hubs": [ + { + "degree": 988, + "degreeMatches": true, + "expectedDegree": 988, + "explicitId": "sha256:e708d23db81026e47a3683017b15d54b1eaa2c1ca677527dafc26deff961503d", + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java", + "id": "sha256:e708d23db81026e47a3683017b15d54b1eaa2c1ca677527dafc26deff961503d", + "identityCandidates": 1, + "label": "IDEWorkbenchMessages", + "line": 34, + "rank": 1, + "sourceAnchorMatches": true + }, + { + "degree": 920, + "degreeMatches": true, + "expectedDegree": 920, + "explicitId": "sha256:b84640502ab95f464f9337fffdd1aa7392c167ec6b006e6d3c454998426050a6", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/PlatformUI.java", + "id": "sha256:b84640502ab95f464f9337fffdd1aa7392c167ec6b006e6d3c454998426050a6", + "identityCandidates": 1, + "label": ".getWorkbench()", + "line": 92, + "rank": 2, + "sourceAnchorMatches": true + }, + { + "degree": 904, + "degreeMatches": true, + "expectedDegree": 904, + "explicitId": "sha256:3eba7652c207818ec7caaa3eead51ac5e3c087665d590ddee15eee5f940b8ffe", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java", + "id": "sha256:3eba7652c207818ec7caaa3eead51ac5e3c087665d590ddee15eee5f940b8ffe", + "identityCandidates": 1, + "label": "WorkbenchMessages", + "line": 33, + "rank": 3, + "sourceAnchorMatches": true + }, + { + "degree": 891, + "degreeMatches": true, + "expectedDegree": 891, + "explicitId": "sha256:7451e9761b6ce2a86af5dd8de99b564a8ba3fc72421a7ee65c08221d141ab99b", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchWindow.java", + "id": "sha256:7451e9761b6ce2a86af5dd8de99b564a8ba3fc72421a7ee65c08221d141ab99b", + "identityCandidates": 1, + "label": "IWorkbenchWindow", + "line": 59, + "rank": 4, + "sourceAnchorMatches": true + }, + { + "degree": 725, + "degreeMatches": true, + "expectedDegree": 725, + "explicitId": "sha256:2620a7c3781366a2d1276ef4b554b77cc8f4f84ee7ac3254250de7af34d93969", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/ImageDescriptor.java", + "id": "sha256:2620a7c3781366a2d1276ef4b554b77cc8f4f84ee7ac3254250de7af34d93969", + "identityCandidates": 1, + "label": "ImageDescriptor", + "line": 59, + "rank": 5, + "sourceAnchorMatches": true + }, + { + "degree": 706, + "degreeMatches": true, + "expectedDegree": 706, + "explicitId": "sha256:a0f264b2c9d2fa65c5cf4880c8c0cecc1555e7ab38d259293480b11b7c2e710b", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/engine/CSSEngine.java", + "id": "sha256:a0f264b2c9d2fa65c5cf4880c8c0cecc1555e7ab38d259293480b11b7c2e710b", + "identityCandidates": 1, + "label": "CSSEngine", + "line": 41, + "rank": 6, + "sourceAnchorMatches": true + }, + { + "degree": 682, + "degreeMatches": true, + "expectedDegree": 682, + "explicitId": "sha256:bf77b18db427cf4b42a323d3e11a5ead2b27b5a0e65f955984653a2bfabeef41", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/PlatformUI.java", + "id": "sha256:bf77b18db427cf4b42a323d3e11a5ead2b27b5a0e65f955984653a2bfabeef41", + "identityCandidates": 1, + "label": "PlatformUI", + "line": 38, + "rank": 7, + "sourceAnchorMatches": true + }, + { + "degree": 663, + "degreeMatches": true, + "expectedDegree": 663, + "explicitId": "sha256:cee1e8f5ab5069a690bef638b5159a81d8edf07bc27a8bfaded753df3e6a6a23", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuPackageImpl.java", + "id": "sha256:cee1e8f5ab5069a690bef638b5159a81d8edf07bc27a8bfaded753df3e6a6a23", + "identityCandidates": 1, + "label": "MenuPackageImpl", + "line": 71, + "rank": 8, + "sourceAnchorMatches": true + }, + { + "degree": 637, + "degreeMatches": true, + "expectedDegree": 637, + "explicitId": "sha256:55306c98f61017cbb2a220a64723fa8f09ab59de840f0ab992d36265a717d78d", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/IObservableValue.java", + "id": "sha256:55306c98f61017cbb2a220a64723fa8f09ab59de840f0ab992d36265a717d78d", + "identityCandidates": 1, + "label": "IObservableValue", + "line": 38, + "rank": 9, + "sourceAnchorMatches": true + }, + { + "degree": 610, + "degreeMatches": true, + "expectedDegree": 610, + "explicitId": "sha256:74344eda53a7d47347cd9bd13f967e70c3771afd51ee38034ebbf348db80d2d8", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPage.java", + "id": "sha256:74344eda53a7d47347cd9bd13f967e70c3771afd51ee38034ebbf348db80d2d8", + "identityCandidates": 1, + "label": "IWorkbenchPage", + "line": 46, + "rank": 10, + "sourceAnchorMatches": true + }, + { + "degree": 609, + "degreeMatches": true, + "expectedDegree": 609, + "explicitId": "sha256:91afa88ca73a1d57f151d5aab5167c510f727ef4af89084b16bd87a2fa2776a6", + "file": "tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java", + "id": "sha256:91afa88ca73a1d57f151d5aab5167c510f727ef4af89084b16bd87a2fa2776a6", + "identityCandidates": 1, + "label": "EPartServiceTest", + "line": 56, + "rank": 11, + "sourceAnchorMatches": true + }, + { + "degree": 602, + "degreeMatches": true, + "expectedDegree": 602, + "explicitId": "sha256:774d346f96292c326ecbb42ba284600276f9e0774f018fb44c730602070ca7f2", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MUIElement.java", + "id": "sha256:774d346f96292c326ecbb42ba284600276f9e0774f018fb44c730602070ca7f2", + "identityCandidates": 1, + "label": "MUIElement", + "line": 54, + "rank": 12, + "sourceAnchorMatches": true + }, + { + "degree": 563, + "degreeMatches": true, + "expectedDegree": 563, + "explicitId": "sha256:d08454cf2c5868bba7ea19f84d7e8e8b8407278861ae1ca96d7e8e7623a47281", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPart.java", + "id": "sha256:d08454cf2c5868bba7ea19f84d7e8e8b8407278861ae1ca96d7e8e7623a47281", + "identityCandidates": 1, + "label": "IWorkbenchPart", + "line": 99, + "rank": 13, + "sourceAnchorMatches": true + }, + { + "degree": 556, + "degreeMatches": true, + "expectedDegree": 556, + "explicitId": "sha256:20ac60d4cdc9aa29c2943d7482e8e94b6df6ff77f109bbf070ec7a38c2893403", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/Realm.java", + "id": "sha256:20ac60d4cdc9aa29c2943d7482e8e94b6df6ff77f109bbf070ec7a38c2893403", + "identityCandidates": 1, + "label": "Realm", + "line": 84, + "rank": 14, + "sourceAnchorMatches": true + }, + { + "degree": 517, + "degreeMatches": true, + "expectedDegree": 517, + "explicitId": "sha256:a4b36f85b9ae732ded5738492c19f5b1923e0e772d9f9b16fc6501869f5282e1", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IMemento.java", + "id": "sha256:a4b36f85b9ae732ded5738492c19f5b1923e0e772d9f9b16fc6501869f5282e1", + "identityCandidates": 1, + "label": "IMemento", + "line": 57, + "rank": 15, + "sourceAnchorMatches": true + }, + { + "degree": 509, + "degreeMatches": true, + "expectedDegree": 509, + "explicitId": "sha256:6cb77036c4c8fbc14a9d23519c561cb5c3f468b55b21ef6e19566b31c24971bf", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/IStructuredSelection.java", + "id": "sha256:6cb77036c4c8fbc14a9d23519c561cb5c3f468b55b21ef6e19566b31c24971bf", + "identityCandidates": 1, + "label": "IStructuredSelection", + "line": 22, + "rank": 16, + "sourceAnchorMatches": true + }, + { + "degree": 507, + "degreeMatches": true, + "expectedDegree": 507, + "explicitId": "sha256:b3fe27fa216e8438ddccfa03579b4144feb1f867a9f57ab536b9bf8ac6fa1d02", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/Viewer.java", + "id": "sha256:b3fe27fa216e8438ddccfa03579b4144feb1f867a9f57ab536b9bf8ac6fa1d02", + "identityCandidates": 1, + "label": "Viewer", + "line": 43, + "rank": 17, + "sourceAnchorMatches": true + }, + { + "degree": 503, + "degreeMatches": true, + "expectedDegree": 503, + "explicitId": "sha256:b3c51212ee203aa6ff27a86e7d44aa55f3b6398471108fdc90af6a3606c5788d", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/impl/BasicPackageImpl.java", + "id": "sha256:b3c51212ee203aa6ff27a86e7d44aa55f3b6398471108fdc90af6a3606c5788d", + "identityCandidates": 1, + "label": "BasicPackageImpl", + "line": 60, + "rank": 18, + "sourceAnchorMatches": true + }, + { + "degree": 485, + "degreeMatches": true, + "expectedDegree": 485, + "explicitId": "sha256:9401ba758eaf69803275e812d10a4d61d249592cba57e6314616f21f5259c8e8", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredSelection.java", + "id": "sha256:9401ba758eaf69803275e812d10a4d61d249592cba57e6314616f21f5259c8e8", + "identityCandidates": 1, + "label": "StructuredSelection", + "line": 33, + "rank": 19, + "sourceAnchorMatches": true + }, + { + "degree": 464, + "degreeMatches": true, + "expectedDegree": 464, + "explicitId": "sha256:edcbe9b6897dd81bb68a9709b23087522fbabfa5ac5a9deb6ae811ddf4276c9f", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelection.java", + "id": "sha256:edcbe9b6897dd81bb68a9709b23087522fbabfa5ac5a9deb6ae811ddf4276c9f", + "identityCandidates": 1, + "label": "ISelection", + "line": 23, + "rank": 20, + "sourceAnchorMatches": true + }, + { + "degree": 438, + "degreeMatches": true, + "expectedDegree": 438, + "explicitId": "sha256:f807e1c07ff282e258c15090403807cd10ab391601ddab9e78033e60fd78b155", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IAction.java", + "id": "sha256:f807e1c07ff282e258c15090403807cd10ab391601ddab9e78033e60fd78b155", + "identityCandidates": 1, + "label": "IAction", + "line": 47, + "rank": 21, + "sourceAnchorMatches": true + }, + { + "degree": 427, + "degreeMatches": true, + "expectedDegree": 427, + "explicitId": "sha256:32c9771a6001d723382486823a763213098b88e19dd1dd695025556dcb7b4125", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/Action.java", + "id": "sha256:32c9771a6001d723382486823a763213098b88e19dd1dd695025556dcb7b4125", + "identityCandidates": 1, + "label": "Action", + "line": 29, + "rank": 22, + "sourceAnchorMatches": true + }, + { + "degree": 421, + "degreeMatches": true, + "expectedDegree": 421, + "explicitId": "sha256:ee9f3c4d4d27137c86977e778f28a929631361e3944b09a0960974d33f85483a", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MPart.java", + "id": "sha256:ee9f3c4d4d27137c86977e778f28a929631361e3944b09a0960974d33f85483a", + "identityCandidates": 1, + "label": "MPart", + "line": 56, + "rank": 23, + "sourceAnchorMatches": true + }, + { + "degree": 413, + "degreeMatches": true, + "expectedDegree": 413, + "explicitId": "sha256:0e0c6001e76e806395a9a9b38dd20da576525c3a1305aec4cdcdc94d8994f153", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/MenuManager.java", + "id": "sha256:0e0c6001e76e806395a9a9b38dd20da576525c3a1305aec4cdcdc94d8994f153", + "identityCandidates": 1, + "label": "MenuManager", + "line": 48, + "rank": 24, + "sourceAnchorMatches": true + }, + { + "degree": 404, + "degreeMatches": true, + "expectedDegree": 404, + "explicitId": "sha256:7f20223794302f0189dcfdb7886d8f38c6724f999e7340899b3626730aacf114", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableViewer.java", + "id": "sha256:7f20223794302f0189dcfdb7886d8f38c6724f999e7340899b3626730aacf114", + "identityCandidates": 1, + "label": "TableViewer", + "line": 69, + "rank": 25, + "sourceAnchorMatches": true + }, + { + "degree": 394, + "degreeMatches": true, + "expectedDegree": 394, + "explicitId": "sha256:724280c5c7fe8eacedef9bcfb993b9bbf47457b517fc1f74e1ec8ccc770b4a05", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/IWorkbenchRegistryConstants.java", + "id": "sha256:724280c5c7fe8eacedef9bcfb993b9bbf47457b517fc1f74e1ec8ccc770b4a05", + "identityCandidates": 1, + "label": "IWorkbenchRegistryConstants", + "line": 29, + "rank": 26, + "sourceAnchorMatches": true + }, + { + "degree": 389, + "degreeMatches": true, + "expectedDegree": 389, + "explicitId": "sha256:65ad1e155299d8c1cf7b9415cc10eb275a94f81808ab562fd9a6094213873107", + "file": "tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/UITestCase.java", + "id": "sha256:65ad1e155299d8c1cf7b9415cc10eb275a94f81808ab562fd9a6094213873107", + "identityCandidates": 1, + "label": "UITestCase", + "line": 49, + "rank": 27, + "sourceAnchorMatches": true + }, + { + "degree": 386, + "degreeMatches": true, + "expectedDegree": 386, + "explicitId": "sha256:40cf47719df3ebf54a53033264c75399e17ddad7a935bbcb374018c43b2b404c", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ExecutionEvent.java", + "id": "sha256:40cf47719df3ebf54a53033264c75399e17ddad7a935bbcb374018c43b2b404c", + "identityCandidates": 1, + "label": "ExecutionEvent", + "line": 36, + "rank": 28, + "sourceAnchorMatches": true + }, + { + "degree": 364, + "degreeMatches": true, + "expectedDegree": 364, + "explicitId": "sha256:1da175605d586860e51bc85ee9bd4686633fb854d137dfd0c4fcc783293842a5", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java", + "id": "sha256:1da175605d586860e51bc85ee9bd4686633fb854d137dfd0c4fcc783293842a5", + "identityCandidates": 1, + "label": "WorkbenchPlugin", + "line": 111, + "rank": 29, + "sourceAnchorMatches": true + }, + { + "degree": 363, + "degreeMatches": true, + "expectedDegree": 363, + "explicitId": "sha256:db9247db35614e289a6cdd4615731180d5635529056f34d144e1aa05f9a97e6e", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeViewer.java", + "id": "sha256:db9247db35614e289a6cdd4615731180d5635529056f34d144e1aa05f9a97e6e", + "identityCandidates": 1, + "label": "TreeViewer", + "line": 69, + "rank": 30, + "sourceAnchorMatches": true + }, + { + "degree": 362, + "degreeMatches": true, + "expectedDegree": 362, + "explicitId": "sha256:bdba1aab396f78d00a7065136d8136f5d06c89e7ac46275bf235aeb8349891c9", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java", + "id": "sha256:bdba1aab396f78d00a7065136d8136f5d06c89e7ac46275bf235aeb8349891c9", + "identityCandidates": 1, + "label": "WorkbenchPage", + "line": 197, + "rank": 31, + "sourceAnchorMatches": true + }, + { + "degree": 345, + "degreeMatches": true, + "expectedDegree": 345, + "explicitId": "sha256:d4ad81e44fc72e2c6954e1cd5c4a04a77f8515ff16731fadb12cb688ee5abb7c", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbench.java", + "id": "sha256:d4ad81e44fc72e2c6954e1cd5c4a04a77f8515ff16731fadb12cb688ee5abb7c", + "identityCandidates": 1, + "label": "IWorkbench", + "line": 86, + "rank": 32, + "sourceAnchorMatches": true + }, + { + "degree": 342, + "degreeMatches": true, + "expectedDegree": 342, + "explicitId": "sha256:553ba9ee8afab8528ee471a486c27b57b80448e0e04180623c5612b56389d065", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/IObservable.java", + "id": "sha256:553ba9ee8afab8528ee471a486c27b57b80448e0e04180623c5612b56389d065", + "identityCandidates": 1, + "label": "IObservable", + "line": 36, + "rank": 33, + "sourceAnchorMatches": true + }, + { + "degree": 323, + "degreeMatches": true, + "expectedDegree": 323, + "explicitId": "sha256:884b8a6fb733feb2a5913f0628b2f528b5883924eef084e86aa5d4eebbbccd55", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/IPropertyChangeListener.java", + "id": "sha256:884b8a6fb733feb2a5913f0628b2f528b5883924eef084e86aa5d4eebbbccd55", + "identityCandidates": 1, + "label": "IPropertyChangeListener", + "line": 37, + "rank": 34, + "sourceAnchorMatches": true + }, + { + "degree": 322, + "degreeMatches": true, + "expectedDegree": 322, + "explicitId": "sha256:8f5cb44a08875b1e47fed07565b56506d2ae8b8b2ab295e94cee4b197ab39a23", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorPart.java", + "id": "sha256:8f5cb44a08875b1e47fed07565b56506d2ae8b8b2ab295e94cee4b197ab39a23", + "identityCandidates": 1, + "label": "IEditorPart", + "line": 55, + "rank": 35, + "sourceAnchorMatches": true + }, + { + "degree": 320, + "degreeMatches": true, + "expectedDegree": 320, + "explicitId": "sha256:c69536f954af627d483bfd26b20e99a72f10a53ef5cd69b5d69c0ec8fbd2f013", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java", + "id": "sha256:c69536f954af627d483bfd26b20e99a72f10a53ef5cd69b5d69c0ec8fbd2f013", + "identityCandidates": 1, + "label": ".getDefault()", + "line": 462, + "rank": 36, + "sourceAnchorMatches": true + }, + { + "degree": 316, + "degreeMatches": true, + "expectedDegree": 316, + "explicitId": "sha256:e0689a83391d963ad5b91ef843ca01b2076a4efbf8ee44448d960bb361ad78b6", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IContributionItem.java", + "id": "sha256:e0689a83391d963ad5b91ef843ca01b2076a4efbf8ee44448d960bb361ad78b6", + "identityCandidates": 1, + "label": "IContributionItem", + "line": 42, + "rank": 37, + "sourceAnchorMatches": true + }, + { + "degree": 312, + "degreeMatches": true, + "expectedDegree": 312, + "explicitId": "sha256:328e69d3dc5ff0575f88655ef4c8ed5227d97e607778a07ea5f61b9260505d32", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java", + "id": "sha256:328e69d3dc5ff0575f88655ef4c8ed5227d97e607778a07ea5f61b9260505d32", + "identityCandidates": 1, + "label": "StructuredViewer", + "line": 65, + "rank": 38, + "sourceAnchorMatches": true + }, + { + "degree": 308, + "degreeMatches": true, + "expectedDegree": 308, + "explicitId": "sha256:2144a08c2fe8633b6c879681f2726f207c2238a61760184f62780fbc8aec3361", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ParameterizedCommand.java", + "id": "sha256:2144a08c2fe8633b6c879681f2726f207c2238a61760184f62780fbc8aec3361", + "identityCandidates": 1, + "label": "ParameterizedCommand", + "line": 41, + "rank": 39, + "sourceAnchorMatches": true + }, + { + "degree": 305, + "degreeMatches": true, + "expectedDegree": 305, + "explicitId": "sha256:e86b0fc90680d443d42802935829da0048c7cf4e85dc2429251f48708c337837", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/IObservableList.java", + "id": "sha256:e86b0fc90680d443d42802935829da0048c7cf4e85dc2429251f48708c337837", + "identityCandidates": 1, + "label": "IObservableList", + "line": 44, + "rank": 40, + "sourceAnchorMatches": true + }, + { + "degree": 304, + "degreeMatches": true, + "expectedDegree": 304, + "explicitId": "sha256:3705418aa7840cd0e692b03b35f3b7338e34e7c93434efe5d5a57ef7ae26ed0f", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplication.java", + "id": "sha256:3705418aa7840cd0e692b03b35f3b7338e34e7c93434efe5d5a57ef7ae26ed0f", + "identityCandidates": 1, + "label": "MApplication", + "line": 70, + "rank": 41, + "sourceAnchorMatches": true + }, + { + "degree": 286, + "degreeMatches": true, + "expectedDegree": 286, + "explicitId": "sha256:2e44e2ca5c515fbeb4222d90fa4959a9001b2ef2cb9c3ca13bb66ca73633122c", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkingSet.java", + "id": "sha256:2e44e2ca5c515fbeb4222d90fa4959a9001b2ef2cb9c3ca13bb66ca73633122c", + "identityCandidates": 1, + "label": "IWorkingSet", + "line": 29, + "rank": 42, + "sourceAnchorMatches": true + }, + { + "degree": 284, + "degreeMatches": true, + "expectedDegree": 284, + "explicitId": "sha256:dd11feaec62906800dd12f296e67a7b3492cfcde88bd30dacbf2916a238f49fe", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/impl/UiPackageImpl.java", + "id": "sha256:dd11feaec62906800dd12f296e67a7b3492cfcde88bd30dacbf2916a238f49fe", + "identityCandidates": 1, + "label": "UiPackageImpl", + "line": 63, + "rank": 43, + "sourceAnchorMatches": true + }, + { + "degree": 283, + "degreeMatches": true, + "expectedDegree": 283, + "explicitId": "sha256:2d6e8401b36ceb51113a9e12c2eda76842ee3fa0fbeb563ba0426b7b798d4ee0", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java", + "id": "sha256:2d6e8401b36ceb51113a9e12c2eda76842ee3fa0fbeb563ba0426b7b798d4ee0", + "identityCandidates": 1, + "label": "WorkbenchWindow", + "line": 209, + "rank": 44, + "sourceAnchorMatches": true + }, + { + "degree": 279, + "degreeMatches": true, + "expectedDegree": 279, + "explicitId": "sha256:43ddf535c64365c6c96965a5729cc2dc5e26c9d8b43547fa67b62ab76be07477", + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java", + "id": "sha256:43ddf535c64365c6c96965a5729cc2dc5e26c9d8b43547fa67b62ab76be07477", + "identityCandidates": 1, + "label": "MarkerMessages", + "line": 23, + "rank": 45, + "sourceAnchorMatches": true + }, + { + "degree": 270, + "degreeMatches": true, + "expectedDegree": 270, + "explicitId": "sha256:52aed01d2c5bb5190b3fe6efd3a4024f714f2970db56a254c4a56ee93dfddcda", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java", + "id": "sha256:52aed01d2c5bb5190b3fe6efd3a4024f714f2970db56a254c4a56ee93dfddcda", + "identityCandidates": 1, + "label": "IPreferenceStore", + "line": 59, + "rank": 46, + "sourceAnchorMatches": true + }, + { + "degree": 269, + "degreeMatches": true, + "expectedDegree": 269, + "explicitId": "sha256:515d43b2052b51f6ddd0c2ae6b6e897472e81040888a7cc3f086cfa8a870782b", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/set/IObservableSet.java", + "id": "sha256:515d43b2052b51f6ddd0c2ae6b6e897472e81040888a7cc3f086cfa8a870782b", + "identityCandidates": 1, + "label": "IObservableSet", + "line": 43, + "rank": 47, + "sourceAnchorMatches": true + }, + { + "degree": 268, + "degreeMatches": true, + "expectedDegree": 268, + "explicitId": "sha256:12d448dc45726abd47dfdc481c7f01cadce0728dc9703a3e82fc5b8d1f57ef2f", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IMenuManager.java", + "id": "sha256:12d448dc45726abd47dfdc481c7f01cadce0728dc9703a3e82fc5b8d1f57ef2f", + "identityCandidates": 1, + "label": "IMenuManager", + "line": 32, + "rank": 48, + "sourceAnchorMatches": true + }, + { + "degree": 259, + "degreeMatches": true, + "expectedDegree": 259, + "explicitId": "sha256:4920e82df7fb817efdd474384dc9cc042ffe250f81fd99f04a84a56a8aa40ca0", + "file": "bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/EModelService.java", + "id": "sha256:4920e82df7fb817efdd474384dc9cc042ffe250f81fd99f04a84a56a8aa40ca0", + "identityCandidates": 1, + "label": "EModelService", + "line": 41, + "rank": 49, + "sourceAnchorMatches": true + }, + { + "degree": 258, + "degreeMatches": true, + "expectedDegree": 258, + "explicitId": "sha256:1c909424d4f5af37a74e0f5091631f9f4426346c725cbbfac3462f870b14172a", + "file": "tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java", + "id": "sha256:1c909424d4f5af37a74e0f5091631f9f4426346c725cbbfac3462f870b14172a", + "identityCandidates": 1, + "label": ".testSaveAll()", + "line": 4043, + "rank": 50, + "sourceAnchorMatches": true + }, + { + "degree": 256, + "degreeMatches": true, + "expectedDegree": 256, + "explicitId": "sha256:4167fc9fbe5397d99fce9e603495437ec2759585ce3f1fcf5f0f21357076ed56", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java", + "id": "sha256:4167fc9fbe5397d99fce9e603495437ec2759585ce3f1fcf5f0f21357076ed56", + "identityCandidates": 1, + "label": "Workbench", + "line": 279, + "rank": 51, + "sourceAnchorMatches": true + }, + { + "degree": 252, + "degreeMatches": true, + "expectedDegree": 252, + "explicitId": "sha256:069bcf281ffa217e26014d054d078dd68b7c332c5f89043d88703f5712a2f110", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MWindow.java", + "id": "sha256:069bcf281ffa217e26014d054d078dd68b7c332c5f89043d88703f5712a2f110", + "identityCandidates": 1, + "label": "MWindow", + "line": 56, + "rank": 52, + "sourceAnchorMatches": true + }, + { + "degree": 252, + "degreeMatches": true, + "expectedDegree": 252, + "explicitId": "sha256:a34e2c2c097c0e1584b8cdcbaefb87114d3ee8bbc3f3d824e586319b5d8704cd", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorInput.java", + "id": "sha256:a34e2c2c097c0e1584b8cdcbaefb87114d3ee8bbc3f3d824e586319b5d8704cd", + "identityCandidates": 1, + "label": "IEditorInput", + "line": 54, + "rank": 53, + "sourceAnchorMatches": true + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "explicitId": "sha256:81006a81c4064a6437e259811ba1915d026548f9e55c053a1ad56f04c1d2efa3", + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSS2PropertiesImpl.java", + "id": "sha256:81006a81c4064a6437e259811ba1915d026548f9e55c053a1ad56f04c1d2efa3", + "identityCandidates": 1, + "label": "CSS2PropertiesImpl", + "line": 24, + "rank": 54, + "sourceAnchorMatches": true + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "explicitId": "sha256:e7946022aee266e2d86dc590024f07dc6f90ecb62237d027d3547868649c8646", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/MessageDialog.java", + "id": "sha256:e7946022aee266e2d86dc590024f07dc6f90ecb62237d027d3547868649c8646", + "identityCandidates": 1, + "label": "MessageDialog", + "line": 40, + "rank": 55, + "sourceAnchorMatches": true + }, + { + "degree": 242, + "degreeMatches": true, + "expectedDegree": 242, + "explicitId": "sha256:5401dbacf52c3dda2755bbd86ba079ef4ea911c7f3397cb191f0b83d23e4a355", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/LabelProvider.java", + "id": "sha256:5401dbacf52c3dda2755bbd86ba079ef4ea911c7f3397cb191f0b83d23e4a355", + "identityCandidates": 1, + "label": "LabelProvider", + "line": 32, + "rank": 56, + "sourceAnchorMatches": true + }, + { + "degree": 227, + "degreeMatches": true, + "expectedDegree": 227, + "explicitId": "sha256:c93aa39a5672eb10c304644f48012b2b1a0f2bc1c8021a423e8e4dcac680bf19", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchWindow.java", + "id": "sha256:c93aa39a5672eb10c304644f48012b2b1a0f2bc1c8021a423e8e4dcac680bf19", + "identityCandidates": 1, + "label": ".getActivePage()", + "line": 78, + "rank": 57, + "sourceAnchorMatches": true + }, + { + "degree": 224, + "degreeMatches": true, + "expectedDegree": 224, + "explicitId": "sha256:ad960c23afffc73291728ffc36b3e7535dd1a9ebc6986e1e01056ca8aa8b7598", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/Dialog.java", + "id": "sha256:ad960c23afffc73291728ffc36b3e7535dd1a9ebc6986e1e01056ca8aa8b7598", + "identityCandidates": 1, + "label": "Dialog", + "line": 65, + "rank": 58, + "sourceAnchorMatches": true + }, + { + "degree": 222, + "degreeMatches": true, + "expectedDegree": 222, + "explicitId": "sha256:5482eb5f5b38e03617d265adae8b3de6d682cd7e7249c303739351af3ad7cecc", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ITreeContentProvider.java", + "id": "sha256:5482eb5f5b38e03617d265adae8b3de6d682cd7e7249c303739351af3ad7cecc", + "identityCandidates": 1, + "label": "ITreeContentProvider", + "line": 22, + "rank": 59, + "sourceAnchorMatches": true + }, + { + "degree": 221, + "degreeMatches": true, + "expectedDegree": 221, + "explicitId": "sha256:0056868a827fc246abb5196f9af85e7771ef93cfeca9aef2568748e4a6237610", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/JFaceResources.java", + "id": "sha256:0056868a827fc246abb5196f9af85e7771ef93cfeca9aef2568748e4a6237610", + "identityCandidates": 1, + "label": "JFaceResources", + "line": 57, + "rank": 60, + "sourceAnchorMatches": true + }, + { + "degree": 221, + "degreeMatches": true, + "expectedDegree": 221, + "explicitId": "sha256:6fe18933cedcea17b94e51019bd24d790c42f92367e750adc6c09181e2e3f5e7", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/AbstractHandler.java", + "id": "sha256:6fe18933cedcea17b94e51019bd24d790c42f92367e750adc6c09181e2e3f5e7", + "identityCandidates": 1, + "label": "AbstractHandler", + "line": 31, + "rank": 61, + "sourceAnchorMatches": true + }, + { + "degree": 221, + "degreeMatches": true, + "expectedDegree": 221, + "explicitId": "sha256:c1555c70b9cdbe93a2df8e9bbf7be66b566da2c47d25fcc88ea60409383c761b", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPerspectiveDescriptor.java", + "id": "sha256:c1555c70b9cdbe93a2df8e9bbf7be66b566da2c47d25fcc88ea60409383c761b", + "identityCandidates": 1, + "label": "IPerspectiveDescriptor", + "line": 49, + "rank": 62, + "sourceAnchorMatches": true + }, + { + "degree": 220, + "degreeMatches": true, + "expectedDegree": 220, + "explicitId": "sha256:79d4dae71825770407d2d015e74c615f65f36e4264dfd9f3a161854d4d9172f6", + "file": "bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/helpers/URI.java", + "id": "sha256:79d4dae71825770407d2d015e74c615f65f36e4264dfd9f3a161854d4d9172f6", + "identityCandidates": 1, + "label": "URI", + "line": 141, + "rank": 63, + "sourceAnchorMatches": true + }, + { + "degree": 209, + "degreeMatches": true, + "expectedDegree": 209, + "explicitId": "sha256:c04f495994a3a6498d744466134c2528ac7e371921dc54f62198271e3f8571b1", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java", + "id": "sha256:c04f495994a3a6498d744466134c2528ac7e371921dc54f62198271e3f8571b1", + "identityCandidates": 1, + "label": "WizardDialog", + "line": 85, + "rank": 64, + "sourceAnchorMatches": true + }, + { + "degree": 209, + "degreeMatches": true, + "expectedDegree": 209, + "explicitId": "sha256:fef9a21a0608ed8f8d6d72c0a1affb936733cc3c2f724dae3385a3de557150c6", + "file": "bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/E4Workbench.java", + "id": "sha256:fef9a21a0608ed8f8d6d72c0a1affb936733cc3c2f724dae3385a3de557150c6", + "identityCandidates": 1, + "label": "E4Workbench", + "line": 42, + "rank": 65, + "sourceAnchorMatches": true + }, + { + "degree": 208, + "degreeMatches": true, + "expectedDegree": 208, + "explicitId": "sha256:09da78c53b02ef732ec00767705a8d7e302780f87cc123c88979697f1e3c3a96", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/PartInitException.java", + "id": "sha256:09da78c53b02ef732ec00767705a8d7e302780f87cc123c88979697f1e3c3a96", + "identityCandidates": 1, + "label": "PartInitException", + "line": 26, + "rank": 66, + "sourceAnchorMatches": true + }, + { + "degree": 207, + "degreeMatches": true, + "expectedDegree": 207, + "explicitId": "sha256:2683b9c93c202fc1f13e91f7c475fb01f14b625d15c8a302ec152288af084a40", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/CellEditor.java", + "id": "sha256:2683b9c93c202fc1f13e91f7c475fb01f14b625d15c8a302ec152288af084a40", + "identityCandidates": 1, + "label": "CellEditor", + "line": 45, + "rank": 67, + "sourceAnchorMatches": true + }, + { + "degree": 206, + "degreeMatches": true, + "expectedDegree": 206, + "explicitId": "sha256:70c4dbe8c5037d26794dca9dcbca06078b58ca6982863f2f74cf1f9207ab9ccd", + "file": "bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/EModelService.java", + "id": "sha256:70c4dbe8c5037d26794dca9dcbca06078b58ca6982863f2f74cf1f9207ab9ccd", + "identityCandidates": 1, + "label": ".createModelElement()", + "line": 131, + "rank": 68, + "sourceAnchorMatches": true + }, + { + "degree": 204, + "degreeMatches": true, + "expectedDegree": 204, + "explicitId": "sha256:1922835f9250dde6db45183b75dc0e77bb5b3880f20b1f4620cf00f5680e15da", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ExecutionException.java", + "id": "sha256:1922835f9250dde6db45183b75dc0e77bb5b3880f20b1f4620cf00f5680e15da", + "identityCandidates": 1, + "label": "ExecutionException", + "line": 26, + "rank": 69, + "sourceAnchorMatches": true + }, + { + "degree": 202, + "degreeMatches": true, + "expectedDegree": 202, + "explicitId": "sha256:1acdcdfa2c098a2d56d6cb2f77461aa5424be3b94be2045cb297e5a5eb4eacdb", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ActionFactory.java", + "id": "sha256:1acdcdfa2c098a2d56d6cb2f77461aa5424be3b94be2045cb297e5a5eb4eacdb", + "identityCandidates": 1, + "label": "ActionFactory", + "line": 59, + "rank": 70, + "sourceAnchorMatches": true + }, + { + "degree": 202, + "degreeMatches": true, + "expectedDegree": 202, + "explicitId": "sha256:26b9445eadccbc738a827c34d94ed3b4820b36ea50b3724b24c2a60d4c4abd5c", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/commands/impl/CommandsPackageImpl.java", + "id": "sha256:26b9445eadccbc738a827c34d94ed3b4820b36ea50b3724b24c2a60d4c4abd5c", + "identityCandidates": 1, + "label": "CommandsPackageImpl", + "line": 58, + "rank": 71, + "sourceAnchorMatches": true + }, + { + "degree": 200, + "degreeMatches": true, + "expectedDegree": 200, + "explicitId": "sha256:782e0cd6b50d0dd717c15bdb665e9298227d5b75c47f6489c9f7220f40f6700b", + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/IValueProperty.java", + "id": "sha256:782e0cd6b50d0dd717c15bdb665e9298227d5b75c47f6489c9f7220f40f6700b", + "identityCandidates": 1, + "label": "IValueProperty", + "line": 47, + "rank": 72, + "sourceAnchorMatches": true + }, + { + "degree": 198, + "degreeMatches": true, + "expectedDegree": 198, + "explicitId": "sha256:59666be57da810f7e744c3306acfb059252daa9c0ef410373562be803b4a5074", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogConstants.java", + "id": "sha256:59666be57da810f7e744c3306acfb059252daa9c0ef410373562be803b4a5074", + "identityCandidates": 1, + "label": "IDialogConstants", + "line": 45, + "rank": 73, + "sourceAnchorMatches": true + }, + { + "degree": 197, + "degreeMatches": true, + "expectedDegree": 197, + "explicitId": "sha256:5301854e28157e543726e5be1b8f7e679fbfc58a205318b3fd3e6e32cea9d2ba", + "file": "bundles/org.eclipse.core.databinding/src/org/eclipse/core/databinding/DataBindingContext.java", + "id": "sha256:5301854e28157e543726e5be1b8f7e679fbfc58a205318b3fd3e6e32cea9d2ba", + "identityCandidates": 1, + "label": "DataBindingContext", + "line": 58, + "rank": 74, + "sourceAnchorMatches": true + }, + { + "degree": 196, + "degreeMatches": true, + "expectedDegree": 196, + "explicitId": "sha256:b2c96c07db3cbb8c76f8aa9d18ca030f08747e929c20f69998382d04be40beee", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java", + "id": "sha256:b2c96c07db3cbb8c76f8aa9d18ca030f08747e929c20f69998382d04be40beee", + "identityCandidates": 1, + "label": "AbstractTreeViewer", + "line": 73, + "rank": 75, + "sourceAnchorMatches": true + }, + { + "degree": 195, + "degreeMatches": true, + "expectedDegree": 195, + "explicitId": "sha256:81715cb5f7559463bb87e6b72b22eab2fa918bab82b287c82326539f7b3d8afd", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISharedImages.java", + "id": "sha256:81715cb5f7559463bb87e6b72b22eab2fa918bab82b287c82326539f7b3d8afd", + "identityCandidates": 1, + "label": "ISharedImages", + "line": 37, + "rank": 76, + "sourceAnchorMatches": true + }, + { + "degree": 193, + "degreeMatches": true, + "expectedDegree": 193, + "explicitId": "sha256:c1706fc8f66c30bb51d4631963bde0b36e9f4a5f34a3ff0ae3faf66227209604", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/SafeRunnable.java", + "id": "sha256:c1706fc8f66c30bb51d4631963bde0b36e9f4a5f34a3ff0ae3faf66227209604", + "identityCandidates": 1, + "label": "SafeRunnable", + "line": 31, + "rank": 77, + "sourceAnchorMatches": true + }, + { + "degree": 191, + "degreeMatches": true, + "expectedDegree": 191, + "explicitId": "sha256:555be66ebc85385891d9bb834536482b809d7f4d0be821df42591f726d5f08a9", + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/Command.java", + "id": "sha256:555be66ebc85385891d9bb834536482b809d7f4d0be821df42591f726d5f08a9", + "identityCandidates": 1, + "label": "Command", + "line": 57, + "rank": 78, + "sourceAnchorMatches": true + }, + { + "degree": 190, + "degreeMatches": true, + "expectedDegree": 190, + "explicitId": "sha256:6260d986754766a771e68e20ab1a68afd83deae64bde14b9cf7f0adfed4e16a6", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/PropertyChangeEvent.java", + "id": "sha256:6260d986754766a771e68e20ab1a68afd83deae64bde14b9cf7f0adfed4e16a6", + "identityCandidates": 1, + "label": "PropertyChangeEvent", + "line": 36, + "rank": 79, + "sourceAnchorMatches": true + }, + { + "degree": 189, + "degreeMatches": true, + "expectedDegree": 189, + "explicitId": "sha256:28e8cb6682a5215d0e948a7ef0f4fdab0a4cb065b028bf31cca35e5054b3a33a", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IViewPart.java", + "id": "sha256:28e8cb6682a5215d0e948a7ef0f4fdab0a4cb065b028bf31cca35e5054b3a33a", + "identityCandidates": 1, + "label": "IViewPart", + "line": 58, + "rank": 80, + "sourceAnchorMatches": true + }, + { + "degree": 188, + "degreeMatches": true, + "expectedDegree": 188, + "explicitId": "sha256:572a32ed5656052add7dc357f752fe4b5a27256f4cdffa181b0a32d099964368", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ILabelProviderListener.java", + "id": "sha256:572a32ed5656052add7dc357f752fe4b5a27256f4cdffa181b0a32d099964368", + "identityCandidates": 1, + "label": "ILabelProviderListener", + "line": 23, + "rank": 81, + "sourceAnchorMatches": true + }, + { + "degree": 186, + "degreeMatches": true, + "expectedDegree": 186, + "explicitId": "sha256:7f0c2ba27e47866c5663d709cbf0b973fa66c6311075ba9c6484706711a274b0", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MElementContainer.java", + "id": "sha256:7f0c2ba27e47866c5663d709cbf0b973fa66c6311075ba9c6484706711a274b0", + "identityCandidates": 1, + "label": "MElementContainer", + "line": 50, + "rank": 82, + "sourceAnchorMatches": true + }, + { + "degree": 186, + "degreeMatches": true, + "expectedDegree": 186, + "explicitId": "sha256:be9e97427e2bd09dd5f21601b023225b3244084ea4fa21f7e2caf98b5edd5406", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogSettings.java", + "id": "sha256:be9e97427e2bd09dd5f21601b023225b3244084ea4fa21f7e2caf98b5edd5406", + "identityCandidates": 1, + "label": "IDialogSettings", + "line": 28, + "rank": 83, + "sourceAnchorMatches": true + }, + { + "degree": 185, + "degreeMatches": true, + "expectedDegree": 185, + "explicitId": "sha256:780cf788cd9144d2ff990eb7bde9effc4d200d098e662bbee6123ab9b3cbe47b", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IWorkbenchHelpContextIds.java", + "id": "sha256:780cf788cd9144d2ff990eb7bde9effc4d200d098e662bbee6123ab9b3cbe47b", + "identityCandidates": 1, + "label": "IWorkbenchHelpContextIds", + "line": 31, + "rank": 84, + "sourceAnchorMatches": true + }, + { + "degree": 184, + "degreeMatches": true, + "expectedDegree": 184, + "explicitId": "sha256:8255b2e95176dd2dee5b8d4d3b2a85c60ef7e8bfef41d37e9c10dde388c1f18e", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPartReference.java", + "id": "sha256:8255b2e95176dd2dee5b8d4d3b2a85c60ef7e8bfef41d37e9c10dde388c1f18e", + "identityCandidates": 1, + "label": "IWorkbenchPartReference", + "line": 29, + "rank": 85, + "sourceAnchorMatches": true + }, + { + "degree": 182, + "degreeMatches": true, + "expectedDegree": 182, + "explicitId": "sha256:af235bb0b5c3d3af5c83eb3fbc3a742725d059ea8e251baf2eea255f8c3e8002", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerCell.java", + "id": "sha256:af235bb0b5c3d3af5c83eb3fbc3a742725d059ea8e251baf2eea255f8c3e8002", + "identityCandidates": 1, + "label": "ViewerCell", + "line": 34, + "rank": 86, + "sourceAnchorMatches": true + }, + { + "degree": 179, + "degreeMatches": true, + "expectedDegree": 179, + "explicitId": "sha256:32dfc39a27677a81d5dcacd87cf0df87c5c38c3b6bf885c2f50e4ded58b3dd45", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java", + "id": "sha256:32dfc39a27677a81d5dcacd87cf0df87c5c38c3b6bf885c2f50e4ded58b3dd45", + "identityCandidates": 1, + "label": "ColumnViewer", + "line": 47, + "rank": 87, + "sourceAnchorMatches": true + }, + { + "degree": 179, + "degreeMatches": true, + "expectedDegree": 179, + "explicitId": "sha256:ff8e7d8cb93ce00fd7a0276f4249ad8fa4a1bddcd5a5404cbf3bb4bfc15c0516", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/map/IObservableMap.java", + "id": "sha256:ff8e7d8cb93ce00fd7a0276f4249ad8fa4a1bddcd5a5404cbf3bb4bfc15c0516", + "identityCandidates": 1, + "label": "IObservableMap", + "line": 45, + "rank": 88, + "sourceAnchorMatches": true + }, + { + "degree": 178, + "degreeMatches": true, + "expectedDegree": 178, + "explicitId": "sha256:a5ae4aacf5a11eb239f566ad2c9586ad1ef882a6c107315fbe026a96c380e820", + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/DataTransferMessages.java", + "id": "sha256:a5ae4aacf5a11eb239f566ad2c9586ad1ef882a6c107315fbe026a96c380e820", + "identityCandidates": 1, + "label": "DataTransferMessages", + "line": 19, + "rank": 89, + "sourceAnchorMatches": true + }, + { + "degree": 175, + "degreeMatches": true, + "expectedDegree": 175, + "explicitId": "sha256:7c15aadaa0152a60282aacfe9a5f98acc19069a48ec705250949ef7c05c9ba47", + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java", + "id": "sha256:7c15aadaa0152a60282aacfe9a5f98acc19069a48ec705250949ef7c05c9ba47", + "identityCandidates": 1, + "label": "IDEWorkbenchPlugin", + "line": 65, + "rank": 90, + "sourceAnchorMatches": true + }, + { + "degree": 173, + "degreeMatches": true, + "expectedDegree": 173, + "explicitId": "sha256:d347c5f6948b1d1a2391b401bf250d94b23de72c5b51dbf6a98fcd9d9f4bb817", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/IObservableValue.java", + "id": "sha256:d347c5f6948b1d1a2391b401bf250d94b23de72c5b51dbf6a98fcd9d9f4bb817", + "identityCandidates": 1, + "label": ".getValue()", + "line": 55, + "rank": 91, + "sourceAnchorMatches": true + }, + { + "degree": 170, + "degreeMatches": true, + "expectedDegree": 170, + "explicitId": "sha256:a0fb2887d7e48ac6c3d58e2c232c70b484056f08540f31913f9b4a0218bbe2ba", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IWorkbenchConstants.java", + "id": "sha256:a0fb2887d7e48ac6c3d58e2c232c70b484056f08540f31913f9b4a0218bbe2ba", + "identityCandidates": 1, + "label": "IWorkbenchConstants", + "line": 23, + "rank": 92, + "sourceAnchorMatches": true + }, + { + "degree": 169, + "degreeMatches": true, + "expectedDegree": 169, + "explicitId": "sha256:444cd6aa50c27f4099e110fc194e5ef9a90d31e46a88faa3353ed5d9cdf2a5fb", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/WritableList.java", + "id": "sha256:444cd6aa50c27f4099e110fc194e5ef9a90d31e46a88faa3353ed5d9cdf2a5fb", + "identityCandidates": 1, + "label": "WritableList", + "line": 46, + "rank": 93, + "sourceAnchorMatches": true + }, + { + "degree": 169, + "degreeMatches": true, + "expectedDegree": 169, + "explicitId": "sha256:4dea947c761dd00b49fa13ee403853d3ab4cff263012fac92a4daf57bcee4e5b", + "file": "tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java", + "id": "sha256:4dea947c761dd00b49fa13ee403853d3ab4cff263012fac92a4daf57bcee4e5b", + "identityCandidates": 1, + "label": "AbstractDefaultRealmTestCase", + "line": 30, + "rank": 94, + "sourceAnchorMatches": true + }, + { + "degree": 169, + "degreeMatches": true, + "expectedDegree": 169, + "explicitId": "sha256:5e8a23b3a9dc5de336ed846da8b4c94222de821930fd76a7669e896e642a4eca", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorDescriptor.java", + "id": "sha256:5e8a23b3a9dc5de336ed846da8b4c94222de821930fd76a7669e896e642a4eca", + "identityCandidates": 1, + "label": "IEditorDescriptor", + "line": 36, + "rank": 95, + "sourceAnchorMatches": true + }, + { + "degree": 168, + "degreeMatches": true, + "expectedDegree": 168, + "explicitId": "sha256:059a811c9a7cd528f570d50749bc8f1cbd39db48a3f97528f75a99dae4d0e1bf", + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplicationElement.java", + "id": "sha256:059a811c9a7cd528f570d50749bc8f1cbd39db48a3f97528f75a99dae4d0e1bf", + "identityCandidates": 1, + "label": "MApplicationElement", + "line": 57, + "rank": 96, + "sourceAnchorMatches": true + }, + { + "degree": 168, + "degreeMatches": true, + "expectedDegree": 168, + "explicitId": "sha256:5b059637fb7ae01c546b6af2c8438935600f598662efeced21dac62b6f356501", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IActionBars.java", + "id": "sha256:5b059637fb7ae01c546b6af2c8438935600f598662efeced21dac62b6f356501", + "identityCandidates": 1, + "label": "IActionBars", + "line": 61, + "rank": 97, + "sourceAnchorMatches": true + }, + { + "degree": 168, + "degreeMatches": true, + "expectedDegree": 168, + "explicitId": "sha256:7e70d4db7cc2eb0eb7aa0cc8932cf38f7ea0ce7886c11e6e20176bbb7d3179b0", + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/services/IServiceLocator.java", + "id": "sha256:7e70d4db7cc2eb0eb7aa0cc8932cf38f7ea0ce7886c11e6e20176bbb7d3179b0", + "identityCandidates": 1, + "label": "IServiceLocator", + "line": 35, + "rank": 98, + "sourceAnchorMatches": true + }, + { + "degree": 166, + "degreeMatches": true, + "expectedDegree": 166, + "explicitId": "sha256:51dd50ef136297b31c010eb4995f10138bc31f38f2921c286c6785e7496370fc", + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/WritableValue.java", + "id": "sha256:51dd50ef136297b31c010eb4995f10138bc31f38f2921c286c6785e7496370fc", + "identityCandidates": 1, + "label": "WritableValue", + "line": 38, + "rank": 99, + "sourceAnchorMatches": true + }, + { + "degree": 162, + "degreeMatches": true, + "expectedDegree": 162, + "explicitId": "sha256:cef0e0438f1e55e5fb7c73943f4f41bff352edc21fb3734197cba5c3bccef2c5", + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Binding.java", + "id": "sha256:cef0e0438f1e55e5fb7c73943f4f41bff352edc21fb3734197cba5c3bccef2c5", + "identityCandidates": 1, + "label": "Binding", + "line": 78, + "rank": 100, + "sourceAnchorMatches": true + } + ], + "matchingDegrees": 100, + "matchingSourceAnchors": 100, + "question": "hubs", + "repository": "eclipse/eclipse.platform.ui", + "returned": 100, + "tool": "compass", + "verifiedIdentities": 100 + }, + "graphCounts": { + "edges": 347974, + "nodes": 95084 + }, + "omittedDiagnosticLines": 0, + "repository": "eclipse/eclipse.platform.ui", + "secondary": [ + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 36, + "returnedRecordAppearances": 36, + "status": "checked" + }, + "sampleId": 6374724, + "selection": { + "matchedIds": [ + "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "line": 41, + "symbols": [ + "BindingModel" + ] + } + ], + "selector": "sha256:19493ab9c12f3b0ab775c52f12687b9327bc43c70e5c7eb6115b3e8bb0d545c8", + "status": "resolved" + } + }, + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 54, + "returnedRecordAppearances": 54, + "status": "checked" + }, + "sampleId": 6391534, + "selection": { + "matchedIds": [ + "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "line": 54, + "symbols": [ + "SimpleValueProperty" + ] + } + ], + "selector": "sha256:d8b62f52c4eeed3f41b8b77916ef90210954a1c77765c6490ead2dc50fecb36d", + "status": "resolved" + } + }, + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 11, + "returnedRecordAppearances": 11, + "status": "checked" + }, + "sampleId": 6406137, + "selection": { + "matchedIds": [ + "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "line": 24, + "symbols": [ + "CSSValueListImpl" + ] + } + ], + "selector": "sha256:1857208687a84f9f0f8e736b3ed1f76b46b4bc0b85345e356df3fbb0ae576e06", + "status": "resolved" + } + }, + { + "projection": { + "explicitDestinationSupported": false, + "fullProjectionMatches": true, + "returnedGroups": 21, + "returnedRecordAppearances": 21, + "status": "checked" + }, + "sampleId": 6413795, + "selection": { + "matchedIds": [ + "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6" + ], + "returnedAnchors": [ + { + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "line": 45, + "symbols": [ + "DeprecatedUIWizardsAuto" + ] + } + ], + "selector": "sha256:26ec99adc1d99312ea705b696d5e2607285986d209675599bbcf7b3522bb9ba6", + "status": "resolved" + } + } + ], + "tool": "compass" + }, + { + "build": { + "exitCode": 0, + "graphBytes": 189557807, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef", + "timedOut": false, + "withinRegisteredGraphBound": true + }, + "captureError": null, + "captureStatus": "completed", + "cases": [ + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel" + ], + "rank": null, + "sampleId": 6374724 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty" + ], + "rank": null, + "sampleId": 6391534 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-none", + "graphIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl" + ], + "rank": null, + "sampleId": 6406137 + }, + { + "ambiguousOutputRanks": [], + "atCutoff": { + "10": "not-returned", + "100": "not-returned", + "50": "not-returned" + }, + "classification": "unanimous-major-critical", + "graphIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto" + ], + "rank": null, + "sampleId": 6413795 + } + ], + "connectivityChecks": [], + "cutoffs": { + "10": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 2 + }, + "unanimous-none": { + "not-returned": 2 + } + } + }, + "extractionDiagnostics": [ + { + "stream": "stderr", + "text": " warning: skill at /.claude/skills/graphify is from graphify 0.9.30, package is 0.9.67. Run 'graphify install --platform claude' to update it (a plain 'graphify install' refreshes only the detected platform).", + "textTruncated": false + } + ], + "graphConsistency": { + "executionSucceeded": true, + "explicitIdentities": 0, + "hubs": [ + { + "degree": 770, + "degreeMatches": true, + "expectedDegree": 770, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchWindow.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchwindow_iworkbenchwindow", + "identityCandidates": 1, + "label": "IWorkbenchWindow", + "line": 59, + "rank": 1 + }, + { + "degree": 677, + "identityCandidates": 2, + "label": "PlatformUI", + "rank": 2 + }, + { + "degree": 663, + "degreeMatches": true, + "expectedDegree": 663, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/engine/CSSEngine.java", + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_engine_cssengine_cssengine", + "identityCandidates": 1, + "label": "CSSEngine", + "line": 41, + "rank": 3 + }, + { + "degree": 652, + "degreeMatches": true, + "expectedDegree": 652, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/ImageDescriptor.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_resource_imagedescriptor_imagedescriptor", + "identityCandidates": 1, + "label": "ImageDescriptor", + "line": 59, + "rank": 4 + }, + { + "degree": 601, + "degreeMatches": true, + "expectedDegree": 601, + "file": "tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java", + "id": "tests_org_eclipse_e4_ui_tests_src_org_eclipse_e4_ui_tests_application_epartservicetest_epartservicetest", + "identityCandidates": 1, + "label": "EPartServiceTest", + "line": 56, + "rank": 5 + }, + { + "degree": 584, + "degreeMatches": true, + "expectedDegree": 584, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/IObservableValue.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_value_iobservablevalue_iobservablevalue", + "identityCandidates": 1, + "label": "IObservableValue", + "line": 38, + "rank": 6 + }, + { + "degree": 569, + "degreeMatches": true, + "expectedDegree": 569, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MUIElement.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_muielement_muielement", + "identityCandidates": 1, + "label": "MUIElement", + "line": 54, + "rank": 7 + }, + { + "degree": 556, + "degreeMatches": true, + "expectedDegree": 556, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPage.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpage_iworkbenchpage", + "identityCandidates": 1, + "label": "IWorkbenchPage", + "line": 46, + "rank": 8 + }, + { + "degree": 530, + "degreeMatches": true, + "expectedDegree": 530, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpart_iworkbenchpart", + "identityCandidates": 1, + "label": "IWorkbenchPart", + "line": 99, + "rank": 9 + }, + { + "degree": 522, + "degreeMatches": true, + "expectedDegree": 522, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/Realm.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_realm_realm", + "identityCandidates": 1, + "label": "Realm", + "line": 84, + "rank": 10 + }, + { + "degree": 508, + "degreeMatches": true, + "expectedDegree": 508, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/IStructuredSelection.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_istructuredselection_istructuredselection", + "identityCandidates": 1, + "label": "IStructuredSelection", + "line": 22, + "rank": 11 + }, + { + "degree": 501, + "degreeMatches": true, + "expectedDegree": 501, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/Viewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewer_viewer", + "identityCandidates": 1, + "label": "Viewer", + "line": 43, + "rank": 12 + }, + { + "degree": 496, + "degreeMatches": true, + "expectedDegree": 496, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IMemento.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_imemento_imemento", + "identityCandidates": 1, + "label": "IMemento", + "line": 57, + "rank": 13 + }, + { + "degree": 456, + "degreeMatches": true, + "expectedDegree": 456, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredSelection.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_structuredselection_structuredselection", + "identityCandidates": 1, + "label": "StructuredSelection", + "line": 33, + "rank": 14 + }, + { + "degree": 454, + "degreeMatches": true, + "expectedDegree": 454, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelection.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselection_iselection", + "identityCandidates": 1, + "label": "ISelection", + "line": 23, + "rank": 15 + }, + { + "degree": 402, + "degreeMatches": true, + "expectedDegree": 402, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IAction.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_iaction_iaction", + "identityCandidates": 1, + "label": "IAction", + "line": 47, + "rank": 16 + }, + { + "degree": 388, + "degreeMatches": true, + "expectedDegree": 388, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MPart.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_basic_mpart_mpart", + "identityCandidates": 1, + "label": "MPart", + "line": 56, + "rank": 17 + }, + { + "degree": 387, + "degreeMatches": true, + "expectedDegree": 387, + "file": "tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/UITestCase.java", + "id": "tests_org_eclipse_ui_tests_harness_src_org_eclipse_ui_tests_harness_util_uitestcase_uitestcase", + "identityCandidates": 1, + "label": "UITestCase", + "line": 49, + "rank": 18 + }, + { + "degree": 363, + "degreeMatches": true, + "expectedDegree": 363, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ExecutionEvent.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_executionevent_executionevent", + "identityCandidates": 1, + "label": "ExecutionEvent", + "line": 36, + "rank": 19 + }, + { + "degree": 342, + "degreeMatches": true, + "expectedDegree": 342, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/Action.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_action_action", + "identityCandidates": 1, + "label": "Action", + "line": 29, + "rank": 20 + }, + { + "degree": 342, + "degreeMatches": true, + "expectedDegree": 342, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchplugin_workbenchplugin", + "identityCandidates": 1, + "label": "WorkbenchPlugin", + "line": 111, + "rank": 21 + }, + { + "degree": 339, + "degreeMatches": true, + "expectedDegree": 339, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/MenuManager.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_menumanager_menumanager", + "identityCandidates": 1, + "label": "MenuManager", + "line": 48, + "rank": 22 + }, + { + "degree": 338, + "identityCandidates": 4, + "label": "IWorkbench", + "rank": 23 + }, + { + "degree": 330, + "degreeMatches": true, + "expectedDegree": 330, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/IObservable.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_iobservable_iobservable", + "identityCandidates": 1, + "label": "IObservable", + "line": 36, + "rank": 24 + }, + { + "degree": 318, + "degreeMatches": true, + "expectedDegree": 318, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_tableviewer_tableviewer", + "identityCandidates": 1, + "label": "TableViewer", + "line": 69, + "rank": 25 + }, + { + "degree": 310, + "degreeMatches": true, + "expectedDegree": 310, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/IPropertyChangeListener.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_ipropertychangelistener_ipropertychangelistener", + "identityCandidates": 1, + "label": "IPropertyChangeListener", + "line": 37, + "rank": 26 + }, + { + "degree": 308, + "degreeMatches": true, + "expectedDegree": 308, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_treeviewer_treeviewer", + "identityCandidates": 1, + "label": "TreeViewer", + "line": 69, + "rank": 27 + }, + { + "degree": 308, + "degreeMatches": true, + "expectedDegree": 308, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchpage_workbenchpage", + "identityCandidates": 1, + "label": "WorkbenchPage", + "line": 197, + "rank": 28 + }, + { + "degree": 302, + "degreeMatches": true, + "expectedDegree": 302, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplication.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_mapplication_mapplication", + "identityCandidates": 1, + "label": "MApplication", + "line": 70, + "rank": 29 + }, + { + "degree": 297, + "degreeMatches": true, + "expectedDegree": 297, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditorpart_ieditorpart", + "identityCandidates": 1, + "label": "IEditorPart", + "line": 55, + "rank": 30 + }, + { + "degree": 295, + "degreeMatches": true, + "expectedDegree": 295, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IContributionItem.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_icontributionitem_icontributionitem", + "identityCandidates": 1, + "label": "IContributionItem", + "line": 42, + "rank": 31 + }, + { + "degree": 294, + "degreeMatches": true, + "expectedDegree": 294, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_structuredviewer_structuredviewer", + "identityCandidates": 1, + "label": "StructuredViewer", + "line": 65, + "rank": 32 + }, + { + "degree": 268, + "degreeMatches": true, + "expectedDegree": 268, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkingSet.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkingset_iworkingset", + "identityCandidates": 1, + "label": "IWorkingSet", + "line": 29, + "rank": 33 + }, + { + "degree": 263, + "degreeMatches": true, + "expectedDegree": 263, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/action/IMenuManager.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_action_imenumanager_imenumanager", + "identityCandidates": 1, + "label": "IMenuManager", + "line": 32, + "rank": 34 + }, + { + "degree": 262, + "degreeMatches": true, + "expectedDegree": 262, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/IObservableList.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_list_iobservablelist_iobservablelist", + "identityCandidates": 1, + "label": "IObservableList", + "line": 44, + "rank": 35 + }, + { + "degree": 250, + "degreeMatches": true, + "expectedDegree": 250, + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSS2PropertiesImpl.java", + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_css2propertiesimpl_css2propertiesimpl", + "identityCandidates": 1, + "label": "CSS2PropertiesImpl", + "line": 24, + "rank": 36 + }, + { + "degree": 248, + "degreeMatches": true, + "expectedDegree": 248, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/basic/MWindow.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_basic_mwindow_mwindow", + "identityCandidates": 1, + "label": "MWindow", + "line": 56, + "rank": 37 + }, + { + "degree": 243, + "degreeMatches": true, + "expectedDegree": 243, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/ParameterizedCommand.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_parameterizedcommand_parameterizedcommand", + "identityCandidates": 1, + "label": "ParameterizedCommand", + "line": 41, + "rank": 38 + }, + { + "degree": 242, + "degreeMatches": true, + "expectedDegree": 242, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorInput.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditorinput_ieditorinput", + "identityCandidates": 1, + "label": "IEditorInput", + "line": 54, + "rank": 39 + }, + { + "degree": 237, + "degreeMatches": true, + "expectedDegree": 237, + "file": "bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/EModelService.java", + "id": "bundles_org_eclipse_e4_ui_workbench_src_org_eclipse_e4_ui_workbench_modeling_emodelservice_emodelservice", + "identityCandidates": 1, + "label": "EModelService", + "line": 41, + "rank": 40 + }, + { + "degree": 237, + "degreeMatches": true, + "expectedDegree": 237, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchwindow_workbenchwindow", + "identityCandidates": 1, + "label": "WorkbenchWindow", + "line": 209, + "rank": 41 + }, + { + "degree": 237, + "degreeMatches": true, + "expectedDegree": 237, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_preference_ipreferencestore_ipreferencestore", + "identityCandidates": 1, + "label": "IPreferenceStore", + "line": 59, + "rank": 42 + }, + { + "degree": 233, + "identityCandidates": 5, + "label": "LabelProvider", + "rank": 43 + }, + { + "degree": 226, + "degreeMatches": true, + "expectedDegree": 226, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ITreeContentProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_itreecontentprovider_itreecontentprovider", + "identityCandidates": 1, + "label": "ITreeContentProvider", + "line": 22, + "rank": 44 + }, + { + "degree": 226, + "degreeMatches": true, + "expectedDegree": 226, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/set/IObservableSet.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_set_iobservableset_iobservableset", + "identityCandidates": 1, + "label": "IObservableSet", + "line": 43, + "rank": 45 + }, + { + "degree": 218, + "identityCandidates": 2, + "label": "AbstractHandler", + "rank": 46 + }, + { + "degree": 218, + "degreeMatches": true, + "expectedDegree": 218, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbench_workbench", + "identityCandidates": 1, + "label": "Workbench", + "line": 279, + "rank": 47 + }, + { + "degree": 213, + "degreeMatches": true, + "expectedDegree": 213, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/resource/JFaceResources.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_resource_jfaceresources_jfaceresources", + "identityCandidates": 1, + "label": "JFaceResources", + "line": 57, + "rank": 48 + }, + { + "degree": 207, + "degreeMatches": true, + "expectedDegree": 207, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/MessageDialog.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_messagedialog_messagedialog", + "identityCandidates": 1, + "label": "MessageDialog", + "line": 40, + "rank": 49 + }, + { + "degree": 203, + "degreeMatches": true, + "expectedDegree": 203, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPerspectiveDescriptor.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iperspectivedescriptor_iperspectivedescriptor", + "identityCandidates": 1, + "label": "IPerspectiveDescriptor", + "line": 49, + "rank": 50 + }, + { + "degree": 193, + "degreeMatches": true, + "expectedDegree": 193, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/Dialog.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_dialog_dialog", + "identityCandidates": 1, + "label": "Dialog", + "line": 65, + "rank": 51 + }, + { + "degree": 193, + "identityCandidates": 2, + "label": "BindingTestSuite", + "rank": 52 + }, + { + "degree": 190, + "degreeMatches": true, + "expectedDegree": 190, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/CellEditor.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_celleditor_celleditor", + "identityCandidates": 1, + "label": "CellEditor", + "line": 45, + "rank": 53 + }, + { + "degree": 184, + "degreeMatches": true, + "expectedDegree": 184, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ILabelProviderListener.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_ilabelproviderlistener_ilabelproviderlistener", + "identityCandidates": 1, + "label": "ILabelProviderListener", + "line": 23, + "rank": 54 + }, + { + "degree": 183, + "degreeMatches": true, + "expectedDegree": 183, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IViewPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iviewpart_iviewpart", + "identityCandidates": 1, + "label": "IViewPart", + "line": 58, + "rank": 55 + }, + { + "degree": 178, + "identityCandidates": 2, + "label": "Command", + "rank": 56 + }, + { + "degree": 173, + "degreeMatches": true, + "expectedDegree": 173, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogSettings.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_idialogsettings_idialogsettings", + "identityCandidates": 1, + "label": "IDialogSettings", + "line": 28, + "rank": 57 + }, + { + "degree": 172, + "degreeMatches": true, + "expectedDegree": 172, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/MElementContainer.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_melementcontainer_melementcontainer", + "identityCandidates": 1, + "label": "MElementContainer", + "line": 50, + "rank": 58 + }, + { + "degree": 170, + "degreeMatches": true, + "expectedDegree": 170, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_workbenchmessages_workbenchmessages", + "identityCandidates": 1, + "label": "WorkbenchMessages", + "line": 33, + "rank": 59 + }, + { + "degree": 169, + "degreeMatches": true, + "expectedDegree": 169, + "file": "tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java", + "id": "tests_org_eclipse_jface_tests_databinding_src_org_eclipse_jface_tests_databinding_abstractdefaultrealmtestcase_abstractdefaultrealmtestcase", + "identityCandidates": 1, + "label": "AbstractDefaultRealmTestCase", + "line": 30, + "rank": 60 + }, + { + "degree": 167, + "degreeMatches": true, + "expectedDegree": 167, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_columnviewer_columnviewer", + "identityCandidates": 1, + "label": "ColumnViewer", + "line": 47, + "rank": 61 + }, + { + "degree": 166, + "degreeMatches": true, + "expectedDegree": 166, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_abstracttreeviewer_abstracttreeviewer", + "identityCandidates": 1, + "label": "AbstractTreeViewer", + "line": 73, + "rank": 62 + }, + { + "degree": 165, + "degreeMatches": true, + "expectedDegree": 165, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IActionBars.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iactionbars_iactionbars", + "identityCandidates": 1, + "label": "IActionBars", + "line": 61, + "rank": 63 + }, + { + "degree": 164, + "degreeMatches": true, + "expectedDegree": 164, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/PartInitException.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_partinitexception_partinitexception", + "identityCandidates": 1, + "label": "PartInitException", + "line": 26, + "rank": 64 + }, + { + "degree": 164, + "degreeMatches": true, + "expectedDegree": 164, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPartReference.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_iworkbenchpartreference_iworkbenchpartreference", + "identityCandidates": 1, + "label": "IWorkbenchPartReference", + "line": 29, + "rank": 65 + }, + { + "degree": 162, + "degreeMatches": true, + "expectedDegree": 162, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerCell.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewercell_viewercell", + "identityCandidates": 1, + "label": "ViewerCell", + "line": 34, + "rank": 66 + }, + { + "degree": 161, + "degreeMatches": true, + "expectedDegree": 161, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/services/IServiceLocator.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_services_iservicelocator_iservicelocator", + "identityCandidates": 1, + "label": "IServiceLocator", + "line": 35, + "rank": 67 + }, + { + "degree": 161, + "degreeMatches": true, + "expectedDegree": 161, + "file": "bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java", + "id": "bundles_org_eclipse_ui_ide_src_org_eclipse_ui_internal_ide_ideworkbenchplugin_ideworkbenchplugin", + "identityCandidates": 1, + "label": "IDEWorkbenchPlugin", + "line": 65, + "rank": 68 + }, + { + "degree": 155, + "identityCandidates": 2, + "label": "ExecutionException", + "rank": 69 + }, + { + "degree": 154, + "degreeMatches": true, + "expectedDegree": 154, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ILabelProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_ilabelprovider_ilabelprovider", + "identityCandidates": 1, + "label": "ILabelProvider", + "line": 23, + "rank": 70 + }, + { + "degree": 154, + "degreeMatches": true, + "expectedDegree": 154, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselectionprovider_iselectionprovider", + "identityCandidates": 1, + "label": "ISelectionProvider", + "line": 23, + "rank": 71 + }, + { + "degree": 153, + "degreeMatches": true, + "expectedDegree": 153, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/MApplicationElement.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_mapplicationelement_mapplicationelement", + "identityCandidates": 1, + "label": "MApplicationElement", + "line": 57, + "rank": 72 + }, + { + "degree": 153, + "degreeMatches": true, + "expectedDegree": 153, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_wizard_wizarddialog_wizarddialog", + "identityCandidates": 1, + "label": "WizardDialog", + "line": 85, + "rank": 73 + }, + { + "degree": 150, + "degreeMatches": true, + "expectedDegree": 150, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionChangedListener.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_iselectionchangedlistener_iselectionchangedlistener", + "identityCandidates": 1, + "label": "ISelectionChangedListener", + "line": 24, + "rank": 74 + }, + { + "degree": 149, + "degreeMatches": true, + "expectedDegree": 149, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerComparator.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewercomparator_viewercomparator", + "identityCandidates": 1, + "label": "ViewerComparator", + "line": 49, + "rank": 75 + }, + { + "degree": 148, + "degreeMatches": true, + "expectedDegree": 148, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/IObservableCollection.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_iobservablecollection_iobservablecollection", + "identityCandidates": 1, + "label": "IObservableCollection", + "line": 41, + "rank": 76 + }, + { + "degree": 146, + "degreeMatches": true, + "expectedDegree": 146, + "file": "bundles/org.eclipse.core.databinding/src/org/eclipse/core/databinding/DataBindingContext.java", + "id": "bundles_org_eclipse_core_databinding_src_org_eclipse_core_databinding_databindingcontext_databindingcontext", + "identityCandidates": 1, + "label": "DataBindingContext", + "line": 58, + "rank": 77 + }, + { + "degree": 146, + "degreeMatches": true, + "expectedDegree": 146, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/SafeRunnable.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_saferunnable_saferunnable", + "identityCandidates": 1, + "label": "SafeRunnable", + "line": 31, + "rank": 78 + }, + { + "degree": 145, + "degreeMatches": true, + "expectedDegree": 145, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/advanced/MPerspective.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_advanced_mperspective_mperspective", + "identityCandidates": 1, + "label": "MPerspective", + "line": 52, + "rank": 79 + }, + { + "degree": 144, + "degreeMatches": true, + "expectedDegree": 144, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/map/IObservableMap.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_map_iobservablemap_iobservablemap", + "identityCandidates": 1, + "label": "IObservableMap", + "line": 45, + "rank": 80 + }, + { + "degree": 144, + "identityCandidates": 4, + "label": "Binding", + "rank": 81 + }, + { + "degree": 142, + "degreeMatches": true, + "expectedDegree": 142, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerFilter.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_viewerfilter_viewerfilter", + "identityCandidates": 1, + "label": "ViewerFilter", + "line": 30, + "rank": 82 + }, + { + "degree": 141, + "degreeMatches": true, + "expectedDegree": 141, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogConstants.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_dialogs_idialogconstants_idialogconstants", + "identityCandidates": 1, + "label": "IDialogConstants", + "line": 45, + "rank": 83 + }, + { + "degree": 140, + "degreeMatches": true, + "expectedDegree": 140, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/TriggerSequence.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_bindings_triggersequence_triggersequence", + "identityCandidates": 1, + "label": "TriggerSequence", + "line": 28, + "rank": 84 + }, + { + "degree": 139, + "degreeMatches": true, + "expectedDegree": 139, + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/IValueProperty.java", + "id": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_ivalueproperty_ivalueproperty", + "identityCandidates": 1, + "label": "IValueProperty", + "line": 47, + "rank": 85 + }, + { + "degree": 137, + "degreeMatches": true, + "expectedDegree": 137, + "file": "bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/MMenu.java", + "id": "bundles_org_eclipse_e4_ui_model_workbench_src_org_eclipse_e4_ui_model_application_ui_menu_mmenu_mmenu", + "identityCandidates": 1, + "label": "MMenu", + "line": 41, + "rank": 86 + }, + { + "degree": 135, + "degreeMatches": true, + "expectedDegree": 135, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/util/PropertyChangeEvent.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_util_propertychangeevent_propertychangeevent", + "identityCandidates": 1, + "label": "PropertyChangeEvent", + "line": 36, + "rank": 87 + }, + { + "degree": 135, + "identityCandidates": 2, + "label": "Window", + "rank": 88 + }, + { + "degree": 134, + "degreeMatches": true, + "expectedDegree": 134, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorDescriptor.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_ieditordescriptor_ieditordescriptor", + "identityCandidates": 1, + "label": "IEditorDescriptor", + "line": 36, + "rank": 89 + }, + { + "degree": 132, + "degreeMatches": true, + "expectedDegree": 132, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/IStructuredContentProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_istructuredcontentprovider_istructuredcontentprovider", + "identityCandidates": 1, + "label": "IStructuredContentProvider", + "line": 21, + "rank": 90 + }, + { + "degree": 128, + "degreeMatches": true, + "expectedDegree": 128, + "file": "bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/value/WritableValue.java", + "id": "bundles_org_eclipse_core_databinding_observable_src_org_eclipse_core_databinding_observable_value_writablevalue_writablevalue", + "identityCandidates": 1, + "label": "WritableValue", + "line": 38, + "rank": 91 + }, + { + "degree": 127, + "degreeMatches": true, + "expectedDegree": 127, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/plugin/AbstractUIPlugin.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_plugin_abstractuiplugin_abstractuiplugin", + "identityCandidates": 1, + "label": "AbstractUIPlugin", + "line": 126, + "rank": 92 + }, + { + "degree": 125, + "degreeMatches": true, + "expectedDegree": 125, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/IUndoContext.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_operations_iundocontext_iundocontext", + "identityCandidates": 1, + "label": "IUndoContext", + "line": 37, + "rank": 93 + }, + { + "degree": 125, + "degreeMatches": true, + "expectedDegree": 125, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_bindings_bindingmanager_bindingmanager", + "identityCandidates": 1, + "label": "BindingManager", + "line": 70, + "rank": 94 + }, + { + "degree": 124, + "degreeMatches": true, + "expectedDegree": 124, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/operation/IRunnableWithProgress.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_operation_irunnablewithprogress_irunnablewithprogress", + "identityCandidates": 1, + "label": "IRunnableWithProgress", + "line": 33, + "rank": 95 + }, + { + "degree": 123, + "degreeMatches": true, + "expectedDegree": 123, + "file": "bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentService.java", + "id": "bundles_org_eclipse_ui_navigator_src_org_eclipse_ui_internal_navigator_navigatorcontentservice_navigatorcontentservice", + "identityCandidates": 1, + "label": "NavigatorContentService", + "line": 85, + "rank": 96 + }, + { + "degree": 121, + "degreeMatches": true, + "expectedDegree": 121, + "file": "bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/IUndoableOperation.java", + "id": "bundles_org_eclipse_core_commands_src_org_eclipse_core_commands_operations_iundoableoperation_iundoableoperation", + "identityCandidates": 1, + "label": "IUndoableOperation", + "line": 37, + "rank": 97 + }, + { + "degree": 121, + "degreeMatches": true, + "expectedDegree": 121, + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/ViewPart.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_part_viewpart_viewpart", + "identityCandidates": 1, + "label": "ViewPart", + "line": 69, + "rank": 98 + }, + { + "degree": 119, + "degreeMatches": true, + "expectedDegree": 119, + "file": "bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ArrayContentProvider.java", + "id": "bundles_org_eclipse_jface_src_org_eclipse_jface_viewers_arraycontentprovider_arraycontentprovider", + "identityCandidates": 1, + "label": "ArrayContentProvider", + "line": 30, + "rank": 99 + }, + { + "degree": 119, + "degreeMatches": true, + "expectedDegree": 119, + "file": "bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java", + "id": "bundles_org_eclipse_ui_navigator_src_org_eclipse_ui_navigator_inavigatorcontentservice_inavigatorcontentservice", + "identityCandidates": 1, + "label": "INavigatorContentService", + "line": 104, + "rank": 100 + } + ], + "matchingDegrees": 91, + "matchingSourceAnchors": 0, + "question": "hubs", + "repository": "eclipse/eclipse.platform.ui", + "returned": 100, + "tool": "graphify", + "verifiedIdentities": 91 + }, + "graphCounts": { + "edges": 258146, + "nodes": 70420 + }, + "omittedDiagnosticLines": 0, + "repository": "eclipse/eclipse.platform.ui", + "secondary": [ + { + "projection": { + "expectedRows": 22, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 22 + }, + "sampleId": 6374724, + "selection": { + "matchedIds": [ + "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/BindingModel.java", + "id": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel", + "line": 41, + "symbols": [ + "BindingModel" + ] + } + ], + "selector": "bundles_org_eclipse_ui_workbench_eclipse_ui_org_eclipse_ui_internal_keys_model_bindingmodel_bindingmodel", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 52, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 52 + }, + "sampleId": 6391534, + "selection": { + "matchedIds": [ + "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/SimpleValueProperty.java", + "id": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty", + "line": 54, + "symbols": [ + "SimpleValueProperty" + ] + } + ], + "selector": "bundles_org_eclipse_core_databinding_property_src_org_eclipse_core_databinding_property_value_simplevalueproperty_simplevalueproperty", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 11, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 11 + }, + "sampleId": 6406137, + "selection": { + "matchedIds": [ + "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl" + ], + "returnedAnchors": [ + { + "file": "bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/CSSValueListImpl.java", + "id": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl", + "line": 24, + "symbols": [ + "CSSValueListImpl" + ] + } + ], + "selector": "bundles_org_eclipse_e4_ui_css_core_src_org_eclipse_e4_ui_css_core_impl_dom_cssvaluelistimpl_cssvaluelistimpl", + "status": "resolved" + } + }, + { + "projection": { + "expectedRows": 19, + "explicitIdsAvailable": false, + "extra": [], + "fullDisplayedTriplesMatch": true, + "missing": [], + "returnedRows": 19 + }, + "sampleId": 6413795, + "selection": { + "matchedIds": [ + "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto" + ], + "returnedAnchors": [ + { + "file": "tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIWizardsAuto.java", + "id": "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto", + "line": 45, + "symbols": [ + "DeprecatedUIWizardsAuto" + ] + } + ], + "selector": "tests_org_eclipse_ui_tests_eclipse_ui_tests_org_eclipse_ui_tests_dialogs_deprecateduiwizardsauto_deprecateduiwizardsauto", + "status": "resolved" + } + } + ], + "tool": "graphify" + } + ], + "schema": "compass.mlcq-release-verification/1", + "scorerSha256": "efecb4fe026e464addb385c312766b5f58fbf8b4cb8b47eb3d43409602511202", + "verifiedToolCalls": 36, + "verifierSha256": "0f9a00d1d3b29a54d03235f5f314f06e24151c8c9e919ed5e399bc83b2122d04" + }, + "repeat": { + "byteIdentical": true, + "sha256": "0639506bf5068498fa9fe31c9c1439171c9d8558d314b39d8e3940abc7bf7886" + }, + "artifacts": { + "prepare_inputs.py": "d664ae04b5439e8bbafc507d086fb4cb892cc1e9cb080ea1a5412191072503d2", + "inputs.json": "663beb33e986c695ec4a6ae8864651f9838baa4c0d183a2da021d8d3197b951e", + "capture.py": "5077ff5208589a818173e91247e4cb4b18b4e2a2a6c37914e482291204139a65", + "capture/capture.json": "72e8fa540b298a1e426218b5c72b35a7e11eb049cf82c09734a3ec2bce7264d6", + "verify_capture.py": "0f9a00d1d3b29a54d03235f5f314f06e24151c8c9e919ed5e399bc83b2122d04", + "verified-capture.json": "0639506bf5068498fa9fe31c9c1439171c9d8558d314b39d8e3940abc7bf7886", + "verified-capture-repeat.json": "0639506bf5068498fa9fe31c9c1439171c9d8558d314b39d8e3940abc7bf7886", + "write_report.py": "08490840b8010f9b8aca8a33e6d8de4e5f4225ed3333a1c8855257158bb6aede" + }, + "primaryTotals": { + "compass": { + "10": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + } + }, + "graphify": { + "10": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "50": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + }, + "100": { + "unanimous-major-critical": { + "not-returned": 4 + }, + "unanimous-none": { + "not-returned": 4 + } + } + } + }, + "extractionObservations": [ + { + "repository": "apache/cloudstack", + "tool": "compass", + "exit_code": 0, + "timed_out": false, + "wall_ms": 280053, + "graphBytes": 671502979, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "originalWithinRegisteredGraphBound": false, + "withinRegisteredGraphBound": true + }, + { + "repository": "apache/cloudstack", + "tool": "graphify", + "exit_code": 0, + "timed_out": false, + "wall_ms": 88899, + "graphBytes": 227334534, + "graphSha256": "8ef3ace655bb60a001851e911737b7995d7da081b04459441b02ab6b68242f72", + "originalWithinRegisteredGraphBound": true, + "withinRegisteredGraphBound": true + }, + { + "repository": "eclipse/eclipse.platform.ui", + "tool": "compass", + "exit_code": 0, + "timed_out": false, + "wall_ms": 671990, + "graphBytes": 477211091, + "graphSha256": "03eabe113de50280ef09f4d8a10bf1bdc78ebcaf9b1b4ffe4e7fcf3f90ffcd74", + "originalWithinRegisteredGraphBound": false, + "withinRegisteredGraphBound": true + }, + { + "repository": "eclipse/eclipse.platform.ui", + "tool": "graphify", + "exit_code": 0, + "timed_out": false, + "wall_ms": 65246, + "graphBytes": 189557807, + "graphSha256": "cfdc1f9f8db069df24854f5a0786d8777a9daa2e33615ed44ae39e1189b1cdef", + "originalWithinRegisteredGraphBound": true, + "withinRegisteredGraphBound": true + } + ], + "limitations": [ + "This reuses known classes, ratings and requests. No held-out or independent human-adjudication claim.", + "Native hub retrieval measures degree ranking, not a validated god-object classifier. Missing rows are not negative classifier decisions; unlabeled hubs do not establish precision.", + "The pre-cache release baseline also completes CloudStack. Recovery depends on build profile and larger artifact admission, and cannot be attributed solely to the SQL cache.", + "The CloudStack Compass graph is freshly produced by the cache candidate; the Eclipse Compass graph is the original frozen partial graph. Both are queried with the same release server, with producer/server provenance kept separate.", + "Partial-graph warnings, unavailable cases, ambiguous labels and query failures remain explicit. Source-assisted resolution/neighbor diagnostics cannot replace native ranking scores.", + "Identical API request limits do not equalize graph coverage: frozen Graphify skipped all 119 CloudStack SQL files. No controlled tool-speed ranking follows.", + "Graph consistency and exact declaration coordinates do not prove source-edge correctness, complete extraction, responsibility synthesis, authored explanation quality or functional communities." + ], + "coverageDisclosure": { + "graphifyCloudStackSkippedSqlFiles": 119, + "missingOptionalDependency": "tree_sitter_sql", + "otherFilesWithSyntaxErrors": 3, + "sourceLog": "mlcq-god-audit-01/graphs/apache-cloudstack/graphify.stderr", + "sourceLogSha256": "5cc985f15fbdf37e6b6af1b427f317f0c8efba81984873e626ce209c149e73dc", + "interpretation": "The frozen Graphify installation reported skipping all SQL files and partially extracting other files with syntax errors. Whole-repository request scope did not yield equal emitted language coverage. No environment, graph, admission outcome or query score is changed by this disclosure." + }, + "diagnosticPathRedaction": "Diagnostic text replaces local home, evaluation and repository roots with descriptive placeholders. Original logs and verifier outputs remain hash-bound external artifacts." +} diff --git a/benchmarks/agent_query/native_explanation_development_registration.json b/benchmarks/agent_query/native_explanation_development_registration.json new file mode 100644 index 000000000..d93c1f481 --- /dev/null +++ b/benchmarks/agent_query/native_explanation_development_registration.json @@ -0,0 +1,89 @@ +{ + "schema": "compass.native-explanation-development-registration/1", + "scope": "Native explanation and source-coordinate-assisted explanation of five existing responsibility subjects across Go, Python, Java, TypeScript and Rust. Known development tasks; no held-out or population claim.", + "baselineCommit": "47ad5eba99ea2be915d2c786dd1a56597bfb2eb1", + "baselineBinary": "directed-identity-02/compass", + "baselineBinarySha256": "58199f5cfbbce9def3acb58bf019179218c8f6cbe379a3cd96ad9542e8f0b31f", + "sourceQuestionsSha256": "608314dcd5e0a9e40fc7c6b8dd9d44026ba6a9b001e881fa8504fe44cc1fc7b2", + "graphRun": "rust-index-receiver-03/run.json", + "graphRunSha256": "9a6e670114f5be83773176e54bf0c4faf45582389164dea79ad17306eee1c50c", + "tasks": [ + { + "repository": "chi", + "symbol": "Mux", + "file": "mux.go", + "startLine": 21, + "question": "Explain how Mux coordinates routing, middleware and subrouters. What state is shared by With?", + "facts": [ + "chi-1", + "chi-2", + "chi-3", + "chi-4" + ] + }, + { + "repository": "click", + "symbol": "_AtomicFile", + "file": "src/click/_compat.py", + "startLine": 455, + "question": "Explain _AtomicFile ownership, close behavior and context manager cleanup on exceptions.", + "facts": [ + "click-1", + "click-2", + "click-3", + "click-4" + ] + }, + { + "repository": "jsoup", + "symbol": "Cleaner", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 43, + "question": "Explain Cleaner responsibilities, how it uses the supplied Safelist, and whether cleaning mutates the input document.", + "facts": [ + "jsoup-1", + "jsoup-2", + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "redux", + "symbol": "createStore", + "file": "src/createStore.ts", + "startLine": 86, + "question": "Explain createStore responsibilities and how dispatch and subscriptions share state safely.", + "facts": [ + "redux-1", + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "walkdir", + "symbol": "IntoIter", + "file": "src/lib.rs", + "startLine": 566, + "question": "Explain IntoIter responsibilities, how it limits open directories, and how it detects symlink loops.", + "facts": [ + "walkdir-1", + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + } + ], + "nativeArm": "Each tool gets exactly the supplied short symbol through its public explain CLI, once, with the pinned source repository as working directory. No retries or oracle IDs. All five subjects and 20 facts remain in the denominator.", + "sourceAssistedArm": "Provide the same file/startLine/symbol to one public resolver per subject. Compass search_symbols with limits max_candidates=256,max_nodes=500,max_response_bytes=524288; Graphify get_node file::symbol. Reuse the frozen selected_id source-anchor rule: only one returned matching identity may supply an ID to explain. Function/export collisions remain unresolved; no kind-based or graph-based substitution.", + "commands": "Compass explain SELECTOR --budget 2000 --max-source-bytes 8000 --graph GRAPH; Graphify explain SELECTOR --graph GRAPH. Current directory is the same pinned source root.", + "bounds": "120 seconds and 16 MiB per CLI output stream; 60 seconds and 1 MiB per MCP response. Compass connection budget and source cap have no matching Graphify explain flags. Report actual text/source bytes; no equal-content efficiency or latency claim.", + "judgment": "Judge the same 20 complete implementation facts per arm for explicit native assertions and, separately, sufficient returned source evidence. Labels and related-symbol lists are insufficient. Source excerpts are evidence, not synthesized answers. Preserve incorrect assertions, omitted/partial facts, ambiguity, missing source, limits and every failed request. Validate every displayed source line against the pinned source and verification claim against stored digests. Graph consistency alone is not source precision.", + "sourceControl": "Neither arm gets an external source follow-up. The earlier symmetric 8000-byte source-reading workflow remains a separate comparison (11/20 Compass,13/20 Graphify); do not suppress it or combine best answers into a new score. These native commands expose unequal capabilities; source availability is an outcome, not an equal-I/O claim.", + "provenanceDiagnostic": "Inspection found that Compass marks source digest-verified even when no digest is stored. Reproduce with a native fixture before fixing. Missing, malformed, matching and stale digest cases must distinguish actual verification without rewriting graph/source inputs. This is a Compass correctness diagnostic, not a paired win.", + "limitations": [ + "Same-agent semantic review, not independent adjudication.", + "No model-generated answer or god-object label. Responsibility facts alone do not prove excessive responsibility.", + "Longer walks, broad edge precision, functional community quality and fresh confirmation remain outstanding." + ] +} diff --git a/benchmarks/agent_query/native_explanation_development_review.json b/benchmarks/agent_query/native_explanation_development_review.json new file mode 100644 index 000000000..51977e1b7 --- /dev/null +++ b/benchmarks/agent_query/native_explanation_development_review.json @@ -0,0 +1,1895 @@ +{ + "schema": "compass.native-explanation-development-review/1", + "scope": "Five existing responsibility subjects across five languages. Native short-label explain and public source-coordinate-assisted explain are separate development arms; neither is held-out, model-generated explanation quality, or god-object detection.", + "registrationCommit": "4e6ccb25", + "registrationSha256": "374dfefbe715ed1a238b46d3b071c8177881e12d3687dbeaa0939fc86dd51b0b", + "implementationCommit": "3a58309fca2da62b4f33a1002b2b380d04add6e3", + "tools": { + "compass": { + "version": "0.3.30", + "binarySha256": "52cf05fe7faacd7f00446694d9e1dbd2244347ee07159755d127e3df961b1a33" + }, + "graphify": { + "version": "0.9.67", + "environmentSha256": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535" + } + }, + "graphs": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "compassGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphifyGraphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "compassGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphifyGraphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "compassGraphSha256": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "graphifyGraphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "compassGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphifyGraphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "compassGraphSha256": "e68fbe798dcf7422184736971dcdfc29d577e1e37269ea9c43456b9f6af54cb3", + "graphifyGraphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + } + ], + "summary": { + "native": { + "compass": { + "subjects": 5, + "facts": 20, + "sourceEvidenceFacts": 7, + "explicitNativeFacts": 0, + "resolvedSubjectIdentities": 3, + "stdoutBytes": 24476, + "returnedSourceBytes": 9620 + }, + "graphify": { + "subjects": 5, + "facts": 20, + "sourceEvidenceFacts": 0, + "explicitNativeFacts": 0, + "resolvedSubjectIdentities": 5, + "stdoutBytes": 6286, + "returnedSourceBytes": 0 + } + }, + "source-assisted": { + "compass": { + "subjects": 5, + "facts": 20, + "sourceEvidenceFacts": 7, + "explicitNativeFacts": 0, + "resolvedSubjectIdentities": 4, + "stdoutBytes": 24308, + "returnedSourceBytes": 11448 + }, + "graphify": { + "subjects": 5, + "facts": 20, + "sourceEvidenceFacts": 0, + "explicitNativeFacts": 0, + "resolvedSubjectIdentities": 5, + "stdoutBytes": 6286, + "returnedSourceBytes": 0 + } + } + }, + "results": [ + { + "repository": "chi", + "tool": "compass", + "arm": "native", + "resolverStatus": "resolved", + "returnedSourceBytes": 673, + "stdoutBytes": 4981, + "sourceRows": 28, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "chi-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 242, + "endLine": 262, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "chi-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 100, + "endLine": 106, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "chi-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 278, + "endLine": 287, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "chi-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 476, + "endLine": 493, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + } + ], + "stdoutSha256": "4965b8a889af17ddb2c1b1d056459adf9c8657e4fcd86c2c2f1571f715d910f2", + "identity": "sha256:d003705234e34bbb357969b1c76ccd4cd1adadcf314b380d8ed89255dd633335", + "sourceVerificationClaim": "digest-verified", + "storedDigestMatchesFullSpan": true, + "sourceTruncated": false, + "sourceLineRange": [ + 21, + 48 + ] + }, + { + "repository": "chi", + "tool": "compass", + "arm": "source-assisted", + "resolverStatus": "resolved", + "returnedSourceBytes": 673, + "stdoutBytes": 4981, + "sourceRows": 28, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "chi-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 242, + "endLine": 262, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "chi-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 100, + "endLine": 106, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "chi-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 278, + "endLine": 287, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "chi-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 476, + "endLine": 493, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + } + ], + "stdoutSha256": "4965b8a889af17ddb2c1b1d056459adf9c8657e4fcd86c2c2f1571f715d910f2", + "identity": "sha256:d003705234e34bbb357969b1c76ccd4cd1adadcf314b380d8ed89255dd633335", + "sourceVerificationClaim": "digest-verified", + "storedDigestMatchesFullSpan": true, + "sourceTruncated": false, + "sourceLineRange": [ + 21, + 48 + ] + }, + { + "repository": "chi", + "tool": "graphify", + "arm": "native", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 1219, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "chi-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 242, + "endLine": 262, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "chi-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 100, + "endLine": 106, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "chi-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 278, + "endLine": 287, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "chi-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 476, + "endLine": 493, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "d4a4072622ae517d2b31ff3f9588e5fdf5e78d878fe937ada18a16d96c4df207", + "identity": "mux_go_chi_mux" + }, + { + "repository": "chi", + "tool": "graphify", + "arm": "source-assisted", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 1219, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "chi-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 242, + "endLine": 262, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "chi-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 100, + "endLine": 106, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "chi-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 278, + "endLine": 287, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "chi-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 476, + "endLine": 493, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "d4a4072622ae517d2b31ff3f9588e5fdf5e78d878fe937ada18a16d96c4df207", + "identity": "mux_go_chi_mux" + }, + { + "repository": "click", + "tool": "compass", + "arm": "native", + "resolverStatus": "resolved", + "returnedSourceBytes": 947, + "stdoutBytes": 2306, + "sourceRows": 34, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 4, + "judgments": [ + { + "fact": "click-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 455, + "endLine": 464, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "click-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 466, + "endLine": 471, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "click-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 473, + "endLine": 474, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "click-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 466, + "endLine": 471, + "complete": true + }, + { + "startLine": 479, + "endLine": 485, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + } + ], + "stdoutSha256": "704d4f4a5b8083a52e1b1ccd7de5b36e286558d26a9719f0871d47ead028a967", + "identity": "sha256:c7f6b2f79e825fa190c8d72b6722557840216c223547cccb255748897a8d91b6", + "sourceVerificationClaim": "digest-verified", + "storedDigestMatchesFullSpan": true, + "sourceTruncated": false, + "sourceLineRange": [ + 455, + 488 + ] + }, + { + "repository": "click", + "tool": "compass", + "arm": "source-assisted", + "resolverStatus": "resolved", + "returnedSourceBytes": 947, + "stdoutBytes": 2306, + "sourceRows": 34, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 4, + "judgments": [ + { + "fact": "click-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 455, + "endLine": 464, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "click-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 466, + "endLine": 471, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "click-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 473, + "endLine": 474, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "click-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 466, + "endLine": 471, + "complete": true + }, + { + "startLine": 479, + "endLine": 485, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + } + ], + "stdoutSha256": "704d4f4a5b8083a52e1b1ccd7de5b36e286558d26a9719f0871d47ead028a967", + "identity": "sha256:c7f6b2f79e825fa190c8d72b6722557840216c223547cccb255748897a8d91b6", + "sourceVerificationClaim": "digest-verified", + "storedDigestMatchesFullSpan": true, + "sourceTruncated": false, + "sourceLineRange": [ + 455, + 488 + ] + }, + { + "repository": "click", + "tool": "graphify", + "arm": "native", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 749, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "click-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 455, + "endLine": 464, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "click-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 466, + "endLine": 471, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "click-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 473, + "endLine": 474, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "click-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 466, + "endLine": 471, + "complete": false + }, + { + "startLine": 479, + "endLine": 485, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "ffaa667ce2758665ba1774d5422150e0a91b7c38c555924044caa42bc8b75f87", + "identity": "src_click_compat_atomicfile" + }, + { + "repository": "click", + "tool": "graphify", + "arm": "source-assisted", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 749, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "click-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 455, + "endLine": 464, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "click-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 466, + "endLine": 471, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "click-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 473, + "endLine": 474, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "click-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 466, + "endLine": 471, + "complete": false + }, + { + "startLine": 479, + "endLine": 485, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "ffaa667ce2758665ba1774d5422150e0a91b7c38c555924044caa42bc8b75f87", + "identity": "src_click_compat_atomicfile" + }, + { + "repository": "jsoup", + "tool": "compass", + "arm": "native", + "resolverStatus": "resolved", + "returnedSourceBytes": 8000, + "stdoutBytes": 13225, + "sourceRows": 164, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 3, + "judgments": [ + { + "fact": "jsoup-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 50, + "endLine": 53, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "jsoup-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 62, + "endLine": 70, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "jsoup-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 148, + "endLine": 158, + "complete": true + }, + { + "startLine": 188, + "endLine": 209, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "jsoup-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 124, + "endLine": 133, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + } + ], + "stdoutSha256": "28008e1af1ba8433403e4074ff819d23b7db49ecfe5d76c7758ed9462137a9cd", + "identity": "sha256:e800188397e3d537f837813168a0129fa6e5c7b853657e72bd20769d4d34bab9", + "sourceVerificationClaim": "digest-verified", + "storedDigestMatchesFullSpan": true, + "sourceTruncated": true, + "sourceLineRange": [ + 43, + 206 + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "arm": "source-assisted", + "resolverStatus": "resolved", + "returnedSourceBytes": 8000, + "stdoutBytes": 13225, + "sourceRows": 164, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 3, + "judgments": [ + { + "fact": "jsoup-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 50, + "endLine": 53, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "jsoup-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 62, + "endLine": 70, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + }, + { + "fact": "jsoup-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 148, + "endLine": 158, + "complete": true + }, + { + "startLine": 188, + "endLine": 209, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "jsoup-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": true, + "witnessSupport": [ + { + "startLine": 124, + "endLine": 133, + "complete": true + } + ], + "reason": "Complete source witnesses returned; source evidence is not an authored explanation." + } + ], + "stdoutSha256": "28008e1af1ba8433403e4074ff819d23b7db49ecfe5d76c7758ed9462137a9cd", + "identity": "sha256:e800188397e3d537f837813168a0129fa6e5c7b853657e72bd20769d4d34bab9", + "sourceVerificationClaim": "digest-verified", + "storedDigestMatchesFullSpan": true, + "sourceTruncated": true, + "sourceLineRange": [ + 43, + 206 + ] + }, + { + "repository": "jsoup", + "tool": "graphify", + "arm": "native", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 1185, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "jsoup-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 50, + "endLine": 53, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "jsoup-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 62, + "endLine": 70, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "jsoup-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 148, + "endLine": 158, + "complete": false + }, + { + "startLine": 188, + "endLine": 209, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "jsoup-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 124, + "endLine": 133, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "0514d4f240677e13127202c348e413fa0b31b3d5db54f674fda8a9bf0ad6ac13", + "identity": "src_main_java_org_jsoup_safety_cleaner_cleaner" + }, + { + "repository": "jsoup", + "tool": "graphify", + "arm": "source-assisted", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 1185, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "jsoup-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 50, + "endLine": 53, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "jsoup-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 62, + "endLine": 70, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "jsoup-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 148, + "endLine": 158, + "complete": false + }, + { + "startLine": 188, + "endLine": 209, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "jsoup-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 124, + "endLine": 133, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "0514d4f240677e13127202c348e413fa0b31b3d5db54f674fda8a9bf0ad6ac13", + "identity": "src_main_java_org_jsoup_safety_cleaner_cleaner" + }, + { + "repository": "redux", + "tool": "compass", + "arm": "native", + "resolverStatus": "truncated-or-unknown", + "returnedSourceBytes": 0, + "stdoutBytes": 3551, + "sourceRows": 0, + "sourceIdentityVerified": false, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "redux-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 121, + "endLine": 134, + "complete": false + } + ], + "reason": "Ambiguous subject; no implementation source returned." + }, + { + "fact": "redux-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 293, + "endLine": 302, + "complete": false + } + ], + "reason": "Ambiguous subject; no implementation source returned." + }, + { + "fact": "redux-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 152, + "endLine": 159, + "complete": false + }, + { + "startLine": 221, + "endLine": 243, + "complete": false + }, + { + "startLine": 304, + "endLine": 307, + "complete": false + } + ], + "reason": "Ambiguous subject; no implementation source returned." + }, + { + "fact": "redux-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 344, + "endLine": 394, + "complete": false + } + ], + "reason": "Ambiguous subject; no implementation source returned." + } + ], + "stdoutSha256": "b6dbce0ceb5f34ca5f514f18c01671fb9b8278d1ecffff9f3e4081315b9ec148", + "ambiguityReported": true + }, + { + "repository": "redux", + "tool": "compass", + "arm": "source-assisted", + "resolverStatus": "truncated-or-unknown", + "returnedSourceBytes": 0, + "stdoutBytes": 0, + "sourceRows": 0, + "sourceIdentityVerified": false, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "redux-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 121, + "endLine": 134, + "complete": false + } + ], + "reason": "No uniquely selected endpoint; all facts remain in denominator." + }, + { + "fact": "redux-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 293, + "endLine": 302, + "complete": false + } + ], + "reason": "No uniquely selected endpoint; all facts remain in denominator." + }, + { + "fact": "redux-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 152, + "endLine": 159, + "complete": false + }, + { + "startLine": 221, + "endLine": 243, + "complete": false + }, + { + "startLine": 304, + "endLine": 307, + "complete": false + } + ], + "reason": "No uniquely selected endpoint; all facts remain in denominator." + }, + { + "fact": "redux-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 344, + "endLine": 394, + "complete": false + } + ], + "reason": "No uniquely selected endpoint; all facts remain in denominator." + } + ] + }, + { + "repository": "redux", + "tool": "graphify", + "arm": "native", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 1798, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "redux-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 121, + "endLine": 134, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "redux-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 293, + "endLine": 302, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "redux-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 152, + "endLine": 159, + "complete": false + }, + { + "startLine": 221, + "endLine": 243, + "complete": false + }, + { + "startLine": 304, + "endLine": 307, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "redux-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 344, + "endLine": 394, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "a90b5d7358b5f491398e5c89905499b868d0120977f0acb7a84ece401e024a2c", + "identity": "src_createstore_createstore" + }, + { + "repository": "redux", + "tool": "graphify", + "arm": "source-assisted", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 1798, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "redux-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 121, + "endLine": 134, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "redux-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 293, + "endLine": 302, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "redux-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 152, + "endLine": 159, + "complete": false + }, + { + "startLine": 221, + "endLine": 243, + "complete": false + }, + { + "startLine": 304, + "endLine": 307, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "redux-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 344, + "endLine": 394, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "a90b5d7358b5f491398e5c89905499b868d0120977f0acb7a84ece401e024a2c", + "identity": "src_createstore_createstore" + }, + { + "repository": "walkdir", + "tool": "compass", + "arm": "native", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 413, + "sourceRows": 0, + "sourceIdentityVerified": false, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "walkdir-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 699, + "endLine": 724, + "complete": false + } + ], + "reason": "Ambiguous subject; no implementation source returned." + }, + { + "fact": "walkdir-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 901, + "endLine": 911, + "complete": false + } + ], + "reason": "Ambiguous subject; no implementation source returned." + }, + { + "fact": "walkdir-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 961, + "endLine": 989, + "complete": false + } + ], + "reason": "Ambiguous subject; no implementation source returned." + }, + { + "fact": "walkdir-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 873, + "endLine": 898, + "complete": false + } + ], + "reason": "Ambiguous subject; no implementation source returned." + } + ], + "stdoutSha256": "c107a1defa0426dd14fee1ab50fcc819423845553306ecc340d425de65af6b24", + "ambiguityReported": true + }, + { + "repository": "walkdir", + "tool": "compass", + "arm": "source-assisted", + "resolverStatus": "resolved", + "returnedSourceBytes": 1828, + "stdoutBytes": 3796, + "sourceRows": 41, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "walkdir-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 699, + "endLine": 724, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "walkdir-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 901, + "endLine": 911, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "walkdir-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 961, + "endLine": 989, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + }, + { + "fact": "walkdir-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 873, + "endLine": 898, + "complete": false + } + ], + "reason": "Returned declaration source does not contain every complete witness for this fact." + } + ], + "stdoutSha256": "b01ea850753a993b85d0db8943ea43fcba1cb578284149fdfb2b9ceb0ca0725f", + "identity": "sha256:ffcebdec9953195482aa66714e9b5ff49067552c7fc84d115b397aae9570aac5", + "sourceVerificationClaim": "digest-verified", + "storedDigestMatchesFullSpan": true, + "sourceTruncated": false, + "sourceLineRange": [ + 566, + 606 + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "arm": "native", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 1335, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "walkdir-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 699, + "endLine": 724, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "walkdir-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 901, + "endLine": 911, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "walkdir-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 961, + "endLine": 989, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "walkdir-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 873, + "endLine": 898, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "8e9ceb3e54f7a2709914e55b29e4d7a19d652deedcec3410913de5ab0d489459", + "identity": "src_lib_intoiter" + }, + { + "repository": "walkdir", + "tool": "graphify", + "arm": "source-assisted", + "resolverStatus": "resolved", + "returnedSourceBytes": 0, + "stdoutBytes": 1335, + "sourceRows": 0, + "sourceIdentityVerified": true, + "explicitResponsibilityFacts": 0, + "sourceEvidenceFacts": 0, + "judgments": [ + { + "fact": "walkdir-1", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 699, + "endLine": 724, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "walkdir-2", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 901, + "endLine": 911, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "walkdir-3", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 961, + "endLine": 989, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + }, + { + "fact": "walkdir-4", + "explicitNativeAssertion": false, + "sufficientSourceEvidence": false, + "witnessSupport": [ + { + "startLine": 873, + "endLine": 898, + "complete": false + } + ], + "reason": "No source excerpt; names, anchors and relationships do not establish this complete implementation fact." + } + ], + "stdoutSha256": "8e9ceb3e54f7a2709914e55b29e4d7a19d652deedcec3410913de5ab0d489459", + "identity": "src_lib_intoiter" + } + ], + "unchangedExplanationPayloads": [ + { + "repository": "chi", + "tool": "compass", + "arm": "native" + }, + { + "repository": "chi", + "tool": "compass", + "arm": "source-assisted" + }, + { + "repository": "chi", + "tool": "graphify", + "arm": "native" + }, + { + "repository": "chi", + "tool": "graphify", + "arm": "source-assisted" + }, + { + "repository": "click", + "tool": "compass", + "arm": "native" + }, + { + "repository": "click", + "tool": "compass", + "arm": "source-assisted" + }, + { + "repository": "click", + "tool": "graphify", + "arm": "native" + }, + { + "repository": "click", + "tool": "graphify", + "arm": "source-assisted" + }, + { + "repository": "jsoup", + "tool": "compass", + "arm": "native" + }, + { + "repository": "jsoup", + "tool": "compass", + "arm": "source-assisted" + }, + { + "repository": "jsoup", + "tool": "graphify", + "arm": "native" + }, + { + "repository": "jsoup", + "tool": "graphify", + "arm": "source-assisted" + }, + { + "repository": "redux", + "tool": "compass", + "arm": "native" + }, + { + "repository": "redux", + "tool": "graphify", + "arm": "native" + }, + { + "repository": "redux", + "tool": "graphify", + "arm": "source-assisted" + }, + { + "repository": "walkdir", + "tool": "compass", + "arm": "native" + }, + { + "repository": "walkdir", + "tool": "compass", + "arm": "source-assisted" + }, + { + "repository": "walkdir", + "tool": "graphify", + "arm": "native" + }, + { + "repository": "walkdir", + "tool": "graphify", + "arm": "source-assisted" + } + ], + "priorSymmetricSourceRead": { + "compassFacts": 11, + "graphifyFacts": 13, + "totalFacts": 20, + "review": "responsibility_source_followup_review_panel_a.json", + "sha256": "4bcba7d92cf4da2ea7cbad2a9a369270cc6ca24b3e51234c943f067966025189", + "scope": "Separate query-plus-source workflow; neither hidden nor combined with native scores." + }, + "realRepositoryDiagnostic": { + "repository": "redux", + "selectedId": "sha256:2dc819f91bc866786968c643e45ad6b3419369536fbc2f8851bb810298489506", + "inputCaptureSha256": "f509b41b5c6d82501141e0ebd1b08733837e61623d827f71c73f03fb33b8482c", + "sourceSha256": "b294e740d5b72819ce5c994b6c2704de2c7ecd908347bc3d21a6b3b70dfd927f", + "graphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "scope": "Post-output Compass provenance diagnostic, not a paired score or a change to the frozen ambiguous-ID selection policy. Select one publicly returned function candidate by explicit kind to inspect its source verification claim. Source checkout and graphs remain untouched.", + "beforeVerificationClaim": "digest-verified", + "afterVerificationClaim": "unverified: no recorded source digest", + "remainingOutputIdentical": true, + "storedDigestAbsent": true + }, + "validation": { + "steps": [ + { + "name": "fmt", + "argv": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "seconds": 6.68 + }, + { + "name": "query-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-query", + "--test", + "explanation_source", + "--locked" + ], + "exitCode": 0, + "seconds": 8.05 + }, + { + "name": "cli-query-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "code_query_cli", + "--locked" + ], + "exitCode": 0, + "seconds": 75.48 + }, + { + "name": "mcp-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-mcp", + "--locked" + ], + "exitCode": 0, + "seconds": 58.31 + }, + { + "name": "clippy", + "argv": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 24.76 + }, + { + "name": "workspace-tests", + "argv": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "seconds": 111.75 + }, + { + "name": "product-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "seconds": 5.43 + }, + { + "name": "product-boundary", + "argv": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "seconds": 0.1 + }, + { + "name": "build", + "argv": [ + "cargo", + "build", + "--locked", + "-p", + "compass-cli", + "--bin", + "compass" + ], + "exitCode": 0, + "seconds": 1.04 + } + ], + "sourceSha256": { + "crates/compass-query/src/traversal.rs": "c1c50bb65aeecd442c9872ba40657d0ef7338c35d29ddd2453cad1a82ba92720", + "crates/compass-query/tests/explanation_source.rs": "34186c0a032ee576f587d1302d78f07959270ab9e139737414529b7781c869b6", + "crates/compass-cli/src/lib.rs": "11ed108e35f3b2473f87c6b9a9f7e7d20fedd689e3d88a845a8506e7864943b4", + "crates/compass-cli/src/help.rs": "b24eeca41a25c1897b347fe261008265e62d723f7d6932a4efa9d46855929b2b", + "crates/compass-cli/tests/code_query_cli.rs": "24d74e68ea7a5ea8c50590d7c56bf3b5bc48a48a244ed015c8c357492ca35ec0" + }, + "testCounts": { + "query-tests": { + "passed": 4, + "failed": 0, + "ignored": 0 + }, + "cli-query-tests": { + "passed": 39, + "failed": 0, + "ignored": 0 + }, + "mcp-tests": { + "passed": 60, + "failed": 0, + "ignored": 0 + }, + "workspace-tests": { + "passed": 1106, + "failed": 0, + "ignored": 2 + }, + "product-tests": { + "passed": 9, + "failed": 0, + "ignored": 0 + } + }, + "binaryMatchesFinalBuild": true, + "notRun": [ + "Extraction/viewer fixture qualification and JavaScript gates were not rerun: this change only affects explanation source-verification status and public CLI text, not extraction, resolution, graph publication or viewer assets.", + "Python benchmark harness was not rerun because no benchmark library changed; new external collectors and the evidence verifier completed successfully." + ] + }, + "artifacts": { + "native-explanation-01/collect.py": "f53104b56a092fd292074bbd1abaa2a89a1295a9c2752812039dedb35aef267a", + "native-explanation-01/baseline/capture.json": "e53cadd1840838b3168ba85b05bcca24d97320ca9a7dab9ef8b0949975f40f88", + "native-explanation-01/reproduction.log": "ecc62e639b793de11c1facb66e192ab5db8f23a88a0d3c3d033003f6ef8b463e", + "native-explanation-02/collect.py": "9ed4c348c6aae2d2e5ac3d8f82c4348f476d954ac1eb9130476a577a51c5c9dd", + "native-explanation-02/final/capture.json": "8a2a89584e06ecaecfec4caedf44de5b959455653bb5a6db15713ee3911a0b17", + "native-explanation-02/verified-summary.json": "247ad0c8139bf6d954785e2a610f889addb23e55b8f8a76dd4cf6e826901ae25", + "native-explanation-02/verify_capture.py": "a8e1b83424c267dad9011626bf39a73740f5993d21f1e743a8275f7efbaa6bfb", + "native-explanation-02/verification.log": "68d345697cecc65ebfad7068a224c39d98e41eddee648197ec41376eeed080a3", + "native-explanation-02/verify_real_digest.py": "bfb122c417a1e231e981b722f6a2077fafeb6de6422c15629db64e1c7b3631b9", + "native-explanation-02/real-digest-diagnostic/capture.json": "7d883ea073ff06de7af6f91a79bb70ec60650593a516fb70219d162b4dc55fb7", + "native-explanation-02/real-digest-diagnostic/before.stdout": "1365900139d869d4120da489e296a7c1b96803bbfaa4cfe62b043361239b1feb", + "native-explanation-02/real-digest-diagnostic/after.stdout": "835f7a9e97c1108ab2590e22177205bde96c8ac6de073e55e349ace03454e18a", + "native-explanation-02/validation.json": "79cbaac0964f808044f01baf3c6ff2d523fcbac522db818e7d99c50ebc59dfc6", + "native-explanation-02/fmt-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "native-explanation-02/query-tests-final.log": "efe962bdf2756c025f78f489697d34db30efdae01ae315e4339fab8b5db86309", + "native-explanation-02/cli-query-tests-final.log": "254b0312f3cff10df323f6b7bd82dd7f9adfcdcb82fa4cd87894f674aa647978", + "native-explanation-02/mcp-tests-final.log": "1d873e89b4ea4691d047357234d9e3298ac19048e96c953f5f35b568f4e3b59a", + "native-explanation-02/clippy-final.log": "de4702a3f15d49659cddb278e4dfcf4b2afee2b8de5eec277006a57a510e151e", + "native-explanation-02/workspace-tests-final.log": "a08c311c95286f6811ea81aa035e4f59e08f1d74b3093455c142644091860676", + "native-explanation-02/product-tests-final.log": "e47d0f2a5347a3c732d1fa2d634bb7b83ad0370cb13b2b1c983e21cd03d23047", + "native-explanation-02/product-boundary-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "native-explanation-02/build-final.log": "417587ddafc7f98dcabb9a1e2a27c82e820f932ffa72d1bc535b88b7ad1fc735" + }, + "limitations": [ + "Same-agent semantic review and verifier, not independent human adjudication.", + "Only frozen responsibility facts are judged; other printed graph relationships have not all been source-reviewed.", + "Literal complete witnesses supply sufficient evidence for seven facts; no alternate partial-witness credit is used.", + "No model-generated explanations or god-object quality labels.", + "Native capabilities and output sizes differ; this is not equal-I/O efficiency or latency.", + "The earlier query plus symmetric source read remains a separate Graphify advantage (13/20 vs Compass 11/20).", + "The provenance correction does not change these selected native outputs or fact scores: all displayed excerpts already carried matching digests.", + "Graphify resolves all five subjects in each arm. Compass resolves three native subjects and four assisted subjects; the assisted Redux resolver hits its candidate bound.", + "Go Mux and Rust IntoIter declaration excerpts do not include their separately defined methods. The Java 8000-byte excerpt ends before the attribute-write evidence needed for one fact.", + "Native connection budgets/source caps differ. Actual byte totals describe these interfaces, not equal-work performance.", + "God-object judgments, source-based responsibility synthesis, longer walks, wider precision and fresh confirmation remain outstanding." + ] +} diff --git a/benchmarks/agent_query/neighbor_exact_match_review_panel_a.json b/benchmarks/agent_query/neighbor_exact_match_review_panel_a.json new file mode 100644 index 000000000..97280abd1 --- /dev/null +++ b/benchmarks/agent_query/neighbor_exact_match_review_panel_a.json @@ -0,0 +1,763 @@ +{ + "schema": "compass.neighbor-exact-match-review/1", + "scope": "Same frozen public community-to-neighbor development workflow before and after exact-first MCP lookup. No new task selection, graph rebuild, extra follow-up or source assertion oracle.", + "fixCommit": "8f5eb5e5", + "transportTestCorrectionCommit": "500a4565", + "auditorOrderingCommit": "6bc29e92", + "protocolCommit": "7a6d6c97", + "binarySourceCommit": "500a4565a803a9f07c03eb036aa8200944387ff3", + "binarySha256": "1174ab1535e4614e08b04a283a90fe33ee53e82517907ff85c323cacb6d9b75a", + "compiler": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "productVersion": "compass 0.3.30", + "artifacts": { + "before": "community-navigation-01", + "after": "neighbor-exact-navigation-02", + "initialAfter": "neighbor-exact-navigation-01", + "validation": "neighbor-exact-match-02", + "failingRegressionsAndInitialValidation": "neighbor-exact-match-01" + }, + "comparison": { + "beforeSha256": "6c0da7060b53cb17ded2ca607563ae3a8723d76525897e709ffb4451f2e4bf2b", + "afterSha256": "d4f686de90277dc17c70b4643ed4f06e3de9b98afa24c597ba4513bea4511999", + "unchanged": "All ten graph hashes, source declarations, follow-up selectors and community texts; all Graphify neighbor texts and audit outcomes (mismatch-list order canonicalized for the older auditor).", + "summary": { + "before": { + "compass": { + "tasks": 15, + "seedIdentitySupported": 5, + "directCallTasks": 14, + "collaboratorIdentitySupported": 4, + "explicitAmbiguities": 8, + "callTextBytes": 145715, + "callResponseWireBytes": 150769 + }, + "graphify": { + "tasks": 15, + "seedIdentitySupported": 9, + "directCallTasks": 14, + "collaboratorIdentitySupported": 8, + "explicitAmbiguities": 6, + "callTextBytes": 51605, + "callResponseWireBytes": 55173 + } + }, + "after": { + "compass": { + "tasks": 15, + "seedIdentitySupported": 8, + "directCallTasks": 14, + "collaboratorIdentitySupported": 6, + "explicitAmbiguities": 5, + "callTextBytes": 139718, + "callResponseWireBytes": 144736 + }, + "graphify": { + "tasks": 15, + "seedIdentitySupported": 9, + "directCallTasks": 14, + "collaboratorIdentitySupported": 8, + "explicitAmbiguities": 6, + "callTextBytes": 51605, + "callResponseWireBytes": 55173 + } + } + }, + "changes": [ + { + "repository": "chi", + "tool": "compass", + "task": "chi-request-identity", + "metric": "seedIdentitySupported", + "before": false, + "after": true + }, + { + "repository": "chi", + "tool": "compass", + "task": "chi-request-identity", + "metric": "displayedAdjacencyMatches", + "before": false, + "after": true + }, + { + "repository": "chi", + "tool": "compass", + "task": "chi-request-identity", + "metric": "ambiguityReported", + "before": true, + "after": false + }, + { + "repository": "click", + "tool": "compass", + "task": "click-terminal-string-width", + "metric": "seedIdentitySupported", + "before": false, + "after": true + }, + { + "repository": "click", + "tool": "compass", + "task": "click-terminal-string-width", + "metric": "collaboratorIdentitySupported", + "before": false, + "after": true + }, + { + "repository": "click", + "tool": "compass", + "task": "click-terminal-string-width", + "metric": "displayedAdjacencyMatches", + "before": false, + "after": true + }, + { + "repository": "click", + "tool": "compass", + "task": "click-terminal-string-width", + "metric": "ambiguityReported", + "before": true, + "after": false + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-symlink-loop-detection", + "metric": "seedIdentitySupported", + "before": false, + "after": true + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-symlink-loop-detection", + "metric": "collaboratorIdentitySupported", + "before": false, + "after": true + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-symlink-loop-detection", + "metric": "displayedAdjacencyMatches", + "before": false, + "after": true + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-symlink-loop-detection", + "metric": "ambiguityReported", + "before": true, + "after": false + } + ] + }, + "summary": { + "compass": { + "tasks": 15, + "selected": 13, + "seedIdentitySupported": 8, + "directCallTasks": 14, + "collaboratorIdentitySupported": 6, + "directCallGraphPairsPresent": 13, + "explicitNeighborAmbiguity": 5, + "membershipConsistent": 15, + "callTextBytes": 139718, + "callResponseWireBytes": 144736, + "sessionWireBytesIncludingRequestsAndStderr": 232183 + }, + "graphify": { + "tasks": 15, + "selected": 15, + "seedIdentitySupported": 9, + "directCallTasks": 14, + "collaboratorIdentitySupported": 8, + "directCallGraphPairsPresent": 14, + "explicitNeighborAmbiguity": 6, + "membershipConsistent": 15, + "callTextBytes": 51605, + "callResponseWireBytes": 55173, + "sessionWireBytesIncludingRequestsAndStderr": 94443 + } + }, + "results": [ + { + "repository": "chi", + "tool": "compass", + "task": "chi-router-construction", + "selectedLabel": "NewRouter()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of NewRouter():", + "communityMembers": 90 + }, + { + "repository": "chi", + "tool": "compass", + "task": "chi-request-identity", + "selectedLabel": "RequestID()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": false, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 0, + "heading": "Neighbors of RequestID():", + "communityMembers": 44 + }, + { + "repository": "chi", + "tool": "compass", + "task": "chi-route-pattern-parameters", + "selectedLabel": "patParamKeys()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of patParamKeys():", + "communityMembers": 41 + }, + { + "repository": "chi", + "tool": "graphify", + "task": "chi-router-construction", + "selectedLabel": "NewRouter()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of NewRouter():", + "communityMembers": 108 + }, + { + "repository": "chi", + "tool": "graphify", + "task": "chi-request-identity", + "selectedLabel": "RequestID()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": false, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 0, + "heading": "Neighbors of RequestID():", + "communityMembers": 58 + }, + { + "repository": "chi", + "tool": "graphify", + "task": "chi-route-pattern-parameters", + "selectedLabel": "patParamKeys()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of patParamKeys():", + "communityMembers": 42 + }, + { + "repository": "click", + "tool": "compass", + "task": "click-atomic-close", + "selectedLabel": ".__exit__()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.__exit__()' matches 7 nodes. Retry with an exact node ID.", + "communityMembers": 203 + }, + { + "repository": "click", + "tool": "compass", + "task": "click-terminal-string-width", + "selectedLabel": "term_len()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of term_len():", + "communityMembers": 95 + }, + { + "repository": "click", + "tool": "compass", + "task": "click-help-definition-layout", + "selectedLabel": ".write_dl()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .write_dl():", + "communityMembers": 95 + }, + { + "repository": "click", + "tool": "graphify", + "task": "click-atomic-close", + "selectedLabel": ".__exit__()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.__exit__()' matches 6 nodes in different files.", + "communityMembers": 9 + }, + { + "repository": "click", + "tool": "graphify", + "task": "click-terminal-string-width", + "selectedLabel": "term_len()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of term_len():", + "communityMembers": 24 + }, + { + "repository": "click", + "tool": "graphify", + "task": "click-help-definition-layout", + "selectedLabel": ".write_dl()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .write_dl():", + "communityMembers": 9 + }, + { + "repository": "jsoup", + "tool": "compass", + "task": "jsoup-safe-document-copy", + "selectedLabel": ".clean()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.clean()' matches 4 nodes. Retry with an exact node ID.", + "communityMembers": 159 + }, + { + "repository": "jsoup", + "tool": "compass", + "task": "jsoup-html-fragment-parse", + "selectedLabel": ".parseBodyFragment()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.parseBodyFragment()' matches 3 nodes. Retry with an exact node ID.", + "communityMembers": 815 + }, + { + "repository": "jsoup", + "tool": "compass", + "task": "jsoup-html-whitespace", + "selectedLabel": ".isBlank()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.isBlank()' matches 3 nodes. Retry with an exact node ID.", + "communityMembers": 143 + }, + { + "repository": "jsoup", + "tool": "graphify", + "task": "jsoup-safe-document-copy", + "selectedLabel": ".clean()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.clean()' matches 2 nodes in different files.", + "communityMembers": 56 + }, + { + "repository": "jsoup", + "tool": "graphify", + "task": "jsoup-html-fragment-parse", + "selectedLabel": ".parseBodyFragment()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.parsebodyfragment()' matches 2 nodes in different files.", + "communityMembers": 232 + }, + { + "repository": "jsoup", + "tool": "graphify", + "task": "jsoup-html-whitespace", + "selectedLabel": ".isBlank()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": true, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: '.isblank()' matches 3 nodes in different files.", + "communityMembers": 76 + }, + { + "repository": "redux", + "tool": "compass", + "task": "redux-listener-registration", + "selectedLabel": null, + "selectionStatus": "ambiguous", + "matchingRows": 3, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 2, + "heading": "", + "communityMembers": 55 + }, + { + "repository": "redux", + "tool": "compass", + "task": "redux-action-shape-validation", + "selectedLabel": null, + "selectionStatus": "ambiguous", + "matchingRows": 2, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "", + "communityMembers": 252 + }, + { + "repository": "redux", + "tool": "compass", + "task": "redux-action-creator-binding", + "selectedLabel": "bindActionCreators()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 2, + "heading": "Ambiguous: 'bindActionCreators()' matches 10 nodes. Retry with an exact node ID.", + "communityMembers": 55 + }, + { + "repository": "redux", + "tool": "graphify", + "task": "redux-listener-registration", + "selectedLabel": "subscribe()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: 'subscribe()' matches 2 nodes in different files.", + "communityMembers": 15 + }, + { + "repository": "redux", + "tool": "graphify", + "task": "redux-action-shape-validation", + "selectedLabel": "isAction()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": false, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 1, + "heading": "Ambiguous: 'isaction()' matches 2 nodes in different files.", + "communityMembers": 8 + }, + { + "repository": "redux", + "tool": "graphify", + "task": "redux-action-creator-binding", + "selectedLabel": "bindActionCreators()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of bindActionCreators():", + "communityMembers": 14 + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-directory-handle-budget", + "selectedLabel": ".push()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": false, + "graphDirectCallRecords": 0, + "heading": "Neighbors of .push():", + "communityMembers": 116 + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-deferred-directory-depth", + "selectedLabel": ".get_deferred_dir()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .get_deferred_dir():", + "communityMembers": 116 + }, + { + "repository": "walkdir", + "tool": "compass", + "task": "walkdir-symlink-loop-detection", + "selectedLabel": ".follow()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .follow():", + "communityMembers": 116 + }, + { + "repository": "walkdir", + "tool": "graphify", + "task": "walkdir-directory-handle-budget", + "selectedLabel": ".push()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .push():", + "communityMembers": 33 + }, + { + "repository": "walkdir", + "tool": "graphify", + "task": "walkdir-deferred-directory-depth", + "selectedLabel": ".get_deferred_dir()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .get_deferred_dir():", + "communityMembers": 33 + }, + { + "repository": "walkdir", + "tool": "graphify", + "task": "walkdir-symlink-loop-detection", + "selectedLabel": ".follow()", + "selectionStatus": "selected", + "matchingRows": 1, + "splitCommunity": false, + "seedIdentitySupported": true, + "directCallRequired": true, + "collaboratorIdentitySupported": true, + "graphDirectCallRecords": 1, + "heading": "Neighbors of .follow():", + "communityMembers": 33 + } + ], + "implementation": { + "behavior": "get_neighbors uses find_exact_nodes first. Only an empty exact candidate set falls back to find_node. Exact IDs retain precedence and case; normalized symbols and qualified names use the shared exact lookup, including evidence-gated export binding handling. All genuine exact collisions remain ambiguous, with stable bounded candidate lists.", + "ownership": "MCP delegates to the existing compass-query exact matcher; the broad search helper and graph extraction/clustering are unchanged.", + "compatibility": "No input schema, response envelope, graph schema, version, release or migration change." + }, + "verification": { + "native": [ + { + "name": "fmt", + "command": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "elapsedSeconds": 3.720431457972154 + }, + { + "name": "mcp-tests", + "command": [ + "cargo", + "test", + "-p", + "compass-mcp", + "--tests", + "--locked" + ], + "exitCode": 0, + "elapsedSeconds": 15.112442665966228 + }, + { + "name": "clippy", + "command": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "elapsedSeconds": 8.008247874910012 + }, + { + "name": "workspace-tests", + "command": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "elapsedSeconds": 56.75049358303659 + }, + { + "name": "product-tests", + "command": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "elapsedSeconds": 26.76331787498202 + }, + { + "name": "product-boundary", + "command": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "elapsedSeconds": 0.04264066705945879 + }, + { + "name": "build", + "command": [ + "cargo", + "build", + "-p", + "compass-cli", + "--bin", + "compass", + "--locked" + ], + "exitCode": 0, + "elapsedSeconds": 0.8669613749952987 + } + ], + "mcpTests": { + "passed": 58, + "note": "38 library tests overlap with the workspace count; 20 integration tests are additional." + }, + "workspaceLibBins": { + "passed": 1101, + "ignored": 2 + }, + "productTests": { + "passed": 9 + }, + "developerHarness": { + "passed": 120 + }, + "regressionProof": "Before the product fix, two new neighbor tests failed (unique exact name polluted by fuzzy match; collision count polluted by fuzzy match), while genuine identity ambiguity and fuzzy fallback tests passed. All four pass after the fix.", + "staleAssertion": "The first all-MCP run passed 38 library and five integration tests, then failed one code-query transport assertion expecting RESULT followed by a newline. The compact shared renderer changed in earlier commit a985ea91. The assertion now checks the compact RESULT prefix and equality between MCP text and the validated structured Agent View rendered by the shared renderer. The complete rerun passes.", + "auditorOrdering": "The initial before/after verifier rejected differing order in missing-neighbor diagnostic arrays for three Graphify jsoup cases. Requests, responses, graph hashes, and all verdicts were unchanged. Sort both missing and extra diagnostic arrays, retain the failing regression, then run all 120 harness tests and recapture. The final comparison canonicalizes only those older diagnostic-array orders; all Graphify texts and remaining audit fields agree.", + "sourceAndTranscripts": "Separate same-agent verification checks every saved request/response, support file and graph hash plus identity/count summaries. All ten graphs, source declarations, selected follow-up labels and community texts are unchanged. Graphify neighbor texts are byte-identical. No independent semantic reviewer.", + "gatesNotRun": "No extraction, language, viewer or JavaScript changes; full extraction qualification and JS gates were not rerun. Native MCP, workspace, product identity and boundary checks ran.", + "warnings": "Workspace test logs retain the existing compass-core unused_mut warning and a macOS linker unwind-table warning. Clippy for workspace libraries and binaries passed with warnings denied." + }, + "remaining": { + "memberSelection": "Two Compass Redux community lists still have distinct matching labels without exact declaration handles.", + "genuineNameAmbiguity": "Click __exit__, three jsoup seeds and Redux bindActionCreators still require disambiguation.", + "missingCall": "The frozen Compass WalkDir graph still lacks push -> DirList.close at src/lib.rs:906.", + "comparison": "Graphify remains ahead on this specific one-follow-up arm: 9/15 seeds and 8/14 collaborators versus Compass 8/15 and 6/14.", + "scope": "Additional public path-qualified/ID workflows, neighbor identity projections, complete assertion precision, source-defined god-object positives, broader architecture judgment and fresh held-out confirmation remain open." + } +} diff --git a/benchmarks/agent_query/neighbor_identity.py b/benchmarks/agent_query/neighbor_identity.py new file mode 100644 index 000000000..595b827f1 --- /dev/null +++ b/benchmarks/agent_query/neighbor_identity.py @@ -0,0 +1,96 @@ +"""Output-only follow-ups and post-request identity/projection checks. + +Direct identity is different from globally unique labels and from a second, +source-assisted resolver call. Graph consistency does not score source precision. +""" +from collections import Counter, defaultdict +import json + +from benchmarks.agent_query.community_identity import SEARCH_LIMITS, selected_id +from benchmarks.agent_query.community_navigation import NEIGHBOR +from benchmarks.agent_query.runner import _terminal_symbol + + +def destination_request(tool, neighbor_call, target): + """No graph argument: only displayed outgoing calls and public coordinates.""" + if not neighbor_call.get('executionSucceeded'): + return None + labels = sorted({name for direction, name, relation in NEIGHBOR.findall(neighbor_call.get('text', '')) + if direction == '-->' and 'calls' in relation.lower() + and _terminal_symbol(name) == target['symbol']}) + if not labels: + return None + if tool == 'compass': + return dict(method='search_symbols', arguments=dict(query=target['symbol'], **SEARCH_LIMITS)) + if tool == 'graphify': + if '::' in target['file']: + return None + return dict(method='get_node', arguments=dict(label=target['file']+'::'+target['symbol'])) + raise ValueError('unsupported tool') + + +def followup_score(tool, call, target, expected_id): + choice = selected_id(tool, call, target) + return dict(selection=choice, sourceMatchedDestination=expected_id is not None and choice['selector'] == expected_id) + + +def canonical(value): + return json.dumps(value, sort_keys=True, separators=(',', ':'), ensure_ascii=False) + + +def audit_direct(call, graph, tool, seed, target, *, relation_filter="calls"): + """Check the full requested projection; None requests all relations.""" + result = dict(status='unavailable', explicitDestinationSupported=False, + fullProjectionMatches=False, returnedGroups=0, returnedRecordAppearances=0) + if not call.get('executionSucceeded'): + result['status'] = 'tool-error' + return result + envelope = call.get('response', {}).get('result', {}).get('structuredContent') + # Graphify 0.9.67 emits labels/relations/sites, with no neighbor identity + # field. Absence is unavailable, never guessed from global label uniqueness. + if envelope is None: + return result + result['status'] = 'invalid' + if (not isinstance(envelope, dict) or envelope.get('schema') != 'compass.mcp.tool-result/1' + or envelope.get('transportTruncation', {}).get('truncated') is not False): + return result + body = envelope.get('result') + # The native typed response uses a string even when the request omits + # relation_filter; an empty string selects every relation. + expected_filter = '' if relation_filter is None else relation_filter + if (not isinstance(body, dict) or body.get('schema') != 'compass.query.neighbors/1' + or body.get('truncated') is not False or body.get('directionBasis') != 'stored-endpoints' + or body.get('relationFilter') != expected_filter): + return result + nodes = {n['id']: n for n in graph['nodes']} + if body.get('seed') != nodes.get(seed) or body.get('graphDirected') is not graph.get('directed', False): + return result + groups = body.get('neighbors') + if not isinstance(groups, list) or len(groups) > 20000: + return result + expected = defaultdict(Counter) + for edge in graph['links']: + if relation_filter is not None and relation_filter.lower() not in edge.get('kind' if tool == 'compass' else 'relation', '').lower(): + continue + if edge['source'] == seed: + expected['outgoing', edge['target']][canonical(edge)] += 1 + if edge['target'] == seed: + expected['incoming', edge['source']][canonical(edge)] += 1 + observed = {} + for group in groups: + if not isinstance(group, dict) or group.get('direction') not in {'incoming', 'outgoing'}: + return result + node, edges = group.get('node'), group.get('edges') + if not isinstance(node, dict) or not isinstance(node.get('id'), str) or node != nodes.get(node['id']): + return result + key = group['direction'], node['id'] + if key in observed or not isinstance(edges, list) or not edges or len(edges) > 10000: + return result + if any(not isinstance(edge, dict) for edge in edges): + return result + observed[key] = Counter(map(canonical, edges)) + result.update(status='checked', fullProjectionMatches=observed == expected, + returnedGroups=len(groups), returnedRecordAppearances=sum(sum(v.values()) for v in observed.values())) + result['explicitDestinationSupported'] = (observed == expected and target is not None + and bool(observed.get(('outgoing', target)))) + return result diff --git a/benchmarks/agent_query/neighbor_identity_development_registration.json b/benchmarks/agent_query/neighbor_identity_development_registration.json new file mode 100644 index 000000000..28c23b2b5 --- /dev/null +++ b/benchmarks/agent_query/neighbor_identity_development_registration.json @@ -0,0 +1,51 @@ +{ + "schema": "compass.neighbor-identity-development-registration/1", + "scope": "Reused five-repository development panel; source-assisted navigation. Same-agent review. Not held-out or overall superiority.", + "baselineImplementation": "a07ab99126e76f50059ee631caa4d2b584488133", + "baselineRoot": "rust-index-receiver-03", + "inputs": { + "run.json": "9a6e670114f5be83773176e54bf0c4faf45582389164dea79ad17306eee1c50c", + "community_task_pairs_panel_a.json": "678419fbd9fd9dddb6fffdaf108047f23f055b8c4df40035236c8ac1f561d9af", + "community_identity_navigation_panel_a.json": "114bfc837847bccee24caa9de6ac4905d4c353146b82a16633147913ccab5e23", + "navigation/capture.json": "636833c4a6847e1267b757c2cbf45691dad66cb38ffc33b409d02b7f9dd7e630" + }, + "repositories": [ + "chi", + "click", + "jsoup", + "redux", + "walkdir" + ], + "artifactPolicy": "Reuse all ten frozen graphs byte-for-byte. No extraction changes or timing comparison. Verify source commits, graph hashes, binary and Graphify environment before and after capture.", + "workflow": "Repeat all 15 registered source-assisted community -> seed resolver -> call-neighbor workflows with the existing selectors and bounds. Request construction cannot consult graph IDs or graph adjacency. Preserve all failures and count all 14 direct-call tasks.", + "metrics": { + "legacy": "Keep collaborator label presence and globally unambiguous target-label counts separate and unchanged.", + "directResponseIdentity": "Count a reviewed outgoing collaborator only if its exact node ID and an outgoing relationship from the observed seed are explicitly present in the public neighbor response. Validate returned identities, direction, anchors and all retained relationship records against frozen graphs after requests. Do not infer exact IDs from labels or conveniently matching adjacency.", + "followupIdentity": "Allow each tool one additional public resolver call per direct-call task, using only returned collaborator labels and the same registered target source file/symbol/start line available to both tools. Use the existing per-tool public resolver and source-anchor selector. Count only if the expected collaborator label was actually returned, resolver emits exactly one matching ID, and the ID matches the source oracle. This measures a source-assisted follow-up, not direct response identity.", + "cost": "Report call counts, text bytes, wire-response bytes, full-session bytes, errors/timeouts/limits, and richer payload differences. Never interpret bytes as equal semantic content or universal efficiency." + }, + "bounds": { + "requestTimeoutSeconds": 60, + "maxResponseBytes": 1048576, + "maxSessionBytes": 67108864, + "graphifyTokenBudget": 262144, + "compassResolver": { + "max_candidates": 256, + "max_nodes": 500, + "max_response_bytes": 524288 + } + }, + "implementationRequirements": [ + "Exact destination IDs and available definition anchors; no guessed IDs or source coordinates.", + "Deterministic relation records preserve direction, multiplicity, anchors and provenance, including same-label destinations, parallel relations and self loops.", + "Explicit bounded failure must not appear as empty or complete adjacency.", + "Legacy text remains available; machine consumers use a versioned structured result." + ], + "validation": "Focused query and MCP unit/integration contracts, adversarial scoring tests, native Rust baseline, product tests/boundary and applicable code graph fixture gate. Preserve full commands/logs.", + "limitations": [ + "Known development tasks; no held-out claim.", + "Graph consistency is not independent source precision.", + "Existing source witnesses cover 14 direct collaborators; other graph assertions are not newly source-scored.", + "God-object responsibility judgments, richer source explanations and longer directed walks remain separate outstanding requirements." + ] +} diff --git a/benchmarks/agent_query/neighbor_identity_development_review.json b/benchmarks/agent_query/neighbor_identity_development_review.json new file mode 100644 index 000000000..d4a2d66f8 --- /dev/null +++ b/benchmarks/agent_query/neighbor_identity_development_review.json @@ -0,0 +1,241 @@ +{ + "schema": "compass.neighbor-identity-development-review/1", + "scope": "Same-agent development replay on five pinned repositories and 15 reused source-defined tasks. Both receive identical public source coordinates and one optional destination resolver call. Not held-out or overall superiority.", + "protocolCommit": "bde19bb3687b8bcf8fb09fa0e9ef44c2bf87245c", + "implementationCommit": "d51698dc1cfb6fc7cf069926cb39964359859447", + "artifactRoot": "neighbor-identity-02", + "binarySha256": "59addb98d357f8ed9b09618a340df6e9dc1352357887d465eb1514c45cbd862f", + "version": "0.3.30", + "graphs": "All ten graph artifacts reused byte-for-byte from rust-index-receiver-03. No extraction timing comparison.", + "summary": { + "compass": { + "explicitDestinationSupported": 14, + "sourceMatchedDestinationFollowup": 14, + "fullProjectionsMatching": 15, + "returnedRecordAppearances": 181, + "calls": 59, + "tasks": 15, + "resolverIdsCorrect": 15, + "completedNeighborLookups": 15, + "directCallTasks": 14, + "collaboratorLabelPresent": 14, + "unambiguousTargetLabel": 11, + "callTextBytes": 193385, + "callResponseWireBytes": 1228383, + "fullSessionBytesIncludingRequestsAndStderr": 1323516 + }, + "graphify": { + "explicitDestinationSupported": 0, + "sourceMatchedDestinationFollowup": 14, + "fullProjectionsMatching": 0, + "returnedRecordAppearances": 0, + "calls": 59, + "tasks": 15, + "resolverIdsCorrect": 15, + "completedNeighborLookups": 15, + "directCallTasks": 14, + "collaboratorLabelPresent": 14, + "unambiguousTargetLabel": 11, + "callTextBytes": 57404, + "callResponseWireBytes": 63756, + "fullSessionBytesIncludingRequestsAndStderr": 107645 + } + }, + "responseDelta": { + "compass": { + "unchangedPriorCallPayloads": 30, + "changedPriorCallPayloads": 15, + "threeCallTextBytes": 178260, + "threeCallResponseWireBytes": 1017434, + "destinationTextBytes": 15125, + "destinationResponseWireBytes": 210949 + }, + "graphify": { + "unchangedPriorCallPayloads": 45, + "changedPriorCallPayloads": 0, + "threeCallTextBytes": 55402, + "threeCallResponseWireBytes": 60415, + "destinationTextBytes": 2002, + "destinationResponseWireBytes": 3341 + }, + "notes": "Payload comparisons ignore JSON-RPC request IDs, which shift after each added destination call. All 45 Graphify and 30 unchanged Compass community/seed resolver payloads match the baseline. Graphs are unchanged. Byte counts include actual new request IDs." + }, + "validation": { + "status": "passed", + "sourceCommit": "d51698dc1cfb6fc7cf069926cb39964359859447", + "binaryMatchesFinalBuild": true, + "counts": { + "neighbor-query-tests": { + "passed": 3, + "failed": 0, + "ignored": 0 + }, + "mcp-tests": { + "passed": 60, + "failed": 0, + "ignored": 0 + }, + "workspace-tests": { + "passed": 1106, + "failed": 0, + "ignored": 2 + }, + "product-tests": { + "passed": 9, + "failed": 0, + "ignored": 0 + } + }, + "steps": [ + { + "name": "fmt", + "argv": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "seconds": 4.28 + }, + { + "name": "neighbor-query-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-query", + "--lib", + "neighbors::tests", + "--locked" + ], + "exitCode": 0, + "seconds": 0.65 + }, + { + "name": "mcp-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-mcp", + "--locked" + ], + "exitCode": 0, + "seconds": 18.3 + }, + { + "name": "clippy", + "argv": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 6.44 + }, + { + "name": "workspace-tests", + "argv": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "seconds": 67.2 + }, + { + "name": "product-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "seconds": 42.36 + }, + { + "name": "product-boundary", + "argv": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "seconds": 0.08 + }, + { + "name": "qualification", + "argv": [ + "bash", + "scripts/qualify_code_graph_v1.sh", + "--fixtures-only" + ], + "exitCode": 0, + "seconds": 633.17 + }, + { + "name": "build", + "argv": [ + "cargo", + "build", + "--locked", + "-p", + "compass-cli", + "--bin", + "compass" + ], + "exitCode": 0, + "seconds": 2.22 + } + ], + "harnessTestsPassed": 134 + }, + "artifacts": { + "policy.json": "f4afd6b400a304c3fa032b116b8dc5a7ac3c1c469224c3753de1629425310cf7", + "input-recheck.json": "dde3db5d4317daa0877442c13aeff17a1bfea26c0470d3a626c4e8bacd26e3dc", + "baseline-direct-identity.json": "1319291b5904422723dfb0628eb96a99b2217382e162e229cf7f22860abd5bd2", + "binary-manifest.json": "b0b4ad1c5f88e16a285f3bcd0965964286c3a719a209a08832ac2b58e463b3c8", + "response-delta.json": "16cb77b1ce9afce2b6ce86134c52bd09f250fc9478e30f142b595202a0a267bf", + "navigation/capture.json": "c1d07c47906a891c2f6451fba31f30d11fb09d51882d7282c968d8914957dafa", + "navigation/verified-summary.json": "14507fffe0381e5f586936b8e28a1459366d8f1ff9184c1432ba517d7a23f88a", + "navigation/verify_capture.py": "0cbc8ad24a1209d7d8fc559d702c2ca185c242ee1fa60dc3f7b3be776c98dc00", + "harness-tests.log": "9eb7ec8be37dc0d41169d0ffb240f71a0173fd9229709563beb5ce6398e2e0bb", + "validation.json": "a61555ab44db0fef8456ac1fffde4179d330e4038206b86b13399aa18370156f", + "final-validation-summary.json": "796b22e12ca5adba0eecf30919df31043c507a8b6c1bbdbc69d7f8e821e7024d", + "validate.py": "4ba05b9d6bd17515fb5460737c2b6300d6d80ade92e6ab3e1cbebdddb224b542", + "fmt-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "neighbor-query-tests-final.log": "665afacd150175b0dfc4fb0fd94f99df9f4be09e36219277b3e3786caca3a33c", + "mcp-tests-final.log": "94154f9cbe14c380ae4ea21bbb9ff2fe5744b7a06483dade40eb8528e1ef6158", + "clippy-final.log": "c7ba7a8dd8e81a05bac04776058a3efcb131a1e59e19a80a621ebbdfcfe55873", + "workspace-tests-final.log": "cfa81eb3b3924767ad551ecd3203c53451c3a5b2ae76b879bf689acc40d1a5e9", + "product-tests-final.log": "0155aace32defe5fcc6b306984b3fdbba651c0b54ba83c0d9281ab2bdd0c7a0e", + "product-boundary-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "qualification-final.log": "141b8e13f6062cd3447a2ca12d5976ef6edc494dd87b678b92781ef7fc8977ba", + "build-final.log": "2b0c38ed9b2d8b3b42ebca729444e4c5f8b4763c23bca63e77381d42bee0f513" + }, + "interpretation": "Compass now exposes exact destination identities directly for all 14 reviewed calls. Graphify exposes labels and sites in neighbor output, so explicit ID projection is unavailable. With one additional source-anchored public resolver call, both resolve 14/14 destinations. Label presence remains 14/14 and global label uniqueness remains 11/14 for each. This improves direct response identity and record fidelity, not end-to-end superiority in the extended workflow.", + "limitations": [ + "All 15 Compass full-record projections match their frozen graphs (181 record appearances). Graph consistency does not establish source precision for those other records.", + "Graphify full-record projection is unavailable, not a failed source-precision or graph-correctness score; its displayed adjacency remains consistent with its graphs.", + "59 public calls per tool include 14 symmetric destination follow-ups. A caller using Compass inline IDs would not require those follow-ups, but this capture executes them to compare resolver capabilities fairly.", + "Exact source coordinates are supplied; this is not unassisted discovery or autonomous long-walk evaluation.", + "Compass returns more evidence and uses more bytes. Native output richness and controls differ; byte counts are not equal-content efficiency.", + "God-object judgments, source-grounded responsibility explanations, broader precision, longer directed walks and held-out confirmation remain open.", + "The extra resolver uses supplied target coordinates; it confirms the requested declaration, not an autonomous reconstruction of an ambiguous edge from a label. All 14 reviewed pairs on both sides also have the source-required directed call in their frozen graph." + ], + "graphifyEnvironmentSha256": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535" +} diff --git a/benchmarks/agent_query/paired_member_focus_registration.json b/benchmarks/agent_query/paired_member_focus_registration.json new file mode 100644 index 000000000..112f9e456 --- /dev/null +++ b/benchmarks/agent_query/paired_member_focus_registration.json @@ -0,0 +1,71 @@ +{ + "schema": "compass.paired-member-focus-registration/1", + "baselineCommit": "9f17e0ccd79f373d3201ec57ad930719c8370be9", + "scope": "Known five-language development subjects and previously inspected public labels. Fair common retrieval-policy experiment, not held-out evidence or authored answers.", + "sourceQuestions": "benchmarks/agent_query/responsibility_questions_panel_a.json", + "sourceQuestionsSha256": "608314dcd5e0a9e40fc7c6b8dd9d44026ba6a9b001e881fa8504fe44cc1fc7b2", + "tasks": [ + { + "repository": "chi", + "symbol": "Mux", + "file": "mux.go", + "startLine": 21, + "kind": "struct" + }, + { + "repository": "click", + "symbol": "_AtomicFile", + "file": "src/click/_compat.py", + "startLine": 455, + "kind": "class" + }, + { + "repository": "jsoup", + "symbol": "Cleaner", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 43, + "kind": "class" + }, + { + "repository": "redux", + "symbol": "createStore", + "file": "src/createStore.ts", + "startLine": 86, + "kind": "function" + }, + { + "repository": "walkdir", + "symbol": "IntoIter", + "file": "src/lib.rs", + "startLine": 566, + "kind": "struct" + } + ], + "graphRun": "java-state-access-02/run.json", + "graphRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "compassBinary": "member-focus-02/compass", + "compassBinarySha256": "e33934b94d1e254ba59906fddece098d8433bf7e31af746e46aac3dfc6744f97", + "priorCapture": "explanation-budget-01/capture/capture.json", + "priorCaptureSha256": "c2db3be974793b100dbb183eab35d474b0ed4d6d3c62f85aba6934c326738e0d", + "sourceBudgets": [ + 2000, + 4000, + 8000, + 16000, + 32000 + ], + "primaryBudget": 8000, + "identityControl": "Both tools receive the same known symbol, repository-relative file, declaration line and expected kind. Compass uses search_symbols exact=true, source_file, start_line, kind with existing limits (256 candidates, 500 nodes, 524288 response bytes). Graphify uses its existing file::symbol get_node; validate returned source identity and source-declaration kind afterward. Do not imply Graphify natively accepts all filters. One call per tool/subject, no retries. Preserve all ambiguity/error/limit outcomes.", + "capture": "Fresh identical public exact resolver and get_neighbors calls for each tool/subject; Compass uses the latest frozen binary, Graphify the same verified installation and graphs. Preserve raw calls, payload costs, source/graph/binary hashes and all errors. Compare every response to the previous capture.", + "selection": "Use only the returned outgoing contains/method label, file and start line. Retain every kind of member exposed by this common interface, including fields and nested containers; do not use Compass-only kind or end-byte metadata. Group equal file/line anchors. Normalize the full unchanged question with the frozen existing Compass query-term policy, identically for both tools. Normalize each returned label with the same identifier/code-token policy, including whole snake-case tokens and components. A group score is the maximum number of distinct matched question terms in any one of its labels; duplicate/alternative labels do not accumulate evidence. Sort by descending score, then original file/line order. Preserve unmatched groups and all ambiguities; no oracle/source-body ranking, language-specific adjustment or extra calls.", + "windows": "Determine source end boundaries BEFORE reranking: next greater returned anchor in the same file, or min(EOF,start+4096) for the final anchor. Rerank these fixed intervals and spend each registered shared raw-byte quota in that order. Never let reordered traversal extend an interval, read an oracle witness to select it, or duplicate a source interval. The unchanged source-order control uses the same data and all five quotas.", + "scoring": "Preserve all 20 facts at every budget. Report literal witness coverage and the prior fixed semantic allowance for click-1 (only class header missing, source identity verified and all other witness lines present). No partial-fact credit. Missing resolver, source, truncation or tool error remains explicit and cannot become a successful empty inventory. Raw source is evidence, never an authored answer.", + "verification": "Commit policy and tests before real score capture. Independently verify every raw call, source pin/hash, group/label score, ordered byte interval and fact result. Replay historical source-order scores exactly; expose response changes. Retain all per-repository/per-budget wins, ties, losses and actual source/payload costs. Distinguish fresh capture, offline interval planning and authored answer synthesis.", + "limitations": [ + "Previously inspected development panel; choices can be informed by prior misses.", + "A common helper is not a new native capability of Graphify or proof of equal compute.", + "Public member sets and labels differ by extraction. More fields can help or consume source quota; no tool-specific filtering is allowed.", + "Keep the native Compass member-focus 14/20 to 15/20 result separate: native callable spans differ from common public-anchor windows.", + "No conclusion can establish god-object defects, authored explanations, semantic completeness, broad path/community quality or overall superiority." + ] +} diff --git a/benchmarks/agent_query/paired_member_focus_review.json b/benchmarks/agent_query/paired_member_focus_review.json new file mode 100644 index 000000000..b3f676b43 --- /dev/null +++ b/benchmarks/agent_query/paired_member_focus_review.json @@ -0,0 +1,3093 @@ +{ + "schema": "compass.paired-member-focus-review/1", + "registration": "benchmarks/agent_query/paired_member_focus_registration.json", + "registrationSha256": "0d8fbb14d6f2f8f6adbaf420aabe2403bbedd2def5ab80708138d82269697d51", + "registrationCommit": "67e5550b", + "policyCommit": "6c9876ee", + "productCommit": "293582c38085a195b9a8272c8828196bc3724aaf", + "evaluatedBinarySha256": "e33934b94d1e254ba59906fddece098d8433bf7e31af746e46aac3dfc6744f97", + "scope": "Known five-language development subjects and previously inspected public labels. Fair common retrieval-policy experiment, not held-out evidence or authored answers.", + "summary": [ + { + "mode": "source-order", + "budget": 2000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 8, + "literalWitnessFacts": 7, + "sourceBytes": 10000 + }, + { + "mode": "source-order", + "budget": 2000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 8, + "literalWitnessFacts": 7, + "sourceBytes": 10000 + }, + { + "mode": "source-order", + "budget": 4000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 8, + "literalWitnessFacts": 7, + "sourceBytes": 19673 + }, + { + "mode": "source-order", + "budget": 4000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 8, + "literalWitnessFacts": 7, + "sourceBytes": 19673 + }, + { + "mode": "source-order", + "budget": 8000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 14, + "literalWitnessFacts": 13, + "sourceBytes": 35673 + }, + { + "mode": "source-order", + "budget": 8000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 15, + "literalWitnessFacts": 14, + "sourceBytes": 35673 + }, + { + "mode": "source-order", + "budget": 16000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 19, + "literalWitnessFacts": 18, + "sourceBytes": 59542 + }, + { + "mode": "source-order", + "budget": 16000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 18, + "literalWitnessFacts": 17, + "sourceBytes": 53417 + }, + { + "mode": "source-order", + "budget": 32000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 20, + "literalWitnessFacts": 19, + "sourceBytes": 64644 + }, + { + "mode": "source-order", + "budget": 32000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 18, + "literalWitnessFacts": 17, + "sourceBytes": 53747 + }, + { + "mode": "name-focus", + "budget": 2000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 6, + "literalWitnessFacts": 5, + "sourceBytes": 10000 + }, + { + "mode": "name-focus", + "budget": 2000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 8, + "literalWitnessFacts": 7, + "sourceBytes": 10000 + }, + { + "mode": "name-focus", + "budget": 4000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 9, + "literalWitnessFacts": 8, + "sourceBytes": 19673 + }, + { + "mode": "name-focus", + "budget": 4000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 10, + "literalWitnessFacts": 9, + "sourceBytes": 19673 + }, + { + "mode": "name-focus", + "budget": 8000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 12, + "literalWitnessFacts": 11, + "sourceBytes": 35673 + }, + { + "mode": "name-focus", + "budget": 8000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 14, + "literalWitnessFacts": 13, + "sourceBytes": 35673 + }, + { + "mode": "name-focus", + "budget": 16000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 19, + "literalWitnessFacts": 18, + "sourceBytes": 59542 + }, + { + "mode": "name-focus", + "budget": 16000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 18, + "literalWitnessFacts": 17, + "sourceBytes": 53417 + }, + { + "mode": "name-focus", + "budget": 32000, + "tool": "compass", + "facts": 20, + "sourceEvidenceFacts": 20, + "literalWitnessFacts": 19, + "sourceBytes": 64644 + }, + { + "mode": "name-focus", + "budget": 32000, + "tool": "graphify", + "facts": 20, + "sourceEvidenceFacts": 18, + "literalWitnessFacts": 17, + "sourceBytes": 53747 + } + ], + "results": [ + { + "repository": "chi", + "tool": "compass", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-3", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "compass", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-3", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "compass", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "compass", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "compass", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "compass", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-2", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "compass", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "chi-1", + "chi-2" + ] + }, + { + "repository": "chi", + "tool": "compass", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "chi-1" + ] + }, + { + "repository": "chi", + "tool": "compass", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "compass", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-3", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-3", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "chi-1", + "chi-2", + "chi-4" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "chi-1", + "chi-2" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "chi-1" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "chi", + "tool": "graphify", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 15583, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 3673, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 3, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "jsoup-3" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 9724, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 9724, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "jsoup-1", + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "jsoup-3" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 9724, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 9724, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 9544, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 9544, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "jsoup-3", + "jsoup-4" + ] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 9544, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 9544, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 14562, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 14562, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "redux-1", + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "redux-1", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "redux-1", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 14562, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "redux", + "tool": "compass", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 14562, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "redux-1", + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "redux-1", + "redux-2", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "redux-1", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 8617, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "redux-1", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 8617, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "redux-1", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "redux-1", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "redux-1", + "redux-3", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "redux-1", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 8617, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "redux-1", + "redux-4" + ] + }, + { + "repository": "redux", + "tool": "graphify", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 8617, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "redux-1", + "redux-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "walkdir-1", + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "walkdir-1", + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 16000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "walkdir-3" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 21102, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "walkdir-1", + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "walkdir-1", + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 16000, + "sourceEvidenceFacts": 3, + "literalWitnessFacts": 3, + "missingFacts": [ + "walkdir-3" + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 21102, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "source-order", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "source-order", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "source-order", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 2, + "literalWitnessFacts": 2, + "missingFacts": [ + "walkdir-2", + "walkdir-3" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "source-order", + "budget": 16000, + "sourceBytes": 16000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "source-order", + "budget": 32000, + "sourceBytes": 16330, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "name-focus", + "budget": 2000, + "sourceBytes": 2000, + "sourceEvidenceFacts": 0, + "literalWitnessFacts": 0, + "missingFacts": [ + "walkdir-1", + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "name-focus", + "budget": 4000, + "sourceBytes": 4000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "name-focus", + "budget": 8000, + "sourceBytes": 8000, + "sourceEvidenceFacts": 1, + "literalWitnessFacts": 1, + "missingFacts": [ + "walkdir-2", + "walkdir-3", + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "name-focus", + "budget": 16000, + "sourceBytes": 16000, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + }, + { + "repository": "walkdir", + "tool": "graphify", + "mode": "name-focus", + "budget": 32000, + "sourceBytes": 16330, + "sourceEvidenceFacts": 4, + "literalWitnessFacts": 4, + "missingFacts": [] + } + ], + "factDeltas": [ + { + "repository": "chi", + "tool": "compass", + "budget": 2000, + "gainedFacts": [ + "chi-3" + ], + "lostFacts": [ + "chi-2" + ] + }, + { + "repository": "chi", + "tool": "compass", + "budget": 4000, + "gainedFacts": [ + "chi-3", + "chi-4" + ], + "lostFacts": [ + "chi-2" + ] + }, + { + "repository": "chi", + "tool": "compass", + "budget": 8000, + "gainedFacts": [ + "chi-4" + ], + "lostFacts": [ + "chi-1" + ] + }, + { + "repository": "chi", + "tool": "compass", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "chi", + "tool": "compass", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 2000, + "gainedFacts": [ + "chi-3" + ], + "lostFacts": [ + "chi-2" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 4000, + "gainedFacts": [ + "chi-3", + "chi-4" + ], + "lostFacts": [ + "chi-2" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 8000, + "gainedFacts": [ + "chi-4" + ], + "lostFacts": [ + "chi-1" + ] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "chi", + "tool": "graphify", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 2000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 4000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 8000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "compass", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 2000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 4000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 8000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "click", + "tool": "graphify", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 2000, + "gainedFacts": [], + "lostFacts": [ + "jsoup-1" + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 4000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 8000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "jsoup", + "tool": "compass", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 2000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 4000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 8000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "jsoup", + "tool": "graphify", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 2000, + "gainedFacts": [], + "lostFacts": [ + "redux-1" + ] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 4000, + "gainedFacts": [ + "redux-2" + ], + "lostFacts": [ + "redux-1" + ] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 8000, + "gainedFacts": [], + "lostFacts": [ + "redux-1", + "redux-3" + ] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "redux", + "tool": "compass", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 2000, + "gainedFacts": [ + "redux-2" + ], + "lostFacts": [] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 4000, + "gainedFacts": [ + "redux-2" + ], + "lostFacts": [] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 8000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "redux", + "tool": "graphify", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 2000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 4000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 8000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "walkdir", + "tool": "compass", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 2000, + "gainedFacts": [], + "lostFacts": [ + "walkdir-1" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 4000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 8000, + "gainedFacts": [], + "lostFacts": [ + "walkdir-4" + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 16000, + "gainedFacts": [], + "lostFacts": [] + }, + { + "repository": "walkdir", + "tool": "graphify", + "budget": 32000, + "gainedFacts": [], + "lostFacts": [] + } + ], + "publicCallCosts": { + "compass": { + "resolver": { + "textBytes": 3039, + "wireResponseBytes": 21983 + }, + "neighbors": { + "textBytes": 33061, + "wireResponseBytes": 372871 + } + }, + "graphify": { + "resolver": { + "textBytes": 619, + "wireResponseBytes": 1094 + }, + "neighbors": { + "textBytes": 6980, + "wireResponseBytes": 7534 + } + } + }, + "publicCalls": 20, + "windowArms": 100, + "historicalComparisons": [ + { + "repository": "chi", + "tool": "compass", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + }, + { + "repository": "chi", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + }, + { + "repository": "click", + "tool": "compass", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + }, + { + "repository": "click", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + }, + { + "repository": "jsoup", + "tool": "compass", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + }, + { + "repository": "jsoup", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + }, + { + "repository": "redux", + "tool": "compass", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + }, + { + "repository": "redux", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + }, + { + "repository": "walkdir", + "tool": "compass", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + }, + { + "repository": "walkdir", + "tool": "graphify", + "resolverResponseUnchanged": true, + "neighborResponseUnchanged": true, + "membershipRowsUnchanged": true + } + ], + "diagnosis": { + "repository": "redux", + "tool": "compass", + "mode": "name-focus", + "budget": 8000, + "ownerId": "sha256:ceae4b39dd8902b6888096a1827ee67422d04d3c19d527d674ec740c3e903785", + "ownerSource": { + "file": "src/createStore.ts", + "startByte": 3002, + "endByte": 13827, + "startLine": 86, + "startColumn": 7, + "endLine": 395, + "endColumn": 1 + }, + "window": { + "file": "src/createStore.ts", + "startLine": 390, + "startByte": 13700, + "endByte": 17586, + "requestedEndByte": 17586, + "sourceBytes": 3886, + "sourceSha256": "297cd3652a03e447c7e6176c8469bbbe1d8a37b4e06c008db06c77f625e859e9", + "fileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695" + }, + "lastReturnedLine": 489, + "bytesAfterOwner": 3759, + "scope": "Post-capture diagnosis using the graph owner span. This private graph metadata did not select, rank, clip or score any source window." + }, + "decision": "Reject common name-first public-anchor windows as the default explanation retrieval policy. The primary 8000-byte result regresses for both tools and Compass still trails Graphify. Retain optional native member focus and its separate evidence; do not extrapolate its native-span result to this workflow.", + "findings": [ + "At 8000 source bytes, source order scores Compass 14/20 versus Graphify 15/20; common name focus scores 12/20 versus 14/20. All results and losses are retained.", + "Both tools exchange chi-1 for chi-4: routing names prioritize routeHTTP but the With shared-state witness no longer fits. The fixed query normalization removes With as a stopword in the full question.", + "Compass loses Redux enhancer and listener-snapshot facts. A matching getState binding at line 390 retains a 3886-byte final window, of which 3759 bytes follow the createStore function boundary. This demonstrates a limitation of next-anchor/final-window selection, not of declared source spans.", + "Graphify loses the WalkDir contents-first fact at 8000 bytes after prioritizing check_loop. Neither tool gains the complete multi-method symlink-loop fact at that quota.", + "At 4000 bytes focus gains evidence for both tools, while larger quotas have unchanged totals. All five quotas are published; the primary result is not replaced by a favorable quota.", + "All 20 fresh resolver/neighbor responses and all public membership rows match the prior capture. All 50 source-order window/scoring arms reproduce the previous results exactly." + ], + "verification": { + "benchmarkTests": 202, + "newTests": 15, + "productBoundaryPassed": true, + "publicCallsVerified": 20, + "membershipAnchorsVerified": 153, + "windowArmsVerified": 100, + "replay": { + "exitCode": 0, + "byteIdentical": true, + "verifiedSummarySha256": "683ae9490003eb18c55c58142088418c36ef91fc8bb58bb2a447d9029d1cd7c5" + } + }, + "limitations": [ + "Previously inspected development panel; choices can be informed by prior misses.", + "A common helper is not a new native capability of Graphify or proof of equal compute.", + "Public member sets and labels differ by extraction. More fields can help or consume source quota; no tool-specific filtering is allowed.", + "Keep the native Compass member-focus 14/20 to 15/20 result separate: native callable spans differ from common public-anchor windows.", + "No conclusion can establish god-object defects, authored explanations, semantic completeness, broad path/community quality or overall superiority.", + "The independent verifier explicitly covers this ASCII question/label panel; the helper additionally has Unicode normalization tests, without a universal equivalence claim.", + "Literal witness scores remain separate and are one lower per tool at every quota because of the existing Click class-header allowance.", + "Equal source quotas do not imply equal payload, token, compute or actual retained-source costs. Compass graph responses remain much larger.", + "Source between anchors can include comments or subsequent declarations. No post-hoc owner-span clipping changes the registered outcome.", + "No Rust, JavaScript, platform or packaging checks were rerun: this turn changes evaluation code and evidence only." + ], + "artifacts": { + "paired-member-focus-01/benchmark-tests.log": "87228c8572711c416824d9b327a20865e21973700f85e92bca70b06c7b54aa2c", + "paired-member-focus-01/capture/capture.json": "27dbd87380ec059154e1b28d5b0837e5a4ad5069c5005ed90b7233c14128b926", + "paired-member-focus-01/capture/capture.py": "07d0f062dd38dc5469aea24c0eeeae921bbc9fce29be3d0134e75d54a3e42edc", + "paired-member-focus-01/capture/community_identity.py": "5bc3d1c574211aa3180a2334fe6c758043f384651948b7077aba3ea879de4503", + "paired-member-focus-01/capture/community_navigation.py": "808df1c7b15c8c2afc86ac1ed09dc4f339c98a77d7a7b14eb4866e3da1c8c0f8", + "paired-member-focus-01/capture/community_tasks.py": "77f599ff7ee7eebfe4b590fee6c771ecfb3ed475d1944e37bcabc110634d3660", + "paired-member-focus-01/capture/graphify-mcp-environment.json": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "paired-member-focus-01/capture/mcp_compare.py": "d23f093a1300fcf825457f917694097f0f8b8dc8ee8d671946032f5e4e89a5dc", + "paired-member-focus-01/capture/mcp_transport.py": "daaad69c554f824a1df94f0ef93cb9d4c6e9b4f4b712d1611323d524e10d44ee", + "paired-member-focus-01/capture/member_focus.py": "2e3208b84b22c6f23359d81d312f67b00778269f189dd2c1dbdb7dc46b7dfc28", + "paired-member-focus-01/capture/member_focus_lexicon.json": "908fad1e83a36bb19fde87a0197dbdca5e22e8b0af9c6d02c4b19225d02abc74", + "paired-member-focus-01/capture/paired_member_focus_registration.json": "0d8fbb14d6f2f8f6adbaf420aabe2403bbedd2def5ab80708138d82269697d51", + "paired-member-focus-01/capture/raw/chi/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/chi/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "paired-member-focus-01/capture/raw/chi/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/chi/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/chi/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "paired-member-focus-01/capture/raw/chi/compass/mcp/04.request.json": "34232dc4cae123d91883f2efff5f57b566033c899dbfaa93e98c0050c7f62a3c", + "paired-member-focus-01/capture/raw/chi/compass/mcp/04.response.jsonl": "7938a7e7afec02546e9bae682eefd8973e7dbccbd446fece89aecbfccdbbdb7d", + "paired-member-focus-01/capture/raw/chi/compass/mcp/05.request.json": "350ecbf25523d5f934821418e2b92aa51e54ac60547d2f2ba2787b5aee29c14e", + "paired-member-focus-01/capture/raw/chi/compass/mcp/05.response.jsonl": "09b3992280dc91e7c6a9203f46e1c8b994742d81bc4c2f179b3160c2adf3f08a", + "paired-member-focus-01/capture/raw/chi/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/003.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/004.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/005.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/006.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/007.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/008.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/009.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/010.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/011.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/012.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/013.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/014.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/015.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/016.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/017.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/018.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/019.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/020.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/021.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/022.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/023.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/024.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/025.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/026.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/027.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/028.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/029.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/030.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/031.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/16000/032.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/2000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/2000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/2000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/2000/003.source": "da6365e7a3222ee9638590c300eea3332ef3c6ec7437e8ab7548985678436047", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/003.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/004.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/005.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/006.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/007.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/008.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/009.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/010.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/011.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/012.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/013.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/014.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/015.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/016.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/017.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/018.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/019.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/020.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/021.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/022.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/023.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/024.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/025.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/026.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/027.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/028.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/029.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/030.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/031.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/32000/032.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/4000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/4000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/4000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/4000/003.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/4000/004.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/4000/005.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/4000/006.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/4000/007.source": "d18d2e71dded55d38c074b71d0ad73f9a9768f88eb4001b2e485fb67e442e735", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/003.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/004.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/005.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/006.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/007.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/008.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/009.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/010.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/011.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/012.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/013.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/014.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/015.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/016.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/017.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/018.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/compass/windows/name-focus/8000/019.source": "00c4285274fcc5d6fba2ee58daf0d8c2b9b825b68d35d65d0e90a9bb333a51b5", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/020.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/021.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/022.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/023.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/024.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/025.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/026.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/027.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/028.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/029.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/030.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/031.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/16000/032.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/2000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/2000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/2000/002.source": "21c866f0d603e57248e2400aeaf96ff1167fac4310cac372c28986e727c32649", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/020.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/021.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/022.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/023.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/024.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/025.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/026.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/027.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/028.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/029.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/030.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/031.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/32000/032.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/4000/010.source": "18c9e1ec72927bc57f70d271df8bd2a55e9b1dd6852595b02f63ce83430a4883", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/compass/windows/source-order/8000/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/04.request.json": "5212851af235eed2bd62a674fa14313ea9a38591a8d706897051badabc911735", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/04.response.jsonl": "d4d8b29632b3aae99cc57178a3b6ccb52935ae78e6848569b08c64f60b5a75a8", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/05.request.json": "43b918f02295bb3b8b86531c0b4f139acb79116d408969e2655c76a0601119e3", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/05.response.jsonl": "43678e134e41a496da5198713dbc822810d661c9644a5b50fda48dfa6e13b552", + "paired-member-focus-01/capture/raw/chi/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/003.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/004.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/005.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/006.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/007.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/008.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/009.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/010.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/011.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/012.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/013.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/014.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/015.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/016.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/017.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/018.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/019.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/020.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/021.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/022.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/023.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/024.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/025.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/026.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/027.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/028.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/029.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/030.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/031.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/16000/032.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/2000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/2000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/2000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/2000/003.source": "da6365e7a3222ee9638590c300eea3332ef3c6ec7437e8ab7548985678436047", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/003.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/004.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/005.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/006.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/007.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/008.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/009.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/010.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/011.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/012.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/013.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/014.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/015.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/016.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/017.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/018.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/019.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/020.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/021.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/022.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/023.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/024.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/025.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/026.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/027.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/028.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/029.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/030.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/031.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/32000/032.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/4000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/4000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/4000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/4000/003.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/4000/004.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/4000/005.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/4000/006.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/4000/007.source": "d18d2e71dded55d38c074b71d0ad73f9a9768f88eb4001b2e485fb67e442e735", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/000.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/001.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/002.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/003.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/004.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/005.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/006.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/007.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/008.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/009.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/010.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/011.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/012.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/013.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/014.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/015.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/016.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/017.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/018.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/name-focus/8000/019.source": "00c4285274fcc5d6fba2ee58daf0d8c2b9b825b68d35d65d0e90a9bb333a51b5", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/020.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/021.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/022.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/023.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/024.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/025.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/026.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/027.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/028.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/029.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/030.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/031.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/16000/032.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/2000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/2000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/2000/002.source": "21c866f0d603e57248e2400aeaf96ff1167fac4310cac372c28986e727c32649", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/020.source": "4e1f899c6724bb85cac5ffda751aeb49d0861aaa81ecd93b50e614913a195955", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/021.source": "1541b775ca21b78629c8a3358187b651bc59669f3ce806e0e2fef81c0d2199ed", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/022.source": "eb6d4ec2afbbaffce38508a0789a2f12c07f6d7e9bc2c8a8d955ea3f5a60242a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/023.source": "3ef6c54af248bf0debfeb6d2a47f0305fb942f7c68872407486e394da67311df", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/024.source": "d1e8ffdcc1ddedd427fff473728317fbbb5cd493643c02f76f97c72059192be1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/025.source": "212b34b3ca39a811108534bc012eb6c95c2cc47f0bd45355608be4ccbc16e449", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/026.source": "6c34386cd4d3182e2230424a52a56623904f1569e14f1ccfd4de3c5982378fad", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/027.source": "485ad29f46c333c479954b4118d78cd0def72e869236092bbf5cec87b7e51d27", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/028.source": "44965a8e215b4628823c062447863a7916ab57f8eae4c7d38a086159e5762733", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/029.source": "5fb2f3ef9d5d973ea67e93cfee9bf819bcca67bfab2e1c9fc0c60041820f015e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/030.source": "934d98b2d4c28f7a3aae634999faa86bf7d2665e1b3ee921e168756d86c6f536", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/031.source": "ef8803d837942135508520a51788b3785e9fd72a34493f79644c1197f10d556f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/32000/032.source": "4f0238d0211cc89239bb01e674d3044cd5e27aa91d2fc1efdf1781b0dcf014f4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/4000/010.source": "18c9e1ec72927bc57f70d271df8bd2a55e9b1dd6852595b02f63ce83430a4883", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/000.source": "9eb2d52dd04b27bb3b9db2723a9510feade0e1a02233f894b869ea87dbe3660e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/001.source": "b62f2613be37ad6011c1399c13810dc40d7a7d31672ea7b4b845e7388a076652", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/002.source": "a9a0519cc2a6c3a65e7439b10e243ac41e96d1e0b84309ee74cc2ec221ad67e4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/003.source": "6c7ee9d15cf8b902474cb2a889af3e6ce8d930ce6b2549c9370bf917300afb7f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/004.source": "14e3766158a070b4d2458b2d12c46dfed9135e5eb7d92e75cc2ddd267a79df48", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/005.source": "41e6f1b96477603fc758b76907ab2b58c89f5b2a19977a9ae02a977219d043c8", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/006.source": "6e98f4a2cfb379527398e03898a69adcaaf22578436847e3e8e97a2c308b1ee4", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/007.source": "d3229d590c609f7973a948e38c2b535897de1b1a0c4c8155c53b51c200fdd05f", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/008.source": "7baa3aa1ed3dfed62e1f78abedbcf849b2fe24c2d5d98c691f798c299b386cc9", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/009.source": "1ab1ac9656f4ba94ee77a2eadfc583448b7dc9e56810b342d15c4223a49e293a", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/010.source": "1b96890f53d5a7135b7ee8dbd2aa833d315351c53c412ed5f17c04b3717799c1", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/011.source": "4964102336465ac8fda4b73892e06e76450b04c7a6e911bc3923a9ba35bb182e", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/012.source": "6e9579c6e34320ab72c2eb6b62fd2e97b753caffc5fe2fde72d8ee87285bf834", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/013.source": "4f8642971aca332f7c9211a74565ecfd72df1840647e7e697f0a7301f047bb03", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/014.source": "af566e9b84a61be0e5cb7f650727d90d31d354496e61e6f0860b02cd80d2ba15", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/015.source": "f73834c009a6738ec43bdf1f733fac56afcdbf9dbd6bdd6fceacaa6567b6c41c", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/016.source": "30f6edf9f7358667d354a02d8133c3d0b9250877faf97696a64eba0ce9936214", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/017.source": "7b7346b3001bf77da22e762643d47cd5187073ba41ee4eef160d007c5a445b82", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/018.source": "fe91417f99bad942628bf086fc17692a8cc2062fc0a021dc9d75cfdb98864480", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/019.source": "9bc7883443efbda77ee326ec80ec195fc5bc00589d09aedf444dbdd4cde0c118", + "paired-member-focus-01/capture/raw/chi/graphify/windows/source-order/8000/020.source": "4612f1c12f2566386a31823750264c222924baf490d7ad33ef5305792bc6e3b3", + "paired-member-focus-01/capture/raw/click/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/click/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "paired-member-focus-01/capture/raw/click/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/click/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/click/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "paired-member-focus-01/capture/raw/click/compass/mcp/04.request.json": "e148a7f5170d1a8363e3cbaa97110c53950669de602afcc5ef3fd30d2c60c770", + "paired-member-focus-01/capture/raw/click/compass/mcp/04.response.jsonl": "b246a63c4f33e46eed5f15e5789db1bfa54e6ea0eb63c4759a5c4462426d4b21", + "paired-member-focus-01/capture/raw/click/compass/mcp/05.request.json": "4c0ad7366492176ab7c2dd6510655cb151eead3831c1217eb92772f9d1eb4bb2", + "paired-member-focus-01/capture/raw/click/compass/mcp/05.response.jsonl": "b1cfb966e35d68905b7d7f888a689d58a57d162d738d49355b58e7ec0f1a7eff", + "paired-member-focus-01/capture/raw/click/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/16000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/16000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/16000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/16000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/16000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/16000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/16000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/2000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/2000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/2000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/2000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/2000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/2000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/2000/006.source": "8fa9d06237cf26939e2c2e30c99bff71e0c5bb6e4207fb596e7cf754952e2fb0", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/32000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/32000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/32000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/32000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/32000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/32000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/32000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/4000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/4000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/4000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/4000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/4000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/4000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/4000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/8000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/8000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/8000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/8000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/8000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/8000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/name-focus/8000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/16000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/16000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/16000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/16000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/16000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/16000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/16000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/2000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/2000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/2000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/2000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/2000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/2000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/2000/006.source": "8fa9d06237cf26939e2c2e30c99bff71e0c5bb6e4207fb596e7cf754952e2fb0", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/32000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/32000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/32000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/32000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/32000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/32000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/32000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/4000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/4000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/4000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/4000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/4000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/4000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/4000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/8000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/8000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/8000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/8000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/8000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/8000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/compass/windows/source-order/8000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/click/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "paired-member-focus-01/capture/raw/click/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/click/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/click/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "paired-member-focus-01/capture/raw/click/graphify/mcp/04.request.json": "4aad9fe4bfc910ea3b74fa2a6bb4335c66ede5da3d24cf48609142507b61a000", + "paired-member-focus-01/capture/raw/click/graphify/mcp/04.response.jsonl": "d22730f840576483c14ecb89c933817acf713e534c6a2b8b8a69ecc7e98714a2", + "paired-member-focus-01/capture/raw/click/graphify/mcp/05.request.json": "faea67c086ba783dd80230e4b0f019e3c07bfef93a31ed288f0f2cec10cc0c03", + "paired-member-focus-01/capture/raw/click/graphify/mcp/05.response.jsonl": "b98212f878f04290fcd5c68ab617bd1cff708c7ba1b23dd9d277a584b595bb72", + "paired-member-focus-01/capture/raw/click/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/16000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/16000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/16000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/16000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/16000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/16000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/16000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/2000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/2000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/2000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/2000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/2000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/2000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/2000/006.source": "8fa9d06237cf26939e2c2e30c99bff71e0c5bb6e4207fb596e7cf754952e2fb0", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/32000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/32000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/32000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/32000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/32000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/32000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/32000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/4000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/4000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/4000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/4000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/4000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/4000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/4000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/8000/000.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/8000/001.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/8000/002.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/8000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/8000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/8000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/name-focus/8000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/16000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/16000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/16000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/16000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/16000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/16000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/16000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/2000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/2000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/2000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/2000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/2000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/2000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/2000/006.source": "8fa9d06237cf26939e2c2e30c99bff71e0c5bb6e4207fb596e7cf754952e2fb0", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/32000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/32000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/32000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/32000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/32000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/32000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/32000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/4000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/4000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/4000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/4000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/4000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/4000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/4000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/8000/000.source": "75e95b9bbc3c0e0eb155a8832aece6c91ad55fc665f3e75f975f7f56a4f714c4", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/8000/001.source": "d60bde99d994e7a7514909d64528e29bca38a4a8ab83539fd5255f78b55e8e9b", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/8000/002.source": "ccddee379cb2066c45d953575817cc4039d73deab55149c3378717de58b76632", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/8000/003.source": "6c48735e9c2665c3f370a0dc40392d32c969bca52d33e3e4dc6d42dad7c1e48a", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/8000/004.source": "093b12bc46f9d5036f4b4dbaa6d3a0846aa191ba19b826d415077363a304c3fa", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/8000/005.source": "6069237b3debc11dd51020c834ad9e5816bbeab1000466034710d575faf439d1", + "paired-member-focus-01/capture/raw/click/graphify/windows/source-order/8000/006.source": "29d44ac5a6a9f8ded9079cf6c8315259bf1d21a487df8993d48d575bd5dc92b8", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/04.request.json": "88321b0cefc99d73f5f5bab430106fa357e7ce37ea60d7273e573f6caf186d36", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/04.response.jsonl": "c88e7e11ddfca95460f1ba73fd91d2ff376914106db214ad87cc62253d4410fc", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/05.request.json": "ff3fcdd774e4493d27f81784e37e91f956cbecc7f07e434c96ec212f96bf2280", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/05.response.jsonl": "875ee5125b384d6f9e66d56e231c491c8959d95014b256f08253ea5a8e483b0a", + "paired-member-focus-01/capture/raw/jsoup/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/16000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/16000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/16000/002.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/16000/003.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/16000/004.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/16000/005.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/16000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/16000/007.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/16000/008.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/2000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/2000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/2000/002.source": "40d819bc77d5b77456459f75c607adb415e4c362c627f48a9546d8cb44a3b87d", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/32000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/32000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/32000/002.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/32000/003.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/32000/004.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/32000/005.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/32000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/32000/007.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/32000/008.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/4000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/4000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/4000/002.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/4000/003.source": "2cd05caa4260c9de8676a872dd1ab3ea4756585fdff58ce508ad99e1d8240b42", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/8000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/8000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/8000/002.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/8000/003.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/8000/004.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/8000/005.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/8000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/name-focus/8000/007.source": "c80f32af2fa6b5b37f6a6b6aed035cc318e7d4e6bda0580a428bff234b2ac17a", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/16000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/16000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/16000/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/16000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/16000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/16000/005.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/16000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/16000/007.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/16000/008.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/2000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/2000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/2000/002.source": "f001d1fcca3d1fcb243f116312615cc01d807a28d05dfc3cdf4b8b0287ebc490", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/32000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/32000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/32000/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/32000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/32000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/32000/005.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/32000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/32000/007.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/32000/008.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/4000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/4000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/4000/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/4000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/4000/004.source": "426592e2fb2b4d671f607a34bc6d5eedfe454775ce3304674af04738bdd220a2", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/8000/000.source": "f1137f4d17d7bc9a18934c4387a08fd79118e7f98548d4e9ac73a3edd6cd237c", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/8000/001.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/8000/002.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/8000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/8000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/8000/005.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/8000/006.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/compass/windows/source-order/8000/007.source": "c80f32af2fa6b5b37f6a6b6aed035cc318e7d4e6bda0580a428bff234b2ac17a", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/04.request.json": "883da0706262e806f7254d1763f680dbebb7917ab916867d30c4f43b2ae6b8b9", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/04.response.jsonl": "7ac5d473f020a3eef7e5f7aeb277fa5b33784b888f2d83cdb791ee569b66ec11", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/05.request.json": "722d113b0a110540d31515b29f0c07c5ef96f04d5bf471ffb26605db2cd493ff", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/05.response.jsonl": "b3f990a6d8fc01f0d15ca9272e7c95e8ad376f2a4dae010105662903f08d3896", + "paired-member-focus-01/capture/raw/jsoup/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/16000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/16000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/16000/002.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/16000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/16000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/16000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/16000/006.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/16000/007.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/2000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/2000/001.source": "88dc87722aeb25b94e9d65aca2fba435de9549e5b610468138f69fad1007f03b", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/32000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/32000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/32000/002.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/32000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/32000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/32000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/32000/006.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/32000/007.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/4000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/4000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/4000/002.source": "037358b45081373a57ef7ca4a6a5576d9eaa78b5f1e53b268dfcb7788fa2c308", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/8000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/8000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/8000/002.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/8000/003.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/8000/004.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/8000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/name-focus/8000/006.source": "655f66ae9b5a39084ace665e8c4bc2908062931d8d7a8d4370ae0af6e4792230", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/16000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/16000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/16000/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/16000/003.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/16000/004.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/16000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/16000/006.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/16000/007.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/2000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/2000/001.source": "88dc87722aeb25b94e9d65aca2fba435de9549e5b610468138f69fad1007f03b", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/32000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/32000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/32000/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/32000/003.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/32000/004.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/32000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/32000/006.source": "2a0e8ae288a3240c008c9016181a88ca014bd1b1cd9cee9f30b0a2c44f9cd4b1", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/32000/007.source": "c46a498a7cdc21c07947545e231ddcaaa0678abb7c78a36e5620069e6b250c56", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/4000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/4000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/4000/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/4000/003.source": "92f42d96bb1e12fff294e506bf96320736381f55b60044a2e0fcaa394d7a7e66", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/8000/000.source": "b577f811b284f994dc62cfd95d6c60d63e5d5b70cac13cb5cb3da8ba175b8e71", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/8000/001.source": "39bd7723e9a79009a4a2aeb394f195913bf9f10ef0dc062a4c2f7af545134689", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/8000/002.source": "4b46b8429cab31bbc393bf838692c23b5bce68cf1809a07982380fcfac468a11", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/8000/003.source": "5fca2e4eae89593e8bfba5cd9b0d10f8269493abd2a6f08c49940c0cce1f49a7", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/8000/004.source": "618a9b93563047fcf224a5c27946d83af48606455a610d785c9675ab93527589", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/8000/005.source": "eb5ce17dd624ef1c4474e74a29cf9013c9cae2eff77a75e8560ba06c6b085a28", + "paired-member-focus-01/capture/raw/jsoup/graphify/windows/source-order/8000/006.source": "655f66ae9b5a39084ace665e8c4bc2908062931d8d7a8d4370ae0af6e4792230", + "paired-member-focus-01/capture/raw/redux/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/redux/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "paired-member-focus-01/capture/raw/redux/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/redux/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/redux/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "paired-member-focus-01/capture/raw/redux/compass/mcp/04.request.json": "8803daedf87b9bd35456accb3487cc9e3491a392638e95b56a3d55f8e66f89d5", + "paired-member-focus-01/capture/raw/redux/compass/mcp/04.response.jsonl": "f44f175ad81c0379dd06e156a504fb1f3ceb8e31bd4ddf62777feabdc0700b8c", + "paired-member-focus-01/capture/raw/redux/compass/mcp/05.request.json": "f14c1893f73d7dc8de473fa0cf98d94ca628c56f486b2eb9f9d3f062f42fc479", + "paired-member-focus-01/capture/raw/redux/compass/mcp/05.response.jsonl": "52c6b1012ea90597e06714535dacfd36b80c47132d41501ec6db928751620cc0", + "paired-member-focus-01/capture/raw/redux/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/000.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/001.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/002.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/003.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/004.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/005.source": "8fdb35987b453edb7790f834259829503f8198d58ef579224df9fd4517da2639", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/006.source": "664104220b590744932c6f2b032be0cd60ae9dc02e32b24841c006400675d5f1", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/007.source": "c4a60c00a9c6b8b4c772f637dae7d21634838abf8b3110018e233fda6dd62b02", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/008.source": "297cd3652a03e447c7e6176c8469bbbe1d8a37b4e06c008db06c77f625e859e9", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/009.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/010.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/011.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/012.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/013.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/014.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/015.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/016.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/017.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/018.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/019.source": "a953ead67ac621be50be7865aa5126243ba01f2aff770cbe69f1af5549683196", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/020.source": "4757864d63eee59db076a53611238958606303997f9a6275d5aa54a6be06b4a4", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/021.source": "86cf9d28574843366105776ab0a44ee3a3ae791d1f7e090d64d159b6ee1ea3fe", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/16000/022.source": "d2e88b5804619ae89b7b5e5a754917fb44638ec1f45fd662c9d5bd8696a9cb7d", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/2000/000.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/2000/001.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/2000/002.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/2000/003.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/2000/004.source": "c7e912f3138f2ff7e5b687e1532c3a2561c5808274c01307d80762eb8566f615", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/000.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/001.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/002.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/003.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/004.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/005.source": "8fdb35987b453edb7790f834259829503f8198d58ef579224df9fd4517da2639", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/006.source": "664104220b590744932c6f2b032be0cd60ae9dc02e32b24841c006400675d5f1", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/007.source": "c4a60c00a9c6b8b4c772f637dae7d21634838abf8b3110018e233fda6dd62b02", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/008.source": "297cd3652a03e447c7e6176c8469bbbe1d8a37b4e06c008db06c77f625e859e9", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/009.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/010.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/011.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/012.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/013.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/014.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/015.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/016.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/017.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/018.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/019.source": "a953ead67ac621be50be7865aa5126243ba01f2aff770cbe69f1af5549683196", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/020.source": "4757864d63eee59db076a53611238958606303997f9a6275d5aa54a6be06b4a4", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/021.source": "86cf9d28574843366105776ab0a44ee3a3ae791d1f7e090d64d159b6ee1ea3fe", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/32000/022.source": "d2e88b5804619ae89b7b5e5a754917fb44638ec1f45fd662c9d5bd8696a9cb7d", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/4000/000.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/4000/001.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/4000/002.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/4000/003.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/4000/004.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/4000/005.source": "8fdb35987b453edb7790f834259829503f8198d58ef579224df9fd4517da2639", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/4000/006.source": "664104220b590744932c6f2b032be0cd60ae9dc02e32b24841c006400675d5f1", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/4000/007.source": "c4a60c00a9c6b8b4c772f637dae7d21634838abf8b3110018e233fda6dd62b02", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/4000/008.source": "4b226d5c5bb534e839d6db3499485600f647137a9f536395e2d3fe76ce232de6", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/000.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/001.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/002.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/003.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/004.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/005.source": "8fdb35987b453edb7790f834259829503f8198d58ef579224df9fd4517da2639", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/006.source": "664104220b590744932c6f2b032be0cd60ae9dc02e32b24841c006400675d5f1", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/007.source": "c4a60c00a9c6b8b4c772f637dae7d21634838abf8b3110018e233fda6dd62b02", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/008.source": "297cd3652a03e447c7e6176c8469bbbe1d8a37b4e06c008db06c77f625e859e9", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/009.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/010.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/011.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "paired-member-focus-01/capture/raw/redux/compass/windows/name-focus/8000/012.source": "8026bc2fbb69952096b7136fa97b4360d2bb84d662e313797872d30fcb73bb47", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/014.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/015.source": "8fdb35987b453edb7790f834259829503f8198d58ef579224df9fd4517da2639", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/016.source": "a953ead67ac621be50be7865aa5126243ba01f2aff770cbe69f1af5549683196", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/017.source": "4757864d63eee59db076a53611238958606303997f9a6275d5aa54a6be06b4a4", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/018.source": "86cf9d28574843366105776ab0a44ee3a3ae791d1f7e090d64d159b6ee1ea3fe", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/019.source": "664104220b590744932c6f2b032be0cd60ae9dc02e32b24841c006400675d5f1", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/020.source": "c4a60c00a9c6b8b4c772f637dae7d21634838abf8b3110018e233fda6dd62b02", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/021.source": "d2e88b5804619ae89b7b5e5a754917fb44638ec1f45fd662c9d5bd8696a9cb7d", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/16000/022.source": "297cd3652a03e447c7e6176c8469bbbe1d8a37b4e06c008db06c77f625e859e9", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/2000/011.source": "1bb164faae3ccfe7de42a98c03dbd69039a01c9cd6741b48f9b017d0d583ddac", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/014.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/015.source": "8fdb35987b453edb7790f834259829503f8198d58ef579224df9fd4517da2639", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/016.source": "a953ead67ac621be50be7865aa5126243ba01f2aff770cbe69f1af5549683196", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/017.source": "4757864d63eee59db076a53611238958606303997f9a6275d5aa54a6be06b4a4", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/018.source": "86cf9d28574843366105776ab0a44ee3a3ae791d1f7e090d64d159b6ee1ea3fe", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/019.source": "664104220b590744932c6f2b032be0cd60ae9dc02e32b24841c006400675d5f1", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/020.source": "c4a60c00a9c6b8b4c772f637dae7d21634838abf8b3110018e233fda6dd62b02", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/021.source": "d2e88b5804619ae89b7b5e5a754917fb44638ec1f45fd662c9d5bd8696a9cb7d", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/32000/022.source": "297cd3652a03e447c7e6176c8469bbbe1d8a37b4e06c008db06c77f625e859e9", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/4000/014.source": "f991a26b534be8084f3b1bb9067c7031357eb3c52bc9adcb9f504010fb133047", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/000.source": "fefd5fb81a7b23445d2f150789cf0f05109f23106acdb2f980624e739e01bac2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/001.source": "1c7fe407a6684530c4e4d4f4f1c306bfa03a3cdcfd928a788fbf90b7eb8c9196", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/002.source": "ff066db901fe9a115af900172fa4195da1031fca12ed2e4f7fe00e426f6a2943", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/003.source": "bcf54065989a31c0d240046050b2f438c5d6f4da6e8e240c13d996f463b6c888", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/004.source": "bcc7dbea05f05d97162aa993cc72a73bea8ce4a97c7b1fb65a5964a14bf670f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/005.source": "c126acce74d43261c4d8f6aabcf8edc0b962c09ce4f75f36cf18f96214e23e47", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/006.source": "ff2309baa17a76ad34adfe7c0c62241739a35ef30bfbe8bcc6f44725c5f5ed84", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/007.source": "2f01b1f5e664017b7dbfe07eec58a8a44e699fba4defd0f976c543ca622785b8", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/008.source": "07389aee59f45563b27f911b823055ee3132b091d6d4bdb04f7f2fb8b3d88206", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/009.source": "ea600cae25f2f26c93cec0be4b3956d94f1e3795befdf89b0148d60498e51ca2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/010.source": "09eb4afe0fee0721cbe28d517e7a376aaf5de502d8c1a95300adc7253af7d8f2", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/011.source": "74bc223cde432e77b8936141da3a79860da4c238b719bdee2fd1de08ce3108a7", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/012.source": "6ede28da15d093f8beced8ee23d475fc3e7b6fbe465228108ca0aff4d50a7d7e", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/013.source": "0e16e43c7405bb30498120b98523fbf3fb06d7f4389131f3b3f8ec392f6945ef", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/014.source": "7421a463ba9ee7d106d36ab2812719069881eaeb4aa38820e4b15f3d771d450f", + "paired-member-focus-01/capture/raw/redux/compass/windows/source-order/8000/015.source": "2fa50459f3adaa2c60d3d328d13ddb749207e27feb3c92fe43812e9f2edc01c6", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/04.request.json": "c32cfb2450c017920145bae06b04af6f131c02499e30d987f76daf8e53f1a5e9", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/04.response.jsonl": "cba36e66dcc88f9313662b40b072d5c24cf9fbf25310ac3b1c2f4eaebc8e02c6", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/05.request.json": "f38f6d67ccd3f8f0281ba3709abeaab237da52011550ad8bd0bd1a9fa035a6b1", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/05.response.jsonl": "0ec3d11ad7c82aab1979ae0fe8cd9dc1622478bc3a24e0898627e61b9636769b", + "paired-member-focus-01/capture/raw/redux/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/redux/graphify/windows/name-focus/16000/000.source": "207289d44efe42419f6d7493db434d0417b5247dd9b87cd5ce6d3db29f664f7e", + "paired-member-focus-01/capture/raw/redux/graphify/windows/name-focus/16000/001.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "paired-member-focus-01/capture/raw/redux/graphify/windows/name-focus/2000/000.source": "f461b5313d734e1293e99e20e61436ca9feb668b1f12e957a2465f11cce45a4d", + "paired-member-focus-01/capture/raw/redux/graphify/windows/name-focus/32000/000.source": "207289d44efe42419f6d7493db434d0417b5247dd9b87cd5ce6d3db29f664f7e", + "paired-member-focus-01/capture/raw/redux/graphify/windows/name-focus/32000/001.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "paired-member-focus-01/capture/raw/redux/graphify/windows/name-focus/4000/000.source": "c1968e9c558cb1a0c01df4ae08d11d88594bb54f918a95388d1d38f9f625f41e", + "paired-member-focus-01/capture/raw/redux/graphify/windows/name-focus/8000/000.source": "207289d44efe42419f6d7493db434d0417b5247dd9b87cd5ce6d3db29f664f7e", + "paired-member-focus-01/capture/raw/redux/graphify/windows/name-focus/8000/001.source": "361550eb020b213966a4f9e828905c27c86b2be5455b0ed66d8c541b4802fc21", + "paired-member-focus-01/capture/raw/redux/graphify/windows/source-order/16000/000.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "paired-member-focus-01/capture/raw/redux/graphify/windows/source-order/16000/001.source": "207289d44efe42419f6d7493db434d0417b5247dd9b87cd5ce6d3db29f664f7e", + "paired-member-focus-01/capture/raw/redux/graphify/windows/source-order/2000/000.source": "718759fe6d1d524a045503d49b4d6af5791f62227270ed358a0c8efd1cb2c0e8", + "paired-member-focus-01/capture/raw/redux/graphify/windows/source-order/32000/000.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "paired-member-focus-01/capture/raw/redux/graphify/windows/source-order/32000/001.source": "207289d44efe42419f6d7493db434d0417b5247dd9b87cd5ce6d3db29f664f7e", + "paired-member-focus-01/capture/raw/redux/graphify/windows/source-order/4000/000.source": "6ac89178efb4169df169a238447bcdb738c5a8f6d926212dded707cedc73ea22", + "paired-member-focus-01/capture/raw/redux/graphify/windows/source-order/8000/000.source": "02f3df4750372f7d2806a2932dcb7a287ac405470fdbaf58c96adb8903f7223c", + "paired-member-focus-01/capture/raw/redux/graphify/windows/source-order/8000/001.source": "104842ff0af72b77928d0a849bc5aa5e5bf080e95aeca8f8bc0baacd3dd90aa1", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/03.response.jsonl": "9dee655ad44513e766155ad52de42e306ff48b3965dc25726bdc84796a4dbfc2", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/04.request.json": "d339f2ef2ad14a8ba3ccfaeed06102dae89e51ee863ddda562fcef92e1262bd2", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/04.response.jsonl": "28624be871949873b0f55b789ce3549ba5c966eeca09c89ccb526adc0607fa00", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/05.request.json": "75e03f39e5544dca970a2ed6183ee7389eaab84a0edf9b41c9ed3aead0a0b2f5", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/05.response.jsonl": "2b14975c56bdfab6f4d8926511462d5603fc9b83dfffe030cbdb8e6c3b11610f", + "paired-member-focus-01/capture/raw/walkdir/compass/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/000.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/001.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/002.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/003.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/004.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/005.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/006.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/007.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/008.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/009.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/010.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/011.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/012.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/013.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/014.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/015.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/16000/016.source": "85d302b6beedc991c4291c96ce94f11a461cef9f96755db330354fb36f024328", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/2000/000.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/2000/001.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/2000/002.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/2000/003.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/2000/004.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/2000/005.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/2000/006.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/2000/007.source": "36a9e7f1c95b82ffb99743e0c5c4ce95d83c9a430aac59f84ef3cbfab6145068", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/000.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/001.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/002.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/003.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/004.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/005.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/006.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/007.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/008.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/009.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/010.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/011.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/012.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/013.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/014.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/015.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/016.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/017.source": "73920176fac6c226d78800a2c09e7edab016a662796fca44eb64102a7269849e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/018.source": "b71caf66004b029b7c98c5f78d373a7c78ab1a9f7b6bfa10a4d6b876f1957af6", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/32000/019.source": "d4f9d4bcbdd802b0a3b9865ec683a6a16ae0752470aea7878e9fa03fee02fbea", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/4000/000.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/4000/001.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/4000/002.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/4000/003.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/4000/004.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/4000/005.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/4000/006.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/4000/007.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/4000/008.source": "b83a56a9e29e7e04cd65a2cf7f565ef5e20ac6dc290c887d4e36d72bf52e3e11", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/000.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/001.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/002.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/003.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/004.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/005.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/006.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/007.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/008.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/009.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/name-focus/8000/010.source": "e6ab0dd7e91decb330ea7b038f83d206bec726df3f9874532f81adadcbf57619", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/007.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/008.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/009.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/010.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/011.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/012.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/013.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/014.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/015.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/16000/016.source": "6e64bcf58026de82970666d4b4db45e862854dac48782a6034087bc047263137", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/2000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/2000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/2000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/2000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/2000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/2000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/2000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/2000/007.source": "cbbf1bd40fef95750f8722ee53276dca4d5289613e8082eb030a14236d235ed0", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/007.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/008.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/009.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/010.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/011.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/012.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/013.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/014.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/015.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/016.source": "73920176fac6c226d78800a2c09e7edab016a662796fca44eb64102a7269849e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/017.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/018.source": "b71caf66004b029b7c98c5f78d373a7c78ab1a9f7b6bfa10a4d6b876f1957af6", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/32000/019.source": "d4f9d4bcbdd802b0a3b9865ec683a6a16ae0752470aea7878e9fa03fee02fbea", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/4000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/4000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/4000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/4000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/4000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/4000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/4000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/4000/007.source": "b01050c7b77958949f0ba035e4783dc6e44688bd1937800531564e275cfb29f6", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/000.source": "ff45ca1c29db9f3173b1f545ef952fb6b79c3fe1bc0bd48c6948fbbf216fd72a", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/001.source": "386a59fc2a5e4ae1f44959b2be8feeb2ac6dde5822d24f36c4165bfdfeb417ac", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/002.source": "2e584390c911c511c659505ad05cf56eb6f2124bd3d365715d47b80b352f4f99", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/003.source": "81998d6b94d50a7e4bbe3bfa2df65cb1a331098c70eb327ac33c8fd66974b0fb", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/004.source": "cfa77a0ba1f9e61f2c03f2754f13a698331b406e0b76623484aaac2b96db4831", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/005.source": "2b1252e1e1bcb53d4f0a66e59ced59dbb29926ae626b78cea2ecaeaa39d5a276", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/006.source": "cc91b2d0560786f75b77509e46eb2b04a0fa4242464c1705e05b91f11a7d9e64", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/007.source": "e40e140647193c41d7635036b1dec0786efe1cbc5863edaf76db8096fe8d4ddf", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/008.source": "be7342201ed171b2aa6ef80130e3b3d8ec259442a137c0fa9a3f5182ee79401e", + "paired-member-focus-01/capture/raw/walkdir/compass/windows/source-order/8000/009.source": "907ef6bd190a9985da364ec084579cacae6b06067d5a3bdfa8d98a2c3256eb9b", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/04.request.json": "ac9506fc18f6f6cf468a46a9e781188b01156b4b7c6ab64ad601ab06640a8c25", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/04.response.jsonl": "2190ecdb65f6a8ba2da85c820eccc0fdd4f5c647cedd341f1d624e1368c0977e", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/05.request.json": "18b4ad53dd232900c7db7d584dd42b068d0d3e27cd663c34c4433b6ad5b89197", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/05.response.jsonl": "ea3873a259a5818f1f61c5cef724df012ca38927954973acd3c2e8ff860c2585", + "paired-member-focus-01/capture/raw/walkdir/graphify/mcp/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/000.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/001.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/002.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/003.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/004.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/005.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/006.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/007.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/008.source": "73920176fac6c226d78800a2c09e7edab016a662796fca44eb64102a7269849e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/009.source": "b71caf66004b029b7c98c5f78d373a7c78ab1a9f7b6bfa10a4d6b876f1957af6", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/16000/010.source": "6200f361738587d8826b72cc779afd1b8d11b135feaa3b98377ead3d14218764", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/2000/000.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/2000/001.source": "95be5f499b8d80faef8eabfca1866736287da731e2d1dc75f4e5d8ec403a5fe0", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/000.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/001.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/002.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/003.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/004.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/005.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/006.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/007.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/008.source": "73920176fac6c226d78800a2c09e7edab016a662796fca44eb64102a7269849e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/009.source": "b71caf66004b029b7c98c5f78d373a7c78ab1a9f7b6bfa10a4d6b876f1957af6", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/32000/010.source": "d4f9d4bcbdd802b0a3b9865ec683a6a16ae0752470aea7878e9fa03fee02fbea", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/4000/000.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/4000/001.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/4000/002.source": "0aad7da77d2ed59c396c99a74e49f3a4524dcdbcb5163251b1433d640247aeb4", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/8000/000.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/8000/001.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/8000/002.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/8000/003.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/8000/004.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/name-focus/8000/005.source": "665a76f23d682ab4c026686aac6c9877fa67b88bf3f427408ea82c121739da7a", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/001.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/002.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/003.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/004.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/005.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/006.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/007.source": "73920176fac6c226d78800a2c09e7edab016a662796fca44eb64102a7269849e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/008.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/009.source": "b71caf66004b029b7c98c5f78d373a7c78ab1a9f7b6bfa10a4d6b876f1957af6", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/16000/010.source": "6200f361738587d8826b72cc779afd1b8d11b135feaa3b98377ead3d14218764", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/2000/000.source": "e9afda558aa648a1626f292d9445290945caf90d6eaf7af24e1a9f32e032118a", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/001.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/002.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/003.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/004.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/005.source": "1c1d979dfbe779e90ee6fc9c6179e172a4abde0c5958fbb818598ae752775248", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/006.source": "167e0576debe36584c4cacfc9f5bbd2ee31036aa7020e79f0f8b7518df806058", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/007.source": "73920176fac6c226d78800a2c09e7edab016a662796fca44eb64102a7269849e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/008.source": "49af4ac0821c254d74cb34f99806c400b3303e3646e4ed615bf60b12051a756e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/009.source": "b71caf66004b029b7c98c5f78d373a7c78ab1a9f7b6bfa10a4d6b876f1957af6", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/32000/010.source": "d4f9d4bcbdd802b0a3b9865ec683a6a16ae0752470aea7878e9fa03fee02fbea", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/4000/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/4000/001.source": "fb4eb23be72cc1c60225692eb7bf38b91a4aea2f2b830a4ae4c9063b853f37cf", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/8000/000.source": "47cab2eca2cc07d78d319f7a9acc39c45d31992cc01788c804c2f9b53ff3600b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/8000/001.source": "c08a2af053b0f567c208bc02679f7d0442c7d867050104de90edb223a2cab75b", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/8000/002.source": "64f8be64c7277d8447281854e37989c0b4d002448950982be85d036fdb8a1a7d", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/8000/003.source": "c1e268fb5bde75384cb45c0375ade42dda153da149dfa7645f53d67854c7672e", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/8000/004.source": "2923912d8a93208e4633fd4efd61514a7449defd6519f815c445be6318c10f32", + "paired-member-focus-01/capture/raw/walkdir/graphify/windows/source-order/8000/005.source": "b0c0b5e23f7d4cf98d355ff7f08101ea772f51b09b278f51ab7bb66ad2aaf4a6", + "paired-member-focus-01/capture/runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "paired-member-focus-01/capture/source_windows.py": "8511773acb84c3d7ae19a94f904a0a0422a32b0cafc1cfee15f9725b94e5ab43", + "paired-member-focus-01/capture/window_policy.py": "b81cd0a57472dfe74a41eff8ee70dd8492fcf627f255f9c5dc88877628d94b94", + "paired-member-focus-01/capture.log": "bf14c30211b4674a7357f459fc5f91b25d45ed3c739959ac1cdeb7091f77ea84", + "paired-member-focus-01/capture.py": "07d0f062dd38dc5469aea24c0eeeae921bbc9fce29be3d0134e75d54a3e42edc", + "paired-member-focus-01/prepare_verifier.py": "04c4c0b32071427a7dcd1709ef4bd01d0bf4a70c45c9f5d69ba13f83cdd0b240", + "paired-member-focus-01/product-boundary.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "paired-member-focus-01/redux-window-diagnosis.json": "52f27e5d4235560b89e1745e073f8898db12b4dff616e3912a880b7a2ec6452d", + "paired-member-focus-01/repeat-verification.log": "ae5f8cbd3f578b2a75af5203cd791b9e18ad64dec48628d122f18b36806d4b50", + "paired-member-focus-01/replay.json": "1e7c5e3332c608a3d7f888a2890da82e0a110deb3bea1ec6767cd8acc7658e72", + "paired-member-focus-01/verification.log": "ae5f8cbd3f578b2a75af5203cd791b9e18ad64dec48628d122f18b36806d4b50", + "paired-member-focus-01/verified-summary.json": "683ae9490003eb18c55c58142088418c36ef91fc8bb58bb2a447d9029d1cd7c5", + "paired-member-focus-01/verify.py": "5d59fb9a24716ba2c276781b85b1aec66e0fd46d96b3aae234e2d5bfbb9bb269", + "paired-member-focus-01/window_policy.py": "b81cd0a57472dfe74a41eff8ee70dd8492fcf627f255f9c5dc88877628d94b94", + "paired-member-focus-01/write_review.py": "d20fe529164a89ab2bb3bab3a11d74c0b6cdfef2e7767a243a74db60fde414ad" + } +} diff --git a/benchmarks/agent_query/path_audit.py b/benchmarks/agent_query/path_audit.py new file mode 100644 index 000000000..86e6bc035 --- /dev/null +++ b/benchmarks/agent_query/path_audit.py @@ -0,0 +1,224 @@ +"""Audit captured path responses against graphs and reviewed source witnesses. + +This checks explicitly reviewed source witnesses. It does not estimate population +accuracy, accept endpoint echoes as paths, or choose among ambiguous labels. +Run with ``python3 -m benchmarks.agent_query.path_audit --help``. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +from pathlib import Path +import re + +from benchmarks.agent_query.runner import _node_anchor, _sha256_file, _verify_source, load_suite + +MAX_GRAPH_BYTES = 256 * 1024 * 1024 +MAX_TEXT_BYTES = 16 * 1024 * 1024 +MAX_HOPS = 64 +HEADER = re.compile(r"(?:Best path \(weighted, (\d+) hops, weight [0-9.]+\)|Shortest path \((\d+) hops\)):") +EDGE = re.compile(r"--([a-z_]+) \[([A-Z_]+)\]-->|<--([a-z_]+) \[([A-Z_]+)\]--") +SAFE_KEY = re.compile(r"[a-z0-9][a-z0-9_-]*") + + +def read_bounded(path: Path, limit: int = MAX_TEXT_BYTES) -> bytes: + with path.open("rb") as stream: + data = stream.read(limit + 1) + if len(data) > limit: + raise ValueError(f"input exceeds {limit} bytes: {path}") + return data + + +def parse_path(text: str) -> tuple[list[str], list[dict]]: + lines = text.splitlines() + headers = [(index, match) for index, line in enumerate(lines) + if (match := HEADER.fullmatch(line))] + if len(headers) != 1: + raise ValueError("expected exactly one rendered path header") + index, header = headers[0] + hops = int(header[1] or header[2]) + if hops > MAX_HOPS or index + 1 >= len(lines): + raise ValueError("invalid path length or missing path body") + body = lines[index + 1].strip() + labels, steps, offset = [], [], 0 + for edge in EDGE.finditer(body): + labels.append(body[offset:edge.start()].strip()) + steps.append({"relation": edge[1] or edge[3], + "direction": "forward" if edge[1] else "reverse", + "confidence": edge[2] or edge[4]}) + offset = edge.end() + labels.append(body[offset:].strip()) + if len(steps) != hops or any(not label or len(label) > 512 for label in labels): + raise ValueError("printed hop count does not match the path body") + if any(line.strip() for line in lines[index + 2:]): + raise ValueError("unexpected text after rendered path") + return labels, steps + + +def check_source(root: Path, anchor: dict) -> None: + relative = Path(anchor["file"]) + path = (root / relative).resolve() + if relative.is_absolute() or ".." in relative.parts or not path.is_relative_to(root.resolve()): + raise ValueError("source witness escapes its root") + lines = read_bounded(path).decode("utf-8").splitlines() + line = anchor["line"] + if type(line) is not int or not 1 <= line <= len(lines): + raise ValueError("source witness line is outside the file") + if anchor["text"] not in lines[line - 1]: + raise ValueError(f"source witness changed at {relative}:{line}") + + +def audit_path(witness: dict, tool: str, graph: dict, output: str, source_root: Path) -> dict: + if tool not in ("compass", "graphify"): + raise ValueError("unsupported path audit tool") + for anchor in witness["nodes"]: + check_source(source_root, anchor) + for step in witness["steps"]: + if "site" in step: + check_source(source_root, step["site"]) + for site in step.get("sitesByRelation", {}).values(): + check_source(source_root, site) + result = {"tool": tool, "category": witness["category"], "matched": False, + "failures": [], "nodeIds": [], "steps": []} + try: + labels, steps = parse_path(output) + except ValueError as error: + result["failures"].append(str(error)) + return result + if len(labels) != len(witness["nodes"]) or len(steps) != len(witness["steps"]): + result["failures"].append("route length differs from reviewed witness") + return result + nodes = graph.get("nodes", []) + node_ids = [node.get("id") for node in nodes] + if any(not isinstance(identity, str) or not identity for identity in node_ids): + raise ValueError("graph node IDs must be nonempty strings") + if len(set(node_ids)) != len(node_ids): + raise ValueError("graph node IDs must be unique") + # Match exactly what the renderer prints. Never resolve a collision using + # the expected answer; doing so would conceal an ambiguous response. + for label, expected in zip(labels, witness["nodes"]): + candidates = [node for node in nodes + if node.get("name" if tool == "compass" else "label") == label] + if len(candidates) != 1: + result["failures"].append(f"unverified identity for {label!r}: {len(candidates)} matches") + return result + node = candidates[0] + file, line, _ = _node_anchor(node, tool) + if label not in expected["labels"] or (file, line) != (expected["file"], expected["line"]): + result["failures"].append(f"wrong source declaration for {label!r}") + return result + result["nodeIds"].append(node["id"]) + edges = graph.get("edges") or graph.get("links") or [] + for index, (actual, expected) in enumerate(zip(steps, witness["steps"])): + if actual["direction"] != expected["direction"] or actual["relation"] not in expected["relations"]: + result["failures"].append(f"hop {index + 1} has an unreviewed direction or relation") + continue + left, right = result["nodeIds"][index:index + 2] + source, target = (left, right) if actual["direction"] == "forward" else (right, left) + matches = [edge for edge in edges if ( + edge.get("_src", edge.get("source")), edge.get("_tgt", edge.get("target")), + edge.get("kind", edge.get("relation"))) == (source, target, actual["relation"])] + if not matches: + result["failures"].append(f"hop {index + 1} is absent from graph in printed direction") + site = expected.get("sitesByRelation", {}).get(actual["relation"], expected.get("site")) + grounded = None + if site is not None: + grounded = any(_edge_site(edge, tool) == (site["file"], site["line"]) for edge in matches) + if not grounded: + result["failures"].append(f"hop {index + 1} lacks the reviewed occurrence anchor") + result["steps"].append({**actual, "matchingEdges": len(matches), + "reviewedSite": site, "reviewedSiteSupported": grounded}) + result["matched"] = not result["failures"] + return result + + +def _edge_site(edge: dict, tool: str) -> tuple[object, object]: + if tool == "compass": + site = edge.get("relationshipSite") or {} + line = site.get("startLine") + return site.get("file"), line if type(line) is int and line > 0 else None + location = edge.get("source_location", "") + match = re.fullmatch(r"L([0-9]+)", location) if isinstance(location, str) else None + return edge.get("source_file"), int(match[1]) if match else None + + +def audit_observation(witness: dict, tool: str, graph: dict, output: str, + source_root: Path, observation: dict) -> dict: + """Keep unsuccessful requests in the denominator, even if they print a path.""" + result = audit_path(witness, tool, graph, output, source_root) + result["execution"] = {key: observation[key] for key in + ("exitCode", "timedOut", "followUps")} + if observation["exitCode"] != 0: + result["failures"].append(f"command exited {observation['exitCode']}") + if observation["timedOut"]: + result["failures"].append("command timed out") + if observation["followUps"]: + result["failures"].append("multiple responses are not supported by this path audit") + result["matched"] = not result["failures"] + return result + + +def execute(args: argparse.Namespace) -> None: + root = args.run.resolve() + run = json.loads(read_bounded(root / "run.json")) + if run.get("schema") != "compass.agent-query-run/2": + raise ValueError("path audit requires a provenance-recorded v2 run") + if _sha256_file(root / "suite.toml") != run["suiteDigest"]: + raise ValueError("captured suite digest mismatch") + suite = load_suite(root / "suite.toml") + manifest_bytes = read_bounded(args.witnesses) + manifest = json.loads(manifest_bytes) + if manifest.get("schema") != "compass.agent-path-witnesses/1": + raise ValueError("unsupported path witness schema") + if not 1 <= len(manifest["witnesses"]) <= 1000: + raise ValueError("witness count outside audit limit") + repositories = {record["repository"]: record for record in run["repositories"]} + observations = {(row["repository"], row["question"], row["tool"]): row + for row in run["observations"]} + results = [] + for witness in manifest["witnesses"]: + repository, question = witness["repository"], witness["question"] + if not SAFE_KEY.fullmatch(repository) or not SAFE_KEY.fullmatch(question): + raise ValueError("unsafe witness identifier") + record = repositories[repository] + source = Path(record["source"]) + pinned = suite.repository(repository) + if witness["commit"] != pinned.commit or record["commit"] != pinned.commit: + raise ValueError("witness or captured source commit mismatch") + _verify_source(pinned, source) + for tool in ("compass", "graphify"): + graph_path = Path(record[f"{tool}Graph"]).resolve() + if not graph_path.is_relative_to(root): + raise ValueError("captured graph escapes the run directory") + graph_bytes = read_bounded(graph_path, MAX_GRAPH_BYTES) + if hashlib.sha256(graph_bytes).hexdigest() != record[f"{tool}GraphSha256"]: + raise ValueError("captured graph digest mismatch") + observation = observations[repository, question, tool] + raw = read_bounded(root / "raw" / repository / f"{question}.{tool}.0.stdout") + # stdoutBytes totals all pages; only compare it to the first capture + # for single-response requests. Unsupported follow-ups fail below. + if not observation["followUps"] and len(raw) != observation["stdoutBytes"]: + raise ValueError("captured response length mismatch") + result = audit_observation(witness, tool, json.loads(graph_bytes), + raw.decode("utf-8"), source, observation) + results.append({"repository": repository, "question": question, + "stdoutSha256": hashlib.sha256(raw).hexdigest(), **result}) + _verify_source(pinned, source) + report = {"schema": "compass.agent-path-audit/1", "runId": run["runId"], + "scope": manifest["scope"], "witnessDigest": hashlib.sha256(manifest_bytes).hexdigest(), + "auditorDigest": _sha256_file(Path(__file__)), "results": results} + args.output.parent.mkdir(parents=True, exist_ok=True) + with args.output.open("x", encoding="utf-8") as stream: + stream.write(json.dumps(report, indent=2, sort_keys=True) + "\n") + for result in results: + print(result["repository"], result["tool"], result["matched"], result["failures"]) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--run", type=Path, required=True) + parser.add_argument("--witnesses", type=Path, default=Path(__file__).with_name("path_witnesses.json")) + parser.add_argument("--output", type=Path, required=True) + execute(parser.parse_args()) diff --git a/benchmarks/agent_query/path_witnesses.json b/benchmarks/agent_query/path_witnesses.json new file mode 100644 index 000000000..1857b9eda --- /dev/null +++ b/benchmarks/agent_query/path_witnesses.json @@ -0,0 +1,209 @@ +{ + "schema": "compass.agent-path-witnesses/1", + "scope": "Development witnesses reviewed after observing output; not held-out accuracy estimates. Containment proves navigation, not execution flow. Gson accepts either source-supported instantiation or a return-type reference, recording their different relations and occurrences.", + "witnesses": [ + { + "repository": "cobra", + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "question": "cobra2-path-find-legacyargs", + "category": "call", + "nodes": [ + { + "file": "command.go", + "line": 757, + "text": "func (c *Command) Find(", + "labels": [ + ".Find()" + ] + }, + { + "file": "args.go", + "line": 28, + "text": "func legacyArgs(", + "labels": [ + "legacyArgs()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "command.go", + "line": 776, + "text": "legacyArgs(commandFound, stripFlags(a, commandFound))" + } + } + ] + }, + { + "repository": "flask", + "commit": "d73fa1cdcbd8b1465c151db8924ba58b1dd14e35", + "question": "flask2-path-fulldispatch-finalize", + "category": "call", + "nodes": [ + { + "file": "src/flask/app.py", + "line": 995, + "text": "def full_dispatch_request(", + "labels": [ + ".full_dispatch_request()" + ] + }, + { + "file": "src/flask/app.py", + "line": 1024, + "text": "def finalize_request(", + "labels": [ + ".finalize_request()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/flask/app.py", + "line": 1022, + "text": "self.finalize_request(ctx, rv)" + } + } + ] + }, + { + "repository": "gson", + "commit": "15ca7360379cf3c1502b59981569050489f2d73e", + "question": "gson2-path-newjsonwriter-jsonwriter", + "category": "construction-reference", + "nodes": [ + { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "text": "public JsonWriter newJsonWriter(", + "labels": [ + ".newJsonWriter()" + ] + }, + { + "file": "gson/src/main/java/com/google/gson/stream/JsonWriter.java", + "line": 162, + "text": "public class JsonWriter", + "labels": [ + "JsonWriter" + ] + } + ], + "steps": [ + { + "relations": [ + "instantiates", + "references" + ], + "direction": "forward", + "sitesByRelation": { + "instantiates": { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 801, + "text": "new JsonWriter(writer)" + }, + "references": { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "text": "public JsonWriter newJsonWriter(" + } + } + } + ] + }, + { + "repository": "zod", + "commit": "d2b135cfb7a3582b9eb515756b9166bcb9521f4a", + "question": "zod2-path-detectversion-convertschema", + "category": "file-containment", + "nodes": [ + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 105, + "text": "function detectVersion(", + "labels": [ + "detectVersion()" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 1, + "text": "", + "labels": [ + "from-json-schema", + "from-json-schema.ts" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 808, + "text": "function convertSchema(", + "labels": [ + "convertSchema()" + ] + } + ], + "steps": [ + { + "relations": [ + "contains" + ], + "direction": "reverse" + }, + { + "relations": [ + "contains" + ], + "direction": "forward" + } + ] + }, + { + "repository": "axum", + "commit": "af1345b53a259b0990be1ff853f9b56c05040ef7", + "question": "axum2-path-validate-v07", + "category": "call", + "nodes": [ + { + "file": "src/routing/path_router.rs", + "line": 22, + "text": "fn validate_path(", + "labels": [ + "validate_path()" + ] + }, + { + "file": "src/routing/path_router.rs", + "line": 36, + "text": "fn validate_v07_paths(", + "labels": [ + "validate_v07_paths()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/routing/path_router.rs", + "line": 30, + "text": "validate_v07_paths(path)?" + } + } + ] + } + ] +} diff --git a/benchmarks/agent_query/path_witnesses_fd.json b/benchmarks/agent_query/path_witnesses_fd.json new file mode 100644 index 000000000..3589e3cad --- /dev/null +++ b/benchmarks/agent_query/path_witnesses_fd.json @@ -0,0 +1,80 @@ +{ + "schema": "compass.agent-path-witnesses/1", + "scope": "Post-output development audit of two predeclared fd path questions. Checks printed direction, exact declaration identity and at least one compatible source occurrence in the captured graph; the rendered path does not identify a particular parallel edge or prove runtime execution. Not representative held-out accuracy.", + "witnesses": [ + { + "repository": "fd", + "commit": "b422e5d8c9cffaa1ae43ba68e7b97a60fb3e8ae5", + "question": "fd-path-command-error", + "category": "call", + "nodes": [ + { + "file": "src/exec/command.rs", + "line": 60, + "text": "pub fn execute_commands<", + "labels": [ + "execute_commands()" + ] + }, + { + "file": "src/exec/command.rs", + "line": 101, + "text": "pub fn handle_cmd_error(", + "labels": [ + "handle_cmd_error()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/exec/command.rs", + "line": 68, + "text": "handle_cmd_error(None, e)" + } + } + ] + }, + { + "repository": "fd", + "commit": "b422e5d8c9cffaa1ae43ba68e7b97a60fb3e8ae5", + "question": "fd-path-batch-exitcodes", + "category": "call", + "nodes": [ + { + "file": "src/exec/mod.rs", + "line": 90, + "text": "pub fn execute_batch<", + "labels": [ + ".execute_batch()" + ] + }, + { + "file": "src/exit_codes.rs", + "line": 46, + "text": "pub fn merge_exitcodes(", + "labels": [ + "merge_exitcodes()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/exec/mod.rs", + "line": 116, + "text": "merge_exitcodes(builders.iter()" + } + } + ] + } + ] +} diff --git a/benchmarks/agent_query/path_witnesses_heldout_a.json b/benchmarks/agent_query/path_witnesses_heldout_a.json new file mode 100644 index 000000000..fe9bf38d5 --- /dev/null +++ b/benchmarks/agent_query/path_witnesses_heldout_a.json @@ -0,0 +1,396 @@ +{ + "schema": "compass.agent-path-witnesses/1", + "scope": "Pre-execution source-reviewed one-hop forward/reverse witnesses for held-out panel A. Checks exact rendered identities, direction, relation, and at least one correct occurrence; not runtime execution or whole-graph precision.", + "witnesses": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "question": "chi-holdout-path-forward", + "category": "call", + "nodes": [ + { + "file": "chi.go", + "line": 62, + "text": "func NewRouter() *Mux {", + "labels": [ + "NewRouter()", + ".NewRouter()" + ] + }, + { + "file": "mux.go", + "line": 52, + "text": "func NewMux() *Mux {", + "labels": [ + "NewMux()", + ".NewMux()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "chi.go", + "line": 63, + "text": "return NewMux()" + } + } + ] + }, + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "question": "chi-holdout-path-reverse", + "category": "call", + "nodes": [ + { + "file": "mux.go", + "line": 52, + "text": "func NewMux() *Mux {", + "labels": [ + "NewMux()", + ".NewMux()" + ] + }, + { + "file": "chi.go", + "line": 62, + "text": "func NewRouter() *Mux {", + "labels": [ + "NewRouter()", + ".NewRouter()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "reverse", + "site": { + "file": "chi.go", + "line": 63, + "text": "return NewMux()" + } + } + ] + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "question": "click-holdout-path-forward", + "category": "call", + "nodes": [ + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "labels": [ + "open_file()", + ".open_file()" + ] + }, + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "labels": [ + "open_stream()", + ".open_stream()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + } + } + ] + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "question": "click-holdout-path-reverse", + "category": "call", + "nodes": [ + { + "file": "src/click/_compat.py", + "line": 374, + "text": "def open_stream(", + "labels": [ + "open_stream()", + ".open_stream()" + ] + }, + { + "file": "src/click/utils.py", + "line": 381, + "text": "def open_file(", + "labels": [ + "open_file()", + ".open_file()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "reverse", + "site": { + "file": "src/click/utils.py", + "line": 422, + "text": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)" + } + } + ] + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "question": "jsoup-holdout-path-forward", + "category": "call", + "nodes": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "text": "public boolean isValidBodyHtml(String bodyHtml) {", + "labels": [ + "isValidBodyHtml()", + ".isValidBodyHtml()" + ] + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 182, + "text": "private int copySafeNodes(Element source, Element dest) {", + "labels": [ + "copySafeNodes()", + ".copySafeNodes()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 131, + "text": "int numDiscarded = copySafeNodes(dirty.body(), clean.body());" + } + } + ] + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "question": "jsoup-holdout-path-reverse", + "category": "call", + "nodes": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 182, + "text": "private int copySafeNodes(Element source, Element dest) {", + "labels": [ + "copySafeNodes()", + ".copySafeNodes()" + ] + }, + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "text": "public boolean isValidBodyHtml(String bodyHtml) {", + "labels": [ + "isValidBodyHtml()", + ".isValidBodyHtml()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "reverse", + "site": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 131, + "text": "int numDiscarded = copySafeNodes(dirty.body(), clean.body());" + } + } + ] + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "question": "redux-holdout-path-forward", + "category": "call", + "nodes": [ + { + "file": "src/utils/kindOf.ts", + "line": 2, + "text": "export function miniKindOf(val: any): string {", + "labels": [ + "miniKindOf()", + ".miniKindOf()" + ] + }, + { + "file": "src/utils/kindOf.ts", + "line": 40, + "text": "function ctorName(val: any): string | null {", + "labels": [ + "ctorName()", + ".ctorName()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/utils/kindOf.ts", + "line": 21, + "text": "const constructorName = ctorName(val)" + } + } + ] + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "question": "redux-holdout-path-reverse", + "category": "call", + "nodes": [ + { + "file": "src/utils/kindOf.ts", + "line": 40, + "text": "function ctorName(val: any): string | null {", + "labels": [ + "ctorName()", + ".ctorName()" + ] + }, + { + "file": "src/utils/kindOf.ts", + "line": 2, + "text": "export function miniKindOf(val: any): string {", + "labels": [ + "miniKindOf()", + ".miniKindOf()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "reverse", + "site": { + "file": "src/utils/kindOf.ts", + "line": 21, + "text": "const constructorName = ctorName(val)" + } + } + ] + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "question": "walkdir-holdout-path-forward", + "category": "call", + "nodes": [ + { + "file": "src/lib.rs", + "line": 456, + "text": "pub fn sort_by_file_name(self) -> Self {", + "labels": [ + "sort_by_file_name()", + ".sort_by_file_name()" + ] + }, + { + "file": "src/lib.rs", + "line": 417, + "text": "pub fn sort_by(mut self, cmp: F) -> Self", + "labels": [ + "sort_by()", + ".sort_by()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/lib.rs", + "line": 457, + "text": "self.sort_by(|a, b| a.file_name().cmp(b.file_name()))" + } + } + ] + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "question": "walkdir-holdout-path-reverse", + "category": "call", + "nodes": [ + { + "file": "src/lib.rs", + "line": 417, + "text": "pub fn sort_by(mut self, cmp: F) -> Self", + "labels": [ + "sort_by()", + ".sort_by()" + ] + }, + { + "file": "src/lib.rs", + "line": 456, + "text": "pub fn sort_by_file_name(self) -> Self {", + "labels": [ + "sort_by_file_name()", + ".sort_by_file_name()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "reverse", + "site": { + "file": "src/lib.rs", + "line": 457, + "text": "self.sort_by(|a, b| a.file_name().cmp(b.file_name()))" + } + } + ] + } + ] +} diff --git a/benchmarks/agent_query/public_neighbor_path_registration.json b/benchmarks/agent_query/public_neighbor_path_registration.json new file mode 100644 index 000000000..0805e8215 --- /dev/null +++ b/benchmarks/agent_query/public_neighbor_path_registration.json @@ -0,0 +1,29 @@ +{ + "schema": "compass.public-neighbor-path-registration/1", + "baselineCommit": "f9e2044823c62d1209770b7149f66a82e7b8cbc3", + "graphRun": "java-state-access-02/run.json", + "graphRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "sourceWitnesses": { + "longer_path_witnesses.json": "33d1cdccc5cfb6f4225674c36ee7616b6dc21e0a51c2c5bbedc8fa1e44ae8718" + }, + "compassBinary": "calls-only-trails-01/compass", + "compassBinarySha256": "80a970c1c403892fcafd82eac7e6461afec119f2008db9f9117419432e387ca6", + "scope": "Shared breadth-first public-neighbor workflow on the same five known development questions, not held-out or pure internal-algorithm equivalence.", + "bounds": { + "maxDepth": 8, + "maxExpandedNodes": 128, + "maxRequests": 512, + "maxOutgoingGroups": 8192, + "maxWorkflowResponseBytes": 16777216, + "maxResponseBytes": 1048576, + "requestTimeoutSeconds": 60, + "workflowTimeoutSeconds": 180, + "graphifyTokenBudget": 262144 + }, + "endpoints": "Fresh unchanged source-assisted public exact endpoint resolution for both tools; retain all five pairs in denominator. No graph IDs supplied by evaluator. No alternate endpoint on lookup failure.", + "algorithm": "FIFO breadth-first search of outgoing exact calls relations, visited by public ID. Expand each ID at most once through get_neighbors relation_filter=calls. Retain complete responses; stop on invalid/truncated neighbor output, transport errors or workflow limits. Missing intermediate identities are pruned with explicit incomplete-identity diagnostics, never converted into global absence. Queue destinations sorted by public file, declaration line, label and ID after all neighbors of an expansion are resolved. Stop on first target discovered; max depth frontier is not expanded.", + "adapters": "Compass uses full destination nodes and records from structured neighbor responses. Graphify displayed destination labels require get_node(label), cached by exact label including failed responses. Accept only a single response with identical displayed label, ID and declaration coordinate. No source-path guessing from call sites. Reject non-extracted/heuristic call edges in both adapters. Each request and byte, including lookups, counts toward shared limits. Endpoint lookups count toward request/byte budget.", + "identityCaveat": "Graphify may silently select one of several same-file declarations. Public success is only provisional: post-capture graph projection must confirm the resolved ID is the actual displayed outgoing edge target. No global graph uniqueness used to select requests. No graph/source data access in traversal.", + "judgment": "Retain raw MCP requests/responses, graph/binary/source/environment hashes, graph-projection checks and source declaration/call-site support for every returned path. Existing registered routes and previously source-reviewed alternatives are allowed with occurrence credit separate. New alternatives require explicit post-capture source adjudication. Static reachability is not runtime feasibility; retain jsoup caller-context caveat if applicable. No complete global absence score.", + "reporting": "Report all tool/question outcomes, endpoint and intermediate identity gaps, budget exhaustion, path source support, resolver/neighbor request counts and response bytes. No combining native path results with this workflow. Interface capacity differences and ordering by tool-returned anchors preclude a pure algorithm-quality or equal-internal-work claim. Authored explanations, god-object judgments, communities and held-out superiority remain outstanding." +} diff --git a/benchmarks/agent_query/public_neighbor_path_review.json b/benchmarks/agent_query/public_neighbor_path_review.json new file mode 100644 index 000000000..f0cb76cc7 --- /dev/null +++ b/benchmarks/agent_query/public_neighbor_path_review.json @@ -0,0 +1,1765 @@ +{ + "schema": "compass.public-neighbor-path-review/1", + "registrationCommit": "553d2365", + "harnessCommit": "221e0b3a", + "scope": "Shared breadth-first public-neighbor workflow on the same five known development questions, not held-out or pure internal-algorithm equivalence.", + "version": "0.3.30", + "compassBinarySha256": "80a970c1c403892fcafd82eac7e6461afec119f2008db9f9117419432e387ca6", + "graphRun": "java-state-access-02/run.json", + "graphRunSha256": "c315bffe56cbb7a7684c088e0219fc85ba9ef0681a39463608845691522d21ff", + "bounds": { + "maxDepth": 8, + "maxExpandedNodes": 128, + "maxRequests": 512, + "maxOutgoingGroups": 8192, + "maxWorkflowResponseBytes": 16777216, + "maxResponseBytes": 1048576, + "requestTimeoutSeconds": 60, + "workflowTimeoutSeconds": 180, + "graphifyTokenBudget": 262144 + }, + "summary": { + "compass": { + "tasks": 5, + "sourceSupportedStaticCallPaths": 4, + "requests": 72, + "responseBytes": 1558220, + "neighborCalls": 62 + }, + "graphify": { + "tasks": 5, + "sourceSupportedStaticCallPaths": 0, + "requests": 38, + "responseBytes": 11001, + "neighborCalls": 14 + } + }, + "results": [ + { + "question": "chi-longer-chain", + "repository": "chi", + "tool": "compass", + "status": "candidate-path", + "metrics": { + "requests": 17, + "responseBytes": 229711, + "expandedNodes": 15, + "outgoingGroups": 20, + "identityGaps": [] + }, + "neighborProjections": [ + { + "seed": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "fullProjectionMatches": true, + "groups": 17 + }, + { + "seed": "sha256:40c6eac5ebb17f0928a3fba7f780d710a7fe796486db71a7c5901b48e5fb11aa", + "fullProjectionMatches": true, + "groups": 4 + }, + { + "seed": "sha256:6276508352ced3f0f1e174e086e9d580d76e839880af2488d8c06e6243e5b3d2", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:8527a45e38e92b6d4e24c5284bec8a457fec3c27674c35d8a68d099d885b0807", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "fullProjectionMatches": true, + "groups": 14 + }, + { + "seed": "sha256:08748bdcf0f5d09272a8145148acb9846d7f4bf39d19a8b18b4ad3efa7e783cb", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "fullProjectionMatches": true, + "groups": 5 + }, + { + "seed": "sha256:04113f0d3d895490f3ca4ecadb6c31a60d78a00b54dc3459c6d5e1e4d87b4d1b", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:745353deb3e8023e7484239e5f1b8a0df2c73e9c9bbaf88edf6d0e25d2d6857c", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:fbb1d28e31f4187b97114754df96505ac4f99f69a2065df364d9ab3a1a3939f9", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:111dda918f957e920843303a5c69f2cda3e9b2006d711b0aef4efca1545bdc62", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:14440f0795f62b6428da626ef794bf18b4acd793012fc5148478f8a50519ddaa", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "fullProjectionMatches": true, + "groups": 2 + } + ], + "sourceSupportedStaticCallPath": true, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "registeredRoute": true, + "hops": 6, + "nodes": [ + { + "id": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "label": ".MethodFunc()", + "file": "mux.go", + "line": 137 + }, + { + "id": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "label": ".Method()", + "file": "mux.go", + "line": 127 + }, + { + "id": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "label": ".handle()", + "file": "mux.go", + "line": 430 + }, + { + "id": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "label": ".InsertRoute()", + "file": "tree.go", + "line": 148 + }, + { + "id": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "label": ".addChild()", + "file": "tree.go", + "line": 244 + }, + { + "id": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "label": ".Sort()", + "file": "tree.go", + "line": 834 + }, + { + "id": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "label": ".tailSort()", + "file": "tree.go", + "line": 841 + } + ], + "sourceInterpretation": "Six static call steps. InsertRoute new-child branch; node.children is an array of nodes (tree.go:112,831). Sort invokes tailSort directly, independently of sort.Sort callback dispatch. Not a guarantee for every route registration.", + "steps": [ + { + "source": "sha256:df0333f52e3fd0c8f9492484bcef6287d9044fe0834e27bf8adb31cd646f7bbc", + "target": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "occurrences": [ + { + "edgeId": "sha256:275a2a085c7409a899e065c2d836a8a75506ddd76542ac01de4764e50e899b32", + "site": { + "endByte": 4480, + "endColumn": 10, + "endLine": 138, + "file": "mux.go", + "startByte": 4471, + "startColumn": 1, + "startLine": 138 + }, + "token": "mx.Method", + "sourceLine": "mx.Method(method, pattern, handlerFn)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "registeredOccurrence": true + } + ] + }, + { + "source": "sha256:3456e37dabe75e9c6f4dd179da5eb7f3687aa418b2f40e76eced666aab857948", + "target": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "occurrences": [ + { + "edgeId": "sha256:3155b7566154b5aa0c12e18cd3b3049c0b96cc58b9d8a2f0fa38df38f24cb968", + "site": { + "endByte": 4244, + "endColumn": 10, + "endLine": 132, + "file": "mux.go", + "startByte": 4235, + "startColumn": 1, + "startLine": 132 + }, + "token": "mx.handle", + "sourceLine": "mx.handle(m, pattern, handler)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "registeredOccurrence": true + } + ] + }, + { + "source": "sha256:f347f98bee807aa7b86ad9bb7962bce9fffcacb0e94be392f6bca77e9d6c978e", + "target": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "occurrences": [ + { + "edgeId": "sha256:a8a9ae5d8e8d38059bf3959a56f6ab77056b2a23faac85a18f88ce28c5fdebb5", + "site": { + "endByte": 14647, + "endColumn": 27, + "endLine": 450, + "file": "mux.go", + "startByte": 14628, + "startColumn": 8, + "startLine": 450 + }, + "token": "mx.tree.InsertRoute", + "sourceLine": "return mx.tree.InsertRoute(method, pattern, h)", + "fileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "registeredOccurrence": true + } + ] + }, + { + "source": "sha256:eb099943707f1745c7673f0dbc8e5a32de0d98b853e4b355ab9633337b638aa6", + "target": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "occurrences": [ + { + "edgeId": "sha256:ccf5003b8ab733f02261cf37e8cb1a81ad544e2dad715b874ca661a50c10ff16", + "site": { + "endByte": 4063, + "endColumn": 24, + "endLine": 183, + "file": "tree.go", + "startByte": 4048, + "startColumn": 9, + "startLine": 183 + }, + "token": "parent.addChild", + "sourceLine": "hn := parent.addChild(child, search)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "registeredOccurrence": true + }, + { + "edgeId": "sha256:6a77716bfb365f29981919b1de89b17363469d497aba82b41826e378599f272b", + "site": { + "endByte": 5084, + "endColumn": 16, + "endLine": 219, + "file": "tree.go", + "startByte": 5070, + "startColumn": 2, + "startLine": 219 + }, + "token": "child.addChild", + "sourceLine": "child.addChild(n, n.prefix)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "registeredOccurrence": false + }, + { + "edgeId": "sha256:17503263f573f194d45c6ae391671d2d5a4bd4e12bc747506a22ada192cbfc7a", + "site": { + "endByte": 5450, + "endColumn": 22, + "endLine": 234, + "file": "tree.go", + "startByte": 5436, + "startColumn": 8, + "startLine": 234 + }, + "token": "child.addChild", + "sourceLine": "hn := child.addChild(subchild, search)", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "registeredOccurrence": false + } + ] + }, + { + "source": "sha256:55176ea3fbc2e5433e9caad3ceaf306874161c241b5f88a33e9311eb17b62281", + "target": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "occurrences": [ + { + "edgeId": "sha256:601de0e2ca7205974e0faaff74d434e41ad0dd888152555f0c59fbd7628deac2", + "site": { + "endByte": 7784, + "endColumn": 27, + "endLine": 324, + "file": "tree.go", + "startByte": 7758, + "startColumn": 1, + "startLine": 324 + }, + "token": "n.children[child.typ].Sort", + "sourceLine": "n.children[child.typ].Sort()", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "registeredOccurrence": true + } + ] + }, + { + "source": "sha256:e8d66ff7221a02dd43bc81b478c3d9c8ca4bfd8c548b14c6dd4454928370ae1f", + "target": "sha256:7b531e0becdceec22b2ecc51aab48f16e1e4387ca00167e025b0d56488a2c373", + "occurrences": [ + { + "edgeId": "sha256:19b5d096b571e01247e9a40f78c6ac42547439d6983705ea941b42468340359f", + "site": { + "endByte": 19602, + "endColumn": 64, + "endLine": 834, + "file": "tree.go", + "startByte": 19591, + "startColumn": 53, + "startLine": 834 + }, + "token": "ns.tailSort", + "sourceLine": "func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }", + "fileSha256": "f4b12b63b662fb8e36658172b36b35705cfb24eefae0665635f4fbd52e64fb79", + "registeredOccurrence": true + } + ] + } + ], + "everyStepHasFrozenOccurrence": true + }, + { + "question": "chi-longer-chain", + "repository": "chi", + "tool": "graphify", + "status": "no-path-in-public-projection", + "metrics": { + "requests": 4, + "responseBytes": 889, + "expandedNodes": 1, + "outgoingGroups": 1, + "identityGaps": [ + { + "source": "chi_mux_methodfunc", + "label": ".Method()" + } + ] + }, + "neighborProjections": [ + { + "seed": "chi_mux_methodfunc", + "fullProjectionMatches": true, + "groups": 1 + } + ], + "sourceSupportedStaticCallPath": false, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "depthFrontier": false, + "identityIncomplete": true + }, + { + "question": "click-longer-chain", + "repository": "click", + "tool": "compass", + "status": "candidate-path", + "metrics": { + "requests": 20, + "responseBytes": 150399, + "expandedNodes": 18, + "outgoingGroups": 22, + "identityGaps": [] + }, + "neighborProjections": [ + { + "seed": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "fullProjectionMatches": true, + "groups": 9 + }, + { + "seed": "sha256:a6c6eac365b65fafaf2f46514d79c2cb36bb310fcfcb5119fcf65cca36ea35f9", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:c8e03a31a1fd9f4ad155cf175393059c19b39de76b0dd1e92846e4d54208f565", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:ce818f0b76bc22f9a5fab5a87ee641fc354b36d0b25fd9f9d9370ca34bd50a5c", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:99cfd9ec1cf2af8fefce05af77c3e06afd3b006b3fc19156d991f367bd8e4329", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:df1025c2e984d654ad2597becd23a2791380e986f0fa7773caf234533c9e148d", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:786c10821cf94664962fba44589b5e61c43e426efb6b21a72e0f75b8c62e16df", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:1247460d05758ec1b97ab3be64b4c72b3267679b89d2dc0b4d2f821d5aef0988", + "fullProjectionMatches": true, + "groups": 4 + }, + { + "seed": "sha256:7b8408bce28918d25cfac7058f49528e17c35cc79e1f0d49f9047a5fca4b825c", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:d2f556e1089d5ce7e50e18d8b5a53dea00ca5b55cab76d758e3f434210f05f63", + "fullProjectionMatches": true, + "groups": 4 + }, + { + "seed": "sha256:51a2c6a392a1f65fa9af0e9aa01f4b4d4d28c31d3030473bfcfd210867727504", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:e2c76ab69c159b40a93080ab5c1fa322863c8644d0523b5d2dc0ff14c913eba8", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:e8ae6c11ad96ae0c1baf0de72a06c4992f308c3c57562fd40e776724c4feac77", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "fullProjectionMatches": true, + "groups": 5 + }, + { + "seed": "sha256:059195200d381c39015156a67b25a9d17c33e90b3c81f97ac8a978fc1730ad25", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:c075a3ccbc08848aeeaf9580eb357a64a6d0182880b227853117cb79752c8c29", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "fullProjectionMatches": true, + "groups": 2 + } + ], + "sourceSupportedStaticCallPath": true, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "registeredRoute": false, + "hops": 6, + "nodes": [ + { + "id": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "label": "open_file()", + "file": "src/click/utils.py", + "line": 381 + }, + { + "id": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "label": "open_stream()", + "file": "src/click/_compat.py", + "line": 374 + }, + { + "id": "sha256:ce818f0b76bc22f9a5fab5a87ee641fc354b36d0b25fd9f9d9370ca34bd50a5c", + "label": "get_text_stdin()", + "file": "src/click/_compat.py", + "line": 340 + }, + { + "id": "sha256:7b8408bce28918d25cfac7058f49528e17c35cc79e1f0d49f9047a5fca4b825c", + "label": "_force_correct_text_reader()", + "file": "src/click/_compat.py", + "line": 287 + }, + { + "id": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "label": "_force_correct_text_stream()", + "file": "src/click/_compat.py", + "line": 241 + }, + { + "id": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "label": "_stream_is_misconfigured()", + "file": "src/click/_compat.py", + "line": 212 + }, + { + "id": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "label": "is_ascii_encoding()", + "file": "src/click/_compat.py", + "line": 43 + } + ], + "sourceInterpretation": "Seven static calls: non-lazy open_file, text standard-output branch, no Windows stream override, rewrap needed and encoding omitted. There is also a shorter six-call path through _stream_is_misconfigured; neither witness proves a globally shortest path.", + "steps": [ + { + "source": "sha256:67617fe84c7e933001c8e7a60628821e3924d23d180c92cd780bba23fd5f7d1d", + "target": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "occurrences": [ + { + "edgeId": "sha256:b4f41add3eb26a6b6699864bed02e49dd24595a669501b1f2fbd44140601556e", + "site": { + "endByte": 12991, + "endColumn": 33, + "endLine": 422, + "file": "src/click/utils.py", + "startByte": 12980, + "startColumn": 22, + "startLine": 422 + }, + "token": "open_stream", + "sourceLine": "f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)", + "fileSha256": "4720e22c292047ff1a747546b1ba80e96d1d8e8158e2e21ff01cdddb6498db17", + "registeredOccurrence": false + } + ] + }, + { + "source": "sha256:a06c11e8745b06b0d60bc3f43308f19ae0c888cf7369a2a07bdf50adef36cda6", + "target": "sha256:ce818f0b76bc22f9a5fab5a87ee641fc354b36d0b25fd9f9d9370ca34bd50a5c", + "occurrences": [ + { + "edgeId": "sha256:9c0c4b59d480a70521a8a3c64b56f24e2c571cb025fbd97c2cb05338628b87e2", + "site": { + "endByte": 12140, + "endColumn": 29, + "endLine": 393, + "file": "src/click/_compat.py", + "startByte": 12126, + "startColumn": 15, + "startLine": 393 + }, + "token": "get_text_stdin", + "sourceLine": "return get_text_stdin(encoding=encoding, errors=errors), False", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "registeredOccurrence": false + } + ] + }, + { + "source": "sha256:ce818f0b76bc22f9a5fab5a87ee641fc354b36d0b25fd9f9d9370ca34bd50a5c", + "target": "sha256:7b8408bce28918d25cfac7058f49528e17c35cc79e1f0d49f9047a5fca4b825c", + "occurrences": [ + { + "edgeId": "sha256:84a48105e96c0f567644fc37682c9471bb2f51599ad3b7f4828839c1288be3ac", + "site": { + "endByte": 10461, + "endColumn": 37, + "endLine": 344, + "file": "src/click/_compat.py", + "startByte": 10435, + "startColumn": 11, + "startLine": 344 + }, + "token": "_force_correct_text_reader", + "sourceLine": "return _force_correct_text_reader(sys.stdin, encoding, errors, force_readable=True)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "registeredOccurrence": false + } + ] + }, + { + "source": "sha256:7b8408bce28918d25cfac7058f49528e17c35cc79e1f0d49f9047a5fca4b825c", + "target": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "occurrences": [ + { + "edgeId": "sha256:ccf464c0db82f3991fb580368dec35d3a9f1302d34a9dd522cfac5ac0a93e720", + "site": { + "endByte": 9075, + "endColumn": 37, + "endLine": 293, + "file": "src/click/_compat.py", + "startByte": 9049, + "startColumn": 11, + "startLine": 293 + }, + "token": "_force_correct_text_stream", + "sourceLine": "return _force_correct_text_stream(", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "registeredOccurrence": false + } + ] + }, + { + "source": "sha256:2bb5e945d78615328d89289c6349b2dcf64a0163c96a56858c408dca2b340b4a", + "target": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "occurrences": [ + { + "edgeId": "sha256:72b56daa7667aa4f850ba7b6d3a3425bff15cd210fab0d7c6feec970446d73e4", + "site": { + "endByte": 8058, + "endColumn": 57, + "endLine": 257, + "file": "src/click/_compat.py", + "startByte": 8034, + "startColumn": 33, + "startLine": 257 + }, + "token": "_stream_is_misconfigured", + "sourceLine": "encoding is None and _stream_is_misconfigured(text_stream)", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "registeredOccurrence": false + } + ] + }, + { + "source": "sha256:f16761c5455da66271543ed529a77e200d5910dd6305b794268701206b284595", + "target": "sha256:6f89c9f807d871c17b85331c10a2c64570b90948628f4858ee026af56438af02", + "occurrences": [ + { + "edgeId": "sha256:31c3caa0fb8bb2673c4dfacf43c57329df87201862a6b477b63269818194ba32", + "site": { + "endByte": 6567, + "endColumn": 28, + "endLine": 218, + "file": "src/click/_compat.py", + "startByte": 6550, + "startColumn": 11, + "startLine": 218 + }, + "token": "is_ascii_encoding", + "sourceLine": "return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")", + "fileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "registeredOccurrence": false + } + ] + } + ], + "everyStepHasFrozenOccurrence": false + }, + { + "question": "click-longer-chain", + "repository": "click", + "tool": "graphify", + "status": "no-path-in-public-projection", + "metrics": { + "requests": 27, + "responseBytes": 7472, + "expandedNodes": 12, + "outgoingGroups": 13, + "identityGaps": [ + { + "source": "src_click_compat_open_stream", + "label": "get_text_stdin()" + }, + { + "source": "src_click_compat_open_stream", + "label": "get_text_stdout()" + } + ] + }, + "neighborProjections": [ + { + "seed": "src_click_utils_open_file", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "src_click_compat_open_stream", + "fullProjectionMatches": true, + "groups": 10 + }, + { + "seed": "src_click_utils_lazyfile", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "src_click_utils_keepopenfile", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "src_click_compat_get_binary_stdin", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "src_click_compat_get_binary_stdout", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "src_click_compat_wrap_io_open", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "src_click_compat_atomicfile", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "src_click_compat_find_binary_reader", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "src_click_compat_find_binary_writer", + "fullProjectionMatches": true, + "groups": 4 + }, + { + "seed": "src_click_compat_is_binary_reader", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "src_click_compat_is_binary_writer", + "fullProjectionMatches": true, + "groups": 1 + } + ], + "sourceSupportedStaticCallPath": false, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "depthFrontier": false, + "identityIncomplete": true + }, + { + "question": "jsoup-longer-chain", + "repository": "jsoup", + "tool": "compass", + "status": "candidate-path", + "metrics": { + "requests": 15, + "responseBytes": 994967, + "expandedNodes": 13, + "outgoingGroups": 21, + "identityGaps": [] + }, + "neighborProjections": [ + { + "seed": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "fullProjectionMatches": true, + "groups": 11 + }, + { + "seed": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "fullProjectionMatches": true, + "groups": 7 + }, + { + "seed": "sha256:6b565ebf6e99cf106d72628589f681d6ca6a95cd379bf3f7818f8df5cb80afc0", + "fullProjectionMatches": true, + "groups": 14 + }, + { + "seed": "sha256:f4f51f52089ad7a2a597230a89bbae7dd488d3e3a2f4d872df44b6325e6aa1d8", + "fullProjectionMatches": true, + "groups": 185 + }, + { + "seed": "sha256:af37ed6ba8b5b38a09087fa661ec72396984fbbc994a670187046d9f463e14e7", + "fullProjectionMatches": true, + "groups": 5 + }, + { + "seed": "sha256:2d500334819c8d6ba0d212765462609a10ed3f744165b9f138b0ec8eea72c0fc", + "fullProjectionMatches": true, + "groups": 4 + }, + { + "seed": "sha256:c980a14050d13e4546d2b8727dc5881230db3b86bd14b462eaf938052c2f80f3", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:f036b8ae4eb3b15945a22bc905f71f9f80eea566a031272f14cc43bd9ea2edb7", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:b65da669292d9d8c129966bb7eb573f46312c0f6fa3b9f742fd9d9935d367c47", + "fullProjectionMatches": true, + "groups": 111 + }, + { + "seed": "sha256:e3344ff45a629bdf8ddf478b5eb389cc5007c1f33f5d5ba5ce4ba60d25abaa88", + "fullProjectionMatches": true, + "groups": 24 + }, + { + "seed": "sha256:7be4511f27b970809c9641b2419bab9a7bc8dd4641a864fe1d969db28a559e8a", + "fullProjectionMatches": true, + "groups": 4 + }, + { + "seed": "sha256:6878111c96e0a0a793580aaa18eabff159689c73555b22d71bb27d844c10b085", + "fullProjectionMatches": true, + "groups": 11 + }, + { + "seed": "sha256:d4d9b048767facdf7fd9d8be44e6cc0c60c11e749d933908032323756c7512fe", + "fullProjectionMatches": true, + "groups": 6 + } + ], + "sourceSupportedStaticCallPath": true, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "registeredRoute": true, + "hops": 5, + "nodes": [ + { + "id": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "label": ".isValid()", + "file": "src/main/java/org/jsoup/Jsoup.java", + "line": 434 + }, + { + "id": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "label": ".isValidBodyHtml()", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124 + }, + { + "id": "sha256:6b565ebf6e99cf106d72628589f681d6ca6a95cd379bf3f7818f8df5cb80afc0", + "label": ".createShell()", + "file": "src/main/java/org/jsoup/nodes/Document.java", + "line": 65 + }, + { + "id": "sha256:e3344ff45a629bdf8ddf478b5eb389cc5007c1f33f5d5ba5ce4ba60d25abaa88", + "label": ".appendElement()", + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 918 + }, + { + "id": "sha256:d4d9b048767facdf7fd9d8be44e6cc0c60c11e749d933908032323756c7512fe", + "label": ".appendElement()", + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 929 + }, + { + "id": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "label": ".appendChild()", + "file": "src/main/java/org/jsoup/nodes/Element.java", + "line": 813 + } + ], + "sourceInterpretation": "Five calls, including inherited Element.appendElement on a concrete new Document, then one-argument to two-argument overload dispatch. Document extends Element at Document.java:26 and has no appendElement override. Constructor evaluation is not substituted for method invocation.", + "steps": [ + { + "source": "sha256:577f3fb7ba180a8a08c3f3f8fe6bae0f7eedf731b281139a8e9d5f9b7213a7e6", + "target": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "occurrences": [ + { + "edgeId": "sha256:38d6c354f2e4a136528e0f8d4261fc07f6a2c9e18886865384966819efd9e046", + "site": { + "endByte": 19726, + "endColumn": 52, + "endLine": 435, + "file": "src/main/java/org/jsoup/Jsoup.java", + "startByte": 19711, + "startColumn": 37, + "startLine": 435 + }, + "token": "isValidBodyHtml", + "sourceLine": "return new Cleaner(safelist).isValidBodyHtml(bodyHtml);", + "fileSha256": "08efd20ddec51728d05d6aa70091468d6adcd4be703bb578e164012a882c3bf7", + "registeredOccurrence": true + } + ] + }, + { + "source": "sha256:7a0cdc660eb47dd50d176901e606343fb9b0147d56440a33acc4f3ef5811d406", + "target": "sha256:6b565ebf6e99cf106d72628589f681d6ca6a95cd379bf3f7818f8df5cb80afc0", + "occurrences": [ + { + "edgeId": "sha256:d6eac0e44844f0e9da86e96fd3245cf4b1c852669df491fcd6f8966c8cb78601", + "site": { + "endByte": 5805, + "endColumn": 45, + "endLine": 126, + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 5794, + "startColumn": 34, + "startLine": 126 + }, + "token": "createShell", + "sourceLine": "Document clean = Document.createShell(baseUri);", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "registeredOccurrence": true + }, + { + "edgeId": "sha256:9684ba402e8de6b0b31e01db6687444ae1bbbf9c37738f7a1e68d8fa98ce729f", + "site": { + "endByte": 5861, + "endColumn": 45, + "endLine": 127, + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 5850, + "startColumn": 34, + "startLine": 127 + }, + "token": "createShell", + "sourceLine": "Document dirty = Document.createShell(baseUri);", + "fileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "registeredOccurrence": false + } + ] + }, + { + "source": "sha256:6b565ebf6e99cf106d72628589f681d6ca6a95cd379bf3f7818f8df5cb80afc0", + "target": "sha256:e3344ff45a629bdf8ddf478b5eb389cc5007c1f33f5d5ba5ce4ba60d25abaa88", + "occurrences": [ + { + "edgeId": "sha256:bbde18862fa5c40c488c1a561d6d17798d3d25066e70e8848c9371a4627a5a2b", + "site": { + "endByte": 2321, + "endColumn": 26, + "endLine": 70, + "file": "src/main/java/org/jsoup/nodes/Document.java", + "startByte": 2308, + "startColumn": 13, + "startLine": 70 + }, + "token": "appendElement", + "sourceLine": "html.appendElement(\"head\");", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "registeredOccurrence": false + }, + { + "edgeId": "sha256:7af5888840d649ae62e8ff659b8a774d7a8fdab894449ccbd26abae0837e5950", + "site": { + "endByte": 2357, + "endColumn": 26, + "endLine": 71, + "file": "src/main/java/org/jsoup/nodes/Document.java", + "startByte": 2344, + "startColumn": 13, + "startLine": 71 + }, + "token": "appendElement", + "sourceLine": "html.appendElement(\"body\");", + "fileSha256": "cad397b7c5c767c294f27edf7971932c0d531ae8a368827e6ec34e1267a17502", + "registeredOccurrence": false + } + ] + }, + { + "source": "sha256:e3344ff45a629bdf8ddf478b5eb389cc5007c1f33f5d5ba5ce4ba60d25abaa88", + "target": "sha256:d4d9b048767facdf7fd9d8be44e6cc0c60c11e749d933908032323756c7512fe", + "occurrences": [ + { + "edgeId": "sha256:c30409bd55a751d5c26439e53338f9f229f6379b2750ff2b1b6d13a6254d206f", + "site": { + "endByte": 36019, + "endColumn": 28, + "endLine": 919, + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 36006, + "startColumn": 15, + "startLine": 919 + }, + "token": "appendElement", + "sourceLine": "return appendElement(tagName, tag.namespace());", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "registeredOccurrence": true + } + ] + }, + { + "source": "sha256:d4d9b048767facdf7fd9d8be44e6cc0c60c11e749d933908032323756c7512fe", + "target": "sha256:9b3f21ab8799d0098c1a7ca7ab4c6a3c04f1026d9938125b3f2c9d36c0fff677", + "occurrences": [ + { + "edgeId": "sha256:abc679f773f7eb97b258f9061be3674e51adb0c992fc88c3588d794fb5982203", + "site": { + "endByte": 36623, + "endColumn": 19, + "endLine": 932, + "file": "src/main/java/org/jsoup/nodes/Element.java", + "startByte": 36612, + "startColumn": 8, + "startLine": 932 + }, + "token": "appendChild", + "sourceLine": "appendChild(child);", + "fileSha256": "64113061dec074483ca4bcf51a528ca55e511f81da2192e44e626347cc9c6340", + "registeredOccurrence": true + } + ] + } + ], + "everyStepHasFrozenOccurrence": false + }, + { + "question": "jsoup-longer-chain", + "repository": "jsoup", + "tool": "graphify", + "status": "no-path-in-public-projection", + "metrics": { + "requests": 3, + "responseBytes": 1856, + "expandedNodes": 1, + "outgoingGroups": 0, + "identityGaps": [] + }, + "neighborProjections": [ + { + "seed": "src_main_java_org_jsoup_jsoup_jsoup_isvalid", + "fullProjectionMatches": true, + "groups": 10 + } + ], + "sourceSupportedStaticCallPath": false, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "depthFrontier": false, + "identityIncomplete": false + }, + { + "question": "redux-longer-chain", + "repository": "redux", + "tool": "compass", + "status": "unresolved-endpoints", + "metrics": { + "requests": 2, + "responseBytes": 7694, + "expandedNodes": 0, + "outgoingGroups": 0, + "identityGaps": [] + }, + "neighborProjections": [], + "sourceSupportedStaticCallPath": false, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "endpointSelections": [ + { + "status": "anchor-mismatch", + "matchedIds": [], + "selector": null, + "returnedAnchors": [] + }, + { + "status": "resolved", + "matchedIds": [ + "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e" + ], + "selector": "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e", + "returnedAnchors": [ + { + "id": "sha256:61ac1d5c152c2db8ec8626b9e4c1b9f3e646935e7fc92425410935d3cf83c37e", + "file": "src/utils/kindOf.ts", + "line": 40, + "symbols": [ + "ctorName" + ] + } + ] + } + ] + }, + { + "question": "redux-longer-chain", + "repository": "redux", + "tool": "graphify", + "status": "unresolved-endpoints", + "metrics": { + "requests": 2, + "responseBytes": 369, + "expandedNodes": 0, + "outgoingGroups": 0, + "identityGaps": [] + }, + "neighborProjections": [], + "sourceSupportedStaticCallPath": false, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "endpointSelections": [ + { + "status": "unresolved-response", + "matchedIds": [], + "selector": null, + "returnedAnchors": [] + }, + { + "status": "resolved", + "matchedIds": [ + "src_utils_kindof_ctorname" + ], + "selector": "src_utils_kindof_ctorname", + "returnedAnchors": [ + { + "id": "src_utils_kindof_ctorname", + "file": "src/utils/kindOf.ts", + "line": 40, + "symbols": [ + "ctorName" + ] + } + ] + } + ] + }, + { + "question": "walkdir-longer-chain", + "repository": "walkdir", + "tool": "compass", + "status": "candidate-path", + "metrics": { + "requests": 18, + "responseBytes": 175449, + "expandedNodes": 16, + "outgoingGroups": 25, + "identityGaps": [] + }, + "neighborProjections": [ + { + "seed": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "fullProjectionMatches": true, + "groups": 4 + }, + { + "seed": "sha256:fee92110685574fab9cc9ed406f9087b0a31367f58d21a22a3fc0146ab585f35", + "fullProjectionMatches": true, + "groups": 9 + }, + { + "seed": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "fullProjectionMatches": true, + "groups": 10 + }, + { + "seed": "sha256:219c38f772358d6f0cd42cd06b879fe706b6672b0deee9461f8f7ec785618867", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:3d843599c82e0cf88d7512278cc2b4f2ffc87c5797785e0c9caad89ab4af8f98", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:a71b7e34d52ce7ca183894261ddee01fa493829a74b9f0e640c651951b4ac936", + "fullProjectionMatches": true, + "groups": 6 + }, + { + "seed": "sha256:560b1a66e365e506d4cd3723d24c22f46b0f0622847838510b52469c3fc49ec8", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:1ba9c00109907bf29873b12b8bed410e1c25ccf930ec03f6fa15fab66f8dcf4a", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:d4ca31524dd5a73a0546c9b8f26c4d6c035d051e9e1ff72e6ede2a84fbb5131e", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:c4870d899db4c0d3e82cf28916d9cadef5b8d7b249ea6fe7aa97bc7d465dfe45", + "fullProjectionMatches": true, + "groups": 5 + }, + { + "seed": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "fullProjectionMatches": true, + "groups": 4 + }, + { + "seed": "sha256:b2efe7a16818159f6c5769dbfd0bbc811a48f5bab2a68f07906b4a9f67d25d6a", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:648e4f3a42dcd72aa98ad5725459ca59362c53374b257faa9cd00a5cfee708f0", + "fullProjectionMatches": true, + "groups": 2 + }, + { + "seed": "sha256:5df6b1937814f56cc22ee5820e951e7dc49cc10f163758ca6c5adf4ef9926516", + "fullProjectionMatches": true, + "groups": 3 + }, + { + "seed": "sha256:ff9fee2d67be76e5af714ef0bceb4d68be41efd8086deccc6a46eb19cd9ee0f9", + "fullProjectionMatches": true, + "groups": 1 + }, + { + "seed": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "fullProjectionMatches": true, + "groups": 3 + } + ], + "sourceSupportedStaticCallPath": true, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "registeredRoute": true, + "hops": 4, + "nodes": [ + { + "id": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "label": ".next()", + "file": "src/lib.rs", + "line": 687 + }, + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "label": ".handle_entry()", + "file": "src/lib.rs", + "line": 840 + }, + { + "id": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "label": ".follow()", + "file": "src/lib.rs", + "line": 961 + }, + { + "id": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "label": ".check_loop()", + "file": "src/lib.rs", + "line": 973 + }, + { + "id": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "label": ".from_loop()", + "file": "src/error.rs", + "line": 184 + } + ], + "sourceInterpretation": "Four calls from Iterator for IntoIter, not another next implementation. Conditional on following a directory symlink and finding an ancestor loop. The call at lib.rs:721 is a second supported occurrence from the same next method.", + "steps": [ + { + "source": "sha256:5c1a2f2ab2725e97f0e936e554e3381bc72abac584341846089152518b8314b1", + "target": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "occurrences": [ + { + "edgeId": "sha256:f132a6e9b8271887317449c2656fec19f35e0a6a274a055a50d5eda211c7b0f8", + "site": { + "endByte": 24061, + "endColumn": 51, + "endLine": 695, + "file": "src/lib.rs", + "startByte": 24044, + "startColumn": 34, + "startLine": 695 + }, + "token": "self.handle_entry", + "sourceLine": "if let Some(result) = self.handle_entry(dent) {", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "registeredOccurrence": true + }, + { + "edgeId": "sha256:6e39005ce1372c6648d0a47d954054e127f35c486ced5313afd6388a86f36e58", + "site": { + "endByte": 25068, + "endColumn": 59, + "endLine": 721, + "file": "src/lib.rs", + "startByte": 25051, + "startColumn": 42, + "startLine": 721 + }, + "token": "self.handle_entry", + "sourceLine": "if let Some(result) = self.handle_entry(dent) {", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "registeredOccurrence": false + } + ] + }, + { + "source": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "target": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "occurrences": [ + { + "edgeId": "sha256:db51772e6e2a0f689b69f1447740b96e340679a37df7c50bfc727ffe85a06cf4", + "site": { + "endByte": 29348, + "endColumn": 36, + "endLine": 845, + "file": "src/lib.rs", + "startByte": 29337, + "startColumn": 25, + "startLine": 845 + }, + "token": "self.follow", + "sourceLine": "dent = itry!(self.follow(dent));", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "registeredOccurrence": true + } + ] + }, + { + "source": "sha256:573323364aaddd351eb7ffdf1c271a5f20df53899d8d75e53cd6f85eac3dde78", + "target": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "occurrences": [ + { + "edgeId": "sha256:9d2cbc7e60565250bba8045728a1451893838b7f1b8d26084a542957c88557c3", + "site": { + "endByte": 34826, + "endColumn": 27, + "endLine": 968, + "file": "src/lib.rs", + "startByte": 34811, + "startColumn": 12, + "startLine": 968 + }, + "token": "self.check_loop", + "sourceLine": "self.check_loop(dent.path())?;", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "registeredOccurrence": true + } + ] + }, + { + "source": "sha256:43858f600e266290da4e20870d1b0764d496ccbe59300e846a1675e943ec53b3", + "target": "sha256:4781f5c6bd4c887ab10742a86b44aa5d6164790de28d01e4889788ec345a3e01", + "occurrences": [ + { + "edgeId": "sha256:32f0ce77ab676891029891f1d836f95f3e4c8458dcee2b5d51f7128b8ad32bcf", + "site": { + "endByte": 35310, + "endColumn": 43, + "endLine": 981, + "file": "src/lib.rs", + "startByte": 35294, + "startColumn": 27, + "startLine": 981 + }, + "token": "Error::from_loop", + "sourceLine": "return Err(Error::from_loop(", + "fileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "registeredOccurrence": true + } + ] + } + ], + "everyStepHasFrozenOccurrence": true + }, + { + "question": "walkdir-longer-chain", + "repository": "walkdir", + "tool": "graphify", + "status": "unresolved-endpoints", + "metrics": { + "requests": 2, + "responseBytes": 415, + "expandedNodes": 0, + "outgoingGroups": 0, + "identityGaps": [] + }, + "neighborProjections": [], + "sourceSupportedStaticCallPath": false, + "globalAbsenceProven": false, + "publicResolverResultsUnchanged": true, + "endpointSelections": [ + { + "status": "anchor-mismatch", + "matchedIds": [], + "selector": null, + "returnedAnchors": [ + { + "id": "src_lib_dirlist_next", + "file": "src/lib.rs", + "line": 1019, + "symbols": [ + "next" + ] + } + ] + }, + { + "status": "resolved", + "matchedIds": [ + "src_error_error_from_loop" + ], + "selector": "src_error_error_from_loop", + "returnedAnchors": [ + { + "id": "src_error_error_from_loop", + "file": "src/error.rs", + "line": 184, + "symbols": [ + "from_loop" + ] + } + ] + } + ] + } + ], + "verification": { + "publicRequestsReplayed": 110, + "publicResolverCalls": 20, + "publicResolverResultsUnchanged": true, + "neighborProjectionsChecked": 76, + "allNeighborProjectionsMatch": true, + "sourcePinsAndHashesChecked": true, + "graphAndExecutableHashesChecked": true, + "graphifyEnvironmentFilesChecked": 227, + "repeatByteIdentical": true, + "benchmarkTests": 218, + "newHarnessTests": 14, + "independentOracle": "All 4096 directed simple graphs on four vertices, including cycles, at depth bounds 1/2/3. Independently enumerate simple paths by permutations.", + "productBoundary": "passed", + "firstSuiteAttempt": "Existing test_runner output-bound subprocess cleanup raised killpg PermissionError. All 218 tests passed on unchanged repeat; both logs retained. No cleanup code changed.", + "notRun": "No Rust/JS/platform/packaging suites rerun: only developer evaluation harness and reports changed. Prior production validation remains separate." + }, + "interpretation": [ + "Compass four source-supported static chains; Redux endpoint unresolved. Chi six calls, Click six calls via previously source-reviewed stdin branch, jsoup five calls via registered createShell node sequence, WalkDir four calls.", + "All returned parallel Compass call records are retained and source-checked. jsoup head/body appendElement sites 70/71 differ from frozen occurrence 69; shell calls 126/127 both source-checked. Only Chi and WalkDir have a frozen occurrence for every step; static support is separate.", + "Graphify Chi stops at ambiguous Method; Click prunes ambiguous get_text_stdin/get_text_stdout; jsoup start node has no outgoing calls in its public response or graph. Redux and WalkDir endpoint resolution fails. These are not proofs of global source disconnection.", + "Graphify native label path already succeeds on Click in a separate arm. Its failure here is due to intermediate public identity recovery; never merge the best outcomes from different workflows.", + "Compass returns more complete identity/provenance records and explores more of these searches. Its 1558220 response bytes versus Graphify 11001 bytes are measured costs, not an efficiency or equal-work win.", + "This closes one public-neighbor workflow comparison gap. It does not isolate internal path algorithms or give equal identity capabilities to the interfaces." + ], + "limitations": [ + "Known questions and same-agent source review, not held-out.", + "Public identity exposure differs; Graphify ambiguity is pruned under the registered no-guessing policy. Its native Click path succeeded in the separate label workflow.", + "Static calls are not execution traces. Shared FIFO/depth policy is not equal internal work or API capacity.", + "Compass jsoup and Redux graphs retain prior incomplete-coverage diagnostics. No global absence claim.", + "First benchmark-suite run had an existing subprocess killpg PermissionError; unchanged repeat passed.", + "No authored explanations, true god-object diagnosis, functional community quality or held-out superiority established.", + "No runtime-feasibility score. This jsoup workflow takes createShell; the earlier native calls-only Document.body fallback caveat remains in its own report." + ], + "artifacts": { + "public-neighbor-path-01/benchmark-tests-repeat.log": "49f2c62d12574a67cab19987f59ee1b26ffcdc46f09083afb61af84a98c9c0fe", + "public-neighbor-path-01/benchmark-tests.log": "6fa81f66aef5f58b44563a27fdafcd7f5e7dcd66f44066dbdcd443c1272e4a1e", + "public-neighbor-path-01/capture/capture.json": "d27453537e159f0824904cf0706f36cb0e7f42d47d56f36d88ef3d1988906407", + "public-neighbor-path-01/capture/capture.py": "e4937398f96d25d209f6badcd009ae1c234eb61ac0c92b3bd9c53a66e9e5d537", + "public-neighbor-path-01/capture/community_identity.py": "5bc3d1c574211aa3180a2334fe6c758043f384651948b7077aba3ea879de4503", + "public-neighbor-path-01/capture/community_navigation.py": "808df1c7b15c8c2afc86ac1ed09dc4f339c98a77d7a7b14eb4866e3da1c8c0f8", + "public-neighbor-path-01/capture/community_tasks.py": "77f599ff7ee7eebfe4b590fee6c771ecfb3ed475d1944e37bcabc110634d3660", + "public-neighbor-path-01/capture/directed_identity.py": "d692f39978c3b799873a92d344efee9ad341632fe63cd249e3f06bdd4195d603", + "public-neighbor-path-01/capture/graphify-mcp-environment.json": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "public-neighbor-path-01/capture/longer_path_witnesses.json": "33d1cdccc5cfb6f4225674c36ee7616b6dc21e0a51c2c5bbedc8fa1e44ae8718", + "public-neighbor-path-01/capture/mcp_compare.py": "d23f093a1300fcf825457f917694097f0f8b8dc8ee8d671946032f5e4e89a5dc", + "public-neighbor-path-01/capture/mcp_transport.py": "daaad69c554f824a1df94f0ef93cb9d4c6e9b4f4b712d1611323d524e10d44ee", + "public-neighbor-path-01/capture/public_neighbor_path_registration.json": "d8f0aedf7715127d439845ad376655f6313d6b73b6a1843123223e5c5749f161", + "public-neighbor-path-01/capture/public_neighbor_paths.py": "8b59b0665b830f3d88b28591c5abd9402bd7351b222dc2d66e2773eae76734a9", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/03.response.jsonl": "2688474fea8fc3f8b1957684c39f01e760e2126b345711935d150eb0c6a7b7ab", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/04.request.json": "3346922d490b3f9dde0d51d59b359c9e162723b41f13bc2ac27c7588124201ac", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/04.response.jsonl": "3ca951aecdb9c61a069a3aaecbeb0d9eb4e587a9271addc0dac624d70e3e5d4d", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/05.request.json": "9147dd17cfcfc6e5e648e11eb0ff04571e45fed502910a575c35e3841a92bd32", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/05.response.jsonl": "9a4a9333d54a152fd37a208fb1fece859081e238927e8a57e83b6df4fe255acd", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/06.request.json": "3a2ecabde276ab6a225962dcd6de25ee522084c2d9a007f10d52ad57d8227a55", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/06.response.jsonl": "9186d4dac211422f50631e31cdcf0c24dfad23841604cb74d4773f077ce14e18", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/07.request.json": "a29e7dbbd64f11023a42aa2bc3c38148cbb082d1aaca83e19c8023c168e64c05", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/07.response.jsonl": "1d42470280a3229ceff4b6a38f3b3d62e4bd4f19c13a79394de8acc754e595ac", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/08.request.json": "77c508eb5e354fc5a82988931b052d1e9db2a628658d0f6eab98230587750730", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/08.response.jsonl": "e9cc721e2a12113c14f637f63e45d7123797234b5b34609123d39329fe909d50", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/09.request.json": "4eed3e6cac61242e16877ee350e7ef9a5324bb3c055edc51195a10e3d331b756", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/09.response.jsonl": "47bb34fa1bd2e99120bd2d1179276b9c9adbcb973c8018d54e1b24d3436feeb7", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/10.request.json": "558e3a72139d6b5d37e376a3e216f96315b89e777aeead59755c62278f9e3863", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/10.response.jsonl": "135b422f972b664307e51fc08cccfef551acb0d42a34f2ec713e35a3d4f912ef", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/11.request.json": "9a5501c4431672e40f267ee7a90b791f73a31dc7f53cc0935ceebf0862477bb4", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/11.response.jsonl": "5fd66db0583545ce86b0490546a99fd96e931fc0e1da9906566efd767b3fd7f1", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/12.request.json": "32b6a5ff0f1a029a53fffb2907f932445c9f00f10654b8489a69c6caea627f80", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/12.response.jsonl": "fc543b7c416de4f4dcb5166ac52beaed7d2ca4e36456b566562a8b753bb89cb4", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/13.request.json": "d6e08b6117d808f7f807c5393c50bfe15b48797f0c02ae64198591a51426e1f2", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/13.response.jsonl": "2e53f50a879126d92a2cf785df60cb2bb84e319cec74529b26c2b09e8d3aa47e", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/14.request.json": "72dba31905840b44d51ecb93a069045d2fe5841f13aa3276e7389b762cb44c56", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/14.response.jsonl": "ad5e74a7af80c5162ff933fc4d33c234ed1873b0ca7fd96266cc9fcadb2118b2", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/15.request.json": "2b096b6864bc3520d03d0f33f6fb38b04963817a8248163e52c56cb2404c776f", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/15.response.jsonl": "b74affce8c6f98e64fb94c80ac5b6d0751228aff92fef387815400401a03e58b", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/16.request.json": "26f4e3f187f22ec0d69cb4ed92a55a510b8b065fa43ce29894f14e38c3fd378c", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/16.response.jsonl": "16788f8758a0cf9b337199712c3f513485891ab94748daab98f6b0fa62fba41c", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/17.request.json": "113122d4dfc05c2652276266403478ed88e1bad0a0a98f92dba3c424d436ee3b", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/17.response.jsonl": "bbc0d3fb33ccb9c3f871e522fe58f92db7d1b2bad0dd742e3c3314335fbabc3f", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/18.request.json": "a63bb7ca0040ce82e2cde22607dbc99128e96e38a366310f04804d33d7ffb896", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/18.response.jsonl": "a60ae24c75699d98e9058f1a7409d596468d2535f03f936476c54f6383db3aed", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/19.request.json": "6a6f92d1d8f7b14961178bfaeed9de00d052e36a8cafd8c1d1627317d6413983", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/19.response.jsonl": "2138360c7cbea65e8a97ccb88f3f71ba74b4be7e326803745bf45dbeee6588ce", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/20.request.json": "5c484ce99f25d973d802859a18c6171f42246f95c25f02171a56865fb9fea178", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/20.response.jsonl": "456c6edb75358fa8bf3cc1117bf942a890fd37ad48bf2b3dc63c09d5d77b7532", + "public-neighbor-path-01/capture/raw/chi-longer-chain/compass/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/04.request.json": "ca8821ddf48b9875c6b0feb8f7531c82ce28e780999345056ff5218c64fc05dc", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/04.response.jsonl": "8943ae66113466a56cfde07498a1498a23eec598412878f9c54fb17019d52dc1", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/05.request.json": "2ceb73a8d6d195468523d2771dc8efcc5f2c5e6e2d80f63d9d0dd34a4b703eb9", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/05.response.jsonl": "d29d63848af36e7ea0d8efb74257c018d4b36a0cb6cafb7a61e59e598b094805", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/06.request.json": "cbe481156cd77e3c9d1dd6a002a9a70ab3458826f490b2929197e0e9cc32301e", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/06.response.jsonl": "b77106c336cbf8ccad2f1b61177f019739795a522b842b5c9aa78d6d8c1bdcae", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/07.request.json": "6417f17b2b85b27076189858b6d0a1a0bc23018290a711bafc5d8890740eedb3", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/07.response.jsonl": "3ed3167d56e21e51555e614022f8de37a56bef197ff2546a5f06fc748003a042", + "public-neighbor-path-01/capture/raw/chi-longer-chain/graphify/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/03.response.jsonl": "2688474fea8fc3f8b1957684c39f01e760e2126b345711935d150eb0c6a7b7ab", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/04.request.json": "57b70cb40cb134e8f6a98906dabe849b27e6a9bd3d49d56efcc5d04e249793f7", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/04.response.jsonl": "fd48aff4b11ef714490fe99d62dc272d7395201bf4ca491c1e38105eb65eb12f", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/05.request.json": "98f07b8c273443e8530480df42c9f592308bc8b3fdadf75cb1251f13eb2764ca", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/05.response.jsonl": "5b5813100dcc0415f1a23914447461d1fdad7b73638a2aeecb086fc48a02eb5e", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/06.request.json": "a0467c3edf109c35aac38337bb36c48206e7a1e61465f2095346585678ed34c6", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/06.response.jsonl": "2b2f529330ac76e9f9945aea733bffc66898e53442924221290e0b5dfa592d81", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/07.request.json": "c2be7e8efb6a875bb51c9fd7cc200d0b80c586ae3db842b2a8104c0ee98b3c6f", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/07.response.jsonl": "de32231d8e8bcba0b36546b91187223aa50634acea06c531502e7c840ca0c8e3", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/08.request.json": "578bc04183667772e5b4db55ed6add79931b425966cbfce15a22e0c4db1dd875", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/08.response.jsonl": "035fc4e69620c46ab77b79d79d2ece5c28652fff0a5055e060ea7b88fd7749ab", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/09.request.json": "f887a98078552b9c26aeb75b3a4f1243327e9b11f82489aab554a1f5a60132ab", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/09.response.jsonl": "278470bd711dd5e147d4e76e1b4a92838f5ca19685c68ef8491b1075996d1fdf", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/10.request.json": "88c30b45ceb94e3ce1a949572aa8f4ef8222e5b549b10b7276ce4e70c5ad2327", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/10.response.jsonl": "e246c76d4fc6a8db7229291fa4962a4938bff546be9937e05443067aade33c9a", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/11.request.json": "6c3eecd7ea5e0abd6132a5060153b4cb6d649d5b8d8fbe56f180ede86846451e", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/11.response.jsonl": "692fdc7371b9b3d183c5f0eab21278dd4fc75d267ada10f4d80d18f6cce1e259", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/12.request.json": "183367e0f25d580f2fc539918a5ff40c168d12877cfc1e0e295bbf1fd24e5264", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/12.response.jsonl": "500050d07cccd3b0718063ee2f48356d9daf3d15d22e579748f5456e000b6d5d", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/13.request.json": "247e742189f577c4af760ca3a42c7664c4cc9201a46ec987d0dfc6e92adfac46", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/13.response.jsonl": "43a7dd72a74cee58fa0f1436fa9a80a90a06844600ddbb51e195fb8439183ddd", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/14.request.json": "d02a11a991da3020545a4d526c79c6618f7cde77e59f7ed21c72f2e7b268413e", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/14.response.jsonl": "ac7ea7052fbaeaf9fb74fa01ad7007f05a10eda24b889917db4641baf8c2a1db", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/15.request.json": "b6cf33ab600995b54d8a586297725d7966738b048551f53f2ef52f22e44e3f89", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/15.response.jsonl": "aa1295837a2e96756bf70ba2993dd45a68327b2110ea0b9971dad4cdf133879f", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/16.request.json": "85a5f206e9eca20ca57295e9fa9364af0cd6de7e007f28a44618150b2a958c45", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/16.response.jsonl": "84dc9fc9ce77899307d268084e1d037614f7ecc30461af31461296f8924592ab", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/17.request.json": "3acdcb9bff83c14d6653cc272233397d9bf387deebbbed0ae19f2c4df48d07fb", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/17.response.jsonl": "4d1ba158f3babbe320790b4b903cc0abab28a9ef53b62966a3204eedc33692cb", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/18.request.json": "f0cd55aa9a4ae7fe3e6f1280d63238f46fe39280016ecfa8ac11c8ccea927938", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/18.response.jsonl": "2b2ad30789777712c7cada7a75c72f634a8c89bf3f2bd40b5f0e750e3d26555b", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/19.request.json": "f6efaf2619e2bb8876ba0d3928bfd6fe47dfc83b3b115c8a170d71fa8742c489", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/19.response.jsonl": "cd892fd803058f6bf5981cf600d0b6cc0fbabb9b4226c3f1e375a01451edb47d", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/20.request.json": "9371f5d9e47df0bbd28e2545f97e5562fce2583f6c098f1b8fadbcc92406ad77", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/20.response.jsonl": "7224bf015c3367c97bf6e7a2ba3c02ef929391ce2dd5d0ccd0a88ec82887980d", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/21.request.json": "05443ed3ffd8f371b8e349027a4ff3fd658a61378c41f25b799a883ace2a17ec", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/21.response.jsonl": "6c413985672fbcc48c3802308b84775c4d3f5cfc3ac70cceb3bf21aa03fdc292", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/22.request.json": "d9f6553755644f80f4395884b1f5ddf8784a1c171178e6b9f8641328269c8073", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/22.response.jsonl": "631f97ad2c588312d0a8d96cefc52864a5234201908e9cca5206a70338bbc3c3", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/23.request.json": "ebb1a3014c10cdeb5498b0fc5a252522143e4fbfc985bf9f739cc8f54351262f", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/23.response.jsonl": "a95ff1f3640538af354345be67b0cefeaacb296c4724ad3c1cf932e74595a2b5", + "public-neighbor-path-01/capture/raw/click-longer-chain/compass/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/04.request.json": "a92de278553d90c84f6dfc74701922e1233a52c6296c56927d1593b787a7c4d3", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/04.response.jsonl": "f63ed30007d253c2e792a6e77ad308171205af3f7b751efbd2e26465b03cd7c9", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/05.request.json": "de5fc290ef349efe1269a717b7ab301c7f812198b57fa5eab757f8876d95a3fa", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/05.response.jsonl": "e919bc3a0011ad8fcc01e3ae39f6328d146d75352cde05ddcf0963d0c96911cd", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/06.request.json": "212ba56b25cff333a557bcf1a594f7b0832ae2cdc37a4084cab5c4d78076f9f1", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/06.response.jsonl": "17d2d28d2ce5c56ec4a15c4eb8cc150295b02739e29dd5b011c3b5d092d638d5", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/07.request.json": "5c6d6cc753e83ad875a1df9eb2953fe3a56d249bc2c15a9dfd3611e55c6970a0", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/07.response.jsonl": "e0f23fc55be23d56c47d3efedba55a3590e1b5180f31087e88015bfd2e5dcf4d", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/08.request.json": "a0ccf4bdea0237a10071e4e84153bce375416d9a3cd4d89fdbc63e7f20696b81", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/08.response.jsonl": "bfb3419400606810bd8c44382090c44bf784e67b5af951aa7d55ef8c1c96c67d", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/09.request.json": "97d308cb9771a708044d631fd87581d28fbab112480d6c12eb3eecec778475ee", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/09.response.jsonl": "d7349b20ef89b6dca974ea861e942470534ef53be3868397a8c79b62522cb2a0", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/10.request.json": "355aa3f19cfe23141b0373d8507e09a663aa5e6028b5dc87c6b1fc21b0c17b72", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/10.response.jsonl": "9bad4782ca6b1f03d95ec1730ca4045be963bdbafe82103a8ea1bd344664b01f", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/11.request.json": "59a64985b5010e566e80ab7e5115c841eeb982ec1fc4ea40e0f8bdd1998a3201", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/11.response.jsonl": "92ec6a56a15e99d2805497f8c1033614ebf104d2e2ac7da6c0b5e4a92ec315ee", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/12.request.json": "d6a27b48713c18f56a7860013d3c2c9531981797a416aeab82759a3829f33130", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/12.response.jsonl": "56c08a93c7ed96cb330d5a0f000408a83a3303da18d6ece0df23aa0edd8ff8f0", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/13.request.json": "90fcbfe36a1ebac6b81f9cc702d78eb5d1684ffb8ff16f5dd557235a6a3633b1", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/13.response.jsonl": "96f1962f04840a9c8f36bd38b247411fea86ee6b2eadb601c8a5390149b40585", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/14.request.json": "60ea3101b88532fc7884fe4c74637d35d8f2d3b767cd7f4e8820666a7ab5847c", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/14.response.jsonl": "6ae9388174085af514c440fe71d3e3d23f9c36e1a7aa103094fec3d98d3c9789", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/15.request.json": "6551ba390e75898b27a5a40703afc6b0aa7bbf7f2dde9fe3203cc219ee6e0b49", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/15.response.jsonl": "746a5eee2c38def9a1e40a0ba9987c7e185495f0edf953ac00cae998b094d6c7", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/16.request.json": "d761755242761b887cef6844a301798299548f3e6f798c4cfefaa284a1a1297c", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/16.response.jsonl": "a2cc9f3b928566c1b27e7b91b3d6ec56dc6b0d2ef869c5ef76f38e3a37712e09", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/17.request.json": "4d802dc820fedab9f045f5962a8321976991e571f34975803243792b936ec52b", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/17.response.jsonl": "a92565a5d752f5e5ca8c263512fef16a61f4efe79a8c761ff529d042472f280d", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/18.request.json": "4e029c86f6f2745e59fb610fd7d137d0ab24423dbbfaff99af362c7242420176", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/18.response.jsonl": "da03d447c1a78db521fd3887abeee280724a459be859b435eff6af51aff9ecc5", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/19.request.json": "596cdfe1ce5ae8ae8606536448c2fe7784cbd8b72686a2ca24123be45dea805b", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/19.response.jsonl": "3cc897d4a224501eb6f275ddcfd700ac6f60125d5c055a622d117992f354af41", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/20.request.json": "008d23995b80a13f8a3585c087b5c73a4c24dea152e63103d6263ccae2e33aca", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/20.response.jsonl": "84cd80a718c8e2c473415e139cbfa96e5cd82c4c76dd7f7e1d6b833d107646ae", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/21.request.json": "daf8b9dd209b534b565b08e859b781e549348c23ba717526458490ca49e76731", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/21.response.jsonl": "ff317a3f6c1b0fb15a0416b2bee535bcaefbd61a406c125b9aab8c3caafe749e", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/22.request.json": "f7a33fdb4c1ed170e3f2621f5276fb626ff3df3e06af9c868ef144ad8f58ebc9", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/22.response.jsonl": "2d4a8201a214325c545583d1d3df569b17a00209b82346162b197d7ac92000e2", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/23.request.json": "7c4d6089b09e2eb5512028299a1a95456ec2d0c27ac0947799a90de95f04c888", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/23.response.jsonl": "96d800afb3165d032348f290db0c5e6d2dcaa56014a39794e4f0031f26f82bee", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/24.request.json": "d795250a09c2517c4b04706532cd56a352f6c7b4e241bc97494f414467dd4eee", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/24.response.jsonl": "304dbd35b73e04e9798f67e6d3feb1cca354f0368f7dbd724cb8a897df041955", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/25.request.json": "241893a644e7160c2180851fabad5464786a75cdfaf9eaa54ac8f1f64bf5cc5b", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/25.response.jsonl": "a1e45bd55ca4ef5bf53f10498d3a65c71e502eba54a994354bc05bdbbcb75fa9", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/26.request.json": "b0dd4accdb6035114e38d17520a73565620eddb9c11b90bb491d7fa6667e0f90", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/26.response.jsonl": "a5290ee9c7af1907de659f65564632598c01e89c49967cfa91fc56cc069f51d1", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/27.request.json": "527f009e79107cc135324f7862ff52ba7417ec1cea6dec1c1582a61aa8d68eb9", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/27.response.jsonl": "0f7ac76df9aa5040eb8f3284c4035c7a7db7ff2fb263fe9ee9dcff3c2fbaa2f4", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/28.request.json": "da9c60ba251d0fda695a3ff6248427f6ace0588225bce5a6e69da263152cd68f", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/28.response.jsonl": "e2bd30412a3e43e0d7f51fc489680f466a660ef519a5cc66a31fbbb3702ad3fb", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/29.request.json": "786af2e810dbc587935cf43b9d62fe1c2e9d34abff450bc03eb393719f055943", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/29.response.jsonl": "1b048e86764a07e9e54e2a27f3003351b9fa1e08e8e6f843ec9e8992569b49b1", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/30.request.json": "65106b22bfaa1433a2877965e7ab47a1356382619e0d79eac049776e3b7ba06b", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/30.response.jsonl": "0ac7fb95d0de49e98d8d884082960d86d2771bd8e76a3bbfe8a34290a2b40bd4", + "public-neighbor-path-01/capture/raw/click-longer-chain/graphify/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/03.response.jsonl": "2688474fea8fc3f8b1957684c39f01e760e2126b345711935d150eb0c6a7b7ab", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/04.request.json": "0c8a4e8271bc135ea3af0f8b9860bd798a402e9941c9f3d94d95dbcc0888c596", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/04.response.jsonl": "cb0fddb28b6679c614d160ef83f2fcef95ce30628e277932648a8bb753f11fcf", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/05.request.json": "900aa16e1523afbb129a8dd01d47c9f0391096aaa4b531b7045a007342d4dafb", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/05.response.jsonl": "a213605416d1448eeff49ff35ffc27434d5a99f6f712f6910e18dfd7cb62549c", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/06.request.json": "1a67053b7ba462671b432332b8cae47ab3a476b08aab523c78f575c1916773f3", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/06.response.jsonl": "3e8e9d782f29b10985b6755070f507c2748ce2385a4b19dee3c00c1e21930aff", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/07.request.json": "1a86ce839559bd975467c58b9a915fff799a4c3d43bf3a309dff80949564b41b", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/07.response.jsonl": "43c6509d5ea3cd1df867e8c0a542e9b9ebc14a7ac3eb99502a379a27475a9ab2", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/08.request.json": "02085cc850ecf00ef9c899ef2b006a3453f37dd4081729097fa1f45e0c27efbf", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/08.response.jsonl": "2adc45e91398c1856d84658eabfd19484fedea9ccc4f4c20e4b7647a61b9dd4d", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/09.request.json": "851292f71e8d3e89e911e848a0249865173c247342288e757a0c55c752cc8775", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/09.response.jsonl": "c57aa93b7f04ac3fcd6cc4ff580b1327bf26e61923fe60b0d380c2c07b67331b", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/10.request.json": "051972b229afdcc191f1957531f3a3fd634de992fb4574597afa3e35c1d64b61", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/10.response.jsonl": "503eb58ca11c7358e445c5fac2be9c23a049115828f6610262e9c4451a498764", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/11.request.json": "e32d2eb944fe5fff9461a015b2db9a150987c083e6166eb0d02124160c6ae62e", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/11.response.jsonl": "39feea85555d4a8aa6541d658328d3604e8892f8f8c66ac5568141f5ecf914fa", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/12.request.json": "50a9c5b429d216b3c6df7d8587055628c6c238f4652363bf1c433bde6ae5513b", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/12.response.jsonl": "8132c7a200e7be56ccfcc825f42f83edac7b6cf011135392bd0d1af8802adcfd", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/13.request.json": "0f78fe9b57067903f9ef7e5ce3c0e484309022c8fb301274661020abce7f335f", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/13.response.jsonl": "b02b261f2bd39ca0d5128c3040ad98ac233960225035f14c3a36bff0ce65dea5", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/14.request.json": "48b4aa3c512de1b7bbbe4798d6a96bff2cb06e16a78f8d543b3ef776fba926be", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/14.response.jsonl": "e6f88137365e6630f353d9990372687918a57d120c95209a585366da1b8f5d67", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/15.request.json": "158b95a1fdaa10a966c6533a39390edfa8b0dc1d3b98bbd39afa286cc378d5ea", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/15.response.jsonl": "dd5c09ef7d9cfc476e893d290c581bc5f03194e0693f8e1c17c16ee4b7fd1d75", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/16.request.json": "3ba78b4b5d1b03fbea9663c5114835a64a2ffa02f2b8f0a0a83d27437d0d9ec9", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/16.response.jsonl": "6b3988ad62fe089fc0bb46d8bf1b85b1ce236f979a29ede371275a805dea99a1", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/17.request.json": "339ed4be7718d38790f32310f701bf78ae676f6762785f88bc2063e0bedac1e0", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/17.response.jsonl": "b67c8c5bd70b8596870c0a257dd2ade7c417256f417b9c8d26232a8f04716b95", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/18.request.json": "a5c0cc08a4799b808ff809ba721eb2fc2394cd5bf8069585b7be1ea2fa9c1d16", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/18.response.jsonl": "ee8a01ef4219e50270c65358a6365a9451a8d3c48d5f3a83466c1bd8e3491fef", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/compass/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/04.request.json": "9b9e040cec01faf6ab52f33f79a33ef6e4facd455b48371f06ce296f6a50b1a2", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/04.response.jsonl": "3f79d7a12e9971fa8f29523576e0471a33c6a1dc2894b2ee391a971be968cf2d", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/05.request.json": "f8491a75a44088cd11abba1a3451cadde5041e5714790f66d12749dd27620ccd", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/05.response.jsonl": "e40104e933c425f87774ffc4405723c32e7663f88d35f2100b933f3c91951812", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/06.request.json": "f89070a85836abe3d18fb00e24a712a9e58e520fb3b6c787f96e4c28c9a8572e", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/06.response.jsonl": "4650dd0022c5ce72ceb2b269278771aa07aaac59cf4d500a1efa4c4f67d66f14", + "public-neighbor-path-01/capture/raw/jsoup-longer-chain/graphify/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/03.response.jsonl": "2688474fea8fc3f8b1957684c39f01e760e2126b345711935d150eb0c6a7b7ab", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/04.request.json": "1d7095b72feea735904940405657eedb949473e4c83197b9d09d03e28e7d4e45", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/04.response.jsonl": "06fd970bb42dcbe1b04aae39ff838edb8ce61f3c9d2ce3e19630909c72200583", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/05.request.json": "91e9b64a540b04adb77b6808772c3fd1c9ffc1e1ff69261aba52d991877b94af", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/05.response.jsonl": "24fa6ba002dff26a8ce49d903e99ed381106d77a170797334d32ec16e1cf6403", + "public-neighbor-path-01/capture/raw/redux-longer-chain/compass/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/04.request.json": "aabb065532bd41f50796c10f60e44a8c1ac8a53aa146eff7754c1b7776d0226f", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/04.response.jsonl": "9ce8bd0bef51868b4a355fcd2c53223925265446e05f4cfbf29d752cac22425d", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/05.request.json": "3588c9588f4a34852fda42584064d32806ff375479b15c2a484e4dc4a5ba63a2", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/05.response.jsonl": "2de49d499910e55f997d9461e7f00d1ddb62fbbf31e4f68591315008b7cbe3eb", + "public-neighbor-path-01/capture/raw/redux-longer-chain/graphify/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/01.response.jsonl": "444f8278167864389038bc2b79fa4620d30cec4d51a6cd729797a86d487f1d23", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/03.response.jsonl": "2688474fea8fc3f8b1957684c39f01e760e2126b345711935d150eb0c6a7b7ab", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/04.request.json": "2f0c9f556e1724a6e44fe0729331479910b8b3255934d26200b91dd3a90fbf39", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/04.response.jsonl": "d6df8dcdd380ed00e8a922f87e80e143a3b1e0c97a757fb8b6d4a33725a3bb02", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/05.request.json": "0c1e778fee454ce56eb6f7efd38e35dc20beabc80c10c4fe976e5a4a4ad98d31", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/05.response.jsonl": "d386a14aac9d0fdb798b2ee8332a18ea3cd21d2c45f5867d48566033f33fd6cc", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/06.request.json": "0df3c003f56733978702603e6e31a387dfed0820989331cfbbd8447e44c0667b", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/06.response.jsonl": "d049fcc9500f1fb97bf7f4713c70c587b98b36648fc6d3ccacf5becf660ad340", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/07.request.json": "0d34037b33c68cd208aa85399a7c7aed1645d6d86d914dce0228fe36e60e1b35", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/07.response.jsonl": "2650ff92dfb3256666f00fecd6a91cc1ac2b2cf0039b2fcc21506b37a2a474cd", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/08.request.json": "dfc2d88026a0959106bffd04f1d26facaa6eb694469e917b4793ac57b8770d0c", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/08.response.jsonl": "861f6a0e5fdf391504ce565aabd595f369a44bfd80c89bad3d09d3bb0dff22ab", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/09.request.json": "b7ceb986b6da15b444b93502de6ed89c1f67cf8765cea15902390b935f6dfb59", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/09.response.jsonl": "b81ab24a8837c306f3c5749fd41b55f639d151fc89444d6ce948c16c51f04646", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/10.request.json": "24b83f98290d698447465401e334d09328abf5c3ca4d3c628143a2beca14af6a", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/10.response.jsonl": "d60519209960614d5c6bfaf22460ca03b70ae9203a696be1b2d0fb249caa8067", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/11.request.json": "9fbda3fea49e842871e69d649375cc0ffe9e28ac9b849c89a3b21297bcf44ce3", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/11.response.jsonl": "90759a685d97357533202f2ee7c351d48360db7a84c806798c8943f0df8545ec", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/12.request.json": "09d4f86716d1168ecf466805a750381d452978bf7b25638c5a2e8c8a5b751419", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/12.response.jsonl": "675cb93d900a36f8f2d8a8b9438825c5e055cef5607645123f0754cb1959ef47", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/13.request.json": "32f4c0112d95682d03655ebdda05c81b4ee74b6b8f1a75191fde32e342aad29e", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/13.response.jsonl": "00ad88158a0ee94b2e21bef95ec1c5713cd95156425e91e144521085bc249899", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/14.request.json": "3802079dd2ab6f0805ad955bcc7b63cd59c17d16c2a1219d7ef3da25e6a259d1", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/14.response.jsonl": "3701ab3dcf3097ee8d4aa6573a72292c98b8ab14af12b105d1a82a85dec8573c", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/15.request.json": "3f15ff2d39bff11ba27b131d727e3e28ca657a2a41a29180604e633f6d27ac86", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/15.response.jsonl": "fd59503ae732ac937f2965e925a7ee5c521b535cb226fe6c4eab27967a79f8f8", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/16.request.json": "a249363e13e005915ba1b851efde68bbcc7251aaa42d40a8b8dca8026da95f1d", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/16.response.jsonl": "bf78ebb78a2899a8c317ffdba7829a4fe3a06b6b210d2aed7b54754557b76e3c", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/17.request.json": "0d2d9b50693fa00cfed257d2310d1e9071d3f97b9d0f21e6f47d2defc770f016", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/17.response.jsonl": "17ea80a7b013a1b8c2228624cc944ea6c0198cbd05a0bd1695d8b70456a6c08a", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/18.request.json": "6275d57c741768ba89169f20abe821bace0bdcb0f3f2d13e0269ac5c1895c07d", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/18.response.jsonl": "de450d68876cd58a74c8cba54fbb604e7834c36d9cfc5f5c1b1e992e1160d441", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/19.request.json": "47bfd91010e106ff6719d396799eb9fc4d094439e6712a2a61c90bbd36a92c2c", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/19.response.jsonl": "d299f2df3b540bf82fdce75368470aa0a1cbe21ea5a3300090f4fa93ba74180f", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/20.request.json": "0ce37f33a59e7641c10f7961b689a945b54109177a728bb59e8880de997c1e3c", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/20.response.jsonl": "843e79d63d7d37901f2cac86b20c3209896e9dea50193b1be698624c3504b896", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/21.request.json": "2a5c124f1c486cbbdf6f90d13428f5fc94cfc5eb067f64a4b416c7f1847c9730", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/21.response.jsonl": "a060cc807dab23ec055fa0834f66b75ce21628d4ec2d15c2d8c2d6f4b816048d", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/compass/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/01.request.json": "c7a933c9b57fcff6957c6dbe624b6443d1a62b28bebbf4445452a117a146d2e5", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/01.response.jsonl": "e38aa737515685d5e80f14b4ae13b09ac47cc287e64c0872d9a2129b6db2c1f5", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/02.request.json": "0f1af7b35815b407111bc7d97d0c26b1b879311df49455ef2a676ff20cecbb38", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/03.request.json": "cea371b903cf1632df866b3cdc4941a42b631907b8fbbebff01a52d845e65cdd", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/03.response.jsonl": "58f4bfd56df06a7801ad440723d137cb8510049e5192f77b15ac79700380df01", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/04.request.json": "c93848c7c01a7e7eae69d039a809fb7bb1fcef47e98ee172fa9a1a9795a49468", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/04.response.jsonl": "0308eb24566e0a49797f711ec37769ed3442e0479195cefb09d923f719786b5f", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/05.request.json": "9e81cabc0f1a8491d124c223a9d55dc7eea3a1ca53073c6594059770ce4fd8fa", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/05.response.jsonl": "2b5949da4df8aad8f97d06eb9731f6af5c9bb4d37bf6ad5d297dae32aff596fe", + "public-neighbor-path-01/capture/raw/walkdir-longer-chain/graphify/stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/capture/runner.py": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "public-neighbor-path-01/capture.log": "f81cf4fed67e5cc3378e55f3bcec05107dee72649c04d698b1e90bb8462dad93", + "public-neighbor-path-01/capture.py": "e4937398f96d25d209f6badcd009ae1c234eb61ac0c92b3bd9c53a66e9e5d537", + "public-neighbor-path-01/product-boundary.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public-neighbor-path-01/repeat-verification.log": "7fcd1a06f6b84dcea08ad58c32e0a9579c27dc66cd5fe73d96ca54adde4be47f", + "public-neighbor-path-01/replay-before.json": "0ad2a489b56f1085a028f6740f9c112490a1e0c9598fca9b74339f5c8fc0cc7d", + "public-neighbor-path-01/replay.json": "8043894152168f264c4ac02e6fa7506341d1b1d3d2390f65159bcb47e1da5332", + "public-neighbor-path-01/verification.log": "7fcd1a06f6b84dcea08ad58c32e0a9579c27dc66cd5fe73d96ca54adde4be47f", + "public-neighbor-path-01/verified-summary.json": "02727048f9910183ed232f4f1c584fb837a3d159503f1118783591ca02080954", + "public-neighbor-path-01/verify.py": "22577a04ab9b0cc6639e376430fa790456c6c824db55c19cd621d2710c6a29cc", + "public-neighbor-path-01/write_review.py": "24d648de91e2d6a21fa8b53be1340d3bb985585288070879fc593ab2507d1917" + } +} diff --git a/benchmarks/agent_query/public_neighbor_paths.py b/benchmarks/agent_query/public_neighbor_paths.py new file mode 100644 index 000000000..f3b6d7f5c --- /dev/null +++ b/benchmarks/agent_query/public_neighbor_paths.py @@ -0,0 +1,181 @@ +"""Bounded BFS using only public MCP results; no graph or source-file access. + +Returned paths are candidates until independently checked against graph records +and source. In particular, Graphify's label resolver can conflate declarations. +""" +from collections import deque +import re +import time + + +class WorkflowStop(ValueError): + pass + + +def compass_node(node): + source = node.get('source') or {} + result = dict(id=node.get('id'), label=node.get('name'), + file=source.get('file'), line=source.get('startLine')) + return checked_node(result) + + +def checked_node(node): + if (any(not isinstance(node.get(k), str) or not node[k] for k in ['id', 'label', 'file']) + or type(node.get('line')) is not int or node['line'] < 1): + raise WorkflowStop('missing-public-node-identity') + return node + + +def graphify_node(call, expected_label=None): + if not call.get('executionSucceeded'): + return None + text = call.get('text', '') + names = re.findall(r'^Node: (.+)$', text, re.M) + ids = re.findall(r'^ ID: (.+)$', text, re.M) + sources = re.findall(r'^ Source: (.+) L([1-9][0-9]*)(?:-L[1-9][0-9]*)?$', text, re.M) + if len(names) != 1 or len(ids) != 1 or len(sources) != 1: + return None + if expected_label is not None and names[0] != expected_label: + return None + return checked_node(dict(id=ids[0], label=names[0], file=sources[0][0], line=int(sources[0][1]))) + + +def neighbors(tool, call, seed): + """Return outgoing groups, retaining public records for later adjudication.""" + if not call.get('executionSucceeded'): + raise WorkflowStop('neighbor-tool-error') + if tool == 'compass': + env = call.get('response', {}).get('result', {}).get('structuredContent') or {} + body = env.get('result') or {} + if (env.get('schema') != 'compass.mcp.tool-result/1' + or env.get('transportTruncation', {}).get('truncated') is not False + or body.get('schema') != 'compass.query.neighbors/1' + or body.get('truncated') is not False + or body.get('directionBasis') != 'stored-endpoints' + or body.get('graphDirected') is not True + or body.get('relationFilter') != 'calls' + or body.get('seed', {}).get('id') != seed['id']): + raise WorkflowStop('invalid-or-truncated-neighbors') + groups = body.get('neighbors') + if not isinstance(groups, list) or len(groups) > 20000: + raise WorkflowStop('invalid-neighbor-groups') + result = [] + for group in groups: + if group.get('direction') not in {'incoming', 'outgoing'}: + raise WorkflowStop('invalid-neighbor-direction') + if group['direction'] != 'outgoing': + continue + node = compass_node(group.get('node') or {}) + records = group.get('edges') + if not isinstance(records, list) or not records or len(records) > 10000: + raise WorkflowStop('invalid-neighbor-records') + kept = [] + for edge in records: + if (edge.get('source') != seed['id'] or edge.get('target') != node['id'] + or edge.get('kind') != 'calls'): + raise WorkflowStop('invalid-call-record') + evidence = edge.get('evidence') or [] + if evidence and all(e.get('origin') == 'ast' and e.get('confidence') == 'exact' for e in evidence): + kept.append(edge) + if kept: + result.append(dict(node=node, records=kept)) + return result + if tool != 'graphify': + raise ValueError('unsupported tool') + lines = call.get('text', '').splitlines() + if not lines or lines[0] != 'Neighbors of '+seed['label']+':': + raise WorkflowStop('invalid-or-truncated-neighbors') + result = [] + pattern = r'^ (-->|<--) (.+?) \[([^\]]+)\] \[([^\]]*)\](?: at=(.*))?$' + for line in lines[1:]: + match = re.fullmatch(pattern, line) + if match is None: + raise WorkflowStop('invalid-or-truncated-neighbor-line') + direction, label, relation, confidence, site = match.groups() + if direction == '-->' and relation == 'calls' and confidence == 'EXTRACTED': + result.append(dict(label=label, records=[dict(line=line, site=site, relation=relation, + confidence=confidence)])) + return result + + +class PublicWalk: + """One fixed request/byte/time budget, including endpoint resolution.""" + def __init__(self, tool, invoke, bounds, clock=time.monotonic): + self.tool, self.invoke, self.bounds, self.clock = tool, invoke, bounds, clock + self.started = clock() + self.calls, self.bytes, self.expanded, self.groups = [], 0, 0, 0 + self.identity_gaps, self.cache = [], {} + + def request(self, method, arguments): + if self.clock()-self.started >= self.bounds['workflowTimeoutSeconds']: + raise WorkflowStop('workflow-time-limit') + if len(self.calls) >= self.bounds['maxRequests']: + raise WorkflowStop('request-limit') + row = self.invoke(method, arguments) + self.calls.append(row) + self.bytes += row.get('wireResponseBytes', 0) + if row.get('captureError'): + raise WorkflowStop('transport-error') + if self.bytes > self.bounds['maxWorkflowResponseBytes']: + raise WorkflowStop('workflow-response-byte-limit') + if self.clock()-self.started >= self.bounds['workflowTimeoutSeconds']: + raise WorkflowStop('workflow-time-limit') + return row + + def walk(self, source, target): + checked_node(source); checked_node(target) + if source['id'] == target['id']: + return dict(status='candidate-path', nodes=[source], steps=[]) + queue = deque([(source, 0)]) + seen, parents, nodes = {source['id']}, {}, {source['id']: source} + depth_frontier = False + while queue: + node, depth = queue.popleft() + if depth >= self.bounds['maxDepth']: + depth_frontier = True + continue + if self.expanded >= self.bounds['maxExpandedNodes']: + raise WorkflowStop('expanded-node-limit') + args = dict(label=node['id'], relation_filter='calls') + if self.tool == 'graphify': + args['token_budget'] = self.bounds['graphifyTokenBudget'] + response = self.request('get_neighbors', args) + self.expanded += 1 + outgoing = neighbors(self.tool, response, node) + self.groups += len(outgoing) + if self.groups > self.bounds['maxOutgoingGroups']: + raise WorkflowStop('outgoing-group-limit') + destinations = [] + for group in sorted(outgoing, key=lambda g: g.get('label', g.get('node', {}).get('label', ''))): + if self.tool == 'graphify': + label = group['label'] + if label not in self.cache: + resolved = self.request('get_node', dict(label=label)) + self.cache[label] = graphify_node(resolved, label) + destination = self.cache[label] + if destination is None: + self.identity_gaps.append(dict(source=node['id'], label=label)) + continue + else: + destination = group['node'] + destinations.append((destination, group['records'])) + destinations.sort(key=lambda item: (item[0]['file'], item[0]['line'], item[0]['label'], item[0]['id'])) + for destination, records in destinations: + identifier = destination['id'] + if identifier in seen: + continue + seen.add(identifier); nodes[identifier] = destination + parents[identifier] = dict(source=node['id'], target=identifier, records=records) + if identifier == target['id']: + route, steps, current = [nodes[identifier]], [], identifier + while current != source['id']: + step = parents[current]; steps.append(step) + current = step['source']; route.append(nodes[current]) + return dict(status='candidate-path', nodes=route[::-1], steps=steps[::-1]) + queue.append((destination, depth+1)) + return dict(status='no-path-in-public-projection', depthFrontier=depth_frontier, + identityIncomplete=bool(self.identity_gaps), globalAbsenceProven=False) + + def metrics(self): + return dict(requests=len(self.calls), responseBytes=self.bytes, expandedNodes=self.expanded, + outgoingGroups=self.groups, identityGaps=self.identity_gaps) diff --git a/benchmarks/agent_query/responsibility_questions_panel_a.json b/benchmarks/agent_query/responsibility_questions_panel_a.json new file mode 100644 index 000000000..cc9352035 --- /dev/null +++ b/benchmarks/agent_query/responsibility_questions_panel_a.json @@ -0,0 +1,333 @@ +{ + "schema": "compass.responsibility-questions/1", + "scope": "Source-first questions for a new development arm on previously evaluated repositories and frozen graphs. Prior unrelated outputs were observed; this is not held-out or representative evidence.", + "sourceRun": "java-varargs-panel-a-02", + "sourceRunSha256": "c2bc04366343fbd32bbdf84ccfb1db7aaad2e2ed38b38f979065c6755432d792", + "protocol": { + "operation": "Both tools receive the identical natural-language query through their public query CLI.", + "budgetTokens": 2000, + "maxFollowUps": 0, + "timeoutSeconds": 120, + "sourceWorkingDirectory": true, + "nativeOnly": true, + "scoring": "Review all 20 facts for explicit correct answers and separately for sufficient returned source evidence. A symbol or neighbor name alone earns neither. Count omissions and unsupported asserted claims; raw source excerpts are evidence, not claims authored by the tool. Preserve ambiguity, truncation, errors and all failures. No score may establish god-object detection or functional community quality.", + "limitations": [ + "Purposive five-case development selection, one per language; no population precision estimate.", + "Shared stored graphs from a prior run; no new extraction or build-time comparison.", + "No model-assisted answers or independent semantic reviewer.", + "Degree, method counts and responsibility lists do not prove a god-object defect." + ] + }, + "cases": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "symbol": "Mux", + "question": "Explain how Mux coordinates routing, middleware and subrouters. What state is shared by With?", + "file": "mux.go", + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "graphSha256": { + "compass": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "graphify": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf" + }, + "facts": [ + { + "id": "chi-1", + "claim": "With creates an inline Mux that shares its parent pool and routing tree, while building a middleware slice for the inline router.", + "witnesses": [ + { + "startLine": 242, + "endLine": 262, + "text": "func (mx *Mux) With(middlewares ...func(http.Handler) http.Handler) Router {\n\t// Similarly as in handle(), we must build the mux handler once additional\n\t// middleware registration isn't allowed for this stack, like now.\n\tif !mx.inline && mx.handler == nil {\n\t\tmx.updateRouteHandler()\n\t}\n\n\t// Copy middlewares from parent inline muxs\n\tvar mws Middlewares\n\tif mx.inline {\n\t\tmws = make(Middlewares, len(mx.middlewares))\n\t\tcopy(mws, mx.middlewares)\n\t}\n\tmws = append(mws, middlewares...)\n\n\tim := &Mux{\n\t\tpool: mx.pool, inline: true, parent: mx, tree: mx.tree, middlewares: mws,\n\t\tnotFoundHandler: mx.notFoundHandler, methodNotAllowedHandler: mx.methodNotAllowedHandler,\n\t}\n\n\treturn im" + } + ] + }, + { + "id": "chi-2", + "claim": "Use rejects middleware registration once the computed handler has been established.", + "witnesses": [ + { + "startLine": 100, + "endLine": 106, + "text": "func (mx *Mux) Use(middlewares ...func(http.Handler) http.Handler) {\n\tif mx.handler != nil {\n\t\tpanic(\"chi: all middlewares must be defined before routes on a mux\")\n\t}\n\tmx.middlewares = append(mx.middlewares, middlewares...)\n}\n" + } + ] + }, + { + "id": "chi-3", + "claim": "Route constructs a new router, invokes the supplied configuration callback, and mounts that router at the pattern.", + "witnesses": [ + { + "startLine": 278, + "endLine": 287, + "text": "func (mx *Mux) Route(pattern string, fn func(r Router)) Router {\n\tif fn == nil {\n\t\tpanic(fmt.Sprintf(\"chi: attempting to Route() a nil subrouter on '%s'\", pattern))\n\t}\n\tsubRouter := NewRouter()\n\tfn(subRouter)\n\tmx.Mount(pattern, subRouter)\n\treturn subRouter\n}\n" + } + ] + }, + { + "id": "chi-4", + "claim": "routeHTTP looks up the request method and path in the route tree and invokes the selected HTTP handler when one is found.", + "witnesses": [ + { + "startLine": 476, + "endLine": 493, + "text": "\tmethod, ok := methodMap[rctx.RouteMethod]\n\tif !ok {\n\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)\n\t\treturn\n\t}\n\n\t// Find the route\n\tif _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil {\n\t\t// Set http.Request path values from our request context\n\t\tfor i, key := range rctx.URLParams.Keys {\n\t\t\tvalue := rctx.URLParams.Values[i]\n\t\t\tr.SetPathValue(key, value)\n\t\t}\n\t\tr.Pattern = rctx.RoutePattern()\n\n\t\th.ServeHTTP(w, r)\n\t\treturn\n\t}" + } + ] + } + ] + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "symbol": "_AtomicFile", + "question": "Explain _AtomicFile ownership, close behavior and context manager cleanup on exceptions.", + "file": "src/click/_compat.py", + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "graphSha256": { + "compass": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "graphify": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234" + }, + "facts": [ + { + "id": "click-1", + "claim": "The wrapper stores the file object plus temporary and real filenames; its name property returns the real filename.", + "witnesses": [ + { + "startLine": 455, + "endLine": 464, + "text": "class _AtomicFile:\n def __init__(self, f: t.IO[t.Any], tmp_filename: str, real_filename: str) -> None:\n self._f = f\n self._tmp_filename = tmp_filename\n self._real_filename = real_filename\n self.closed = False\n\n @property\n def name(self) -> str:\n return self._real_filename" + } + ] + }, + { + "id": "click-2", + "claim": "On its first successful close, it closes the wrapped stream, replaces the real filename with the temporary filename, and marks itself closed. Later close calls return immediately.", + "witnesses": [ + { + "startLine": 466, + "endLine": 471, + "text": " def close(self, delete: bool = False) -> None:\n if self.closed:\n return\n self._f.close()\n os.replace(self._tmp_filename, self._real_filename)\n self.closed = True" + } + ] + }, + { + "id": "click-3", + "claim": "Unknown attribute access is forwarded to the wrapped stream.", + "witnesses": [ + { + "startLine": 473, + "endLine": 474, + "text": " def __getattr__(self, name: str) -> t.Any:\n return getattr(self._f, name)" + } + ] + }, + { + "id": "click-4", + "claim": "For an as-yet-open wrapper, __exit__ passes whether an exception occurred as delete, but close does not inspect delete: it still attempts replacement on exception, unless an earlier operation fails. Do not infer rollback from the parameter name.", + "witnesses": [ + { + "startLine": 466, + "endLine": 471, + "text": " def close(self, delete: bool = False) -> None:\n if self.closed:\n return\n self._f.close()\n os.replace(self._tmp_filename, self._real_filename)\n self.closed = True" + }, + { + "startLine": 479, + "endLine": 485, + "text": " def __exit__(\n self,\n exc_type: type[BaseException] | None,\n exc_value: BaseException | None,\n tb: TracebackType | None,\n ) -> None:\n self.close(delete=exc_type is not None)" + } + ] + } + ] + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "symbol": "Cleaner", + "question": "Explain Cleaner responsibilities, how it uses the supplied Safelist, and whether cleaning mutates the input document.", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "graphSha256": { + "compass": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "graphify": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69" + }, + "facts": [ + { + "id": "jsoup-1", + "claim": "The constructor keeps the supplied Safelist reference directly after validating it, rather than making a copy.", + "witnesses": [ + { + "startLine": 50, + "endLine": 53, + "text": " public Cleaner(Safelist safelist) {\n Validate.notNull(safelist);\n this.safelist = safelist;\n }" + } + ] + }, + { + "id": "jsoup-2", + "claim": "clean builds a separate document shell, copies safe body nodes into it and clones the input output settings.", + "witnesses": [ + { + "startLine": 62, + "endLine": 70, + "text": " public Document clean(Document dirtyDocument) {\n Validate.notNull(dirtyDocument);\n\n Document clean = Document.createShell(dirtyDocument.baseUri());\n copySafeNodes(dirtyDocument.body(), clean.body());\n clean.outputSettings(dirtyDocument.outputSettings().clone());\n\n return clean;\n }" + } + ] + }, + { + "id": "jsoup-3", + "claim": "The cleaning visitor gates element copying on safe tags, and createSafeElement filters source attributes through the Safelist.", + "witnesses": [ + { + "startLine": 148, + "endLine": 158, + "text": " @Override public void head(Node source, int depth) {\n if (source instanceof Element) {\n Element sourceEl = (Element) source;\n\n if (safelist.isSafeTag(sourceEl.normalName())) { // safe, clone and copy safe attrs\n ElementMeta meta = createSafeElement(sourceEl);\n Element destChild = meta.el;\n destination.appendChild(destChild);\n\n numDiscarded += meta.numAttribsDiscarded;\n destination = destChild;" + }, + { + "startLine": 188, + "endLine": 209, + "text": " private ElementMeta createSafeElement(Element sourceEl) {\n Element dest = sourceEl.shallowClone(); // reuses tag, clones attributes and preserves any user data\n String sourceTag = sourceEl.tagName();\n Attributes destAttrs = dest.attributes();\n dest.clearAttributes(); // clear all non-internal attributes, ready for safe copy\n\n int numDiscarded = 0;\n Attributes sourceAttrs = sourceEl.attributes();\n for (Attribute sourceAttr : sourceAttrs) {\n if (safelist.isSafeAttribute(sourceTag, sourceEl, sourceAttr)) { // will keep this attr\n String key = sourceAttr.getKey();\n String value = sourceAttr.getValue();\n\n if (safelist.shouldAbsUrl(sourceTag, key)) { // configured to make absolute urls for this key (href)\n value = sourceEl.absUrl(key);\n if (value.isEmpty()) // could not be made abs; leave as-is to allow custom unknown protocols\n value = sourceAttr.getValue();\n }\n Range.AttributeRange range = sourceAttrs.sourceRange(key);\n destAttrs.put(key, value);\n NodeInternals.attributeRange(destAttrs, key, range);\n } else" + } + ] + }, + { + "id": "jsoup-4", + "claim": "isValidBodyHtml parses a fragment and returns true only when no nodes or attributes were discarded and the tracked parse-error list is empty.", + "witnesses": [ + { + "startLine": 124, + "endLine": 133, + "text": " public boolean isValidBodyHtml(String bodyHtml) {\n String baseUri = (safelist.preserveRelativeLinks()) ? DummyUri : \"\"; // fake base URI to allow relative URLs to remain valid\n Document clean = Document.createShell(baseUri);\n Document dirty = Document.createShell(baseUri);\n ParseErrorList errorList = ParseErrorList.tracking(1);\n List nodes = Parser.parseFragment(bodyHtml, dirty.body(), baseUri, errorList);\n dirty.body().insertChildren(0, nodes);\n int numDiscarded = copySafeNodes(dirty.body(), clean.body());\n return numDiscarded == 0 && errorList.isEmpty();\n }" + } + ] + } + ] + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "symbol": "createStore", + "question": "Explain createStore responsibilities and how dispatch and subscriptions share state safely.", + "file": "src/createStore.ts", + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "graphSha256": { + "compass": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "graphify": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b" + }, + "facts": [ + { + "id": "redux-1", + "claim": "When an enhancer is supplied and validated, creation delegates to enhancer(createStore) with the reducer and preloaded state.", + "witnesses": [ + { + "startLine": 121, + "endLine": 134, + "text": " if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(\n `Expected the enhancer to be a function. Instead, received: '${kindOf(\n enhancer\n )}'`\n )\n }\n\n return enhancer(createStore)(\n reducer,\n preloadedState as PreloadedState | undefined\n )\n }" + } + ] + }, + { + "id": "redux-2", + "claim": "dispatch runs the current reducer to update currentState while isDispatching is true, resetting the flag in finally.", + "witnesses": [ + { + "startLine": 293, + "endLine": 302, + "text": " if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.')\n }\n\n try {\n isDispatching = true\n currentState = currentReducer(currentState, action)\n } finally {\n isDispatching = false\n }" + } + ] + }, + { + "id": "redux-3", + "claim": "Listener changes use a copy of currentListeners when needed; dispatch iterates its captured listener map, so mutations to nextListeners do not rewrite that in-progress snapshot.", + "witnesses": [ + { + "startLine": 152, + "endLine": 159, + "text": " function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = new Map()\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener)\n })\n }\n }" + }, + { + "startLine": 221, + "endLine": 243, + "text": " ensureCanMutateNextListeners()\n const listenerId = listenerIdCounter++\n nextListeners.set(listenerId, listener)\n\n return function unsubscribe() {\n if (!isSubscribed) {\n return\n }\n\n if (isDispatching) {\n throw new Error(\n 'You may not unsubscribe from a store listener while the reducer is executing. ' +\n 'See https://redux.js.org/api/store#subscribelistener for more details.'\n )\n }\n\n isSubscribed = false\n\n ensureCanMutateNextListeners()\n nextListeners.delete(listenerId)\n currentListeners = null\n }\n }" + }, + { + "startLine": 304, + "endLine": 307, + "text": " const listeners = (currentListeners = nextListeners)\n listeners.forEach(listener => {\n listener()\n })" + } + ] + }, + { + "id": "redux-4", + "claim": "The store exposes dispatch, subscribe, getState and replaceReducer, plus an observable adapter that reads state and uses the same subscription mechanism.", + "witnesses": [ + { + "startLine": 344, + "endLine": 394, + "text": " function observable() {\n const outerSubscribe = subscribe\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer: unknown) {\n if (typeof observer !== 'object' || observer === null) {\n throw new TypeError(\n `Expected the observer to be an object. Instead, received: '${kindOf(\n observer\n )}'`\n )\n }\n\n function observeState() {\n const observerAsObserver = observer as Observer\n if (observerAsObserver.next) {\n observerAsObserver.next(getState())\n }\n }\n\n observeState()\n const unsubscribe = outerSubscribe(observeState)\n return { unsubscribe }\n },\n\n [$$observable]() {\n return this\n }\n }\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch({ type: ActionTypes.INIT } as A)\n\n const store = {\n dispatch: dispatch as Dispatch,\n subscribe,\n getState,\n replaceReducer,\n [$$observable]: observable\n } as unknown as Store & Ext\n return store" + } + ] + } + ] + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "symbol": "IntoIter", + "question": "Explain IntoIter responsibilities, how it limits open directories, and how it detects symlink loops.", + "file": "src/lib.rs", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "graphSha256": { + "compass": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "graphify": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + }, + "facts": [ + { + "id": "walkdir-1", + "claim": "IntoIter next traverses its directory stack, prunes beyond max_depth and returns individual directory-reading errors as Some(Err).", + "witnesses": [ + { + "startLine": 699, + "endLine": 724, + "text": " while !self.stack_list.is_empty() {\n self.depth = self.stack_list.len();\n if let Some(dentry) = self.get_deferred_dir() {\n return Some(Ok(dentry));\n }\n if self.depth > self.opts.max_depth {\n // If we've exceeded the max depth, pop the current dir\n // so that we don't descend.\n self.pop();\n continue;\n }\n // Unwrap is safe here because we've verified above that\n // `self.stack_list` is not empty\n let next = self\n .stack_list\n .last_mut()\n .expect(\"BUG: stack should be non-empty\")\n .next();\n match next {\n None => self.pop(),\n Some(Err(err)) => return Some(Err(err)),\n Some(Ok(dent)) => {\n if let Some(result) = self.handle_entry(dent) {\n return Some(result);\n }\n }" + } + ] + }, + { + "id": "walkdir-2", + "claim": "push closes the oldest open directory stream when max_open is reached before opening another directory.", + "witnesses": [ + { + "startLine": 901, + "endLine": 911, + "text": " fn push(&mut self, dent: &DirEntry) -> Result<()> {\n // Make room for another open file descriptor if we've hit the max.\n let free =\n self.stack_list.len().checked_sub(self.oldest_opened).unwrap();\n if free == self.opts.max_open {\n self.stack_list[self.oldest_opened].close();\n }\n // Open a handle to reading the directory's entries.\n let rd = fs::read_dir(dent.path()).map_err(|err| {\n Some(Error::from_path(self.depth, dent.path().to_path_buf(), err))\n });" + } + ] + }, + { + "id": "walkdir-3", + "claim": "Following a symlink invokes loop checking for directory targets; check_loop compares the target handle with ancestor handles and returns a loop error on a match.", + "witnesses": [ + { + "startLine": 961, + "endLine": 989, + "text": " fn follow(&self, mut dent: DirEntry) -> Result {\n dent =\n DirEntry::from_path(self.depth, dent.path().to_path_buf(), true)?;\n // The only way a symlink can cause a loop is if it points\n // to a directory. Otherwise, it always points to a leaf\n // and we can omit any loop checks.\n if dent.is_dir() {\n self.check_loop(dent.path())?;\n }\n Ok(dent)\n }\n\n fn check_loop>(&self, child: P) -> Result<()> {\n let hchild = Handle::from_path(&child)\n .map_err(|err| Error::from_io(self.depth, err))?;\n for ancestor in self.stack_path.iter().rev() {\n let is_same = ancestor\n .is_same(&hchild)\n .map_err(|err| Error::from_io(self.depth, err))?;\n if is_same {\n return Err(Error::from_loop(\n self.depth,\n &ancestor.path,\n child.as_ref(),\n ));\n }\n }\n Ok(())\n }" + } + ] + }, + { + "id": "walkdir-4", + "claim": "With contents_first enabled, directory entries are deferred and later returned after traversal of their contents, subject to depth filtering.", + "witnesses": [ + { + "startLine": 873, + "endLine": 898, + "text": " }\n if is_normal_dir && self.opts.contents_first {\n self.deferred_dirs.push(dent);\n None\n } else if self.skippable() {\n None\n } else {\n Some(Ok(dent))\n }\n }\n\n fn get_deferred_dir(&mut self) -> Option {\n if self.opts.contents_first {\n if self.depth < self.deferred_dirs.len() {\n // Unwrap is safe here because we've guaranteed that\n // `self.deferred_dirs.len()` can never be less than 1\n let deferred: DirEntry = self\n .deferred_dirs\n .pop()\n .expect(\"BUG: deferred_dirs should be non-empty\");\n if !self.skippable() {\n return Some(deferred);\n }\n }\n }\n None" + } + ] + } + ] + } + ] +} diff --git a/benchmarks/agent_query/responsibility_review_panel_a.json b/benchmarks/agent_query/responsibility_review_panel_a.json new file mode 100644 index 000000000..7e2381d04 --- /dev/null +++ b/benchmarks/agent_query/responsibility_review_panel_a.json @@ -0,0 +1,491 @@ +{ + "schema": "compass.responsibility-review/1", + "scope": "Manual review of completeness for 20 frozen source facts across five native natural-query responses per tool. It is not a complete precision audit of every returned node/edge, a held-out result, or a god-object diagnosis evaluation.", + "questionCommit": "232608ee", + "questionsSha256": "608314dcd5e0a9e40fc7c6b8dd9d44026ba6a9b001e881fa8504fe44cc1fc7b2", + "captureSha256": "99ac02e229d30b34d7bf3256ef4b9e46084e14b65efbdaa88b47160690c48d6f", + "collectorSha256": "18089c5b11461f2f4d9ba38b16d369ae7c02d5e38dc8f2b1e0f4e8ba92bfdc63", + "runnerSha256": "4616b4c3a13e17febad2851c6111bff61e7b35e216fabf481df281380cddcebb", + "artifactRoot": "responsibility-explanation-01", + "metrics": { + "compass": { + "requests": 5, + "successfulExecutions": 5, + "explicitCorrectFacts": 0, + "sufficientEvidenceFacts": 0, + "totalFacts": 20, + "stdoutBytes": 39740, + "requestedTokensPerRequest": 2000 + }, + "graphify": { + "requests": 5, + "successfulExecutions": 5, + "explicitCorrectFacts": 0, + "sufficientEvidenceFacts": 0, + "totalFacts": 20, + "stdoutBytes": 53306, + "requestedTokensPerRequest": 2000 + } + }, + "reviews": [ + { + "repository": "chi", + "tool": "compass", + "stdoutSha256": "37657db8665dda901e0e3befbd557c0987c833bc18c6e6722ae004b7c4e27bbf", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutBytes": 7949, + "byteDivFourTokenEstimate": 1988, + "responseStatus": "RESULT needs_resolution \u00b7 match=ambiguous \u00b7 execution=partial \u00b7 coverage=unknown", + "truncationDisclosed": true, + "overBudgetDisclosed": false, + "nodeRows": 64, + "edgeRows": 44, + "factReviews": [ + { + "id": "chi-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "Names and call edges do not show shared pool/tree fields or middleware slice construction." + }, + { + "id": "chi-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No handler guard or rejection behavior is shown." + }, + { + "id": "chi-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No complete construct/configure/mount sequence is shown." + }, + { + "id": "chi-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No conditional route lookup and matched-handler invocation is shown." + } + ] + }, + { + "repository": "chi", + "tool": "graphify", + "stdoutSha256": "1bf6c1ffd510f5a1183367edaba6fb6a7a66764cd9a658fdaa9cfa3eeff6b52f", + "stderrSha256": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "stdoutBytes": 6571, + "byteDivFourTokenEstimate": 1643, + "responseStatus": "graph traversal context", + "truncationDisclosed": true, + "overBudgetDisclosed": false, + "nodeRows": 101, + "edgeRows": 0, + "factReviews": [ + { + "id": "chi-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "Names and call edges do not show shared pool/tree fields or middleware slice construction." + }, + { + "id": "chi-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No handler guard or rejection behavior is shown." + }, + { + "id": "chi-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No complete construct/configure/mount sequence is shown." + }, + { + "id": "chi-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No conditional route lookup and matched-handler invocation is shown." + } + ] + }, + { + "repository": "click", + "tool": "compass", + "stdoutSha256": "09d1dab6c20017246f8e36ffe47f45c995cdf3b8f9d2e4fa9717f843769cdaf3", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutBytes": 7868, + "byteDivFourTokenEstimate": 1967, + "responseStatus": "RESULT candidates \u00b7 match=fuzzy \u00b7 execution=partial \u00b7 coverage=unknown", + "truncationDisclosed": true, + "overBudgetDisclosed": false, + "nodeRows": 64, + "edgeRows": 10, + "factReviews": [ + { + "id": "click-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No stored filenames or name property body is shown." + }, + { + "id": "click-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No close guard, stream close, replace and closed-state sequence is shown." + }, + { + "id": "click-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No __getattr__ forwarding implementation is shown." + }, + { + "id": "click-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No complete close/__exit__ bodies establish the ignored delete flag." + } + ] + }, + { + "repository": "click", + "tool": "graphify", + "stdoutSha256": "f8e7ae3aae06a943c686f3cd5f94cc7c7ea1f7da243ef8aa1ff35b5984564da5", + "stderrSha256": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "stdoutBytes": 6850, + "byteDivFourTokenEstimate": 1713, + "responseStatus": "graph traversal context", + "truncationDisclosed": true, + "overBudgetDisclosed": false, + "nodeRows": 87, + "edgeRows": 0, + "factReviews": [ + { + "id": "click-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No stored filenames or name property body is shown." + }, + { + "id": "click-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No close guard, stream close, replace and closed-state sequence is shown." + }, + { + "id": "click-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No __getattr__ forwarding implementation is shown." + }, + { + "id": "click-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No complete close/__exit__ bodies establish the ignored delete flag." + } + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "stdoutSha256": "51bcb6e5217ff0bb974a18fb07a6b636d7a2b67c2ed5641c5da5ad1acf6c5a94", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutBytes": 7938, + "byteDivFourTokenEstimate": 1985, + "responseStatus": "RESULT needs_resolution \u00b7 match=ambiguous \u00b7 execution=partial \u00b7 coverage=incomplete", + "truncationDisclosed": true, + "overBudgetDisclosed": false, + "nodeRows": 61, + "edgeRows": 0, + "factReviews": [ + { + "id": "jsoup-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No constructor assignment establishes reference sharing." + }, + { + "id": "jsoup-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No complete new-shell/copy/output-settings-clone sequence is shown." + }, + { + "id": "jsoup-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No safe-tag and safe-attribute predicates are shown." + }, + { + "id": "jsoup-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No parsing and combined discarded-count/error-list condition is shown." + } + ] + }, + { + "repository": "jsoup", + "tool": "graphify", + "stdoutSha256": "21db49e7171f06bfa3b36559f63a622705673ca94869932c49389803f09829c2", + "stderrSha256": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "stdoutBytes": 6667, + "byteDivFourTokenEstimate": 1667, + "responseStatus": "graph traversal context", + "truncationDisclosed": true, + "overBudgetDisclosed": false, + "nodeRows": 65, + "edgeRows": 0, + "factReviews": [ + { + "id": "jsoup-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No constructor assignment establishes reference sharing." + }, + { + "id": "jsoup-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No complete new-shell/copy/output-settings-clone sequence is shown." + }, + { + "id": "jsoup-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No safe-tag and safe-attribute predicates are shown." + }, + { + "id": "jsoup-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No parsing and combined discarded-count/error-list condition is shown." + } + ] + }, + { + "repository": "redux", + "tool": "compass", + "stdoutSha256": "d30483e834045767618774140ade72fac87144bd43938a2360ab005ba9681235", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutBytes": 7997, + "byteDivFourTokenEstimate": 2000, + "responseStatus": "RESULT needs_resolution \u00b7 match=ambiguous \u00b7 execution=partial \u00b7 coverage=incomplete", + "truncationDisclosed": true, + "overBudgetDisclosed": false, + "nodeRows": 64, + "edgeRows": 16, + "factReviews": [ + { + "id": "redux-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No enhancer validation and invocation chain is shown." + }, + { + "id": "redux-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No reducer update and finally-reset sequence is shown." + }, + { + "id": "redux-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No copy-on-write plus captured listener iteration is shown." + }, + { + "id": "redux-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No complete returned store and observable adapter implementation is shown." + } + ] + }, + { + "repository": "redux", + "tool": "graphify", + "stdoutSha256": "ba6c21a04ee4f7d720ee74726dd4551ce982429d97ade961ce50db31ef9a58da", + "stderrSha256": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "stdoutBytes": 6609, + "byteDivFourTokenEstimate": 1653, + "responseStatus": "graph traversal context", + "truncationDisclosed": true, + "overBudgetDisclosed": false, + "nodeRows": 81, + "edgeRows": 0, + "factReviews": [ + { + "id": "redux-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No enhancer validation and invocation chain is shown." + }, + { + "id": "redux-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No reducer update and finally-reset sequence is shown." + }, + { + "id": "redux-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No copy-on-write plus captured listener iteration is shown." + }, + { + "id": "redux-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "No complete returned store and observable adapter implementation is shown." + } + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "stdoutSha256": "4e0658ae31900521385690c31083b617977c322a9af823faf5f17505ad63be49", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdoutBytes": 7988, + "byteDivFourTokenEstimate": 1997, + "responseStatus": "RESULT needs_resolution \u00b7 match=ambiguous \u00b7 execution=partial \u00b7 coverage=unknown", + "truncationDisclosed": true, + "overBudgetDisclosed": false, + "nodeRows": 64, + "edgeRows": 20, + "factReviews": [ + { + "id": "walkdir-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "Types and method edges do not establish stack iteration, depth guard and error-return behavior." + }, + { + "id": "walkdir-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "A push-to-close edge does not establish max_open, oldest-stream selection or close-before-open ordering." + }, + { + "id": "walkdir-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "Call edges do not establish the directory-only guard, ancestor comparison or error condition." + }, + { + "id": "walkdir-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "Method edges do not establish contents_first and depth predicates or deferred-entry ordering." + } + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "stdoutSha256": "729cd0be188021d0e815f4167dd547728feb812a8a497f638f9164f86f3028be", + "stderrSha256": "5819273003575662cf88b98550563254d739ebd612abe4ee788c1bc4e15a1ceb", + "stdoutBytes": 26609, + "byteDivFourTokenEstimate": 6653, + "responseStatus": "graph traversal context", + "truncationDisclosed": false, + "overBudgetDisclosed": true, + "nodeRows": 111, + "edgeRows": 244, + "factReviews": [ + { + "id": "walkdir-1", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "Types and method edges do not establish stack iteration, depth guard and error-return behavior." + }, + { + "id": "walkdir-2", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "A push-to-close edge does not establish max_open, oldest-stream selection or close-before-open ordering." + }, + { + "id": "walkdir-3", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "Call edges do not establish the directory-only guard, ancestor comparison or error condition." + }, + { + "id": "walkdir-4", + "explicitCorrectAnswer": false, + "sufficientReturnedEvidence": false, + "reason": "Method edges do not establish contents_first and depth predicates or deferred-entry ordering." + } + ] + } + ], + "interpretation": [ + "Both products primarily return graph context in this arm. Omitted full facts are not fabricated answers; useful declaration locations and partial graph evidence remain present.", + "The single-request 2000-token arm does not evaluate source-reading or disambiguation follow-ups. Compass explain advertises digest-verified source; Graphify explain/get_node or an agent source-reading workflow must be assessed separately rather than ruled out from query output.", + "Graphify WalkDir explicitly reports a complete answer over budget. Its full 26609-byte response is retained and reviewed, not silently clipped. Equal requested budgets did not produce equal output size. Byte-divided-by-four estimates are evaluator accounting, not a claim about either tool internal estimator.", + "Four Compass responses request resolution; the Click response reports candidates. This is incomplete task evidence, not a successful guess.", + "No wrong task-level prose assertion was identified because these responses do not assert the 20 implementation mechanisms. Extra node and edge assertions are not exhaustively source-reviewed; precision remains unmeasured." + ], + "postOutputDiagnostics": [ + { + "repository": "walkdir", + "tool": "graphify", + "classification": "wrong internal call target", + "source": "src_lib_intoiter_get_deferred_dir", + "target": "src_lib_intoiter_pop", + "reportedSite": "src/lib.rs:L889", + "actualReceiver": "self.deferred_dirs, declared Vec at src/lib.rs:598", + "targetDefinition": "IntoIter::pop at src/lib.rs:950 mutates IntoIter stacks; it is not Vec::pop", + "explanation": "The displayed edge assigns the Vec receiver call inside get_deferred_dir to a same-named method on the enclosing IntoIter. The source declares the receiver field as Vec.", + "compassObservation": "No corresponding edge to IntoIter::pop; Compass retains the source-supported get_deferred_dir -> skippable call. Absence of the wrong internal edge does not recover or score the external Vec call.", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "graphSha256": { + "compass": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "graphify": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd" + }, + "scope": "Selected after output inspection; one diagnosed false target, not a comparative precision estimate.", + "sourceWitnesses": [ + { + "file": "src/lib.rs", + "startLine": 598, + "endLine": 598, + "text": " deferred_dirs: Vec," + }, + { + "file": "src/lib.rs", + "startLine": 884, + "endLine": 898, + "text": " fn get_deferred_dir(&mut self) -> Option {\n if self.opts.contents_first {\n if self.depth < self.deferred_dirs.len() {\n // Unwrap is safe here because we've guaranteed that\n // `self.deferred_dirs.len()` can never be less than 1\n let deferred: DirEntry = self\n .deferred_dirs\n .pop()\n .expect(\"BUG: deferred_dirs should be non-empty\");\n if !self.skippable() {\n return Some(deferred);\n }\n }\n }\n None" + }, + { + "file": "src/lib.rs", + "startLine": 950, + "endLine": 959, + "text": " fn pop(&mut self) {\n self.stack_list.pop().expect(\"BUG: cannot pop from empty stack\");\n if self.opts.follow_links {\n self.stack_path.pop().expect(\"BUG: list/path stacks out of sync\");\n }\n // If everything in the stack is already closed, then there is\n // room for at least one more open descriptor and it will\n // always be at the top of the stack.\n self.oldest_opened = min(self.oldest_opened, self.stack_list.len());\n }" + } + ], + "wrongStoredEdge": { + "source": "src_lib_intoiter_get_deferred_dir", + "target": "src_lib_intoiter_pop", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/lib.rs", + "source_location": "L889", + "weight": 1.0 + } + } + ], + "remainingWork": [ + "Review additional graph assertions, starting with the complete 244-edge WalkDir response, before any precision claim.", + "Evaluate a symmetric bounded source-reading/disambiguation workflow using only information returned by each tool.", + "Diagnose Compass owner specificity and answer-budget allocation against independent positive and negative cases.", + "Extend actual responsibility and community judgments beyond the small Chi pilot and include plausible positive cases and independent review." + ], + "limitations": [ + "The 20 frozen fact judgments are complete. Full source precision over every returned graph assertion is incomplete; the extra WalkDir diagnosis is a post-output case.", + "Top-level CLI help and installed Graphify get_node/explain implementation were inspected after the first query capture. This review does not claim that native query is intended to synthesize a prose explanation." + ] +} diff --git a/benchmarks/agent_query/responsibility_source_followup_panel_a.json b/benchmarks/agent_query/responsibility_source_followup_panel_a.json new file mode 100644 index 000000000..65ef05cc7 --- /dev/null +++ b/benchmarks/agent_query/responsibility_source_followup_panel_a.json @@ -0,0 +1,225 @@ +{ + "schema": "compass.responsibility-source-followup/1", + "scope": "Post-query development follow-up, selected and frozen before reading the bounded source windows. This measures an agent workflow using graph-returned anchors, not a native-only answer.", + "sourceQuestionCommit": "232608ee", + "inputCapture": "responsibility-explanation-01", + "policy": { + "allowedReadsPerResponse": 1, + "sourceBytesPerRead": 8000, + "maxSourceFileBytes": 4194304, + "selection": "Match the exact supplied subject against terminal displayed NODE names, ignoring the display-only () suffix. Exclude explicit file/module containers. All returned matching anchors are retained. Read only if they all identify one file; do not resolve a declaration ambiguity by picking one candidate.", + "window": "Read a contiguous byte window beginning at the earliest returned matching line in that one file. Retain all distinct declaration lines and disclose truncation; this window origin does not select a declaration as the answer.", + "oracleSeparation": "No graph-file lookup or source oracle range participates in selecting the file or window. Source facts are used only after capture for evidence judgment.", + "safety": "Require a repository-relative regular file contained beneath the pinned checkout, within the file-size bound, with a valid returned line. No mutations of input repositories.", + "scoring": "Rejudge the same 20 facts for sufficient combined query-plus-source evidence; distinguish observed code from a synthesized explanation. Record actual source bytes and initial response bytes separately. Preserve declaration ambiguity, omissions and incomplete reads.", + "limitations": [ + "A single contiguous source read is one bounded agent policy, not a best-possible workflow.", + "Window position and declaration multiplicity affect coverage. Further disambiguation, wider reads and native explain/get_node workflows remain outside this arm.", + "Neither equal requested query budgets nor this follow-up imply equal prior response sizes.", + "No god-object label, community quality judgment, latency claim or broad superiority conclusion follows." + ] + }, + "requests": [ + { + "repository": "chi", + "tool": "compass", + "subject": "Mux", + "inputSha256": "37657db8665dda901e0e3befbd557c0987c833bc18c6e6722ae004b7c4e27bbf", + "anchors": [ + { + "label": "chi.Mux", + "file": "mux.go", + "line": 21, + "kind": "struct", + "returnedRow": "NODE chi.Mux [struct] mux.go:21:5-48:1" + } + ], + "fileSelection": "unique-file", + "selectedFile": "mux.go", + "startLine": 21 + }, + { + "repository": "chi", + "tool": "graphify", + "subject": "Mux", + "inputSha256": "1bf6c1ffd510f5a1183367edaba6fb6a7a66764cd9a658fdaa9cfa3eeff6b52f", + "anchors": [ + { + "label": "Mux", + "file": "mux.go", + "line": 21, + "kind": "displayed-node", + "returnedRow": "NODE Mux [src=mux.go loc=L21 community=3]" + } + ], + "fileSelection": "unique-file", + "selectedFile": "mux.go", + "startLine": 21 + }, + { + "repository": "click", + "tool": "compass", + "subject": "_AtomicFile", + "inputSha256": "09d1dab6c20017246f8e36ffe47f45c995cdf3b8f9d2e4fa9717f843769cdaf3", + "anchors": [ + { + "label": "src.click._compat._AtomicFile", + "file": "src/click/_compat.py", + "line": 455, + "kind": "class", + "returnedRow": "NODE src.click._compat._AtomicFile [class] src/click/_compat.py:455:0-488:28" + } + ], + "fileSelection": "unique-file", + "selectedFile": "src/click/_compat.py", + "startLine": 455 + }, + { + "repository": "click", + "tool": "graphify", + "subject": "_AtomicFile", + "inputSha256": "f8e7ae3aae06a943c686f3cd5f94cc7c7ea1f7da243ef8aa1ff35b5984564da5", + "anchors": [ + { + "label": "_AtomicFile", + "file": "src/click/_compat.py", + "line": 455, + "kind": "displayed-node", + "returnedRow": "NODE _AtomicFile [src=src/click/_compat.py loc=L455 community=86]" + } + ], + "fileSelection": "unique-file", + "selectedFile": "src/click/_compat.py", + "startLine": 455 + }, + { + "repository": "jsoup", + "tool": "compass", + "subject": "Cleaner", + "inputSha256": "51bcb6e5217ff0bb974a18fb07a6b636d7a2b67c2ed5641c5da5ad1acf6c5a94", + "anchors": [ + { + "label": "org.jsoup.safety.Cleaner", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 43, + "kind": "class", + "returnedRow": "NODE org.jsoup.safety.Cleaner [class] src/main/java/org/jsoup/safety/Cleaner.java:43:0-247:1" + } + ], + "fileSelection": "unique-file", + "selectedFile": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 43 + }, + { + "repository": "jsoup", + "tool": "graphify", + "subject": "Cleaner", + "inputSha256": "21db49e7171f06bfa3b36559f63a622705673ca94869932c49389803f09829c2", + "anchors": [ + { + "label": "Cleaner", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 43, + "kind": "displayed-node", + "returnedRow": "NODE Cleaner [src=src/main/java/org/jsoup/safety/Cleaner.java loc=L43 community=129]" + } + ], + "fileSelection": "unique-file", + "selectedFile": "src/main/java/org/jsoup/safety/Cleaner.java", + "startLine": 43 + }, + { + "repository": "redux", + "tool": "compass", + "subject": "createStore", + "inputSha256": "d30483e834045767618774140ade72fac87144bd43938a2360ab005ba9681235", + "anchors": [ + { + "label": "createStore.createStore", + "file": "src/createStore.ts", + "line": 75, + "kind": "function", + "returnedRow": "NODE createStore.createStore [function] src/createStore.ts:75:7-85:61" + }, + { + "label": "createStore.createStore", + "file": "src/createStore.ts", + "line": 86, + "kind": "function", + "returnedRow": "NODE createStore.createStore [function] src/createStore.ts:86:7-395:1" + }, + { + "label": "createStore.createStore", + "file": "src/createStore.ts", + "line": 41, + "kind": "function", + "returnedRow": "NODE createStore.createStore [function] src/createStore.ts:41:7-49:61" + } + ], + "fileSelection": "unique-file", + "selectedFile": "src/createStore.ts", + "startLine": 41 + }, + { + "repository": "redux", + "tool": "graphify", + "subject": "createStore", + "inputSha256": "ba6c21a04ee4f7d720ee74726dd4551ce982429d97ade961ce50db31ef9a58da", + "anchors": [ + { + "label": "createStore()", + "file": "src/createStore.ts", + "line": 86, + "kind": "displayed-node", + "returnedRow": "NODE createStore() [src=src/createStore.ts loc=L86 community=25]" + } + ], + "fileSelection": "unique-file", + "selectedFile": "src/createStore.ts", + "startLine": 86 + }, + { + "repository": "walkdir", + "tool": "compass", + "subject": "IntoIter", + "inputSha256": "4e0658ae31900521385690c31083b617977c322a9af823faf5f17505ad63be49", + "anchors": [ + { + "label": "::IntoIter", + "file": "src/lib.rs", + "line": 538, + "kind": "type_alias", + "returnedRow": "NODE ::IntoIter [type_alias] src/lib.rs:538:4-538:29" + }, + { + "label": "walkdir::IntoIter", + "file": "src/lib.rs", + "line": 566, + "kind": "struct", + "returnedRow": "NODE walkdir::IntoIter [struct] src/lib.rs:566:0-606:1" + } + ], + "fileSelection": "unique-file", + "selectedFile": "src/lib.rs", + "startLine": 538 + }, + { + "repository": "walkdir", + "tool": "graphify", + "subject": "IntoIter", + "inputSha256": "729cd0be188021d0e815f4167dd547728feb812a8a497f638f9164f86f3028be", + "anchors": [ + { + "label": "IntoIter", + "file": "src/lib.rs", + "line": 566, + "kind": "displayed-node", + "returnedRow": "NODE IntoIter [src=src/lib.rs loc=L566 community=2]" + } + ], + "fileSelection": "unique-file", + "selectedFile": "src/lib.rs", + "startLine": 566 + } + ] +} diff --git a/benchmarks/agent_query/responsibility_source_followup_review_panel_a.json b/benchmarks/agent_query/responsibility_source_followup_review_panel_a.json new file mode 100644 index 000000000..17f96d17a --- /dev/null +++ b/benchmarks/agent_query/responsibility_source_followup_review_panel_a.json @@ -0,0 +1,807 @@ +{ + "schema": "compass.responsibility-source-followup-review/1", + "scope": "Development agent workflow over frozen native query outputs, with one source window selected only from returned subject anchors. This scores evidence coverage, not a synthesized explanation or native-only capability.", + "protocolCommit": "62f60b29", + "questionCommit": "232608ee", + "protocolSha256": "c5d87cf360d18dc8406b4308ae0e767399332f1ed2c23fbe77813a84d7807e85", + "questionsSha256": "608314dcd5e0a9e40fc7c6b8dd9d44026ba6a9b001e881fa8504fe44cc1fc7b2", + "captureSha256": "34b67bc4046b387e51d6cbe098f0a232e930ba14bfc64e7789a92dbb3729eb8d", + "collectorSha256": "c718e82c0d726c36d920d5791fe705a93a715c5aec6cfb6dd56cf22c0fa7010e", + "reviewerScriptSha256": "c067cbb4f3936b0fe048d63d2018f9f1f7a75f0cb3d8764ad6f7b840b920ba88", + "artifactRoot": "responsibility-source-followup-01", + "metrics": { + "compass": { + "requests": 5, + "successfulReads": 5, + "totalFacts": 20, + "sufficientCombinedEvidenceFacts": 11, + "fullFrozenWitnessContainmentFacts": 10, + "sourceBytes": 35692, + "queryBytes": 39740, + "combinedBytes": 75432 + }, + "graphify": { + "requests": 5, + "successfulReads": 5, + "totalFacts": 20, + "sufficientCombinedEvidenceFacts": 13, + "fullFrozenWitnessContainmentFacts": 12, + "sourceBytes": 35692, + "queryBytes": 53306, + "combinedBytes": 88998 + } + }, + "reviews": [ + { + "repository": "chi", + "tool": "compass", + "sourceFile": "mux.go", + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "sourceSha256": "f5eb1cd7b656cc6b9aba3fc9960085e33c03bb100cf91babb273c23ca62f9f60", + "querySha256": "37657db8665dda901e0e3befbd557c0987c833bc18c6e6722ae004b7c4e27bbf", + "queryBytes": 7949, + "sourceBytes": 8000, + "startLine": 21, + "lastCompleteLine": 258, + "partialLastLine": true, + "truncated": true, + "declarationLines": [ + 21 + ], + "declarationAmbiguityRetained": false, + "factReviews": [ + { + "id": "chi-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": false, + "reason": "Middleware slice construction and the inline Mux pool/tree assignments are visible through line 258. The full frozen witness extends to the return at 262, but that return is not required by this fact.", + "witnesses": [ + { + "startLine": 242, + "endLine": 262, + "fullyContained": false + } + ] + }, + { + "id": "chi-2", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The computed-handler guard and panic are fully visible.", + "witnesses": [ + { + "startLine": 100, + "endLine": 106, + "fullyContained": true + } + ] + }, + { + "id": "chi-3", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The Route construct/configure/mount sequence lies outside the window.", + "witnesses": [ + { + "startLine": 278, + "endLine": 287, + "fullyContained": false + } + ] + }, + { + "id": "chi-4", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The routeHTTP lookup and handler invocation lie outside the window.", + "witnesses": [ + { + "startLine": 476, + "endLine": 493, + "fullyContained": false + } + ] + } + ] + }, + { + "repository": "chi", + "tool": "graphify", + "sourceFile": "mux.go", + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "sourceSha256": "f5eb1cd7b656cc6b9aba3fc9960085e33c03bb100cf91babb273c23ca62f9f60", + "querySha256": "1bf6c1ffd510f5a1183367edaba6fb6a7a66764cd9a658fdaa9cfa3eeff6b52f", + "queryBytes": 6571, + "sourceBytes": 8000, + "startLine": 21, + "lastCompleteLine": 258, + "partialLastLine": true, + "truncated": true, + "declarationLines": [ + 21 + ], + "declarationAmbiguityRetained": false, + "factReviews": [ + { + "id": "chi-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": false, + "reason": "Middleware slice construction and the inline Mux pool/tree assignments are visible through line 258. The full frozen witness extends to the return at 262, but that return is not required by this fact.", + "witnesses": [ + { + "startLine": 242, + "endLine": 262, + "fullyContained": false + } + ] + }, + { + "id": "chi-2", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The computed-handler guard and panic are fully visible.", + "witnesses": [ + { + "startLine": 100, + "endLine": 106, + "fullyContained": true + } + ] + }, + { + "id": "chi-3", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The Route construct/configure/mount sequence lies outside the window.", + "witnesses": [ + { + "startLine": 278, + "endLine": 287, + "fullyContained": false + } + ] + }, + { + "id": "chi-4", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The routeHTTP lookup and handler invocation lie outside the window.", + "witnesses": [ + { + "startLine": 476, + "endLine": 493, + "fullyContained": false + } + ] + } + ] + }, + { + "repository": "click", + "tool": "compass", + "sourceFile": "src/click/_compat.py", + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "sourceSha256": "4224d55c98fa278ba766260c4a781363ce4ad082ca7f0e0c981dbdf2e1bd6ba8", + "querySha256": "09d1dab6c20017246f8e36ffe47f45c995cdf3b8f9d2e4fa9717f843769cdaf3", + "queryBytes": 7868, + "sourceBytes": 3692, + "startLine": 455, + "lastCompleteLine": 590, + "partialLastLine": false, + "truncated": false, + "declarationLines": [ + 455 + ], + "declarationAmbiguityRetained": false, + "factReviews": [ + { + "id": "click-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The wrapper assignments and name property are fully visible.", + "witnesses": [ + { + "startLine": 455, + "endLine": 464, + "fullyContained": true + } + ] + }, + { + "id": "click-2", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The closed guard, wrapped close, replace and final closed assignment are fully visible.", + "witnesses": [ + { + "startLine": 466, + "endLine": 471, + "fullyContained": true + } + ] + }, + { + "id": "click-3", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The __getattr__ forwarding body is fully visible.", + "witnesses": [ + { + "startLine": 473, + "endLine": 474, + "fullyContained": true + } + ] + }, + { + "id": "click-4", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "Both __exit__ and close are fully visible. The delete argument is passed but not inspected; no rollback is inferred.", + "witnesses": [ + { + "startLine": 466, + "endLine": 471, + "fullyContained": true + }, + { + "startLine": 479, + "endLine": 485, + "fullyContained": true + } + ] + } + ] + }, + { + "repository": "click", + "tool": "graphify", + "sourceFile": "src/click/_compat.py", + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "sourceSha256": "4224d55c98fa278ba766260c4a781363ce4ad082ca7f0e0c981dbdf2e1bd6ba8", + "querySha256": "f8e7ae3aae06a943c686f3cd5f94cc7c7ea1f7da243ef8aa1ff35b5984564da5", + "queryBytes": 6850, + "sourceBytes": 3692, + "startLine": 455, + "lastCompleteLine": 590, + "partialLastLine": false, + "truncated": false, + "declarationLines": [ + 455 + ], + "declarationAmbiguityRetained": false, + "factReviews": [ + { + "id": "click-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The wrapper assignments and name property are fully visible.", + "witnesses": [ + { + "startLine": 455, + "endLine": 464, + "fullyContained": true + } + ] + }, + { + "id": "click-2", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The closed guard, wrapped close, replace and final closed assignment are fully visible.", + "witnesses": [ + { + "startLine": 466, + "endLine": 471, + "fullyContained": true + } + ] + }, + { + "id": "click-3", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The __getattr__ forwarding body is fully visible.", + "witnesses": [ + { + "startLine": 473, + "endLine": 474, + "fullyContained": true + } + ] + }, + { + "id": "click-4", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "Both __exit__ and close are fully visible. The delete argument is passed but not inspected; no rollback is inferred.", + "witnesses": [ + { + "startLine": 466, + "endLine": 471, + "fullyContained": true + }, + { + "startLine": 479, + "endLine": 485, + "fullyContained": true + } + ] + } + ] + }, + { + "repository": "jsoup", + "tool": "compass", + "sourceFile": "src/main/java/org/jsoup/safety/Cleaner.java", + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "sourceSha256": "78894b0c859a7e9de0ee6f7fb6d1c84bfff8a23e22e00247c8dd65f3b22a20a7", + "querySha256": "51bcb6e5217ff0bb974a18fb07a6b636d7a2b67c2ed5641c5da5ad1acf6c5a94", + "queryBytes": 7938, + "sourceBytes": 8000, + "startLine": 43, + "lastCompleteLine": 205, + "partialLastLine": true, + "truncated": true, + "declarationLines": [ + 43 + ], + "declarationAmbiguityRetained": false, + "factReviews": [ + { + "id": "jsoup-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The constructor validation and reference assignment are fully visible.", + "witnesses": [ + { + "startLine": 50, + "endLine": 53, + "fullyContained": true + } + ] + }, + { + "id": "jsoup-2", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The separate shell, safe-node copy and cloned output settings are fully visible.", + "witnesses": [ + { + "startLine": 62, + "endLine": 70, + "fullyContained": true + } + ] + }, + { + "id": "jsoup-3", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The safe-tag predicate and beginning of attribute processing are visible, but the window stops before the destination attribute write and rejection branch. Partial evidence is not full credit.", + "witnesses": [ + { + "startLine": 148, + "endLine": 158, + "fullyContained": true + }, + { + "startLine": 188, + "endLine": 209, + "fullyContained": false + } + ] + }, + { + "id": "jsoup-4", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The fragment parse, discarded-count check and error-list condition are fully visible.", + "witnesses": [ + { + "startLine": 124, + "endLine": 133, + "fullyContained": true + } + ] + } + ] + }, + { + "repository": "jsoup", + "tool": "graphify", + "sourceFile": "src/main/java/org/jsoup/safety/Cleaner.java", + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "sourceSha256": "78894b0c859a7e9de0ee6f7fb6d1c84bfff8a23e22e00247c8dd65f3b22a20a7", + "querySha256": "21db49e7171f06bfa3b36559f63a622705673ca94869932c49389803f09829c2", + "queryBytes": 6667, + "sourceBytes": 8000, + "startLine": 43, + "lastCompleteLine": 205, + "partialLastLine": true, + "truncated": true, + "declarationLines": [ + 43 + ], + "declarationAmbiguityRetained": false, + "factReviews": [ + { + "id": "jsoup-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The constructor validation and reference assignment are fully visible.", + "witnesses": [ + { + "startLine": 50, + "endLine": 53, + "fullyContained": true + } + ] + }, + { + "id": "jsoup-2", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The separate shell, safe-node copy and cloned output settings are fully visible.", + "witnesses": [ + { + "startLine": 62, + "endLine": 70, + "fullyContained": true + } + ] + }, + { + "id": "jsoup-3", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The safe-tag predicate and beginning of attribute processing are visible, but the window stops before the destination attribute write and rejection branch. Partial evidence is not full credit.", + "witnesses": [ + { + "startLine": 148, + "endLine": 158, + "fullyContained": true + }, + { + "startLine": 188, + "endLine": 209, + "fullyContained": false + } + ] + }, + { + "id": "jsoup-4", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The fragment parse, discarded-count check and error-list condition are fully visible.", + "witnesses": [ + { + "startLine": 124, + "endLine": 133, + "fullyContained": true + } + ] + } + ] + }, + { + "repository": "redux", + "tool": "compass", + "sourceFile": "src/createStore.ts", + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "sourceSha256": "99c188e06d6c029273e0f8184ea284b31093e5d76f4d0ccf648c1527272b37d7", + "querySha256": "d30483e834045767618774140ade72fac87144bd43938a2360ab005ba9681235", + "queryBytes": 7997, + "sourceBytes": 8000, + "startLine": 41, + "lastCompleteLine": 264, + "partialLastLine": true, + "truncated": true, + "declarationLines": [ + 41, + 75, + 86 + ], + "declarationAmbiguityRetained": true, + "factReviews": [ + { + "id": "redux-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The enhancer validation and delegation sequence are fully visible.", + "witnesses": [ + { + "startLine": 121, + "endLine": 134, + "fullyContained": true + } + ] + }, + { + "id": "redux-2", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The reducer update and finally-reset sequence are visible only in the Graphify-selected window.", + "witnesses": [ + { + "startLine": 293, + "endLine": 302, + "fullyContained": false + } + ] + }, + { + "id": "redux-3", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "Copy-on-write listener mutation is visible in both windows; the captured-map iteration is visible only in the Graphify-selected window.", + "witnesses": [ + { + "startLine": 152, + "endLine": 159, + "fullyContained": true + }, + { + "startLine": 221, + "endLine": 243, + "fullyContained": true + }, + { + "startLine": 304, + "endLine": 307, + "fullyContained": false + } + ] + }, + { + "id": "redux-4", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The returned store and observable adapter lie outside both windows.", + "witnesses": [ + { + "startLine": 344, + "endLine": 394, + "fullyContained": false + } + ] + } + ] + }, + { + "repository": "redux", + "tool": "graphify", + "sourceFile": "src/createStore.ts", + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "sourceSha256": "8899477008d515644d77990476a8191d2bb5cd271be011fdbc7aae20560e9418", + "querySha256": "ba6c21a04ee4f7d720ee74726dd4551ce982429d97ade961ce50db31ef9a58da", + "queryBytes": 6609, + "sourceBytes": 8000, + "startLine": 86, + "lastCompleteLine": 307, + "partialLastLine": true, + "truncated": true, + "declarationLines": [ + 86 + ], + "declarationAmbiguityRetained": false, + "factReviews": [ + { + "id": "redux-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The enhancer validation and delegation sequence are fully visible.", + "witnesses": [ + { + "startLine": 121, + "endLine": 134, + "fullyContained": true + } + ] + }, + { + "id": "redux-2", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The reducer update and finally-reset sequence are visible only in the Graphify-selected window.", + "witnesses": [ + { + "startLine": 293, + "endLine": 302, + "fullyContained": true + } + ] + }, + { + "id": "redux-3", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "Copy-on-write listener mutation is visible in both windows; the captured-map iteration is visible only in the Graphify-selected window.", + "witnesses": [ + { + "startLine": 152, + "endLine": 159, + "fullyContained": true + }, + { + "startLine": 221, + "endLine": 243, + "fullyContained": true + }, + { + "startLine": 304, + "endLine": 307, + "fullyContained": true + } + ] + }, + { + "id": "redux-4", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The returned store and observable adapter lie outside both windows.", + "witnesses": [ + { + "startLine": 344, + "endLine": 394, + "fullyContained": false + } + ] + } + ] + }, + { + "repository": "walkdir", + "tool": "compass", + "sourceFile": "src/lib.rs", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceSha256": "d986270e959ecf66d941cbf9f5e7f0f35a657ad9dbe599f12e0857544bb270f3", + "querySha256": "4e0658ae31900521385690c31083b617977c322a9af823faf5f17505ad63be49", + "queryBytes": 7988, + "sourceBytes": 8000, + "startLine": 538, + "lastCompleteLine": 744, + "partialLastLine": true, + "truncated": true, + "declarationLines": [ + 538, + 566 + ], + "declarationAmbiguityRetained": true, + "factReviews": [ + { + "id": "walkdir-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The iterator stack, depth pruning and error return are fully visible.", + "witnesses": [ + { + "startLine": 699, + "endLine": 724, + "fullyContained": true + } + ] + }, + { + "id": "walkdir-2", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The max_open close-before-open implementation lies outside the window.", + "witnesses": [ + { + "startLine": 901, + "endLine": 911, + "fullyContained": false + } + ] + }, + { + "id": "walkdir-3", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The symlink directory guard and ancestor-handle loop check lie outside the window.", + "witnesses": [ + { + "startLine": 961, + "endLine": 989, + "fullyContained": false + } + ] + }, + { + "id": "walkdir-4", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The deferred-directory implementation and depth filtering lie outside the window.", + "witnesses": [ + { + "startLine": 873, + "endLine": 898, + "fullyContained": false + } + ] + } + ] + }, + { + "repository": "walkdir", + "tool": "graphify", + "sourceFile": "src/lib.rs", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "sourceSha256": "570c63a0958c223231fa862b28bb71d3d1ea276e68f1cd18c7cd8289a441789c", + "querySha256": "729cd0be188021d0e815f4167dd547728feb812a8a497f638f9164f86f3028be", + "queryBytes": 26609, + "sourceBytes": 8000, + "startLine": 566, + "lastCompleteLine": 772, + "partialLastLine": true, + "truncated": true, + "declarationLines": [ + 566 + ], + "declarationAmbiguityRetained": false, + "factReviews": [ + { + "id": "walkdir-1", + "sufficientCombinedEvidence": true, + "fullFrozenWitnessContainment": true, + "reason": "The iterator stack, depth pruning and error return are fully visible.", + "witnesses": [ + { + "startLine": 699, + "endLine": 724, + "fullyContained": true + } + ] + }, + { + "id": "walkdir-2", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The max_open close-before-open implementation lies outside the window.", + "witnesses": [ + { + "startLine": 901, + "endLine": 911, + "fullyContained": false + } + ] + }, + { + "id": "walkdir-3", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The symlink directory guard and ancestor-handle loop check lie outside the window.", + "witnesses": [ + { + "startLine": 961, + "endLine": 989, + "fullyContained": false + } + ] + }, + { + "id": "walkdir-4", + "sufficientCombinedEvidence": false, + "fullFrozenWitnessContainment": false, + "reason": "The deferred-directory implementation and depth filtering lie outside the window.", + "witnesses": [ + { + "startLine": 873, + "endLine": 898, + "fullyContained": false + } + ] + } + ] + } + ], + "interpretation": [ + "All 40 tool/fact evidence judgments were reviewed. Manual semantic sufficiency credits Chi fact 1 from complete assignments before the partial line, while literal full-witness containment does not. Both measures are reported separately.", + "Graphify covers two additional Redux facts because its sole returned createStore anchor begins at implementation line 86. Compass retains overload lines 41 and 75 as well as implementation line 86, so the frozen earliest-anchor policy starts at 41. This is an observed workflow advantage under this policy, not a claim that dropping overload declarations is universally correct.", + "Compass WalkDir retains the associated type alias at line 538 and struct at 566. Neither declaration ambiguity was silently resolved. The policy selects a source window, not a winning declaration.", + "Each side returns 35692 source bytes. Initial query bytes differ, including Graphify WalkDir over-budget output, so combined payloads are 75432 and 88998 bytes. Actual disk reads also include bounded whole source files for validation and hashing; source payload bytes are not disk IO.", + "No synthesized prose answer or agent model was run. Source windows establish evidence available to an agent, not that either native query explained the facts.", + "One contiguous read is not a best-possible agent policy. Further source selection, disambiguation and native explain/get_node workflows remain unmeasured. This reused-repository panel is not held-out; graph precision, god-object diagnosis, functional community quality, latency and overall superiority remain unproven." + ] +} diff --git a/benchmarks/agent_query/review_source_first_three_language.py b/benchmarks/agent_query/review_source_first_three_language.py new file mode 100644 index 000000000..b29a8cfc0 --- /dev/null +++ b/benchmarks/agent_query/review_source_first_three_language.py @@ -0,0 +1,254 @@ +#!/usr/bin/env python3 +"""Verify the registered three-language run against source-bound call edges. + +The runner's text checks deliberately remain unchanged. This review gives a +path credit only when its actual output is a one-hop call between the pinned +declarations, rather than a structural path that happens to name both symbols. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import re +import subprocess +import tomllib +from pathlib import Path + + +FACTS = { + "litestream": ( + ("store.go", 715, "sendHeartbeatIfNeeded", "heartbeat.go", 68, "ShouldPing", 721), + ("store.go", 715, "sendHeartbeatIfNeeded", "heartbeat.go", 80, "RecordPing", 735), + ("store.go", 715, "sendHeartbeatIfNeeded", "heartbeat.go", 45, "Ping", 737), + ), + "fastapi": ( + ("fastapi/routing.py", 1225, "get_route_handler", "fastapi/routing.py", 375, "get_request_handler", 1232), + ), + "celld": ( + ("crates/celld/peer_auth.rs", 137, "signed_headers_parts", "crates/celld/peer_auth.rs", 341, "now_ms", 145), + ("crates/celld/peer_auth.rs", 137, "signed_headers_parts", "crates/celld/peer_auth.rs", 352, "sha256_hex_parts", 149), + ), +} + +QUESTION_FACTS = { + "litestream-callees-heartbeat": (0, 1, 2), + "litestream-callers-should-ping": (0,), + "litestream-path-heartbeat": (0,), + "fastapi-callees-route-handler": (0,), + "fastapi-callers-request-handler": (0,), + "fastapi-path-route-request": (0,), + "celld-callees-signed-headers": (0, 1), + "celld-callers-sha-parts": (1,), + "celld-path-signed-sha": (1,), +} + +DIRECT_PATH_LINES = { + "litestream-path-heartbeat": " .sendHeartbeatIfNeeded() --calls [EXTRACTED]--> .ShouldPing()", + "fastapi-path-route-request": " .get_route_handler() --calls [EXTRACTED]--> get_request_handler()", + "celld-path-signed-sha": " .signed_headers_parts() --calls [EXTRACTED]--> sha256_hex_parts()", +} + + +def sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as stream: + for chunk in iter(lambda: stream.read(1024 * 1024), b""): + digest.update(chunk) + return digest.hexdigest() + + +def git(root: Path, *args: str) -> str: + return subprocess.run( + ["git", "-C", str(root), *args], + check=True, + capture_output=True, + text=True, + ).stdout.strip() + + +def line_number(value: object) -> int | None: + if isinstance(value, int): + return value + if isinstance(value, str) and re.fullmatch(r"L\d+", value): + return int(value[1:]) + return None + + +def node_location(node: dict, tool: str) -> tuple[str | None, int | None]: + if tool == "compass": + source = node.get("source") or {} + return source.get("file"), line_number(source.get("startLine")) + return node.get("source_file"), line_number(node.get("source_location")) + + +def node_name(node: dict, tool: str) -> str: + if tool == "compass": + return node.get("qualifiedName", "").split("::")[-1].split(".")[-1] + return node.get("label", "").lstrip(".").removesuffix("()") + + +def exact_node(graph: dict, tool: str, file: str, line: int, symbol: str) -> dict: + matches = [ + node for node in graph["nodes"] + if node_location(node, tool) == (file, line) + and node_name(node, tool) == symbol + ] + if len(matches) != 1: + raise ValueError(f"{tool}: expected one {file}:{line} {symbol}, found {len(matches)}") + return matches[0] + + +def call_sites(graph: dict, tool: str, fact: tuple) -> list[dict]: + source_file, source_line, source_symbol, target_file, target_line, target_symbol, call_line = fact + source = exact_node(graph, tool, source_file, source_line, source_symbol) + target = exact_node(graph, tool, target_file, target_line, target_symbol) + return [ + edge for edge in graph["links"] + if edge["source"] == source["id"] + and edge["target"] == target["id"] + and edge.get("kind", edge.get("relation")) == "calls" + and ( + (edge.get("relationshipSite") or {}).get("file", edge.get("source_file")), + line_number((edge.get("relationshipSite") or {}).get("startLine", edge.get("source_location"))), + ) == (source_file, call_line) + ] + + +def direct_call_output(text: str, tool: str, identifier: str) -> bool: + header = "Best path (weighted, 1 hops" if tool == "compass" else "Shortest path (1 hops):" + return header in text and DIRECT_PATH_LINES[identifier] in text.splitlines() + + +def review(suite_path: Path, run_root: Path, sources: dict[str, Path]) -> dict: + suite = tomllib.loads(suite_path.read_text()) + run_path = run_root / "run.json" + run = json.loads(run_path.read_text()) + if sha256(suite_path) != run["suiteDigest"] or sha256(run_root / "suite.toml") != run["suiteDigest"]: + raise ValueError("suite bytes changed after registration") + if sha256(run_root / "runner.py") != run["runnerDigest"]: + raise ValueError("captured runner digest differs") + if set(sources) != set(FACTS): + raise ValueError("supply exactly the three registered source roots") + for tool in run["tools"]: + if sha256(Path(tool["binary"])) != tool["binarySha256"]: + raise ValueError(f"{tool['name']} binary digest changed") + + source_pins = [] + graphs = {} + graph_pins = [] + for repository in run["repositories"]: + name = repository["repository"] + root = sources[name] + registered = next(item for item in suite["repository"] if item["name"] == name) + if git(root, "rev-parse", "HEAD") != registered["commit"] or git(root, "status", "--porcelain=v1"): + raise ValueError(f"{name} checkout is not clean and pinned") + files = {fact[0] for fact in FACTS[name]} | {fact[3] for fact in FACTS[name]} + files |= {anchor["file"] for anchor in registered["anchor"]} + for file in sorted(files): + source_pins.append({"repository": name, "file": file, "sha256": sha256(root / file)}) + for anchor in registered["anchor"]: + line = (root / anchor["file"]).read_text().splitlines()[anchor["line"] - 1] + if anchor["symbol"] not in line: + raise ValueError(f"{name} source anchor changed: {anchor}") + for tool in ("compass", "graphify"): + path = Path(repository[f"{tool}Graph"]) + digest = repository[f"{tool}GraphSha256"] + if sha256(path) != digest: + raise ValueError(f"{name} {tool} graph digest changed") + graphs[(name, tool)] = json.loads(path.read_text()) + graph_pins.append({"repository": name, "tool": tool, "sha256": digest}) + + relationship_facts = [] + for name, facts in FACTS.items(): + root = sources[name] + for index, fact in enumerate(facts): + source_file, _, _, _, _, target_symbol, call_line = fact + line = (root / source_file).read_text().splitlines()[call_line - 1] + if target_symbol not in line: + raise ValueError(f"{name} call token absent at {source_file}:{call_line}") + counts = {tool: len(call_sites(graphs[(name, tool)], tool, fact)) for tool in ("compass", "graphify")} + relationship_facts.append({ + "repository": name, + "factIndex": index, + "sourceFile": source_file, + "callLine": call_line, + "caller": fact[2], + "callee": target_symbol, + "edgeCounts": counts, + }) + + fact_counts = {(fact["repository"], fact["factIndex"]): fact["edgeCounts"] for fact in relationship_facts} + expected_questions = { + (repository["name"], question["id"], tool) + for repository in suite["repository"] + for question in repository["question"] + for tool in ("compass", "graphify") + } + actual_questions = [(item["repository"], item["question"], item["tool"]) for item in run["observations"]] + if len(actual_questions) != len(expected_questions) or set(actual_questions) != expected_questions: + raise ValueError("run observations differ from the registered question/tool pairs") + questions = [] + totals = {"compass": 0, "graphify": 0} + for observation in run["observations"]: + name = observation["repository"] + tool = observation["tool"] + identifier = observation["question"] + raw = run_root / "raw" / name / f"{identifier}.{tool}.0.stdout" + text = raw.read_text() + if len(text.encode()) != observation["stdoutBytes"]: + raise ValueError(f"raw stdout byte count changed for {identifier} {tool}") + facts = QUESTION_FACTS.get(identifier, ()) + all_edges = all(fact_counts[(name, index)][tool] == 1 for index in facts) + direct_path = None + if observation["kind"] == "path": + direct_path = direct_call_output(text, tool, identifier) + supported = bool(observation["passed"] and all_edges and (direct_path is not False)) + totals[tool] += supported + questions.append({ + "repository": name, + "question": identifier, + "tool": tool, + "stdoutSha256": sha256(raw), + "registeredTextPass": observation["passed"], + "requiredCallEdgesPresent": all_edges, + "renderedDirectCallPath": direct_path, + "sourceSupportedPass": supported, + }) + return { + "schema": "compass.source-first-three-language-review/1", + "scope": "Selected source-first Go/Python/Rust development questions; source-grounded static calls, not runtime reachability, authored explanations, or whole-graph accuracy", + "registrationCommit": "ab93cd34", + "suiteSha256": run["suiteDigest"], + "runnerSha256": run["runnerDigest"], + "runJsonSha256": sha256(run_path), + "sourcePins": source_pins, + "graphPins": graph_pins, + "relationshipFacts": relationship_facts, + "questions": questions, + "totals": {"registeredText": {tool: sum(o["passed"] for o in run["observations"] if o["tool"] == tool) for tool in totals}, "sourceSupported": totals}, + "caveat": "A source-backed edge does not validate every other returned relationship or explanation claim. Short-name ambiguity remains a valid refusal; structural paths do not answer direct-call requests.", + } + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--suite", type=Path, required=True) + parser.add_argument("--run", type=Path, required=True) + parser.add_argument("--source", action="append", required=True, metavar="NAME=PATH") + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + sources = {} + for entry in args.source: + name, separator, path = entry.partition("=") + if not separator or name in sources: + raise ValueError("--source needs distinct NAME=PATH values") + sources[name] = Path(path) + result = review(args.suite, args.run, sources) + args.output.write_text(json.dumps(result, indent=2, sort_keys=True) + "\n") + print(json.dumps(result["totals"], sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/benchmarks/agent_query/route_hierarchy_fixture_review.json b/benchmarks/agent_query/route_hierarchy_fixture_review.json new file mode 100644 index 000000000..9d3e710b9 --- /dev/null +++ b/benchmarks/agent_query/route_hierarchy_fixture_review.json @@ -0,0 +1,555 @@ +{ + "schema": "compass.route-hierarchy-fixture-review/1", + "scope": "Post-output development audit prompted by the failed topology gate. This is source-reviewed negative containment evidence, not a community-quality improvement claim.", + "beforeBinarySha256": "bb09a5335c80fd7dd710e008b4a2f30f9403108e4883ed74e7d7c0de1b0aaca9", + "afterBinarySha256": "872aff05f6c1723d27ee96230a4e315d3f0d6e1849387de09530b907f0ff3f40", + "graphs": { + "before": "c5d0e63dda3dcec46c585bfc64906f43ea04edc0a5df05877294e8297b1d772c", + "after": "996ae5b52508a6b8b099624c0bb52163242d10e9a440a6d3a3a7203d3d2900d3" + }, + "sourceSha256": { + "fixtures/code-graph/frontend-react/src/routes/home.tsx": "4905d3a651b6ffb5fc16ede3834347c39d72bd599b417badce1f8e4f92145958", + "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx": "ea80d53e9689be9076843e4c85cfeb340361ee2e08462f67646d80b80b7c0c30", + "fixtures/code-graph/routes/jvm/SpringController.java": "11746a0979e1a02c71bab0621abc81167fcdd0fc08088c48f00222c47d6c5600", + "fixtures/code-graph/routes/jvm/SpringController.kt": "79081d811f27f6e6aa74f8130d6c781f3b0ed8ffd51c2be8d1a392c7f3b1b476", + "fixtures/code-graph/routes/php/drupal.module": "f4c01c09e78cc2a8e9fd1829c205a734964c30c0dedbf6193e1093cb9c98a654", + "fixtures/code-graph/routes/php/drupal.routing.yml": "609d4ce746dea221f0e2c0afff22be8a8d2e543e154c8afd228f3bcbdf6ca695", + "fixtures/code-graph/routes/python/fastapi_app.py": "56a7e6e730b3bccff2563e66cc631291988d767ec4f043fa537d266ff6d87e48", + "fixtures/code-graph/routes/python/fastapi_models.py": "09e845b782994eb4992cb5767e8af08d9bf6b09ee83904a2f96257017a3d804e", + "fixtures/code-graph/routes/python/flask_app.py": "1325c547854844ec8611d4489e0c644a6f89d452dae5691cff406a28e0740bb8", + "fixtures/code-graph/routes/python/flask_factory.py": "572095732ceff610d219898b919fedfb67d874134063ad410c8966cd568fc044", + "fixtures/code-graph/routes/typescript/express.ts": "79b18f7ac9df4a132f3e4547e6bf91ffe0e28910734a869b1e4aa07ed0c370e6", + "fixtures/code-graph/routes/typescript/owner-mismatch.ts": "e46dc1f0521c371f9db8d21d6673be9f56b650ea5dda4c7272de8eba8b0f5a58", + "fixtures/code-graph/routes/typescript/vue-router-qualified.ts": "5bd4ea29588c89bac3a8457230ce678f8f8cb2d0c9a9e3bbf888d5e1501c9a62", + "fixtures/code-graph/routes/typescript/vue-router.ts": "0b08f76e6b175cdb80aa999af1429b7fad096e4997903862606ce5aae7949106" + }, + "policyMethod": "For every existing bound, add exactly the observed metric change. Retain its previous margin; unchanged metrics and other relation thresholds remain unchanged. Add semantic negative assertions so restored false links cannot satisfy the adjusted floor.", + "policyChanges": [ + { + "bound": "minimums", + "metric": "communities", + "previous": 225, + "updated": 232, + "observedBefore": 225, + "observedAfter": 232 + }, + { + "bound": "minimums", + "metric": "edges", + "previous": 1284, + "updated": 1265, + "observedBefore": 1289, + "observedAfter": 1270 + }, + { + "bound": "minimums", + "metric": "exactCrossCommunityEdges", + "previous": 5, + "updated": 3, + "observedBefore": 5, + "observedAfter": 3 + }, + { + "bound": "minimums", + "metric": "exactCrossFileEdges", + "previous": 81, + "updated": 62, + "observedBefore": 81, + "observedAfter": 62 + }, + { + "bound": "minimums", + "metric": "exactCrossFileEdgesPerThousandNodes", + "previous": 63, + "updated": 48, + "observedBefore": 63, + "observedAfter": 48 + }, + { + "bound": "minimums", + "metric": "exactEdgeBearingNodePermille", + "previous": 711, + "updated": 709, + "observedBefore": 712, + "observedAfter": 710 + }, + { + "bound": "minimums", + "metric": "exactEdgeBearingNodes", + "previous": 908, + "updated": 905, + "observedBefore": 909, + "observedAfter": 906 + }, + { + "bound": "minimums", + "metric": "exactEdges", + "previous": 965, + "updated": 946, + "observedBefore": 970, + "observedAfter": 951 + }, + { + "bound": "minimums", + "metric": "exactUniqueTypedEndpointPairs", + "previous": 956, + "updated": 938, + "observedBefore": 961, + "observedAfter": 943 + }, + { + "bound": "minimums", + "metric": "exactUniqueTypedEndpointPairsPerThousandNodes", + "previous": 749, + "updated": 735, + "observedBefore": 753, + "observedAfter": 739 + }, + { + "bound": "minimums", + "metric": "uniqueTypedEndpointPairs", + "previous": 1261, + "updated": 1243, + "observedBefore": 1266, + "observedAfter": 1248 + }, + { + "bound": "maximums", + "metric": "communities", + "previous": 226, + "updated": 233, + "observedBefore": 225, + "observedAfter": 232 + }, + { + "bound": "maximums", + "metric": "connectedComponents", + "previous": 222, + "updated": 230, + "observedBefore": 221, + "observedAfter": 229 + }, + { + "bound": "maximums", + "metric": "exactConnectedComponents", + "previous": 496, + "updated": 504, + "observedBefore": 495, + "observedAfter": 503 + }, + { + "bound": "maximums", + "metric": "exactIsolatedNodes", + "previous": 368, + "updated": 371, + "observedBefore": 367, + "observedAfter": 370 + }, + { + "bound": "maximums", + "metric": "isolatedNodes", + "previous": 96, + "updated": 99, + "observedBefore": 95, + "observedAfter": 98 + }, + { + "bound": "maximums", + "metric": "singletonCommunities", + "previous": 96, + "updated": 99, + "observedBefore": 95, + "observedAfter": 98 + }, + { + "bound": "relationshipMinimums", + "relation": "contains", + "metric": "exactCrossFileEdges", + "previous": 31, + "updated": 12, + "observedBefore": 31, + "observedAfter": 12 + }, + { + "bound": "relationshipMinimums", + "relation": "contains", + "metric": "exactUniqueEndpointPairs", + "previous": 624, + "updated": 606, + "observedBefore": 624, + "observedAfter": 606 + } + ], + "nodeCountBefore": 1276, + "nodeCountAfter": 1276, + "removedEdges": 19, + "addedEdges": 0, + "reviewedFilePairs": [ + { + "id": "route-containment-independent-1", + "sourceFile": "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx", + "targetFile": "fixtures/code-graph/frontend-react/src/routes/home.tsx", + "reason": "The TanStack createFileRoute /tanstack and React Router /home belong to different route libraries. A shared source directory provides no cross-framework parentage." + }, + { + "id": "route-containment-independent-2", + "sourceFile": "fixtures/code-graph/routes/jvm/SpringController.kt", + "targetFile": "fixtures/code-graph/routes/jvm/SpringController.java", + "reason": "Independent annotated controllers in different packages declare /kotlin and /api mappings. The Kotlin method is not a containing route for Java endpoints." + }, + { + "id": "route-containment-independent-3", + "sourceFile": "fixtures/code-graph/routes/php/drupal.module", + "targetFile": "fixtures/code-graph/routes/php/drupal.routing.yml", + "reason": "The entity-type hook has an empty body. The YAML routes independently declare controllers and forms; the hook does not contain those routes." + }, + { + "id": "route-containment-independent-4", + "sourceFile": "fixtures/code-graph/routes/python/fastapi_models.py", + "targetFile": "fixtures/code-graph/routes/python/fastapi_app.py", + "reason": "The modules instantiate separate FastAPI apps. The models app does not include the other app or its router." + }, + { + "id": "route-containment-independent-5", + "sourceFile": "fixtures/code-graph/routes/python/flask_factory.py", + "targetFile": "fixtures/code-graph/routes/python/flask_app.py", + "reason": "The factory registers its own root and nested blueprints. flask_app.py creates a separate app and blueprint; no cross-module registration exists." + }, + { + "id": "route-containment-independent-6", + "sourceFile": "fixtures/code-graph/routes/typescript/owner-mismatch.ts", + "targetFile": "fixtures/code-graph/routes/typescript/express.ts", + "reason": "Each module creates its own Express app; neither imports or mounts the other. A route with an unresolved controller is not a parent router." + }, + { + "id": "route-containment-independent-7", + "sourceFile": "fixtures/code-graph/routes/typescript/vue-router-qualified.ts", + "targetFile": "fixtures/code-graph/routes/typescript/vue-router.ts", + "reason": "Both modules independently call createRouter. Neither route array declares the other route as a child or imports the other router." + }, + { + "id": "route-containment-independent-8", + "sourceFile": "fixtures/code-graph/routes/typescript/vue-router.ts", + "targetFile": "fixtures/code-graph/routes/typescript/vue-router-qualified.ts", + "reason": "Both modules independently call createRouter. Neither route array declares the other route as a child or imports the other router." + } + ], + "removed": [ + { + "id": "sha256:8a24a3e1586a437473ae82f930dae6ca39fd32ecf9600c2f252093a54c19e963", + "kind": "contains", + "source": { + "id": "sha256:31747cec456de803d757d886692e2e268de2569768044e867991b6ee5623f9a2", + "name": "HOOK /__hook/hook_entity_type_build", + "file": "fixtures/code-graph/routes/php/drupal.module" + }, + "target": { + "id": "sha256:ef45dc219f80b02c7241e501baff59ad91c3ea88b14f4369ace1d5eaf242fe81", + "name": "GET /examples/{example}", + "file": "fixtures/code-graph/routes/php/drupal.routing.yml" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:f4756f9a911e5e71c17d8afd492f0cf927a64958bc7aa4cadbf68d9cea1c4e6c", + "kind": "contains", + "source": { + "id": "sha256:31747cec456de803d757d886692e2e268de2569768044e867991b6ee5623f9a2", + "name": "HOOK /__hook/hook_entity_type_build", + "file": "fixtures/code-graph/routes/php/drupal.module" + }, + "target": { + "id": "sha256:983cc129463868a1905a68b07bab0e9d241d54c2ddd0b0e23937f7c219dd69ec", + "name": "POST /examples/{example}", + "file": "fixtures/code-graph/routes/php/drupal.routing.yml" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:ed771045b510289c247ca9a4014b0c5ff353852cdab247e2ccbb9d1e78bd65d8", + "kind": "contains", + "source": { + "id": "sha256:0a3207a7b24df9681cb70843ee162f7f951e83aeeb560ba0e42597f8891eacc0", + "name": "GET /owner-mismatch", + "file": "fixtures/code-graph/routes/typescript/owner-mismatch.ts" + }, + "target": { + "id": "sha256:d3678457e1f85c5c94c5a58afd5dd1c9cf9160609b234f8c535af9425370fa48", + "name": "GET /health", + "file": "fixtures/code-graph/routes/typescript/express.ts" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:f7da8b41b916fb876f33b65605294eae6cdce75f117185cf402d54756b98f572", + "kind": "contains", + "source": { + "id": "sha256:03b53164cd3261fbc51bc45b4a6c6d952cea02e26225fd800aa49bd27d50fe39", + "name": "GET /api/v2/nested/items", + "file": "fixtures/code-graph/routes/python/flask_factory.py" + }, + "target": { + "id": "sha256:2aed25182cf7d59918c8654ab2c78658ddcd329b1e03f5e52b975b51ba902bf0", + "name": "GET /health", + "file": "fixtures/code-graph/routes/python/flask_app.py" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:0b72aec3ee7a3f4bb8b19ff97729ba7fdd350c68202f68034e6fdf967c2611b2", + "kind": "contains", + "source": { + "id": "sha256:f5005321e07e17e404ea9bbba7343c4e60c7517cadc1592629a9c758ec86a85e", + "name": "POST /items", + "file": "fixtures/code-graph/routes/python/fastapi_models.py" + }, + "target": { + "id": "sha256:5f9ae35d36f7dd16a8d4d763c3f88816f77fe02acf3ff012a22ba36e5cb04d33", + "name": "GET /health", + "file": "fixtures/code-graph/routes/python/fastapi_app.py" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:d521141583f6cbc6c6543a685548d1e672915d16397dd55fd7d576af92125664", + "kind": "contains", + "source": { + "id": "sha256:0a3207a7b24df9681cb70843ee162f7f951e83aeeb560ba0e42597f8891eacc0", + "name": "GET /owner-mismatch", + "file": "fixtures/code-graph/routes/typescript/owner-mismatch.ts" + }, + "target": { + "id": "sha256:9725a055491222dc007332daecf4b701d91fd5327a179c86b14e9bc0e737a47c", + "name": "GET /users/{userId}", + "file": "fixtures/code-graph/routes/typescript/express.ts" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:0d87337f8f6e94e7b18f40974b6ce5fec3d58ca087236337eaa6c2d18fa6091b", + "kind": "contains", + "source": { + "id": "sha256:ad9386df4b43dc1f7852237db9c44e9eca9b86222d1bd11d595d8b66fd09a127", + "name": "PAGE /qualified-users/{userId}", + "file": "fixtures/code-graph/routes/typescript/vue-router-qualified.ts" + }, + "target": { + "id": "sha256:e9ef96b35cfb02ccfdb5eea2ac4165446687a320b400e5de3e15061fb381eb8e", + "name": "PAGE /users/{userId}", + "file": "fixtures/code-graph/routes/typescript/vue-router.ts" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:4a5ee04f212621f5d0d5ff45691b3f1fe8368bbeda6da51dc34adce9e6a2bcf0", + "kind": "contains", + "source": { + "id": "sha256:31747cec456de803d757d886692e2e268de2569768044e867991b6ee5623f9a2", + "name": "HOOK /__hook/hook_entity_type_build", + "file": "fixtures/code-graph/routes/php/drupal.module" + }, + "target": { + "id": "sha256:9c9289ce2a8c82c04b345c1f452fcfd6a2ae268684f33a7fc9d4c1b13754f7bc", + "name": "ANY /examples/create", + "file": "fixtures/code-graph/routes/php/drupal.routing.yml" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:2a520b3863453c75deee6b54ab5e5aeb3ca09d49bf7b3f705e9fcfb8a5854818", + "kind": "contains", + "source": { + "id": "sha256:a9e69502554bfe653b41fe1185c4f6a448712e537b7fdbda5a6cf2a81f4787dd", + "name": "PAGE /tanstack", + "file": "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx" + }, + "target": { + "id": "sha256:59be83b2ff81ea880e357d9d6ccd937e9dec254c2024007b77965f689a1f9eac", + "name": "PAGE /home", + "file": "fixtures/code-graph/frontend-react/src/routes/home.tsx" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:9917b3186cbd1dc5b45e4f44446a668e0ab89796e304898b78861dfe04d4b25f", + "kind": "contains", + "source": { + "id": "sha256:03b53164cd3261fbc51bc45b4a6c6d952cea02e26225fd800aa49bd27d50fe39", + "name": "GET /api/v2/nested/items", + "file": "fixtures/code-graph/routes/python/flask_factory.py" + }, + "target": { + "id": "sha256:a1ae0c1a00d2a542debb4c568d0900dfc453655cdff2292af9ec2468d182a481", + "name": "PATCH /v2/api/users/", + "file": "fixtures/code-graph/routes/python/flask_app.py" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:e5a10df87a64ab2084d736ba179ed87175c41f55f2f86e1c00cd2a7a46ece604", + "kind": "contains", + "source": { + "id": "sha256:03b53164cd3261fbc51bc45b4a6c6d952cea02e26225fd800aa49bd27d50fe39", + "name": "GET /api/v2/nested/items", + "file": "fixtures/code-graph/routes/python/flask_factory.py" + }, + "target": { + "id": "sha256:571a46cfb333dba3badf206a134af6845c6da92fa1f01e81ea1d1885853959d7", + "name": "GET /v2/api/users/", + "file": "fixtures/code-graph/routes/python/flask_app.py" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:46d7c9131d4c77f4e67b141ea7d7fa4d8a46ec0c09814c4a1075a678c8cb78f4", + "kind": "contains", + "source": { + "id": "sha256:e9ef96b35cfb02ccfdb5eea2ac4165446687a320b400e5de3e15061fb381eb8e", + "name": "PAGE /users/{userId}", + "file": "fixtures/code-graph/routes/typescript/vue-router.ts" + }, + "target": { + "id": "sha256:ad9386df4b43dc1f7852237db9c44e9eca9b86222d1bd11d595d8b66fd09a127", + "name": "PAGE /qualified-users/{userId}", + "file": "fixtures/code-graph/routes/typescript/vue-router-qualified.ts" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:25335c228bf1e7ae398a3185da1cb9717a3af24b10a3c53c3fc39d92e13d148b", + "kind": "contains", + "source": { + "id": "sha256:f5005321e07e17e404ea9bbba7343c4e60c7517cadc1592629a9c758ec86a85e", + "name": "POST /items", + "file": "fixtures/code-graph/routes/python/fastapi_models.py" + }, + "target": { + "id": "sha256:97e97c6afc09c04d4cbdd9e2ccfd59960853d42b5b727f2a66bb7792b766da6e", + "name": "POST /api/v1/users", + "file": "fixtures/code-graph/routes/python/fastapi_app.py" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:7291c23bc98246fd89978abd495625a22b141c6a878fa19ef55b060a5e229546", + "kind": "contains", + "source": { + "id": "sha256:0a3207a7b24df9681cb70843ee162f7f951e83aeeb560ba0e42597f8891eacc0", + "name": "GET /owner-mismatch", + "file": "fixtures/code-graph/routes/typescript/owner-mismatch.ts" + }, + "target": { + "id": "sha256:6dec9ec30252fed6272d1ec2500ce7f821bd3c882e42f0ebeef763c73dcda24c", + "name": "GET /inline", + "file": "fixtures/code-graph/routes/typescript/express.ts" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:9c0c7c7d6f16dd92e67e1b6a9b2d776d3f62632ceb9637605e70c1ad76dc08dc", + "kind": "contains", + "source": { + "id": "sha256:31747cec456de803d757d886692e2e268de2569768044e867991b6ee5623f9a2", + "name": "HOOK /__hook/hook_entity_type_build", + "file": "fixtures/code-graph/routes/php/drupal.module" + }, + "target": { + "id": "sha256:842f5ecf5ecdd18d4f5e6be3bb562b9930a541f6f1664eeabcc1eda94ac3a068", + "name": "ANY /examples/{example}/edit", + "file": "fixtures/code-graph/routes/php/drupal.routing.yml" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:c1a5582dc295b28dad519dceb9b12124e4607f5c372d3c84fa4a4f5c4d169e1c", + "kind": "contains", + "source": { + "id": "sha256:5a135bd0dce2b32b9893e4e454069aad0a7d673dfd8352b5762ce60a30aa7f68", + "name": "GET /kotlin/users/{id}", + "file": "fixtures/code-graph/routes/jvm/SpringController.kt" + }, + "target": { + "id": "sha256:d5eb9743f89a117f10c3b05b70d04e113f49716297269172538bed063779d3ee", + "name": "GET /api/users/{id}", + "file": "fixtures/code-graph/routes/jvm/SpringController.java" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:3bb04f97c57f0b1e72ff67e66c0fd11c1f4865c209e2fdf88ec5d85275acac29", + "kind": "contains", + "source": { + "id": "sha256:5a135bd0dce2b32b9893e4e454069aad0a7d673dfd8352b5762ce60a30aa7f68", + "name": "GET /kotlin/users/{id}", + "file": "fixtures/code-graph/routes/jvm/SpringController.kt" + }, + "target": { + "id": "sha256:48fe0e2047b3271abf3c55299e0892712c5e60d3991ed2ce39eabda335bdbcbf", + "name": "POST /api/users", + "file": "fixtures/code-graph/routes/jvm/SpringController.java" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:42aae14c6e91598ff3f885035583e8c91f12d0a670f90962a9b389d37e4c4e75", + "kind": "contains", + "source": { + "id": "sha256:5a135bd0dce2b32b9893e4e454069aad0a7d673dfd8352b5762ce60a30aa7f68", + "name": "GET /kotlin/users/{id}", + "file": "fixtures/code-graph/routes/jvm/SpringController.kt" + }, + "target": { + "id": "sha256:3f9b66f884632cdbdd79e3fe407331dc72e9a0c3d412a32ae86b1004ca193bba", + "name": "GET /api/search", + "file": "fixtures/code-graph/routes/jvm/SpringController.java" + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:8b5755396dd447c253358de8f724c098c181f00b741a21118e5ac594536266d2", + "kind": "contains", + "source": { + "id": "sha256:5a135bd0dce2b32b9893e4e454069aad0a7d673dfd8352b5762ce60a30aa7f68", + "name": "GET /kotlin/users/{id}", + "file": "fixtures/code-graph/routes/jvm/SpringController.kt" + }, + "target": { + "id": "sha256:b651ac57625fe598aba29f95645bf2289ef559e6d9bd15fa79e0eda464ad1aac", + "name": "POST /api/search", + "file": "fixtures/code-graph/routes/jvm/SpringController.java" + }, + "rule": "framework-route-hierarchy" + } + ], + "verification": { + "nodesUnchangedExceptCommunity": true, + "fixtureSourceHashesMatch": true, + "beforeNegativeGroupsRejected": 8, + "afterNegativeGroupsPassed": 7, + "afterNegativeGroupsFailed": 1, + "syntheticOracleMutationRestorationsRejected": 20, + "fullGate": "FAILED at the original topology floor. After recalibration, direct semantic qualification still FAILS at the new independent-route negative. No full rerun is claimed.", + "scriptTestsPassed": 87, + "benchmarkTestsPassed": 97, + "binaryHashesVerified": true + }, + "remainingDefect": { + "edgeId": "sha256:be0806a621daff555e8e36c37ba605edfbf50402e8d893ab6360c06feb84182c", + "sourceFile": "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx", + "sourceQualifiedName": "react-router::PAGE::/tanstack", + "targetFile": "fixtures/code-graph/frontend-react/src/routes/home.tsx", + "targetQualifiedName": "react-router::PAGE::/home", + "reason": "The two flat route modules are siblings. No source declaration makes /tanstack a parent of /home. The convention route is selected by first-other-file directory order, then a ghost endpoint is remapped to the AST route.", + "oracleLimitation": "scripts/react_frontend_source_oracle.mjs routeParent also chooses the first other module in the directory. Agreement with that oracle cannot independently validate this hierarchy.", + "nextAction": "Replace first-file parent selection with source-proven framework-specific parent semantics and independently specified positive/negative fixtures. Keep this semantic gate failing until production removes the unsupported link." + }, + "artifactSha256": { + "route-hierarchy-qualification-01.log": "fb880d5c10aca15aaff2762d35cc09a70f3c362aaf8bd428f8b27454eedea74f", + "route-hierarchy-fixture-delta/delta.json": "b98afa7cc1da425f212385908b70bcdc4cce1afe1a915df973081d43575915e5", + "route-hierarchy-fixture-delta/negative-mutation-review.json": "256513d62837ed8732c85eb616c0c1b473270eeb974c16862cfbf1130bd70f6c", + "route-hierarchy-scripts-tests-02.log": "b28b3dfe94e84e839b1fcb95551d01fe25e4a5e08eaa47b050d8fabad308d4c0", + "route-hierarchy-benchmark-tests-03.log": "5be8ffa2d27722ed8412725739af389097cb2feaad59fa212f1dc1a41f0a06ea", + "route-hierarchy-fixture-delta/semantic-after.capture.json": "35530c742eb9587126ea5bfb452c355294314579d6b9b67e334256bd779c8fb5", + "route-hierarchy-fixture-delta/topology-after.json": "c856007a49d188476c316ca8a4fab5a4a383cd0dee4290a47725b0c97c13d12c" + } +} diff --git a/benchmarks/agent_query/runner.py b/benchmarks/agent_query/runner.py index 2b3ffcbfe..0d0947c63 100644 --- a/benchmarks/agent_query/runner.py +++ b/benchmarks/agent_query/runner.py @@ -25,22 +25,23 @@ import os from pathlib import Path import re -import shutil import signal import subprocess import sys import time +import threading import tomllib SUITE_SCHEMA = "compass.agent-query-suite/1" -RUN_SCHEMA = "compass.agent-query-run/1" +RUN_SCHEMA = "compass.agent-query-run/2" +GRAPH_ANCHOR_POLICY = "exact-file-start-terminal-symbol/1" TOKEN_BYTES = 4 MAX_OUTPUT_BYTES = 16 * 1024 * 1024 DEFAULT_TIMEOUT_SECONDS = 60.0 _COMMIT = re.compile(r"^[0-9a-f]{40}$") _SHA256 = re.compile(r"sha256:[0-9a-f]{64}") -_CURSOR = re.compile(r"next=([^\s]+)") +_CURSOR = re.compile(r"^Pagination:[^\r\n]*[ \t]next=([^\s]+)[ \t]*\r?$", re.MULTILINE) _GRAPHIFY_NODE = re.compile(r"^NODE (.+?) \[src=(\S+) loc=L(\d+)", re.MULTILINE) _GRAPHIFY_CANDIDATE = re.compile(r"^\s+id: (\S+)", re.MULTILINE) _COMPASS_ENTITY = re.compile(r"^- (\S+) \[[a-z_]+\] \S+:\d", re.MULTILINE) @@ -314,6 +315,7 @@ class CommandResult: stderr_bytes: int stdout: str stderr: str + output_limited: bool = False def run_bounded( @@ -328,32 +330,52 @@ def run_bounded( stdout_path.parent.mkdir(parents=True, exist_ok=True) started = time.monotonic() timed_out = False - with stdout_path.open("wb") as stdout_stream, stderr_path.open("wb") as stderr_stream: - process = subprocess.Popen( - argv, - cwd=cwd, - stdout=stdout_stream, - stderr=stderr_stream, - start_new_session=True, - ) + exceeded = threading.Event() + capture_errors: list[Exception] = [] + process = subprocess.Popen( + argv, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + start_new_session=True, + ) + + def capture(pipe, path: Path) -> None: try: - process.wait(timeout=timeout_seconds) - except subprocess.TimeoutExpired: - timed_out = True + with pipe, path.open("wb") as stream: + remaining = MAX_OUTPUT_BYTES + while chunk := pipe.read1(64 * 1024): + stream.write(chunk[:remaining]) + if len(chunk) > remaining: + exceeded.set() + return + remaining -= len(chunk) + except Exception as error: + capture_errors.append(error) + exceeded.set() + + readers = [ + threading.Thread(target=capture, args=(process.stdout, stdout_path), daemon=True), + threading.Thread(target=capture, args=(process.stderr, stderr_path), daemon=True), + ] + for reader in readers: + reader.start() + while process.poll() is None or any(reader.is_alive() for reader in readers): + if exceeded.is_set() or time.monotonic() - started >= timeout_seconds: + timed_out = not exceeded.is_set() try: - os.killpg(process.pid, signal.SIGTERM) - process.wait(timeout=5) - except (ProcessLookupError, subprocess.TimeoutExpired): - try: - os.killpg(process.pid, subprocess.signal.SIGKILL) - except ProcessLookupError: - pass - process.wait() + os.killpg(process.pid, signal.SIGKILL) + except ProcessLookupError: + pass + break + time.sleep(0.01) + process.wait(timeout=5) + for reader in readers: + reader.join(timeout=5) + if capture_errors or any(reader.is_alive() for reader in readers): + raise RuntimeError(f"incomplete subprocess output capture: {capture_errors}") wall_ms = int((time.monotonic() - started) * 1000) stdout_bytes = stdout_path.stat().st_size stderr_bytes = stderr_path.stat().st_size - stdout = stdout_path.read_bytes()[:MAX_OUTPUT_BYTES].decode("utf-8", errors="replace") - stderr = stderr_path.read_bytes()[:MAX_OUTPUT_BYTES].decode("utf-8", errors="replace") + stdout = stdout_path.read_bytes().decode("utf-8", errors="replace") + stderr = stderr_path.read_bytes().decode("utf-8", errors="replace") return CommandResult( argv=argv, exit_code=process.returncode, @@ -363,6 +385,7 @@ def run_bounded( stderr_bytes=stderr_bytes, stdout=stdout, stderr=stderr, + output_limited=exceeded.is_set(), ) @@ -483,6 +506,22 @@ def _tool_argv( return tuple(base) +def _accepted_exit(question: Question, tool: str, result: CommandResult) -> bool: + if result.exit_code == 0: + return True + # Graphify 0.9.67's explain command explicitly exits 1 for an ambiguity + # list. This is a valid pick-list outcome, not an execution failure. The + # independent candidate/anchor oracle must still pass before crediting it. + return ( + result.exit_code == 1 + and tool == "graphify" + and question.expect == "pick_list" + and question.graphify[:1] == ("explain",) + and result.stdout.startswith("Ambiguous:") + and _candidate_count(tool, result.stdout) >= 2 + ) + + def run_question( repository: Repository, question: Question, @@ -508,6 +547,7 @@ def run_question( failures: tuple[str, ...] = ("not executed",) passed = False pages: list[str] = [] + seen_cursors: set[str] = set() for attempt in range(question.max_follow_ups + 1): argv = (str(binary), *_tool_argv(tool, question, graph, budget=budget, cursor=cursor)) stem = f"{question.identifier}.{tool}.{attempt}" @@ -527,6 +567,15 @@ def run_question( pages.append(result.stdout) aggregate = "\n".join(pages) attempt_pass, attempt_failures = judge(question, tool, aggregate) + if result.output_limited: + attempt_pass = False + attempt_failures += ("command output limit exceeded",) + elif result.timed_out: + attempt_pass = False + attempt_failures += ("command timed out",) + elif not _accepted_exit(question, tool, result): + attempt_pass = False + attempt_failures += (f"command exited {result.exit_code}",) if attempt == 0: first_page_tokens = tokens first_page_pass = attempt_pass @@ -537,13 +586,16 @@ def run_question( failures = attempt_failures if attempt == question.max_follow_ups: break - if result.timed_out or result.exit_code != 0: + if result.output_limited or result.timed_out or result.exit_code != 0: break if tool == "compass": - match = _CURSOR.search(result.stdout) - if match is None: + # A source excerpt can contain `next=...`; only one actual footer + # can authorize continuation. `none` is the end marker, not a token. + matches = _CURSOR.findall(result.stdout) + if len(matches) != 1 or matches[0] == "none" or matches[0] in seen_cursors: break - cursor = match.group(1) + cursor = matches[0] + seen_cursors.add(cursor) else: if question.kind != "broad": # Graphify documents a continuation for `query` only: it re-runs @@ -579,10 +631,7 @@ def _compass_graph(artifact_root: Path) -> Path: graph = output / "snapshots" / snapshot / "graph.json" if graph.is_file(): return graph - candidates = sorted(output.glob("snapshots/*/graph.json")) - if not candidates: - raise RuntimeError(f"no Compass graph under {output}") - return candidates[-1] + raise RuntimeError(f"invalid or missing published Compass snapshot under {output}") def _graphify_graph(artifact_root: Path) -> Path: @@ -599,62 +648,60 @@ def prepare_repository( *, compass_binary: Path, graphify_binary: Path, - force: bool, timeout_seconds: float, ) -> dict: root = artifacts / repository.name compass_root = root / "compass" graphify_root = root / "graphify" record: dict[str, object] = {"repository": repository.name, "source": str(source)} - if force: - for path in (compass_root, graphify_root): - if path.exists(): - shutil.rmtree(path) - if not (compass_root / "compass-out").is_dir(): - started = time.monotonic() - result = run_bounded( - ( - str(compass_binary), - "extract", - str(source), - "--code-only", - "--no-viz", - "--store", - "sqlite", - "--out", - str(compass_root), - ), - cwd=source, - timeout_seconds=timeout_seconds, - stdout_path=root / "compass-build.stdout", - stderr_path=root / "compass-build.stderr", - ) - record["compassBuildMs"] = int((time.monotonic() - started) * 1000) - record["compassBuildExit"] = result.exit_code - record["compassBuildReport"] = result.stdout.strip().splitlines()[-3:] - if result.exit_code != 0: - raise RuntimeError(f"Compass extract failed for {repository.name}: {result.stderr[-2000:]}") - if not (graphify_root / "graphify-out" / "graph.json").is_file(): - started = time.monotonic() - result = run_bounded( - ( - str(graphify_binary), - "extract", - str(source), - "--code-only", - "--out", - str(graphify_root), - ), - cwd=source, - timeout_seconds=timeout_seconds, - stdout_path=root / "graphify-build.stdout", - stderr_path=root / "graphify-build.stderr", - ) - record["graphifyBuildMs"] = int((time.monotonic() - started) * 1000) - record["graphifyBuildExit"] = result.exit_code - record["graphifyBuildReport"] = result.stdout.strip().splitlines()[-3:] - if result.exit_code != 0: - raise RuntimeError(f"Graphify extract failed for {repository.name}: {result.stderr[-2000:]}") + # Every run owns fresh artifacts. Never infer build provenance from a path. + root.mkdir(parents=True, exist_ok=False) + record["commit"] = repository.commit + started = time.monotonic() + result = run_bounded( + ( + str(compass_binary), + "extract", + str(source), + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + str(compass_root), + ), + cwd=source, + timeout_seconds=timeout_seconds, + stdout_path=root / "compass-build.stdout", + stderr_path=root / "compass-build.stderr", + ) + record["compassBuildMs"] = int((time.monotonic() - started) * 1000) + record["compassBuildExit"] = result.exit_code + record["compassBuildArgv"] = list(result.argv) + record["compassBuildReport"] = result.stdout.strip().splitlines()[-3:] + if result.output_limited or result.timed_out or result.exit_code != 0: + raise RuntimeError(f"Compass extract failed for {repository.name}: {result.stderr[-2000:]}") + started = time.monotonic() + result = run_bounded( + ( + str(graphify_binary), + "extract", + str(source), + "--code-only", + "--out", + str(graphify_root), + ), + cwd=source, + timeout_seconds=timeout_seconds, + stdout_path=root / "graphify-build.stdout", + stderr_path=root / "graphify-build.stderr", + ) + record["graphifyBuildMs"] = int((time.monotonic() - started) * 1000) + record["graphifyBuildExit"] = result.exit_code + record["graphifyBuildArgv"] = list(result.argv) + record["graphifyBuildReport"] = result.stdout.strip().splitlines()[-3:] + if result.output_limited or result.timed_out or result.exit_code != 0: + raise RuntimeError(f"Graphify extract failed for {repository.name}: {result.stderr[-2000:]}") compass_graph = _compass_graph(compass_root) graphify_graph = _graphify_graph(graphify_root) record["compassGraph"] = str(compass_graph) @@ -664,35 +711,47 @@ def prepare_repository( return record +def _terminal_symbol(value: object) -> str: + """Compare declaration names, not substrings or enclosing source spans. + + A pinned file and exact declaration start distinguish overloads. Both tools + may omit qualification or parameter text, so those are not scored as proof + of owner identity or signature accuracy. + """ + if not isinstance(value, str): + return "" + name = value.split("(", 1)[0].strip() + return name.replace("::", ".").rsplit(".", 1)[-1] + + +def _node_anchor(node: dict, tool: str) -> tuple[str | None, int | None, set[str]]: + if tool == "compass": + source = node.get("source") + source = source if isinstance(source, dict) else {} + file = source.get("file") + line = source.get("startLine") + names = (node.get("name"), node.get("qualifiedName"), node.get("label")) + elif tool == "graphify": + file = node.get("source_file") + location = node.get("source_location") + match = re.fullmatch(r"L([0-9]+)", location) if isinstance(location, str) else None + line = int(match[1]) if match else None + names = (node.get("label"), node.get("name"), node.get("qualifiedName")) + else: + raise ValueError(f"unsupported graph metric tool {tool!r}") + # bool is an int subclass in Python; it is never a valid source line. + line = line if type(line) is int and line > 0 else None + file = file if isinstance(file, str) and file else None + return file, line, {name for value in names if (name := _terminal_symbol(value))} + + def graph_metrics(repository: Repository, tool: str, graph: Path) -> dict: document = json.loads(graph.read_text(encoding="utf-8")) nodes = document.get("nodes", []) edges = document.get("edges") or document.get("links") or [] - if tool == "compass": - identifiers = [node.get("id") for node in nodes] - sourced = sum(1 for node in nodes if (node.get("source") or {}).get("file")) - locations = [ - ( - (node.get("source") or {}).get("file"), - (node.get("source") or {}).get("startLine"), - (node.get("source") or {}).get("endLine"), - ) - for node in nodes - ] - else: - identifiers = [node.get("id") for node in nodes] - sourced = sum(1 for node in nodes if node.get("source_file")) - locations = [] - for node in nodes: - file = node.get("source_file") - location = node.get("source_location") - line = None - if isinstance(location, str) and location.startswith("L"): - try: - line = int(location[1:]) - except ValueError: - line = None - locations.append((file, line, line)) + identifiers = [node.get("id") for node in nodes] + locations = [_node_anchor(node, tool) for node in nodes] + sourced = sum(1 for file, _, _ in locations if file) known = {identifier for identifier in identifiers if isinstance(identifier, str)} dangling = 0 for edge in edges: @@ -702,17 +761,21 @@ def graph_metrics(repository: Repository, tool: str, graph: Path) -> dict: dangling += 1 duplicates = len(identifiers) - len(known) anchor_hits = 0 + missing_anchors = [] for anchor in repository.anchors: - for file, start, end in locations: - if file != anchor.file or start is None: - continue - stop = end if isinstance(end, int) else start - if isinstance(start, int) and start <= anchor.line <= stop: - anchor_hits += 1 - break + symbol = _terminal_symbol(anchor.symbol) + matched = bool(symbol) and any( + file == anchor.file and line == anchor.line and symbol in names + for file, line, names in locations + ) + if matched: + anchor_hits += 1 + else: + missing_anchors.append({"file": anchor.file, "line": anchor.line, "symbol": anchor.symbol}) return { "tool": tool, "graph": str(graph), + "anchorPolicy": GRAPH_ANCHOR_POLICY, "nodes": len(nodes), "edges": len(edges), "sourceBackedNodes": sourced, @@ -721,6 +784,7 @@ def graph_metrics(repository: Repository, tool: str, graph: Path) -> dict: "duplicateIds": duplicates, "anchorHits": anchor_hits, "anchorTotal": len(repository.anchors), + "missingAnchors": missing_anchors, } @@ -753,9 +817,18 @@ def render_report(run: dict) -> str: lines.append("document for their text budgets; `answer tokens` sums every response the") lines.append("reviewed workflow needed, including documented follow-up pages.") lines.append("") - lines.append("## Graph quality") + lines.append("## Graph coverage metadata") + lines.append("") + policies = sorted({m.get("anchorPolicy", "legacy-file-line-coverage") for m in run["graphMetrics"]}) + lines.append("Graph anchor policies: " + ", ".join(f"`{policy}`" for policy in policies) + ".") + if policies == [GRAPH_ANCHOR_POLICY]: + lines.append("A reviewed graph anchor requires the exact file, declaration start line,") + lines.append("and terminal symbol name on both tools. Enclosing file/module spans do not count.") + else: + lines.append("Legacy graph-anchor scores did not check symbol names and are not comparable to the new policy.") + lines.append("Source-located counts describe metadata presence, not verified source correctness.") lines.append("") - lines.append("| Repository | Language | Tool | Nodes | Edges | Source-backed | Dangling | Duplicate IDs | Reviewed anchors |") + lines.append("| Repository | Language | Tool | Nodes | Edges | Source-located | Dangling | Duplicate IDs | Reviewed anchors |") lines.append("| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |") for metrics in run["graphMetrics"]: lines.append( @@ -773,7 +846,7 @@ def render_report(run: dict) -> str: ) ) lines.append("") - lines.append("## Query results") + lines.append("## Query text-oracle results") lines.append("") lines.append("| Repository | Question | Kind | Compass | C tokens | G tokens | Compass ms | Graphify ms |") lines.append("| --- | --- | --- | --- | ---: | ---: | ---: | ---: |") @@ -835,7 +908,7 @@ def render_report(run: dict) -> str: lines.append(f"- Token efficiency (median answer tokens): {verdict['tokens']}") lines.append(f"- Token efficiency (paired answers only): {verdict['pairedTokens']}") lines.append(f"- Oracle split: {verdict['split']}") - lines.append(f"- Graph quality (source-backed ratio and reviewed anchors): {verdict['graphQuality']}") + lines.append(f"- Graph coverage metadata (source locations and reviewed anchors): {verdict['graphQuality']}") lines.append("") lines.append("## Limits") lines.append("") @@ -843,7 +916,9 @@ def render_report(run: dict) -> str: lines.append(" not an independent precision oracle.") lines.append("- `graphify` prints an installation warning on stderr; the report counts stdout") lines.append(" only and records stderr separately in `run.json`.") - lines.append("- The suite is a focused sample of five repositories and does not estimate") + count = len(run["repositories"]) + noun = "repository" if count == 1 else "repositories" + lines.append(f"- The suite is a focused sample of {count} {noun} and does not estimate") lines.append(" population-wide accuracy.") lines.append("") return "\n".join(lines) @@ -896,28 +971,17 @@ def _aggregate(run: dict) -> None: f"Graphify leads ({graphify['passed']}/{graphify['questions']} vs " f"{compass['passed']}/{compass['questions']})" ) - if graphify["medianAnswerTokens"] and compass["medianAnswerTokens"]: - ratio = graphify["medianAnswerTokens"] / compass["medianAnswerTokens"] - if compass["medianAnswerTokens"] <= graphify["medianAnswerTokens"]: - verdict["tokens"] = ( - f"Compass is cheaper per answered question " - f"({compass['medianAnswerTokens']:.0f} vs {graphify['medianAnswerTokens']:.0f} tokens, " - f"{ratio:.2f}x)" - ) - else: - verdict["tokens"] = ( - f"Graphify is cheaper per answered question " - f"({graphify['medianAnswerTokens']:.0f} vs {compass['medianAnswerTokens']:.0f} tokens, " - f"{1 / ratio:.2f}x)" - ) - else: - verdict["tokens"] = "Not comparable: one tool has no passing answers" + verdict["tokens"] = ( + f"Unpaired medians: Compass {compass['medianAnswerTokens']:.0f}, " + f"Graphify {graphify['medianAnswerTokens']:.0f} estimated tokens; " + "these can cover different passing questions and do not establish a cost advantage" + ) both = paired["all"] if both["bothPassed"]: verdict["pairedTokens"] = ( - f"On the {both['bothPassed']} questions both tools answered, Compass costs " + f"On the {both['bothPassed']} questions both tools passed, Compass uses " f"{both['medianCompassTokens']:.0f} tokens and Graphify " - f"{both['medianGraphifyTokens']:.0f} tokens (median)" + f"{both['medianGraphifyTokens']:.0f} estimated tokens (median)" ) else: verdict["pairedTokens"] = "No question was answered by both tools" @@ -935,7 +999,7 @@ def _aggregate(run: dict) -> None: compass_ratio = compass_sourced / compass_nodes if compass_nodes else 0.0 graphify_ratio = graphify_sourced / graphify_nodes if graphify_nodes else 0.0 verdict["graphQuality"] = ( - f"Compass {compass_ratio:.1%} source-backed and {compass_anchors} reviewed anchors vs " + f"Compass {compass_ratio:.1%} source-located and {compass_anchors} reviewed anchors vs " f"Graphify {graphify_ratio:.1%} and {graphify_anchors}" ) run["verdict"] = verdict @@ -1017,7 +1081,9 @@ def _tool_identity(name: str, binary: Path) -> dict: return { "name": name, "binary": str(binary), + # For a script this identifies the launcher, not its imported packages. "binarySha256": _sha256_file(binary), + "digestScope": "executable-file-only", "version": version_text, } @@ -1028,10 +1094,39 @@ def _parse_sources(values: list[str] | None) -> dict[str, Path]: name, separator, path = value.partition("=") if not separator or not name or not path: raise SystemExit(f"--source must be NAME=PATH, got {value!r}") - sources[name] = Path(path) + sources[name] = Path(path).resolve() return sources +def _verify_source(repository: Repository, source: Path) -> None: + bare = subprocess.run( + ("git", "rev-parse", "--is-bare-repository"), cwd=source, check=True, + stdout=subprocess.PIPE, text=True, timeout=30, + ).stdout.strip() + if bare != "false": + raise RuntimeError(f"{repository.name}: source must be a working checkout, not a bare repository") + head = subprocess.run( + ("git", "rev-parse", "HEAD"), cwd=source, check=True, + stdout=subprocess.PIPE, text=True, timeout=30, + ).stdout.strip() + if head != repository.commit: + raise RuntimeError( + f"{repository.name}: checkout HEAD {head} does not match pinned {repository.commit}" + ) + status = subprocess.run( + ("git", "status", "--porcelain", "--untracked-files=normal"), + cwd=source, check=True, stdout=subprocess.PIPE, text=True, timeout=30, + ).stdout + if status: + raise RuntimeError(f"{repository.name}: evaluation requires a clean pinned checkout") + for anchor in repository.anchors: + if not (source / anchor.file).is_file(): + raise RuntimeError( + f"{repository.name}: source root lacks reviewed source file {anchor.file}; " + "choose the suite's package root" + ) + + def execute(args: argparse.Namespace) -> int: suite = load_suite(args.suite) repositories = [ @@ -1042,12 +1137,28 @@ def execute(args: argparse.Namespace) -> int: if not repositories: raise SystemExit("no repositories selected") sources = _parse_sources(args.source) + for repository in repositories: + if repository.name not in sources and args.corpus_root is not None: + sources[repository.name] = (args.corpus_root / repository.name).resolve() + source = sources.get(repository.name) + if source is None or not source.is_dir(): + raise SystemExit(f"{repository.name}: pass --source {repository.name}=PATH or --corpus-root") + _verify_source(repository, source) workspace = args.workspace.resolve() - artifacts = workspace / "artifacts" stamp = args.run_id or datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ") + if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9._-]*", stamp): + raise SystemExit("--run-id must be a single safe directory name") run_root = workspace / "runs" / stamp + artifacts = run_root / "artifacts" raw_root = run_root / "raw" - run_root.mkdir(parents=True, exist_ok=True) + run_root.mkdir(parents=True, exist_ok=False) + runner_digest = _sha256_file(Path(__file__)) + (run_root / "runner.py").write_bytes(Path(__file__).read_bytes()) + (run_root / "suite.toml").write_bytes(suite.path.read_bytes()) + tools = [ + _tool_identity("compass", args.compass_binary), + _tool_identity("graphify", args.graphify_binary), + ] started = datetime.now(timezone.utc).isoformat() prepared: list[dict] = [] metrics: list[dict] = [] @@ -1058,24 +1169,13 @@ def execute(args: argparse.Namespace) -> int: source = args.corpus_root / repository.name if source is None or not source.is_dir(): raise SystemExit(f"{repository.name}: pass --source {repository.name}=PATH or --corpus-root") - head = subprocess.run( - ("git", "rev-parse", "HEAD"), - cwd=source, - check=True, - stdout=subprocess.PIPE, - text=True, - ).stdout.strip() - if head != repository.commit: - raise SystemExit( - f"{repository.name}: checkout HEAD {head} does not match pinned {repository.commit}" - ) + _verify_source(repository, source) record = prepare_repository( repository, source, artifacts, compass_binary=args.compass_binary, graphify_binary=args.graphify_binary, - force=args.force, timeout_seconds=args.build_timeout, ) prepared.append(record) @@ -1109,16 +1209,23 @@ def execute(args: argparse.Namespace) -> int: + (f" {list(observation.failures)}" if not observation.passed else ""), flush=True, ) + _verify_source(repository, source) + current_tools = [ + _tool_identity("compass", args.compass_binary), + _tool_identity("graphify", args.graphify_binary), + ] + if _sha256_file(Path(__file__)) != runner_digest: + raise RuntimeError("runner changed during evaluation; refusing to publish scores") + if current_tools != tools: + raise RuntimeError("tool identity changed during evaluation; refusing to publish scores") run = { "schema": RUN_SCHEMA, "runId": stamp, "startedAt": started, "completedAt": datetime.now(timezone.utc).isoformat(), "suiteDigest": suite.digest, - "tools": [ - _tool_identity("compass", args.compass_binary), - _tool_identity("graphify", args.graphify_binary), - ], + "runnerDigest": runner_digest, + "tools": tools, "repositories": prepared, "graphMetrics": metrics, "questions": [ @@ -1158,12 +1265,11 @@ def doctor(args: argparse.Namespace) -> int: print(f"{repository.name}: missing source (pass --source {repository.name}=PATH)") failures += 1 continue - head = subprocess.run( - ("git", "rev-parse", "HEAD"), cwd=source, check=True, stdout=subprocess.PIPE, text=True - ).stdout.strip() - status = "pinned" if head == repository.commit else f"HEAD {head} != {repository.commit}" - print(f"{repository.name}: {source} ({status})") - if head != repository.commit: + try: + _verify_source(repository, source) + print(f"{repository.name}: {source} (clean and pinned)") + except (RuntimeError, subprocess.SubprocessError) as error: + print(f"{repository.name}: {error}") failures += 1 return 1 if failures else 0 @@ -1202,7 +1308,7 @@ def build_parser() -> argparse.ArgumentParser: run_parser.add_argument("--workspace", type=Path, required=True) run_parser.add_argument("--run-id") run_parser.add_argument("--repository", action="append") - run_parser.add_argument("--force", action="store_true", help="rebuild both graphs") + run_parser.add_argument("--force", action="store_true", help="deprecated compatibility flag; every run builds fresh graphs") run_parser.add_argument("--build-timeout", type=float, default=1800.0) run_parser.add_argument("--query-timeout", type=float, default=DEFAULT_TIMEOUT_SECONDS) run_parser.set_defaults(handler=execute) diff --git a/benchmarks/agent_query/rust_index_receiver_development_registration.json b/benchmarks/agent_query/rust_index_receiver_development_registration.json new file mode 100644 index 000000000..05cb33ec6 --- /dev/null +++ b/benchmarks/agent_query/rust_index_receiver_development_registration.json @@ -0,0 +1,19 @@ +{ + "schema": "compass.rust-index-receiver-development-registration/1", + "scope": "Development correction of the previously reviewed WalkDir IntoIter.push -> DirList.close miss. The five repositories and all questions are reused development inputs, not held-out evidence or a broad precision score.", + "baselineRun": "runs/java-varargs-panel-a-02/run.json", + "baselineRunSha256": "c2bc04366343fbd32bbdf84ccfb1db7aaad2e2ed38b38f979065c6755432d792", + "baselineNavigation": "community-identity-navigation-02/capture.json", + "baselineNavigationSha256": "50910af023897886c683fcffc9228ef894303f56659c42030c573e9b92b7a3f9", + "repositories": ["chi", "click", "jsoup", "redux", "walkdir"], + "buildPolicy": "Rebuild all five Compass graphs from the exact baseline source commits with the same native-only extract arguments, into fresh external output directories. Retain the frozen Graphify graphs byte-for-byte; this arm does not compare extraction timing. Check every source checkout before and after. Preserve all old graphs.", + "graphReview": "Compare all added/removed Compass call edges by source ID, target ID, relation and source anchor, preserving multiplicity. Review every changed call edge against the pinned source, including wrong targets and deferred records. Report other node/edge changes. A recovered expected call alone is not sufficient evidence of precision.", + "navigationPolicy": "Reuse community_identity_navigation_panel_a.json and all 15 tasks from community_task_pairs_panel_a.json. Only graph/source-run/registration digest references change to identify new artifacts. Prepare start communities symmetrically; use only public returned source-matched IDs for requests. Capture both tools again with unchanged limits and all failures. Compare all 14 direct-call tasks; keep label presence, exact seed identity and unambiguous target labels separate.", + "validation": "Run focused Rust producer and universal resolver regressions, repository Rust baseline, product boundary and product tests, and code-graph fixture qualification. Preserve source-file hashes and complete command logs for the tested implementation.", + "limitations": [ + "Same-agent source review is not independent evaluation.", + "Improving one known development miss cannot establish overall superiority to Graphify.", + "Graph consistency is not source precision; broad unreviewed edges remain unscored.", + "Natural-language discovery, god-object responsibility judgments, longer directed walks and held-out confirmation remain separate requirements." + ] +} diff --git a/benchmarks/agent_query/rust_index_receiver_development_review.json b/benchmarks/agent_query/rust_index_receiver_development_review.json new file mode 100644 index 000000000..933c24de2 --- /dev/null +++ b/benchmarks/agent_query/rust_index_receiver_development_review.json @@ -0,0 +1,346 @@ +{ + "schema": "compass.rust-index-receiver-development-review/1", + "scope": "Known development miss on the same five pinned repositories and 15 source-defined tasks. Same-agent source review, not held-out or independent evaluation.", + "protocolCommit": "6c70df5e91f1971552db1ca68df66bf89f78a680", + "implementationCommit": "18bb37ea312bc23a3a677538ac03906c73a8ade4", + "artifactRoot": "rust-index-receiver-03", + "binarySha256": "6be23e8cc3b82c60a5eca4037d94c4d3c7ef0aab656eaceb0f96e90e369a9b0c", + "version": "0.3.30", + "cacheSemantics": "AST 6 -> 7; graph/evidence schema and producer capabilities unchanged", + "artifacts": { + "run.json": "9a6e670114f5be83773176e54bf0c4faf45582389164dea79ad17306eee1c50c", + "graph-delta.json": "a28bfad40768db17134c7dc39bf7e5f68ab6c4d6754d632f11fa63ec291ae2f3", + "community-delta.json": "0374616e4c023a1adafcb7c11a1f72f3f5a3c1f15f3c28f84903700cf8a181fe", + "source-review.json": "dfd970416111e0fb295dd7c6864c935bcaed25a8475a52cbd96ea297612d0555", + "verification-details.json": "289d053528e3077f331ff9e59dc72fcac3c11a7e4ad58147815a7cae291bd4d0", + "policy-equivalence.json": "350b13cc4277968f9c8846e439ea290d8eb09af49be03df0aed5bf7e8890b5dd", + "navigation/capture.json": "636833c4a6847e1267b757c2cbf45691dad66cb38ffc33b409d02b7f9dd7e630", + "navigation/verified-summary.json": "f13c4828e3391a6befe56f8427a44bc025ee69c731b202171c62af83820592a2", + "navigation/verify_capture.py": "50534462013d240637a79093731b2d86760cfd0471661d718d8b910803d44e81", + "verify_delta.py": "4fdd2642211478c2abd7158df842b08bea88b78124ade1716c7569ef32e832ec", + "binary-manifest.json": "6aa495a2d44c726ce0583941f0ab2db53ff5cbe300f428a3d595a1326f28d71f", + "validation.json": "732c2509bc80fed76268c43e53d64ce29235b10f8f81de39b730f3709dc5bd88", + "final-validation-summary.json": "fdbf13221cee8d60954d44037f0de1c5f4f4d2a187a570468817a9234cd7b1db", + "harness-tests.log": "57825a0457d08a37a3402ce6a4f3535d3687cb458127293393ffca02b46d0a43", + "fmt-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "rust-language-tests-final.log": "a62a7ad652853a3aeb5aaa48bbd5518f093b166964421ea5019ce1de5d71c01f", + "universal-resolver-tests-final.log": "c4d644ed23bb1c90963351466ac9049441cb5f209e4a1fa44cfcbee517a51855", + "clippy-final.log": "5bc29eb199d14541206e2200c80c7f9c3a6823924821a86ececc304018f551e1", + "workspace-tests-final.log": "cb017d306359fdcddefecc764dc19fe7ca8ad6dd76ac7d6f868a47092e3465bc", + "product-tests-final.log": "79473ac727d45d0e212f0ddebe97969a06208bc3a4d51adb0bfb1e6357ecaacc", + "product-boundary-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "qualification-final.log": "25fd6f552b78d460d95d4812f3b6f63153c597c3efd938530b144e6baaf2e618" + }, + "baseline": { + "compass": { + "collaboratorLabelPresent": 13, + "unambiguousTargetLabel": 10 + }, + "graphify": { + "collaboratorLabelPresent": 14, + "unambiguousTargetLabel": 11 + } + }, + "summary": { + "compass": { + "tasks": 15, + "resolverIdsCorrect": 15, + "completedNeighborLookups": 15, + "directCallTasks": 14, + "collaboratorLabelPresent": 14, + "unambiguousTargetLabel": 11, + "callTextBytes": 157011, + "callResponseWireBytes": 694390, + "fullSessionBytesIncludingRequestsAndStderr": 786025 + }, + "graphify": { + "tasks": 15, + "resolverIdsCorrect": 15, + "completedNeighborLookups": 15, + "directCallTasks": 14, + "collaboratorLabelPresent": 14, + "unambiguousTargetLabel": 11, + "callTextBytes": 55402, + "callResponseWireBytes": 60410, + "fullSessionBytesIncludingRequestsAndStderr": 102213 + } + }, + "graphChanges": [ + { + "repository": "chi", + "before": { + "nodes": 729, + "edges": 1914 + }, + "after": { + "nodes": 729, + "edges": 1914 + }, + "addedRecords": 0, + "removedRecords": 0, + "addedNodes": 0, + "removedNodes": 0, + "changedExistingCallPayloads": 0 + }, + { + "repository": "click", + "before": { + "nodes": 4264, + "edges": 6387 + }, + "after": { + "nodes": 4264, + "edges": 6387 + }, + "addedRecords": 0, + "removedRecords": 0, + "addedNodes": 0, + "removedNodes": 0, + "changedExistingCallPayloads": 0 + }, + { + "repository": "jsoup", + "before": { + "nodes": 6116, + "edges": 21110 + }, + "after": { + "nodes": 6116, + "edges": 21110 + }, + "addedRecords": 0, + "removedRecords": 0, + "addedNodes": 0, + "removedNodes": 0, + "changedExistingCallPayloads": 0 + }, + { + "repository": "redux", + "before": { + "nodes": 3503, + "edges": 5653 + }, + "after": { + "nodes": 3503, + "edges": 5653 + }, + "addedRecords": 0, + "removedRecords": 0, + "addedNodes": 0, + "removedNodes": 0, + "changedExistingCallPayloads": 0 + }, + { + "repository": "walkdir", + "before": { + "nodes": 288, + "edges": 1205 + }, + "after": { + "nodes": 288, + "edges": 1206 + }, + "addedRecords": 1, + "removedRecords": 0, + "addedNodes": 0, + "removedNodes": 0, + "changedExistingCallPayloads": 0 + } + ], + "sourceJudgment": { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "sourceFile": "src/lib.rs", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "caller": "walkdir::IntoIter::push", + "callee": "walkdir::DirList::close", + "callLine": 906, + "targetDeclarationLine": 1008, + "sourceReason": "The field stack_list has Vec type and oldest_opened has usize type. The indexed receiver at line 906 denotes a DirList, whose inherent close method begins at line 1008. This is an outgoing call from IntoIter.push, independent of graph community assignment." + }, + "unchangedEvidence": { + "otherFourCompassGraphsByteIdentical": true, + "allFiveNodeArraysIdentical": true, + "allCommunityAssignmentsIdentical": true, + "all45GraphifyResponsesIdentical": true + }, + "changedCompassResponses": "One neighbor text gains the close call. Three WalkDir resolver packets change only graph identity and view digest; all other response packets are identical.", + "remainingAmbiguousTargetLabels": [ + { + "tool": "compass", + "task": "click-atomic-close", + "identities": 5 + }, + { + "tool": "graphify", + "task": "click-atomic-close", + "identities": 5 + }, + { + "tool": "compass", + "task": "jsoup-html-fragment-parse", + "identities": 5 + }, + { + "tool": "compass", + "task": "jsoup-html-whitespace", + "identities": 3 + }, + { + "tool": "graphify", + "task": "jsoup-html-fragment-parse", + "identities": 3 + }, + { + "tool": "graphify", + "task": "jsoup-html-whitespace", + "identities": 3 + } + ], + "validation": { + "status": "passed", + "finalSourceDirectory": "rust-index-receiver-03", + "sourceCommit": "18bb37ea312bc23a3a677538ac03906c73a8ade4", + "binaryMatchesFinalBuild": true, + "counts": { + "rust-language-tests": { + "passed": 38, + "failed": 0, + "ignored": 0 + }, + "universal-resolver-tests": { + "passed": 211, + "failed": 0, + "ignored": 0 + }, + "workspace-tests": { + "passed": 1101, + "failed": 0, + "ignored": 2 + }, + "product-tests": { + "passed": 9, + "failed": 0, + "ignored": 0 + } + }, + "steps": [ + { + "name": "fmt", + "argv": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "seconds": 3.92 + }, + { + "name": "rust-language-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-languages", + "--test", + "rust_index_receivers", + "--test", + "rust_universal_conformance", + "--test", + "rust_universal_phase2", + "--locked" + ], + "exitCode": 0, + "seconds": 13.6 + }, + { + "name": "universal-resolver-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-resolve", + "--test", + "universal_resolution", + "--locked" + ], + "exitCode": 0, + "seconds": 4.7 + }, + { + "name": "clippy", + "argv": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 20.82 + }, + { + "name": "workspace-tests", + "argv": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "seconds": 129.45 + }, + { + "name": "product-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "seconds": 2.64 + }, + { + "name": "product-boundary", + "argv": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "seconds": 0.04 + }, + { + "name": "qualification", + "argv": [ + "bash", + "scripts/qualify_code_graph_v1.sh", + "--fixtures-only" + ], + "exitCode": 0, + "seconds": 168.82 + } + ], + "harnessTestsPassed": 129 + }, + "interpretation": "Compass recovers the one missing reviewed collaborator, tying Graphify at 14/14 displayed collaborators and 11/14 globally unambiguous target labels. This is not overall superiority or a broad source-precision estimate.", + "limitations": [ + "Graphify graph artifacts are reused byte-for-byte; public MCP calls are recaptured. Extraction timing is not compared.", + "Exact seed source coordinates are supplied to both tools. Starting communities are prepared symmetrically and not scored as retrieval.", + "Three target display labels remain ambiguous for both tools. A successful lookup with a verified seed ID is distinct from self-identifying neighbor output.", + "Only the changed source call is newly source-reviewed; existing graph assertions remain outside this delta review.", + "Native payloads differ in richness and controls. Actual byte costs are reported, not equal-token efficiency.", + "God-object responsibility evidence, broader source precision, longer directed walks and fresh held-out confirmation remain open." + ] +} diff --git a/benchmarks/agent_query/rust_state_access_development_registration.json b/benchmarks/agent_query/rust_state_access_development_registration.json new file mode 100644 index 000000000..efea0acef --- /dev/null +++ b/benchmarks/agent_query/rust_state_access_development_registration.json @@ -0,0 +1,26 @@ +{ + "schema": "compass.rust-state-access-development-registration/1", + "baselineCommit": "9cdeab6a1b0ba1d75179453145dff0b2b48e0aa7", + "sourceRegistration": "benchmarks/agent_query/state_access_development_registration.json", + "sourceRegistrationSha256": "4805af71d9ae358fa65dba8394228d77a8203589f8f5201c20fe469c6aa3362d", + "scope": "Fix missing Rust field-access evidence discovered on known development subjects. Existing Members capability and member-access representation; no new language cutover, read/write classification, LCOM or god-object diagnosis.", + "productContract": "Emit exact field occurrence candidates for source-proven nominal receivers. Restrict targets to fields; resolve through existing qualified universal lookup. Preserve unsupported and shadowed receivers as unresolved. Skip method-selector syntax while retaining its receiver field accesses. Reuse bounded source-type inference; do not invent external field nodes or choose a same-named field.", + "evaluation": "Rebuild Compass graphs from the same five pinned read-only repositories. Reuse the unchanged frozen Graphify graphs. Replay all 20 registered state sites with the same full-graph auditor and retain all original results. Record full graph deltas and unchanged/non-Rust controls; report any changed existing records/community assignments, not just recovered sites. This is not a build-time comparison, independent confirmation or public-query benchmark.", + "verification": [ + "Fail-before native field-access regression and negative receiver/scope tests", + "Source-anchor, multiplicity, deterministic resolution and cross-file qualification regressions", + "AST cache invalidation test and native baseline", + "Production fixture qualification", + "Pinned source/graph/binary hashes; replayable 20-site comparison and graph deltas" + ], + "publicFollowup": { + "scope": "Known-ID-assisted retrieval control, not natural-language discovery or identity resolution. Registered before rebuilt graphs or follow-up outputs are inspected.", + "tasks": [ + "WalkDir IntoIter::handle_entry -> deferred_dirs at src/lib.rs:875", + "WalkDir IntoIter::get_deferred_dir -> deferred_dirs at src/lib.rs:886", + "WalkDir IntoIter::push -> oldest_opened at src/lib.rs:945", + "WalkDir IntoIter::pop -> oldest_opened at src/lib.rs:958" + ], + "policy": "For each source-validated callable, provide each tool its own exact graph ID as an explicit task input and issue one public MCP get_neighbors call with no relation filter. Preserve native defaults, all errors, truncation and response bytes; no retries or source follow-ups. Score field-neighbor identity separately from occurrence anchoring and report graph consistency, not authored explanations. Use unchanged baseline Graphify graphs and new Compass graphs." + } +} diff --git a/benchmarks/agent_query/rust_state_access_development_review.json b/benchmarks/agent_query/rust_state_access_development_review.json new file mode 100644 index 000000000..42f595d10 --- /dev/null +++ b/benchmarks/agent_query/rust_state_access_development_review.json @@ -0,0 +1,476 @@ +{ + "schema": "compass.rust-state-access-development-review/1", + "scope": "Known development sources and fixed source-access sites. Full-graph coverage plus a separate known-ID-assisted public retrieval control; not held-out, representative god-object classification, exhaustive edge precision, read/write analysis, clustering quality or overall superiority.", + "productCommit": "390406c1", + "registrationCommits": [ + "4a1be265", + "56d7d559" + ], + "registrationSha256": "badb11879b8a646ee208a27f521dd012417f16b8ddc561d2ee24a7d388b1fc70", + "sourceRegistrationSha256": "4805af71d9ae358fa65dba8394228d77a8203589f8f5201c20fe469c6aa3362d", + "baselineReviewSha256": "7716b9c160a6b113d0ee14af146e279e7de191f393ef92862737673f45675afc", + "artifactDirectory": "rust-state-access-01", + "sourceSha256": { + "crates/compass-languages/src/evidence/build.rs": "e27fa5637afe57e2b21c28029878746806798121b212cbc8d8ec47f4fad7d48f", + "crates/compass-files/src/cache.rs": "5e7850bb2ce97c17e91cd763c4a36a6c7f2260edb082278c16ffcbdfbd6e9c73", + "crates/compass-files/tests/contracts.rs": "a9f37e4bbf888a91034fb9332fac3f7efe1872bc9c7752aad4372ffc04c616e6", + "crates/compass-languages/tests/rust_field_access.rs": "0c8bdcc6e1a5a5e881518ec1cd0e60a04afda16044c98a98d037da9979a0202e", + "crates/compass-resolve/tests/rust_field_access.rs": "afc0aeac1a8e74418667a0507aa9c84cbadf8787820c0f4df1f25e9a1d351730" + }, + "compassBinarySha256": "a1692336191eff63849846eb91c1804798381d9e9f1a4ff1180a73a37c61f505", + "graphResults": { + "compass": { + "accessSites": 20, + "uniqueCallableSites": 20, + "uniqueStateSlots": 6, + "contactSupported": 4, + "selectedLineSupported": 4, + "status": { + "contact_edge": 4, + "missing_state": 8, + "no_contact_edge": 8 + } + }, + "graphify": { + "accessSites": 20, + "uniqueCallableSites": 20, + "uniqueStateSlots": 0, + "contactSupported": 0, + "selectedLineSupported": 0, + "status": { + "missing_state": 20 + } + } + }, + "graphDeltas": [ + { + "repository": "chi", + "oldGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "newGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "nodesBefore": 729, + "nodesAfter": 729, + "edgesBefore": 1914, + "edgesAfter": 1914, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 0, + "addedEdges": 0, + "removedEdges": 0, + "changedEdges": 0 + }, + { + "repository": "click", + "oldGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "newGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "nodesBefore": 4264, + "nodesAfter": 4264, + "edgesBefore": 6387, + "edgesAfter": 6387, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 0, + "addedEdges": 0, + "removedEdges": 0, + "changedEdges": 0 + }, + { + "repository": "jsoup", + "oldGraphSha256": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "newGraphSha256": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "nodesBefore": 6116, + "nodesAfter": 6116, + "edgesBefore": 21110, + "edgesAfter": 21110, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 0, + "addedEdges": 0, + "removedEdges": 0, + "changedEdges": 0 + }, + { + "repository": "redux", + "oldGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "newGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "nodesBefore": 3503, + "nodesAfter": 3503, + "edgesBefore": 5653, + "edgesAfter": 5653, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 0, + "addedEdges": 0, + "removedEdges": 0, + "changedEdges": 0 + }, + { + "repository": "walkdir", + "oldGraphSha256": "e68fbe798dcf7422184736971dcdfc29d577e1e37269ea9c43456b9f6af54cb3", + "newGraphSha256": "f7818d1c9aaf93b0b80d0f1a3a3fd2179b60ae17f9278185c9c3eb529f531034", + "nodesBefore": 288, + "nodesAfter": 288, + "edgesBefore": 1206, + "edgesAfter": 1380, + "addedNodes": 0, + "removedNodes": 0, + "changedNodes": 0, + "communityChanges": 122, + "addedEdges": 174, + "removedEdges": 0, + "changedEdges": 0 + } + ], + "publicSummary": { + "compass": { + "tasks": 4, + "fieldNeighborIdentity": 4, + "selectedLineAnchored": 4, + "textBytes": 10308, + "wireBytes": 139303 + }, + "graphify": { + "tasks": 4, + "fieldNeighborIdentity": 0, + "selectedLineAnchored": 0, + "textBytes": 1519, + "wireBytes": 1904 + } + }, + "publicRows": [ + { + "tool": "compass", + "method": "handle_entry", + "state": "deferred_dirs", + "fieldNeighborIdentity": true, + "selectedLineAnchored": true, + "textBytes": 3839, + "wireBytes": 55221 + }, + { + "tool": "compass", + "method": "get_deferred_dir", + "state": "deferred_dirs", + "fieldNeighborIdentity": true, + "selectedLineAnchored": true, + "textBytes": 1601, + "wireBytes": 18620 + }, + { + "tool": "compass", + "method": "push", + "state": "oldest_opened", + "fieldNeighborIdentity": true, + "selectedLineAnchored": true, + "textBytes": 3264, + "wireBytes": 46122 + }, + { + "tool": "compass", + "method": "pop", + "state": "oldest_opened", + "fieldNeighborIdentity": true, + "selectedLineAnchored": true, + "textBytes": 1604, + "wireBytes": 19340 + }, + { + "tool": "graphify", + "method": "handle_entry", + "state": "deferred_dirs", + "fieldNeighborIdentity": false, + "selectedLineAnchored": false, + "textBytes": 421, + "wireBytes": 518 + }, + { + "tool": "graphify", + "method": "get_deferred_dir", + "state": "deferred_dirs", + "fieldNeighborIdentity": false, + "selectedLineAnchored": false, + "textBytes": 367, + "wireBytes": 463 + }, + { + "tool": "graphify", + "method": "push", + "state": "oldest_opened", + "fieldNeighborIdentity": false, + "selectedLineAnchored": false, + "textBytes": 473, + "wireBytes": 571 + }, + { + "tool": "graphify", + "method": "pop", + "state": "oldest_opened", + "fieldNeighborIdentity": false, + "selectedLineAnchored": false, + "textBytes": 258, + "wireBytes": 352 + } + ], + "addedOccurrenceConsistency": 174, + "validation": [ + { + "name": "fmt", + "argv": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "exitCode": 0, + "seconds": 4.31, + "testCounts": null, + "metadataSha256": "f86b0a171fb71e1337471cdc2bf28079df4868ceee2802671bf88729d3037734", + "logSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "language-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-languages", + "--test", + "rust_field_access", + "--test", + "rust_index_receivers", + "--test", + "rust_universal_conformance", + "--test", + "rust_universal_phase2", + "--locked" + ], + "exitCode": 0, + "seconds": 8.32, + "testCounts": [ + 45, + 0, + 0 + ], + "metadataSha256": "1f0cedad05d94a9d10f3cef56ee0941582f247c2a8e39b05efa0e26b604fc489", + "logSha256": "4041f3ff2f138574fa4a3ddeb44283eb4716642799695fd5d29a93ac516565b3" + }, + { + "name": "resolver-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-resolve", + "--test", + "rust_field_access", + "--test", + "universal_evidence", + "--test", + "universal_resolution", + "--locked" + ], + "exitCode": 0, + "seconds": 1.29, + "testCounts": [ + 237, + 0, + 0 + ], + "metadataSha256": "6277dd30dbf6d092c8db7132ce31a07bcccca41cb16be717ee916eb92ba23122", + "logSha256": "14aa5273ffdd547b5cd3f9c58ce4aad1de0126ee2d973b9752a90621ca314573" + }, + { + "name": "cache-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-files", + "--test", + "contracts", + "--locked" + ], + "exitCode": 0, + "seconds": 1.13, + "testCounts": [ + 33, + 0, + 0 + ], + "metadataSha256": "a60275701716533ee5f1ec66e6d30c6a6b928cc5c4011403ea8d2235abce13ed", + "logSha256": "07f20992c401957f5dfc5d98f6ba45169569edbd67a5c6bf00c1b603213632a6" + }, + { + "name": "clippy", + "argv": [ + "cargo", + "clippy", + "--workspace", + "--lib", + "--bins", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 1.21, + "testCounts": null, + "metadataSha256": "49269c798c0ea6a34cce01cd9697d9a017f4479b5d29cecb78e81980302c67f1", + "logSha256": "00e61713e19859fe5a2aa621594e80ce8447dfdaca7fa6adcdd310bae37c4406" + }, + { + "name": "focused-clippy", + "argv": [ + "cargo", + "clippy", + "-p", + "compass-languages", + "-p", + "compass-resolve", + "--test", + "rust_field_access", + "--locked", + "--", + "-D", + "warnings" + ], + "exitCode": 0, + "seconds": 0.68, + "testCounts": null, + "metadataSha256": "5e4afd17a18c55c067028eaeba4f9609b5ba53bcfd21e1f2bc5f9a5845a20e70", + "logSha256": "b0b99394e88f6c488aef84cb39e9bccb7e1fa624de1ffebf9ff580d9f54e0415" + }, + { + "name": "workspace-tests", + "argv": [ + "cargo", + "test", + "--workspace", + "--lib", + "--bins", + "--locked" + ], + "exitCode": 0, + "seconds": 136.93, + "testCounts": [ + 1106, + 0, + 2 + ], + "metadataSha256": "673338d8608edc04cde894666158884e88254c0b93b3da5f1dc40b8f82398614", + "logSha256": "93ef2074f2aba191d8114e02b12c7c5fad24ab8dc0c1d6c1759544828675e4b0" + }, + { + "name": "product-tests", + "argv": [ + "cargo", + "test", + "-p", + "compass-cli", + "--test", + "compass_product", + "--locked" + ], + "exitCode": 0, + "seconds": 67.24, + "testCounts": [ + 9, + 0, + 0 + ], + "metadataSha256": "030ac33a8880c4804ac13015ee412974d7ae680c865b2ce46063993b2aa1aff7", + "logSha256": "f401555994c89c6569f6a9aa327caf5e8998f48c9b7f3adc80d559634acd94c8" + }, + { + "name": "boundary", + "argv": [ + "sh", + "scripts/check_product_boundary.sh" + ], + "exitCode": 0, + "seconds": 0.26, + "testCounts": null, + "metadataSha256": "fcfd459348474f184179f16612ef3509909aec6adc4a18d659cd759ff7eb707f", + "logSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "fixtures", + "argv": [ + "bash", + "scripts/qualify_code_graph_v1.sh", + "--fixtures-only" + ], + "exitCode": 0, + "seconds": 910.11, + "testCounts": [ + 6, + 0, + 0 + ], + "metadataSha256": "8a70d1d7e50db27558a4fc9b668340604631f587d089fa531f9f462ec22d3267", + "logSha256": "03e528b0d4e5af1253b4a41e2b1b50bf4b672f64d8c56c26208a868c17a5d0a7" + }, + { + "name": "benchmarks", + "argv": [ + "python3", + "-m", + "unittest", + "discover", + "-s", + "benchmarks/agent_query/tests" + ], + "exitCode": 0, + "seconds": 2.38, + "testCounts": null, + "metadataSha256": "7850844ae639f7122cbbf6afa4778989c70e7312631dfdb4b55bb6c80453b2e2", + "logSha256": "6e6e1f38ab8af6fcf53fef9d922c261be18d5c5b5bd470bf964c227087c2c825" + } + ], + "artifacts": { + "run.json": "529f842b347802c59687560b6338bda8038fe704579c3e5434ee6654bcb59aad", + "state-access-registration.json": "a4c74826dd45d4d52379e70e9f8b11dc29495a6d7de37590ee263ec4b816aabb", + "review.json": "35960cdaf41f1ab99b965a319ff78997872f030a9fb56e8cf982d3b9af558567", + "delta-summary.json": "cbea1f337c19ce7cd3c736e1274ce34fe2e972e9637b9d1ee78a5c20cf4e47fb", + "public-capture.json": "2fa6f9f365bb0a566144ebe47b68bc4e4c716791ebcac3686ce483f7809091b0", + "verification.json": "63eeb921b301712184a5391e85aa33bbcdac96ae4b6719ae63764e97397b4721", + "added-occurrence-consistency.json": "b285a3564cd14dc08532f6a4b02968c0e065b984e73108c1f591e58bb5b5e011", + "evaluate.py": "b3d8e0dd1af6681456751ae569a1d40dee942ce460343a8eeb909b3ae475c9b9", + "public.py": "bb6af84e80791722a0321c121939dba087591188a6374bc5c0413151234a6e18", + "verify.py": "99ad35c67b09ec4cee2335ce48e3e2fb6f4d3229504b2da8a61ca8797b109339", + "run.py": "e7e01fedde8cebd9b9994d59e58bbdaacc343d93a3076ffadb3349cacc12368b", + "validate.py": "dbb79f30742668c11f482a374117fb9bb7b852c3c37c23e9a4d917ef5ecd283e", + "summarize.py": "a4a97d5fd22277e7a65c2733f64ded7c57597187d7de45931f0440aea89d0e49" + }, + "limitations": [ + "The two state slots create four related Rust observations, not four independent repositories. Other sixteen source-access sites remain unsupported.", + "All old WalkDir nodes/edges are retained; 122 community assignments change. No clustering-quality judgment follows.", + "174 added records pass occurrence/endpoint consistency; comprehensive semantic precision is unproven.", + "jsoup and Redux retain partial-publication warnings for two omitted edges each; their graphs are byte-identical controls.", + "MCP requests use native defaults and exact IDs supplied as task inputs. Compass carries richer and much larger payloads. No efficiency/latency win.", + "Same-agent source selection/adjudication; no independent human or compiler semantic oracle.", + "Six fail-before extraction tests; early integration fixture errors and a mistaken context-field assertion were corrected. Member-access provenance is present; optional context is not required.", + "Qualification logs retain existing partial-fixture publication, linker and unused-mut warnings. Full hosted CI/platform/packaging results are not claimed." + ], + "ciCommandVerification": { + "argv": [ + "cargo", + "test", + "-p", + "compass-languages", + "-p", + "compass-resolve", + "--test", + "rust_field_access", + "--locked" + ], + "exitCode": 0, + "metadataSha256": "e2bb261068b0af36acd657b9d78442036b3cdf0ff86dee18a8bd308cf1168fbb", + "logSha256": "fff186f2a65c1904a55d18a7953178cd73e9c2317422bddf4b6c3b2542c0e281" + } +} diff --git a/benchmarks/agent_query/semantic_route_parent_development_review.json b/benchmarks/agent_query/semantic_route_parent_development_review.json new file mode 100644 index 000000000..a2c3db924 --- /dev/null +++ b/benchmarks/agent_query/semantic_route_parent_development_review.json @@ -0,0 +1,819 @@ +{ + "schema": "compass.semantic-route-parent-development-review/1", + "scope": "Repeated five-language development comparison and independently registered source-selected Next diagnostic. Neither is fresh held-out evidence or proof of general superiority.", + "runId": "semantic-route-parent-panel-a-01", + "suiteDigest": "820a5c29f59e68b4ee8493e153c806b23e458a396431f3cf381660e469391237", + "runnerDigest": "173242988699eb6fabd175c293634d3cf37c1394f76429540fd7af2a48ef7026", + "tools": [ + { + "binary": "/Volumes/Workspace/CrabData/compass-evaluations/code-graph-audit-20260926/semantic-route-parent-provenance/compass", + "binarySha256": "9efe548537b106c69d1da7a5ac7955e764e43103e0d1e4a754a3c1880c292bea", + "digestScope": "executable-file-only", + "name": "compass", + "version": "compass 0.3.30" + }, + { + "binary": "/Users/haipingfu/.local/bin/graphify", + "binarySha256": "a7fdb4ac8985755be15f10f89a2d17ee517130b3ac90c28c91644ae351881da3", + "digestScope": "executable-file-only", + "name": "graphify", + "version": "graphify 0.9.67" + } + ], + "metrics": { + "compass": { + "text": { + "medianAnswerTokens": 148.0, + "medianFirstPageTokens": 148.0, + "medianWallMs": 462.0, + "passRate": 0.8364, + "passed": 46, + "questions": 55 + }, + "selectedSourceEdges": { + "relationshipPassed": 16, + "allOccurrencesPassed": 16, + "total": 21 + }, + "sourcePaths": { + "passed": 6, + "total": 10 + } + }, + "graphify": { + "text": { + "medianAnswerTokens": 104.0, + "medianFirstPageTokens": 75.0, + "medianWallMs": 166.0, + "passRate": 0.8364, + "passed": 46, + "questions": 55 + }, + "selectedSourceEdges": { + "relationshipPassed": 20, + "allOccurrencesPassed": 17, + "total": 21 + }, + "sourcePaths": { + "passed": 8, + "total": 10 + } + } + }, + "panelProductionDelta": { + "chi": { + "removedNodeIds": 0, + "addedNodeIds": 0, + "changedNodes": 0, + "removedEdgeIds": 0, + "addedEdgeIds": 0, + "changedEdges": 0, + "beforeGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "afterGraphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5" + }, + "click": { + "removedNodeIds": 0, + "addedNodeIds": 0, + "changedNodes": 0, + "removedEdgeIds": 0, + "addedEdgeIds": 0, + "changedEdges": 0, + "beforeGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "afterGraphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93" + }, + "jsoup": { + "removedNodeIds": 0, + "addedNodeIds": 0, + "changedNodes": 0, + "removedEdgeIds": 0, + "addedEdgeIds": 0, + "changedEdges": 0, + "beforeGraphSha256": "8035487618e4e96af8b7cc668d92eaea9ee3ec2a831c486d20055bc808fa23f6", + "afterGraphSha256": "8035487618e4e96af8b7cc668d92eaea9ee3ec2a831c486d20055bc808fa23f6" + }, + "redux": { + "removedNodeIds": 0, + "addedNodeIds": 0, + "changedNodes": 0, + "removedEdgeIds": 0, + "addedEdgeIds": 0, + "changedEdges": 0, + "beforeGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "afterGraphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b" + }, + "walkdir": { + "removedNodeIds": 0, + "addedNodeIds": 0, + "changedNodes": 0, + "removedEdgeIds": 0, + "addedEdgeIds": 0, + "changedEdges": 0, + "beforeGraphSha256": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177", + "afterGraphSha256": "4ba0ea8d0dc4525afda690739b0261c5b61b0b9dd9e725a338d7f40f204bf177" + } + }, + "performanceLimitation": "One shared-machine run with overlapping verification work. Latencies are descriptive, not a comparative performance win. Graphify hash attests launcher only, not its full environment.", + "shadcnDiagnostic": { + "commit": "a87a63b2ca25143d26c8bd0903e4e9bc77b3f824", + "sourceScope": "apps/v4/app plus package and TypeScript configuration; source-selected development diagnostic, not held out, not full repository qualification", + "files": 273, + "bytes": 1398028, + "registration": "Expected pairs recorded before inspecting either binary graph for this projection.", + "results": { + "before": { + "graphSha256": "06c4633cc9d6dd31147ee5930920f632e6249500171301b5e02dbfb647c3bc9f", + "nodes": 14762, + "edges": 21316, + "checks": [ + { + "sourceFile": "apps/v4/app/layout.tsx", + "targetFile": "apps/v4/app/(app)/layout.tsx", + "expected": true, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [ + "sha256:279ad634fee3cd57de2942c9a849667d3335ae139ce50078c65a8fd86f4f4e61" + ], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/layout.tsx", + "targetFile": "apps/v4/app/(app)/blocks/layout.tsx", + "expected": true, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [], + "passed": false + }, + { + "sourceFile": "apps/v4/app/(app)/blocks/layout.tsx", + "targetFile": "apps/v4/app/(app)/blocks/page.tsx", + "expected": true, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [ + "sha256:0f9e6cff50b2bc845dbf05d3b8645bd1aa63778f267769d5487f0a16e2150cd7" + ], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/blocks/layout.tsx", + "targetFile": "apps/v4/app/(app)/blocks/[...categories]/page.tsx", + "expected": true, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [ + "sha256:6d0244dae1b62062f05ff67b9f23a439533feaa9c571de7889e200a59ca53997" + ], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/blocks/page.tsx", + "targetFile": "apps/v4/app/(app)/blocks/[...categories]/page.tsx", + "expected": false, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/charts/layout.tsx", + "targetFile": "apps/v4/app/(app)/colors/layout.tsx", + "expected": false, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/examples/dashboard/page.tsx", + "targetFile": "apps/v4/app/(app)/examples/tasks/page.tsx", + "expected": false, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [], + "passed": true + } + ], + "passed": 6, + "total": 7 + }, + "after": { + "graphSha256": "bf891990821aaef52ac8512dcc04d9f5fc7762a744d987823eb6c10ba77d657f", + "nodes": 14762, + "edges": 21307, + "checks": [ + { + "sourceFile": "apps/v4/app/layout.tsx", + "targetFile": "apps/v4/app/(app)/layout.tsx", + "expected": true, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [ + "sha256:279ad634fee3cd57de2942c9a849667d3335ae139ce50078c65a8fd86f4f4e61" + ], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/layout.tsx", + "targetFile": "apps/v4/app/(app)/blocks/layout.tsx", + "expected": true, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [ + "sha256:2e8c788629fad70689771c5516055d5eabf914f548cd510774a854616a7319fd" + ], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/blocks/layout.tsx", + "targetFile": "apps/v4/app/(app)/blocks/page.tsx", + "expected": true, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [ + "sha256:0f9e6cff50b2bc845dbf05d3b8645bd1aa63778f267769d5487f0a16e2150cd7" + ], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/blocks/layout.tsx", + "targetFile": "apps/v4/app/(app)/blocks/[...categories]/page.tsx", + "expected": true, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [ + "sha256:6d0244dae1b62062f05ff67b9f23a439533feaa9c571de7889e200a59ca53997" + ], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/blocks/page.tsx", + "targetFile": "apps/v4/app/(app)/blocks/[...categories]/page.tsx", + "expected": false, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/charts/layout.tsx", + "targetFile": "apps/v4/app/(app)/colors/layout.tsx", + "expected": false, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [], + "passed": true + }, + { + "sourceFile": "apps/v4/app/(app)/examples/dashboard/page.tsx", + "targetFile": "apps/v4/app/(app)/examples/tasks/page.tsx", + "expected": false, + "sourceRouteCount": 1, + "targetRouteCount": 1, + "edgeIds": [], + "passed": true + } + ], + "passed": 7, + "total": 7 + } + }, + "removed": [ + { + "id": "sha256:15176e79a2d4b491baab1723dbd53c4ce846a8aa4ac15a1c6498480a32296b6b", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/layout.tsx", + "startByte": 0, + "endByte": 526, + "startLine": 1, + "startColumn": 0, + "endLine": 16, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/(create)/init/route.ts", + "startByte": 0, + "endByte": 1920, + "startLine": 1, + "startColumn": 0, + "endLine": 67, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:268dbca6ec1676bfe144c88b8dc21c16510716f2fcc274559749ba6fcd9c2cb0", + "kind": "contains", + "source": { + "file": "apps/v4/app/layout.tsx", + "startByte": 0, + "endByte": 3907, + "startLine": 1, + "startColumn": 0, + "endLine": 128, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/api/search/route.ts", + "startByte": 0, + "endByte": 151, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:35e4b09f5e9d7ec5789ae5cc7e20074337bdd731b8cf8d4302783b602a8140ba", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/blocks/page.tsx", + "startByte": 0, + "endByte": 1068, + "startLine": 1, + "startColumn": 0, + "endLine": 43, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/blocks/layout.tsx", + "startByte": 0, + "endByte": 2078, + "startLine": 1, + "startColumn": 0, + "endLine": 80, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:4c7d7b2ea643ea4294ae4b8f0fbfd786abc96f003ea0e8156db150b8f4eb1275", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/(create)/init/route.ts", + "startByte": 0, + "endByte": 1920, + "startLine": 1, + "startColumn": 0, + "endLine": 67, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/(create)/init/md/route.ts", + "startByte": 0, + "endByte": 882, + "startLine": 1, + "startColumn": 0, + "endLine": 30, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:4e519c58b5603bb494122ed2fe3b94499c4d133321aeed69e7caea404268ec7a", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/colors/page.tsx", + "startByte": 0, + "endByte": 446, + "startLine": 1, + "startColumn": 0, + "endLine": 18, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/colors/layout.tsx", + "startByte": 0, + "endByte": 2112, + "startLine": 1, + "startColumn": 0, + "endLine": 79, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:5693c412d16e91053c21598d7ec82b0685629700ab0267469d7235a944327b6b", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/(create)/create/loading.tsx", + "startByte": 0, + "endByte": 154, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/(create)/create/layout.tsx", + "startByte": 0, + "endByte": 754, + "startLine": 1, + "startColumn": 0, + "endLine": 23, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:5ceffb5d4722f1333b88493a33a5f50faa10a90615a70c109438902c08d65c1a", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/layout.tsx", + "startByte": 0, + "endByte": 526, + "startLine": 1, + "startColumn": 0, + "endLine": 16, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/llm/[[...slug]]/route.ts", + "startByte": 0, + "endByte": 1421, + "startLine": 1, + "startColumn": 0, + "endLine": 58, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:b399ea85d01d285ab598d99d49c44080f494e6c65b37681b966dd5afa737b9ef", + "kind": "contains", + "source": { + "file": "apps/v4/app/layout.tsx", + "startByte": 0, + "endByte": 3907, + "startLine": 1, + "startColumn": 0, + "endLine": 128, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/r/registries.json/route.ts", + "startByte": 0, + "endByte": 1818, + "startLine": 1, + "startColumn": 0, + "endLine": 66, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:b41f3e9218ffbab15d46d74f4ec347bd8bf0db083d65e6657c47c09118161bc2", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/(create)/init/route.ts", + "startByte": 0, + "endByte": 1920, + "startLine": 1, + "startColumn": 0, + "endLine": 67, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/(create)/init/v0/route.ts", + "startByte": 0, + "endByte": 1285, + "startLine": 1, + "startColumn": 0, + "endLine": 45, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:ca60ee6b934f3f1cbac3cf8123284b7a119f85c01278344b63177bd2b2eb446c", + "kind": "contains", + "source": { + "file": "apps/v4/app/layout.tsx", + "startByte": 0, + "endByte": 3907, + "startLine": 1, + "startColumn": 0, + "endLine": 128, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/typeset.css/route.ts", + "startByte": 0, + "endByte": 543, + "startLine": 1, + "startColumn": 0, + "endLine": 21, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:e8cabf166d7d580a77ce85134330fc65819de4765366f436f6604ebdc4945492", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/(typeset)/typeset/loading.tsx", + "startByte": 0, + "endByte": 159, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/(typeset)/typeset/layout.tsx", + "startByte": 0, + "endByte": 799, + "startLine": 1, + "startColumn": 0, + "endLine": 24, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:e9bb286bcda82d0c9b2e0e29237169ca36ca35e5e1ad033b89198f57f9ae2944", + "kind": "contains", + "source": { + "file": "apps/v4/app/layout.tsx", + "startByte": 0, + "endByte": 3907, + "startLine": 1, + "startColumn": 0, + "endLine": 128, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/og/route.tsx", + "startByte": 0, + "endByte": 3402, + "startLine": 1, + "startColumn": 0, + "endLine": 118, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:ff7a1144ac8915185c676676c772e66d08ee6687bc852eab3ed8472e043b11ce", + "kind": "contains", + "source": { + "file": "apps/v4/app/layout.tsx", + "startByte": 0, + "endByte": 3907, + "startLine": 1, + "startColumn": 0, + "endLine": 128, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/rss.xml/route.ts", + "startByte": 0, + "endByte": 1303, + "startLine": 1, + "startColumn": 0, + "endLine": 45, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + } + ], + "added": [ + { + "id": "sha256:2e8c788629fad70689771c5516055d5eabf914f548cd510774a854616a7319fd", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/layout.tsx", + "startByte": 0, + "endByte": 526, + "startLine": 1, + "startColumn": 0, + "endLine": 16, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/blocks/layout.tsx", + "startByte": 0, + "endByte": 2078, + "startLine": 1, + "startColumn": 0, + "endLine": 80, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:93c266645b8ffd077f7c13d0cf52d3bc80e3b65070ec5676b0409f3259cb0974", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/layout.tsx", + "startByte": 0, + "endByte": 526, + "startLine": 1, + "startColumn": 0, + "endLine": 16, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/(create)/create/layout.tsx", + "startByte": 0, + "endByte": 754, + "startLine": 1, + "startColumn": 0, + "endLine": 23, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:bda10b102f9b54e0128eba4ec16dc4f1912aac605e9c300858d370cad5d643d7", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/layout.tsx", + "startByte": 0, + "endByte": 526, + "startLine": 1, + "startColumn": 0, + "endLine": 16, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/colors/layout.tsx", + "startByte": 0, + "endByte": 2112, + "startLine": 1, + "startColumn": 0, + "endLine": 79, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "id": "sha256:c5297dee9df67aa4cba652d6c21327317420c5ca218ec7f6657434b81234587f", + "kind": "contains", + "source": { + "file": "apps/v4/app/(app)/layout.tsx", + "startByte": 0, + "endByte": 526, + "startLine": 1, + "startColumn": 0, + "endLine": 16, + "endColumn": 0 + }, + "target": { + "file": "apps/v4/app/(app)/(typeset)/typeset/layout.tsx", + "startByte": 0, + "endByte": 799, + "startLine": 1, + "startColumn": 0, + "endLine": 24, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + } + ], + "sourceHashes": { + "apps/v4/app/(app)/(create)/create/layout.tsx": { + "bytes": 754, + "sha256": "199daabcf33d69c31ee72b1d29ea9341b971df760dbfe0b49b6b670508e1ed6b", + "gitBlob": "51bc22a1d22570ca20b51fd14aac1e83a5aaa55f" + }, + "apps/v4/app/(app)/(create)/create/loading.tsx": { + "bytes": 154, + "sha256": "c5959e1b8fb3c433111f2fe360760586e9bb3bfcbb424813570eae46d3a060ec", + "gitBlob": "0922185cff0aa5e5f554cca5d68d00717ba2d64c" + }, + "apps/v4/app/(app)/(create)/init/md/route.ts": { + "bytes": 882, + "sha256": "5cbc9cdf08f08c092eb0e3bae9e645f0b08b45abae42d51edfe03e3c7d9494d8", + "gitBlob": "1b4f1129a88853ed31d6df774a56a378c9b7ceed" + }, + "apps/v4/app/(app)/(create)/init/route.ts": { + "bytes": 1920, + "sha256": "0838621b8b2bbe90f0534790aa8259232d4d5792798ceea8e228b78322c58a20", + "gitBlob": "dc8eae9cbd63720fe461efe11cbe866123ceab7c" + }, + "apps/v4/app/(app)/(create)/init/v0/route.ts": { + "bytes": 1285, + "sha256": "c61ede79717f2f1b49b12b72671d37f28cc651a346337268f7dc8c9819726951", + "gitBlob": "a8b0bc61fb0db58fddded97b9deecae57260dfb0" + }, + "apps/v4/app/(app)/(typeset)/typeset/layout.tsx": { + "bytes": 799, + "sha256": "f09ab4e53dcb36d40b4f7a12019ae136146344863ac0f61a098829ecf32b8b08", + "gitBlob": "dbd826a44a05f7151298050fc211d3c69f6fb999" + }, + "apps/v4/app/(app)/(typeset)/typeset/loading.tsx": { + "bytes": 159, + "sha256": "0382fac46d0c64a892227d2399d6b3e6db2dc947914931452298e19d939da49b", + "gitBlob": "8b50e3e79bf209fbb0e47d67f3a503a1e48e29e2" + }, + "apps/v4/app/(app)/blocks/layout.tsx": { + "bytes": 2078, + "sha256": "6d4f4dca39fa0e5047d3bfae5783627f590e356982e40f983d100c3260a3d5da", + "gitBlob": "70a9e67d546496d7799b0064106ec03bbf87f975" + }, + "apps/v4/app/(app)/blocks/page.tsx": { + "bytes": 1068, + "sha256": "248322276f09adb17ab7accfc2a869dcebd267d468c34dcca877b54d0597ccd1", + "gitBlob": "2fff179f0d318ea7b784f7dd4d338d41c111c6f9" + }, + "apps/v4/app/(app)/colors/layout.tsx": { + "bytes": 2112, + "sha256": "32f230bd2572945b0a59b0df7ffeeda18ffe06be007e2c42fd2c6871fc19de7f", + "gitBlob": "4813f342a265048877497a90664156667c5f813e" + }, + "apps/v4/app/(app)/colors/page.tsx": { + "bytes": 446, + "sha256": "55d52c1591df7e2fcd8504afd2f13e5d884209309bd7f463d78675078f624219", + "gitBlob": "be71657930192672d0342ebe3a04f2e3a7ec58cf" + }, + "apps/v4/app/(app)/layout.tsx": { + "bytes": 526, + "sha256": "8efe40cc4f24659566fd9b47cd93d09d058d637b544725057b7e60c5f7291453", + "gitBlob": "ca5f8e14502fe7568cef8bc79925789b51ffdf7f" + }, + "apps/v4/app/(app)/llm/[[...slug]]/route.ts": { + "bytes": 1421, + "sha256": "fef8ef73e8c6a97eceace445fc89683b4f69ed094a526e655f06b404afe952bb", + "gitBlob": "baa0eafa4fba2a32a2a98fbc123ffa427ce42cea" + }, + "apps/v4/app/api/search/route.ts": { + "bytes": 151, + "sha256": "64ea20fbd34200da023c4dd88c204650509a12dcfcc3b592fa33e8d1e1f85aea", + "gitBlob": "3bafe9c5a2e3970d99fc097b373159c7ff13259b" + }, + "apps/v4/app/layout.tsx": { + "bytes": 3907, + "sha256": "ae953cf25882c0cee17725a9da68a5a6fe255f6adc3d7629bbc39cf92063d3ab", + "gitBlob": "ade2f148715e346b18c844e010ae02fd9f15e624" + }, + "apps/v4/app/og/route.tsx": { + "bytes": 3402, + "sha256": "8b69aa880c787f6d80055edbc8f612dc63fbeabbb971f94e8d5c979072192af2", + "gitBlob": "1710b3212c7e90541a5201cd3c7918bfdc65c4aa" + }, + "apps/v4/app/r/registries.json/route.ts": { + "bytes": 1818, + "sha256": "3ef3d5b3391e3f67d1c6ed6037707b98869b80b4f52c20ee4606a72c32b05cf1", + "gitBlob": "a2f91a2dfc77129c4f895f319fdefd6a1668beda" + }, + "apps/v4/app/rss.xml/route.ts": { + "bytes": 1303, + "sha256": "9a565f05e2345d4428074dfd21741301ed882f6fe67875fde5a6f308868448a8", + "gitBlob": "a83241a23baf8ffaed4854b3fa29f972a8885dfc" + }, + "apps/v4/app/typeset.css/route.ts": { + "bytes": 543, + "sha256": "c8ce1feb7e038fb598d9b8081d734b1c7d1e08d138d0d2a887bc1cba865c9dc6", + "gitBlob": "e65708d44aa78c68dc568c1a325506a1ed47a3d0" + } + }, + "sourceReview": "All 13 removed links inspected: 9 target HTTP route handlers, 2 page-to-layout reversals, 2 loading-to-layout reversals. Four added links connect AppLayout to nested layout modules which render children. This is an audit of this changed edge set, not a graph-wide precision estimate.", + "unchangedNodesExceptCommunity": true, + "unchangedCommonEdges": true, + "genericDeltaHelperLimitation": "The raw delta also records failures from an inapplicable fixture-only negative checker; those are not scored for this real source projection. The registered witness-results file is the diagnostic oracle.", + "reference": "https://nextjs.org/docs/app/getting-started/layouts-and-pages" + }, + "artifactSha256": { + "runs/semantic-route-parent-panel-a-01/run.json": "fd990ebabbc950c1f4678e390e4b4d53425d7370cfb95e919db8735dc6fd4f07", + "semantic-route-parent-panel-a-path-audit-01.json": "7e00690db7fe2f929162d574db08c3097ed40cafb7b6fb789ec6d06416767125", + "semantic-route-parent-shadcn-diagnostic/source-review.json": "c2ae84bd110910638d38fda0d6d1078e157d9e529f7b317c62d9adb138004b19", + "semantic-route-parent-shadcn-diagnostic/witness-results.json": "3ded522ca70836326910d21f78897bba5ce5258578d458efa9b26b7bfa62c580", + "semantic-route-parent-shadcn-diagnostic/delta.json": "402428f15ee4da3bd21eca1e290c13659c9f0858899734c9e38010b79bc41c6d", + "semantic-route-parent-provenance/manifest.json": "06906ec5a324add01dee7fef9194972cab83e40d38a28cc18a869d3339da7789", + "semantic-route-parent-panel-a-chi-audit-01.json": "97260bd7333630dd078b069ab90347476c8916a564ba617168912dcae377e66f", + "semantic-route-parent-panel-a-click-audit-01.json": "44469c4b7f85d4d2f63334438e2f87bf877704922b6eedbdfb9db82d6b5252bd", + "semantic-route-parent-panel-a-jsoup-audit-01.json": "64bfb2053434959c62f64bfc9158d532441c204ff01289744e13091f4b18be22", + "semantic-route-parent-panel-a-redux-audit-01.json": "3245cb05a41d8de5d9eb23f98b7c96967ccd833f319be0249866027e27f2dd43", + "semantic-route-parent-panel-a-walkdir-audit-01.json": "08ce5010bc936dfcb5f5d76661bfefcfb7b1fb194b08714eecf802b26f55e3a7", + "semantic-route-parent-native-03.log": "1c2891fbb20b755cbf539a709ba201cb88eaef5095baba34350dbd124a30466c", + "semantic-route-parent-clippy-01.log": "23c46dfc9f6c9cbb620ba34e0db71c19bbb4abe80b26d20cffa56468b69caa07", + "semantic-route-parent-clippy-02.log": "ca46c5728557323cbc93705205a9f88d6bb98583b578e2b494ee01d768492a6f", + "semantic-route-parent-clippy-03.log": "fff5f30464d4f3ef197fa2e8ab93c1a1304fda11a03bfb079432b2a0c4a79218", + "semantic-route-parent-build-01.log": "6700369d26cb823392e539ac8a47c4d937fdf30db8c53bfac640d03ad3b282a7", + "semantic-route-parent-python-05.log": "f62958151715e26c01500d1393ad0e69837f6579714e0f99de70ef376313ce3d", + "semantic-route-parent-oracle-03.log": "42ca74749b922ec801cb27b67a4d6fd8576478696cf8271c44dc2d297fe7d5a4", + "semantic-route-parent-benchmark-tests-01.log": "c8bd418cb4120ed7a029b186d3ff1501dd56ff23ac1a065dfd27082b44903e4a", + "semantic-route-parent-boundary-01.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "semantic-route-parent-frontend-debug/result-02.json": "5333e65df4f3282f715aeb1e9dd0ff21c8013497e20e988eb84f7a5131f75c68", + "semantic-route-parent-qualification-01.log": "c7d420bc8df5baecb5f9e0898d9833621c8cd80e05493221a157c39f2ea0b54b", + "semantic-route-parent-qualification-02.log": "648dbf055cc6f5bdf73c8a92a7c7d1795b5c5479e98a94fb77ea5089912f39e9" + }, + "verification": { + "native": { + "passed": 1436, + "failed": 0, + "ignored": 2, + "limitation": "Before final needless-borrow correction; final corrected production built and passed Clippy." + }, + "scriptTests": 88, + "sourceOracleCases": 15, + "benchmarkTests": 97, + "frontendDebugCheck": "Passed source-oracle and explicit layout-pair checks on positive/negative fixtures; no repeat-build or release equivalence claimed by this standalone check.", + "fullQualification": "Passed: semantic-route-parent-qualification-02.log, session 64446 exit 0. Includes native scale, deterministic lifecycle, source semantic/topology/Markdown assertions and release frontend matrix/positive/negative/repeat-build checks. Qualifies production commit c20db15b, before the Java constructor-receiver change.", + "pinnedHierarchy": "Three historical hierarchy scorecards invalidated; independent source re-review remains required." + } +} diff --git a/benchmarks/agent_query/semantic_route_parent_fixture_review.json b/benchmarks/agent_query/semantic_route_parent_fixture_review.json new file mode 100644 index 000000000..897f0e5dd --- /dev/null +++ b/benchmarks/agent_query/semantic_route_parent_fixture_review.json @@ -0,0 +1,2185 @@ +{ + "schema": "compass.semantic-route-parent-fixture-review/1", + "scope": "Development fixture review, not representative real-repository precision or Graphify superiority", + "beforeBinarySha256": "872aff05f6c1723d27ee96230a4e315d3f0d6e1849387de09530b907f0ff3f40", + "afterBinarySha256": "9efe548537b106c69d1da7a5ac7955e764e43103e0d1e4a754a3c1880c292bea", + "original": { + "beforeGraphSha256": "996ae5b52508a6b8b099624c0bb52163242d10e9a440a6d3a3a7203d3d2900d3", + "afterGraphSha256": "ae449b966b660b2f714a155e18075cb408246f4a66abe094999395abaaad4438", + "beforeMetrics": { + "communities": 232, + "connectedComponents": 229, + "crossCommunityEdges": 3, + "crossFileEdges": 63, + "crossFileEdgesPerThousandNodes": 49, + "edgeBearingNodes": 1178, + "edgeBearingNodePermille": 923, + "edges": 1270, + "exactConnectedComponents": 503, + "exactCrossCommunityEdges": 3, + "exactCrossFileEdges": 62, + "exactCrossFileEdgesPerThousandNodes": 48, + "exactEdgeBearingNodes": 906, + "exactEdgeBearingNodePermille": 710, + "exactEdges": 951, + "exactIsolatedNodes": 370, + "exactLargestComponentNodes": 54, + "exactSelfLoops": 0, + "exactUniqueTypedEndpointPairs": 943, + "exactUniqueTypedEndpointPairsPerThousandNodes": 739, + "isolatedNodes": 98, + "largestComponentNodes": 81, + "nodes": 1276, + "selfLoops": 0, + "singletonCommunities": 98, + "uniqueTypedEndpointPairs": 1248, + "uniqueTypedEndpointPairsPerThousandNodes": 978, + "byRelation": { + "aliases": { + "crossFileEdges": 0, + "edgeBearingNodes": 14, + "edges": 7, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 14, + "exactEdges": 7, + "exactUniqueEndpointPairs": 7, + "uniqueEndpointPairs": 7 + }, + "calls": { + "crossFileEdges": 1, + "edgeBearingNodes": 132, + "edges": 103, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 24, + "exactEdges": 17, + "exactUniqueEndpointPairs": 13, + "uniqueEndpointPairs": 88 + }, + "consumes": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "contains": { + "crossFileEdges": 12, + "edgeBearingNodes": 757, + "edges": 606, + "exactCrossFileEdges": 12, + "exactEdgeBearingNodes": 757, + "exactEdges": 606, + "exactUniqueEndpointPairs": 606, + "uniqueEndpointPairs": 606 + }, + "decorates": { + "crossFileEdges": 0, + "edgeBearingNodes": 36, + "edges": 18, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 4, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 18 + }, + "depends_on": { + "crossFileEdges": 0, + "edgeBearingNodes": 20, + "edges": 16, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 20, + "exactEdges": 16, + "exactUniqueEndpointPairs": 16, + "uniqueEndpointPairs": 16 + }, + "documents": { + "crossFileEdges": 3, + "edgeBearingNodes": 5, + "edges": 3, + "exactCrossFileEdges": 3, + "exactEdgeBearingNodes": 5, + "exactEdges": 3, + "exactUniqueEndpointPairs": 3, + "uniqueEndpointPairs": 3 + }, + "exports": { + "crossFileEdges": 0, + "edgeBearingNodes": 49, + "edges": 27, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 48, + "exactEdges": 26, + "exactUniqueEndpointPairs": 26, + "uniqueEndpointPairs": 27 + }, + "extends": { + "crossFileEdges": 0, + "edgeBearingNodes": 28, + "edges": 16, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 11, + "exactEdges": 6, + "exactUniqueEndpointPairs": 6, + "uniqueEndpointPairs": 16 + }, + "handles": { + "crossFileEdges": 0, + "edgeBearingNodes": 10, + "edges": 5, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "implements": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "imports": { + "crossFileEdges": 12, + "edgeBearingNodes": 210, + "edges": 144, + "exactCrossFileEdges": 12, + "exactEdgeBearingNodes": 50, + "exactEdges": 29, + "exactUniqueEndpointPairs": 29, + "uniqueEndpointPairs": 144 + }, + "instantiates": { + "crossFileEdges": 0, + "edgeBearingNodes": 12, + "edges": 6, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 6 + }, + "maps_to": { + "crossFileEdges": 10, + "edgeBearingNodes": 19, + "edges": 10, + "exactCrossFileEdges": 10, + "exactEdgeBearingNodes": 19, + "exactEdges": 10, + "exactUniqueEndpointPairs": 10, + "uniqueEndpointPairs": 10 + }, + "mixes_in": { + "crossFileEdges": 0, + "edgeBearingNodes": 4, + "edges": 2, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 4, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 2 + }, + "overrides": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "produces": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "publishes": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "reads": { + "crossFileEdges": 0, + "edgeBearingNodes": 6, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 6, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "references": { + "crossFileEdges": 7, + "edgeBearingNodes": 200, + "edges": 137, + "exactCrossFileEdges": 7, + "exactEdgeBearingNodes": 80, + "exactEdges": 52, + "exactUniqueEndpointPairs": 49, + "uniqueEndpointPairs": 131 + }, + "registers": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "renders": { + "crossFileEdges": 4, + "edgeBearingNodes": 7, + "edges": 5, + "exactCrossFileEdges": 4, + "exactEdgeBearingNodes": 7, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "returns": { + "crossFileEdges": 0, + "edgeBearingNodes": 12, + "edges": 6, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 6 + }, + "routes_to": { + "crossFileEdges": 14, + "edgeBearingNodes": 197, + "edges": 114, + "exactCrossFileEdges": 14, + "exactEdgeBearingNodes": 197, + "exactEdges": 114, + "exactUniqueEndpointPairs": 113, + "uniqueEndpointPairs": 113 + }, + "schedules": { + "crossFileEdges": 0, + "edgeBearingNodes": 10, + "edges": 5, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "subscribes": { + "crossFileEdges": 0, + "edgeBearingNodes": 6, + "edges": 3, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 6, + "exactEdges": 3, + "exactUniqueEndpointPairs": 3, + "uniqueEndpointPairs": 3 + }, + "tests": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "triggers": { + "crossFileEdges": 0, + "edgeBearingNodes": 13, + "edges": 7, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 13, + "exactEdges": 7, + "exactUniqueEndpointPairs": 7, + "uniqueEndpointPairs": 7 + }, + "type_of": { + "crossFileEdges": 0, + "edgeBearingNodes": 14, + "edges": 8, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 9, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 8 + }, + "writes": { + "crossFileEdges": 0, + "edgeBearingNodes": 3, + "edges": 2, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 3, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 2 + } + } + }, + "afterMetrics": { + "communities": 241, + "connectedComponents": 238, + "crossCommunityEdges": 3, + "crossFileEdges": 51, + "crossFileEdgesPerThousandNodes": 39, + "edgeBearingNodes": 1177, + "edgeBearingNodePermille": 922, + "edges": 1258, + "exactConnectedComponents": 512, + "exactCrossCommunityEdges": 3, + "exactCrossFileEdges": 50, + "exactCrossFileEdgesPerThousandNodes": 39, + "exactEdgeBearingNodes": 905, + "exactEdgeBearingNodePermille": 709, + "exactEdges": 939, + "exactIsolatedNodes": 371, + "exactLargestComponentNodes": 54, + "exactSelfLoops": 0, + "exactUniqueTypedEndpointPairs": 931, + "exactUniqueTypedEndpointPairsPerThousandNodes": 729, + "isolatedNodes": 99, + "largestComponentNodes": 81, + "nodes": 1276, + "selfLoops": 0, + "singletonCommunities": 99, + "uniqueTypedEndpointPairs": 1236, + "uniqueTypedEndpointPairsPerThousandNodes": 968, + "byRelation": { + "aliases": { + "crossFileEdges": 0, + "edgeBearingNodes": 14, + "edges": 7, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 14, + "exactEdges": 7, + "exactUniqueEndpointPairs": 7, + "uniqueEndpointPairs": 7 + }, + "calls": { + "crossFileEdges": 1, + "edgeBearingNodes": 132, + "edges": 103, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 24, + "exactEdges": 17, + "exactUniqueEndpointPairs": 13, + "uniqueEndpointPairs": 88 + }, + "consumes": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "contains": { + "crossFileEdges": 0, + "edgeBearingNodes": 742, + "edges": 594, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 742, + "exactEdges": 594, + "exactUniqueEndpointPairs": 594, + "uniqueEndpointPairs": 594 + }, + "decorates": { + "crossFileEdges": 0, + "edgeBearingNodes": 36, + "edges": 18, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 4, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 18 + }, + "depends_on": { + "crossFileEdges": 0, + "edgeBearingNodes": 20, + "edges": 16, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 20, + "exactEdges": 16, + "exactUniqueEndpointPairs": 16, + "uniqueEndpointPairs": 16 + }, + "documents": { + "crossFileEdges": 3, + "edgeBearingNodes": 5, + "edges": 3, + "exactCrossFileEdges": 3, + "exactEdgeBearingNodes": 5, + "exactEdges": 3, + "exactUniqueEndpointPairs": 3, + "uniqueEndpointPairs": 3 + }, + "exports": { + "crossFileEdges": 0, + "edgeBearingNodes": 49, + "edges": 27, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 48, + "exactEdges": 26, + "exactUniqueEndpointPairs": 26, + "uniqueEndpointPairs": 27 + }, + "extends": { + "crossFileEdges": 0, + "edgeBearingNodes": 28, + "edges": 16, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 11, + "exactEdges": 6, + "exactUniqueEndpointPairs": 6, + "uniqueEndpointPairs": 16 + }, + "handles": { + "crossFileEdges": 0, + "edgeBearingNodes": 10, + "edges": 5, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "implements": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "imports": { + "crossFileEdges": 12, + "edgeBearingNodes": 210, + "edges": 144, + "exactCrossFileEdges": 12, + "exactEdgeBearingNodes": 50, + "exactEdges": 29, + "exactUniqueEndpointPairs": 29, + "uniqueEndpointPairs": 144 + }, + "instantiates": { + "crossFileEdges": 0, + "edgeBearingNodes": 12, + "edges": 6, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 6 + }, + "maps_to": { + "crossFileEdges": 10, + "edgeBearingNodes": 19, + "edges": 10, + "exactCrossFileEdges": 10, + "exactEdgeBearingNodes": 19, + "exactEdges": 10, + "exactUniqueEndpointPairs": 10, + "uniqueEndpointPairs": 10 + }, + "mixes_in": { + "crossFileEdges": 0, + "edgeBearingNodes": 4, + "edges": 2, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 4, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 2 + }, + "overrides": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "produces": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "publishes": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "reads": { + "crossFileEdges": 0, + "edgeBearingNodes": 6, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 6, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "references": { + "crossFileEdges": 7, + "edgeBearingNodes": 200, + "edges": 137, + "exactCrossFileEdges": 7, + "exactEdgeBearingNodes": 80, + "exactEdges": 52, + "exactUniqueEndpointPairs": 49, + "uniqueEndpointPairs": 131 + }, + "registers": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "renders": { + "crossFileEdges": 4, + "edgeBearingNodes": 7, + "edges": 5, + "exactCrossFileEdges": 4, + "exactEdgeBearingNodes": 7, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "returns": { + "crossFileEdges": 0, + "edgeBearingNodes": 12, + "edges": 6, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 6 + }, + "routes_to": { + "crossFileEdges": 14, + "edgeBearingNodes": 197, + "edges": 114, + "exactCrossFileEdges": 14, + "exactEdgeBearingNodes": 197, + "exactEdges": 114, + "exactUniqueEndpointPairs": 113, + "uniqueEndpointPairs": 113 + }, + "schedules": { + "crossFileEdges": 0, + "edgeBearingNodes": 10, + "edges": 5, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "subscribes": { + "crossFileEdges": 0, + "edgeBearingNodes": 6, + "edges": 3, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 6, + "exactEdges": 3, + "exactUniqueEndpointPairs": 3, + "uniqueEndpointPairs": 3 + }, + "tests": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "triggers": { + "crossFileEdges": 0, + "edgeBearingNodes": 13, + "edges": 7, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 13, + "exactEdges": 7, + "exactUniqueEndpointPairs": 7, + "uniqueEndpointPairs": 7 + }, + "type_of": { + "crossFileEdges": 0, + "edgeBearingNodes": 14, + "edges": 8, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 9, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 8 + }, + "writes": { + "crossFileEdges": 0, + "edgeBearingNodes": 3, + "edges": 2, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 3, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 2 + } + } + }, + "removed": [ + { + "edgeId": "sha256:3aa44343cb0774ab19678aab3ea377d69781a9b0e22e6c7bf4bf7ba54f24f616", + "kind": "contains", + "framework": "react-router", + "source": { + "file": "fixtures/code-graph/frontend-react/src/routes/home.tsx", + "startByte": 228, + "endByte": 274, + "startLine": 9, + "startColumn": 2, + "endLine": 9, + "endColumn": 48 + }, + "target": { + "file": "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx", + "startByte": 0, + "endByte": 291, + "startLine": 1, + "startColumn": 0, + "endLine": 12, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:3c0731a84fa2ef12843d75ebae20556eda6a3372c1756380c1de41b5b24e5cdb", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/api/items/[id].ts", + "startByte": 0, + "endByte": 143, + "startLine": 1, + "startColumn": 0, + "endLine": 8, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:4e8881635f480ed920670d90fa8d2c3051b9d98b5d059349e87b8d29ad85d84e", + "kind": "contains", + "framework": "next", + "source": { + "file": "fixtures/code-graph/frontend-react/src/app/admin/page.tsx", + "startByte": 0, + "endByte": 123, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/frontend-react/src/app/admin/settings/page.tsx", + "startByte": 0, + "endByte": 143, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:5ae11324f64f9a609b5a24016f510b99f4f51ea0a2860061408943c409c8dbc4", + "kind": "contains", + "framework": "nuxt", + "source": { + "file": "fixtures/code-graph/routes/typescript/nuxt/server/api/users.get.ts", + "startByte": 0, + "endByte": 54, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/nuxt/server/api/users/[id].post.ts", + "startByte": 0, + "endByte": 57, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:5e07c1998ceb2f807df7ef57d15c19b0ba1c97364ac7c4cb7b0768e10387557b", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/users/[id].ts", + "startByte": 0, + "endByte": 61, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:74b5ddc96a4ba0ec2403b0a4ad937f2ba30d36792459bbaa69a607d40a39a775", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/api/items/[id].ts", + "startByte": 0, + "endByte": 143, + "startLine": 1, + "startColumn": 0, + "endLine": 8, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:af33acc5c2410bfe410a84dcd588d63735560f116d81da4ceb1c7c369c5dc79f", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/files/[...rest].astro", + "startByte": 0, + "endByte": 56, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:bb46aca40a48532523fe60b675b4535a3e21c26156e42364bf3b70d4ed6c1c57", + "kind": "contains", + "framework": "sveltekit", + "source": { + "file": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+page.svelte", + "startByte": 0, + "endByte": 75, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+server.ts", + "startByte": 0, + "endByte": 61, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:be0806a621daff555e8e36c37ba605edfbf50402e8d893ab6360c06feb84182c", + "kind": "contains", + "framework": "react-router", + "source": { + "file": "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx", + "startByte": 0, + "endByte": 291, + "startLine": 1, + "startColumn": 0, + "endLine": 12, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/frontend-react/src/routes/home.tsx", + "startByte": 228, + "endByte": 274, + "startLine": 9, + "startColumn": 2, + "endLine": 9, + "endColumn": 48 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:d46d3de0405622e796a7a6f0dcc243408431e4164c43d12c8a32847aa3b5b02d", + "kind": "contains", + "framework": "sveltekit", + "source": { + "file": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+server.ts", + "startByte": 0, + "endByte": 61, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+page.svelte", + "startByte": 0, + "endByte": 75, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:ecfc5aa101e90cb633af15515c78217dce4aa5e4ceb17ab4361dbc70e490bd14", + "kind": "contains", + "framework": "next", + "source": { + "file": "fixtures/code-graph/frontend-react/src/app/page.tsx", + "startByte": 0, + "endByte": 118, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/frontend-react/src/app/admin/page.tsx", + "startByte": 0, + "endByte": 123, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:f3ec5a2fafccd62c8b555db443547e3846923fb5101e9a26d70dadc737902266", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/blog/[slug].astro", + "startByte": 0, + "endByte": 55, + "startLine": 1, + "startColumn": 0, + "endLine": 5, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + } + ], + "added": [], + "nodesUnchangedExceptCommunity": true, + "commonEdgesUnchanged": true + }, + "expanded": { + "beforeGraphSha256": "f151e061efa28f476db8cbcded366e647560b3480fa24470bed11d962c351489", + "afterGraphSha256": "35fc2c2df9b7160000c1187a6519f17a89bdea18d3eb247c9c75532ea23c7367", + "beforeMetrics": { + "communities": 233, + "connectedComponents": 230, + "crossCommunityEdges": 3, + "crossFileEdges": 68, + "crossFileEdgesPerThousandNodes": 52, + "edgeBearingNodes": 1194, + "edgeBearingNodePermille": 924, + "edges": 1293, + "exactConnectedComponents": 506, + "exactCrossCommunityEdges": 3, + "exactCrossFileEdges": 67, + "exactCrossFileEdgesPerThousandNodes": 51, + "exactEdgeBearingNodes": 920, + "exactEdgeBearingNodePermille": 712, + "exactEdges": 972, + "exactIsolatedNodes": 372, + "exactLargestComponentNodes": 54, + "exactSelfLoops": 0, + "exactUniqueTypedEndpointPairs": 964, + "exactUniqueTypedEndpointPairsPerThousandNodes": 746, + "isolatedNodes": 98, + "largestComponentNodes": 81, + "nodes": 1292, + "selfLoops": 0, + "singletonCommunities": 98, + "uniqueTypedEndpointPairs": 1271, + "uniqueTypedEndpointPairsPerThousandNodes": 983, + "byRelation": { + "aliases": { + "crossFileEdges": 0, + "edgeBearingNodes": 18, + "edges": 9, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 18, + "exactEdges": 9, + "exactUniqueEndpointPairs": 9, + "uniqueEndpointPairs": 9 + }, + "calls": { + "crossFileEdges": 1, + "edgeBearingNodes": 132, + "edges": 103, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 24, + "exactEdges": 17, + "exactUniqueEndpointPairs": 13, + "uniqueEndpointPairs": 88 + }, + "consumes": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "contains": { + "crossFileEdges": 15, + "edgeBearingNodes": 769, + "edges": 617, + "exactCrossFileEdges": 15, + "exactEdgeBearingNodes": 769, + "exactEdges": 617, + "exactUniqueEndpointPairs": 617, + "uniqueEndpointPairs": 617 + }, + "decorates": { + "crossFileEdges": 0, + "edgeBearingNodes": 36, + "edges": 18, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 4, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 18 + }, + "depends_on": { + "crossFileEdges": 0, + "edgeBearingNodes": 20, + "edges": 16, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 20, + "exactEdges": 16, + "exactUniqueEndpointPairs": 16, + "uniqueEndpointPairs": 16 + }, + "documents": { + "crossFileEdges": 3, + "edgeBearingNodes": 5, + "edges": 3, + "exactCrossFileEdges": 3, + "exactEdgeBearingNodes": 5, + "exactEdges": 3, + "exactUniqueEndpointPairs": 3, + "uniqueEndpointPairs": 3 + }, + "exports": { + "crossFileEdges": 0, + "edgeBearingNodes": 53, + "edges": 29, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 52, + "exactEdges": 28, + "exactUniqueEndpointPairs": 28, + "uniqueEndpointPairs": 29 + }, + "extends": { + "crossFileEdges": 0, + "edgeBearingNodes": 28, + "edges": 16, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 11, + "exactEdges": 6, + "exactUniqueEndpointPairs": 6, + "uniqueEndpointPairs": 16 + }, + "handles": { + "crossFileEdges": 0, + "edgeBearingNodes": 10, + "edges": 5, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "implements": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "imports": { + "crossFileEdges": 14, + "edgeBearingNodes": 212, + "edges": 146, + "exactCrossFileEdges": 14, + "exactEdgeBearingNodes": 52, + "exactEdges": 31, + "exactUniqueEndpointPairs": 31, + "uniqueEndpointPairs": 146 + }, + "instantiates": { + "crossFileEdges": 0, + "edgeBearingNodes": 12, + "edges": 6, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 6 + }, + "maps_to": { + "crossFileEdges": 10, + "edgeBearingNodes": 19, + "edges": 10, + "exactCrossFileEdges": 10, + "exactEdgeBearingNodes": 19, + "exactEdges": 10, + "exactUniqueEndpointPairs": 10, + "uniqueEndpointPairs": 10 + }, + "mixes_in": { + "crossFileEdges": 0, + "edgeBearingNodes": 4, + "edges": 2, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 4, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 2 + }, + "overrides": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "produces": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "publishes": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "reads": { + "crossFileEdges": 0, + "edgeBearingNodes": 6, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 6, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "references": { + "crossFileEdges": 7, + "edgeBearingNodes": 206, + "edges": 141, + "exactCrossFileEdges": 7, + "exactEdgeBearingNodes": 84, + "exactEdges": 54, + "exactUniqueEndpointPairs": 51, + "uniqueEndpointPairs": 135 + }, + "registers": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "renders": { + "crossFileEdges": 4, + "edgeBearingNodes": 7, + "edges": 5, + "exactCrossFileEdges": 4, + "exactEdgeBearingNodes": 7, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "returns": { + "crossFileEdges": 0, + "edgeBearingNodes": 12, + "edges": 6, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 6 + }, + "routes_to": { + "crossFileEdges": 14, + "edgeBearingNodes": 201, + "edges": 116, + "exactCrossFileEdges": 14, + "exactEdgeBearingNodes": 201, + "exactEdges": 116, + "exactUniqueEndpointPairs": 115, + "uniqueEndpointPairs": 115 + }, + "schedules": { + "crossFileEdges": 0, + "edgeBearingNodes": 10, + "edges": 5, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "subscribes": { + "crossFileEdges": 0, + "edgeBearingNodes": 6, + "edges": 3, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 6, + "exactEdges": 3, + "exactUniqueEndpointPairs": 3, + "uniqueEndpointPairs": 3 + }, + "tests": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "triggers": { + "crossFileEdges": 0, + "edgeBearingNodes": 13, + "edges": 7, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 13, + "exactEdges": 7, + "exactUniqueEndpointPairs": 7, + "uniqueEndpointPairs": 7 + }, + "type_of": { + "crossFileEdges": 0, + "edgeBearingNodes": 14, + "edges": 8, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 9, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 8 + }, + "writes": { + "crossFileEdges": 0, + "edgeBearingNodes": 3, + "edges": 2, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 3, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 2 + } + } + }, + "afterMetrics": { + "communities": 239, + "connectedComponents": 236, + "crossCommunityEdges": 3, + "crossFileEdges": 57, + "crossFileEdgesPerThousandNodes": 44, + "edgeBearingNodes": 1193, + "edgeBearingNodePermille": 923, + "edges": 1282, + "exactConnectedComponents": 512, + "exactCrossCommunityEdges": 3, + "exactCrossFileEdges": 56, + "exactCrossFileEdgesPerThousandNodes": 43, + "exactEdgeBearingNodes": 919, + "exactEdgeBearingNodePermille": 711, + "exactEdges": 961, + "exactIsolatedNodes": 373, + "exactLargestComponentNodes": 54, + "exactSelfLoops": 0, + "exactUniqueTypedEndpointPairs": 953, + "exactUniqueTypedEndpointPairsPerThousandNodes": 737, + "isolatedNodes": 99, + "largestComponentNodes": 81, + "nodes": 1292, + "selfLoops": 0, + "singletonCommunities": 99, + "uniqueTypedEndpointPairs": 1260, + "uniqueTypedEndpointPairsPerThousandNodes": 975, + "byRelation": { + "aliases": { + "crossFileEdges": 0, + "edgeBearingNodes": 18, + "edges": 9, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 18, + "exactEdges": 9, + "exactUniqueEndpointPairs": 9, + "uniqueEndpointPairs": 9 + }, + "calls": { + "crossFileEdges": 1, + "edgeBearingNodes": 132, + "edges": 103, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 24, + "exactEdges": 17, + "exactUniqueEndpointPairs": 13, + "uniqueEndpointPairs": 88 + }, + "consumes": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "contains": { + "crossFileEdges": 4, + "edgeBearingNodes": 757, + "edges": 606, + "exactCrossFileEdges": 4, + "exactEdgeBearingNodes": 757, + "exactEdges": 606, + "exactUniqueEndpointPairs": 606, + "uniqueEndpointPairs": 606 + }, + "decorates": { + "crossFileEdges": 0, + "edgeBearingNodes": 36, + "edges": 18, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 4, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 18 + }, + "depends_on": { + "crossFileEdges": 0, + "edgeBearingNodes": 20, + "edges": 16, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 20, + "exactEdges": 16, + "exactUniqueEndpointPairs": 16, + "uniqueEndpointPairs": 16 + }, + "documents": { + "crossFileEdges": 3, + "edgeBearingNodes": 5, + "edges": 3, + "exactCrossFileEdges": 3, + "exactEdgeBearingNodes": 5, + "exactEdges": 3, + "exactUniqueEndpointPairs": 3, + "uniqueEndpointPairs": 3 + }, + "exports": { + "crossFileEdges": 0, + "edgeBearingNodes": 53, + "edges": 29, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 52, + "exactEdges": 28, + "exactUniqueEndpointPairs": 28, + "uniqueEndpointPairs": 29 + }, + "extends": { + "crossFileEdges": 0, + "edgeBearingNodes": 28, + "edges": 16, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 11, + "exactEdges": 6, + "exactUniqueEndpointPairs": 6, + "uniqueEndpointPairs": 16 + }, + "handles": { + "crossFileEdges": 0, + "edgeBearingNodes": 10, + "edges": 5, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "implements": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "imports": { + "crossFileEdges": 14, + "edgeBearingNodes": 212, + "edges": 146, + "exactCrossFileEdges": 14, + "exactEdgeBearingNodes": 52, + "exactEdges": 31, + "exactUniqueEndpointPairs": 31, + "uniqueEndpointPairs": 146 + }, + "instantiates": { + "crossFileEdges": 0, + "edgeBearingNodes": 12, + "edges": 6, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 6 + }, + "maps_to": { + "crossFileEdges": 10, + "edgeBearingNodes": 19, + "edges": 10, + "exactCrossFileEdges": 10, + "exactEdgeBearingNodes": 19, + "exactEdges": 10, + "exactUniqueEndpointPairs": 10, + "uniqueEndpointPairs": 10 + }, + "mixes_in": { + "crossFileEdges": 0, + "edgeBearingNodes": 4, + "edges": 2, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 4, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 2 + }, + "overrides": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "produces": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "publishes": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "reads": { + "crossFileEdges": 0, + "edgeBearingNodes": 6, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 6, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "references": { + "crossFileEdges": 7, + "edgeBearingNodes": 206, + "edges": 141, + "exactCrossFileEdges": 7, + "exactEdgeBearingNodes": 84, + "exactEdges": 54, + "exactUniqueEndpointPairs": 51, + "uniqueEndpointPairs": 135 + }, + "registers": { + "crossFileEdges": 0, + "edgeBearingNodes": 8, + "edges": 4, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 4 + }, + "renders": { + "crossFileEdges": 4, + "edgeBearingNodes": 7, + "edges": 5, + "exactCrossFileEdges": 4, + "exactEdgeBearingNodes": 7, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "returns": { + "crossFileEdges": 0, + "edgeBearingNodes": 12, + "edges": 6, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 8, + "exactEdges": 4, + "exactUniqueEndpointPairs": 4, + "uniqueEndpointPairs": 6 + }, + "routes_to": { + "crossFileEdges": 14, + "edgeBearingNodes": 201, + "edges": 116, + "exactCrossFileEdges": 14, + "exactEdgeBearingNodes": 201, + "exactEdges": 116, + "exactUniqueEndpointPairs": 115, + "uniqueEndpointPairs": 115 + }, + "schedules": { + "crossFileEdges": 0, + "edgeBearingNodes": 10, + "edges": 5, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 10, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 5 + }, + "subscribes": { + "crossFileEdges": 0, + "edgeBearingNodes": 6, + "edges": 3, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 6, + "exactEdges": 3, + "exactUniqueEndpointPairs": 3, + "uniqueEndpointPairs": 3 + }, + "tests": { + "crossFileEdges": 0, + "edgeBearingNodes": 2, + "edges": 1, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 2, + "exactEdges": 1, + "exactUniqueEndpointPairs": 1, + "uniqueEndpointPairs": 1 + }, + "triggers": { + "crossFileEdges": 0, + "edgeBearingNodes": 13, + "edges": 7, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 13, + "exactEdges": 7, + "exactUniqueEndpointPairs": 7, + "uniqueEndpointPairs": 7 + }, + "type_of": { + "crossFileEdges": 0, + "edgeBearingNodes": 14, + "edges": 8, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 9, + "exactEdges": 5, + "exactUniqueEndpointPairs": 5, + "uniqueEndpointPairs": 8 + }, + "writes": { + "crossFileEdges": 0, + "edgeBearingNodes": 3, + "edges": 2, + "exactCrossFileEdges": 0, + "exactEdgeBearingNodes": 3, + "exactEdges": 2, + "exactUniqueEndpointPairs": 2, + "uniqueEndpointPairs": 2 + } + } + }, + "removed": [ + { + "edgeId": "sha256:3aa44343cb0774ab19678aab3ea377d69781a9b0e22e6c7bf4bf7ba54f24f616", + "kind": "contains", + "framework": "react-router", + "source": { + "file": "fixtures/code-graph/frontend-react/src/routes/home.tsx", + "startByte": 228, + "endByte": 274, + "startLine": 9, + "startColumn": 2, + "endLine": 9, + "endColumn": 48 + }, + "target": { + "file": "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx", + "startByte": 0, + "endByte": 291, + "startLine": 1, + "startColumn": 0, + "endLine": 12, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:3c0731a84fa2ef12843d75ebae20556eda6a3372c1756380c1de41b5b24e5cdb", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/api/items/[id].ts", + "startByte": 0, + "endByte": 143, + "startLine": 1, + "startColumn": 0, + "endLine": 8, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:5ae11324f64f9a609b5a24016f510b99f4f51ea0a2860061408943c409c8dbc4", + "kind": "contains", + "framework": "nuxt", + "source": { + "file": "fixtures/code-graph/routes/typescript/nuxt/server/api/users.get.ts", + "startByte": 0, + "endByte": 54, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/nuxt/server/api/users/[id].post.ts", + "startByte": 0, + "endByte": 57, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:5e07c1998ceb2f807df7ef57d15c19b0ba1c97364ac7c4cb7b0768e10387557b", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/users/[id].ts", + "startByte": 0, + "endByte": 61, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:74b5ddc96a4ba0ec2403b0a4ad937f2ba30d36792459bbaa69a607d40a39a775", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/api/items/[id].ts", + "startByte": 0, + "endByte": 143, + "startLine": 1, + "startColumn": 0, + "endLine": 8, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:8aacce23b5a2487d3bb46f47f728bb0ab266cfc21d6449cf9b63cc2e25fb79f6", + "kind": "contains", + "framework": "next", + "source": { + "file": "fixtures/code-graph/frontend-react/src/app/admin/page.tsx", + "startByte": 0, + "endByte": 123, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/frontend-react/src/app/admin/layout.tsx", + "startByte": 0, + "endByte": 125, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:af33acc5c2410bfe410a84dcd588d63735560f116d81da4ceb1c7c369c5dc79f", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/files/[...rest].astro", + "startByte": 0, + "endByte": 56, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:bb46aca40a48532523fe60b675b4535a3e21c26156e42364bf3b70d4ed6c1c57", + "kind": "contains", + "framework": "sveltekit", + "source": { + "file": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+page.svelte", + "startByte": 0, + "endByte": 75, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+server.ts", + "startByte": 0, + "endByte": 61, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:bc51e7d1d4870e3569f5e8074fcddd5fcd8bca5ba508e5c18f330aef59420911", + "kind": "contains", + "framework": "next", + "source": { + "file": "fixtures/code-graph/frontend-react/src/app/page.tsx", + "startByte": 0, + "endByte": 118, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/frontend-react/src/app/layout.tsx", + "startByte": 0, + "endByte": 131, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:be0806a621daff555e8e36c37ba605edfbf50402e8d893ab6360c06feb84182c", + "kind": "contains", + "framework": "react-router", + "source": { + "file": "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx", + "startByte": 0, + "endByte": 291, + "startLine": 1, + "startColumn": 0, + "endLine": 12, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/frontend-react/src/routes/home.tsx", + "startByte": 228, + "endByte": 274, + "startLine": 9, + "startColumn": 2, + "endLine": 9, + "endColumn": 48 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:d46d3de0405622e796a7a6f0dcc243408431e4164c43d12c8a32847aa3b5b02d", + "kind": "contains", + "framework": "sveltekit", + "source": { + "file": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+server.ts", + "startByte": 0, + "endByte": 61, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+page.svelte", + "startByte": 0, + "endByte": 75, + "startLine": 1, + "startColumn": 0, + "endLine": 6, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + }, + { + "edgeId": "sha256:f3ec5a2fafccd62c8b555db443547e3846923fb5101e9a26d70dadc737902266", + "kind": "contains", + "framework": "astro", + "source": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "startByte": 0, + "endByte": 15, + "startLine": 1, + "startColumn": 0, + "endLine": 2, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/routes/typescript/astro/src/pages/blog/[slug].astro", + "startByte": 0, + "endByte": 55, + "startLine": 1, + "startColumn": 0, + "endLine": 5, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + } + ], + "added": [ + { + "edgeId": "sha256:7967424549b29c267d115cd60a4426bb1cf23abf50811f98ae62346f24f49388", + "kind": "contains", + "framework": "next", + "source": { + "file": "fixtures/code-graph/frontend-react/src/app/layout.tsx", + "startByte": 0, + "endByte": 131, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "target": { + "file": "fixtures/code-graph/frontend-react/src/app/admin/layout.tsx", + "startByte": 0, + "endByte": 125, + "startLine": 1, + "startColumn": 0, + "endLine": 4, + "endColumn": 0 + }, + "rule": "framework-route-hierarchy" + } + ], + "nodesUnchangedExceptCommunity": true, + "commonEdgesUnchanged": true + }, + "fixtureAddition": { + "files": [ + "fixtures/code-graph/frontend-react/src/app/layout.tsx", + "fixtures/code-graph/frontend-react/src/app/admin/layout.tsx" + ], + "addedNodes": 16, + "addedEdges": 24, + "removedNodes": 0, + "removedEdges": 0, + "note": "Two layout modules add declarations, parameters, default exports, type references, Vite glob imports, route targets, and four containing layout relationships. Source additions are kept separate from the identical-input production comparison." + }, + "semanticAssertions": { + "negativeGroups": 18, + "restoredFalseEdgesIndividuallyRejected": [ + "sha256:3aa44343cb0774ab19678aab3ea377d69781a9b0e22e6c7bf4bf7ba54f24f616", + "sha256:3c0731a84fa2ef12843d75ebae20556eda6a3372c1756380c1de41b5b24e5cdb", + "sha256:4e8881635f480ed920670d90fa8d2c3051b9d98b5d059349e87b8d29ad85d84e", + "sha256:5ae11324f64f9a609b5a24016f510b99f4f51ea0a2860061408943c409c8dbc4", + "sha256:5e07c1998ceb2f807df7ef57d15c19b0ba1c97364ac7c4cb7b0768e10387557b", + "sha256:74b5ddc96a4ba0ec2403b0a4ad937f2ba30d36792459bbaa69a607d40a39a775", + "sha256:af33acc5c2410bfe410a84dcd588d63735560f116d81da4ceb1c7c369c5dc79f", + "sha256:bb46aca40a48532523fe60b675b4535a3e21c26156e42364bf3b70d4ed6c1c57", + "sha256:be0806a621daff555e8e36c37ba605edfbf50402e8d893ab6360c06feb84182c", + "sha256:d46d3de0405622e796a7a6f0dcc243408431e4164c43d12c8a32847aa3b5b02d", + "sha256:ecfc5aa101e90cb633af15515c78217dce4aa5e4ceb17ab4361dbc70e490bd14", + "sha256:f3ec5a2fafccd62c8b555db443547e3846923fb5101e9a26d70dadc737902266" + ], + "exactLayoutEdges": 4, + "missingLayoutEdgesIndividuallyRejected": 4 + }, + "policyChanges": [ + { + "category": "minimums", + "metric": "communities", + "beforeMetric": 232, + "afterMetric": 239, + "beforeBound": 232, + "afterBound": 239, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "edges", + "beforeMetric": 1270, + "afterMetric": 1282, + "beforeBound": 1265, + "afterBound": 1277, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "exactCrossFileEdges", + "beforeMetric": 62, + "afterMetric": 56, + "beforeBound": 62, + "afterBound": 56, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "exactCrossFileEdgesPerThousandNodes", + "beforeMetric": 48, + "afterMetric": 43, + "beforeBound": 48, + "afterBound": 43, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "exactEdgeBearingNodePermille", + "beforeMetric": 710, + "afterMetric": 711, + "beforeBound": 709, + "afterBound": 710, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "exactEdgeBearingNodes", + "beforeMetric": 906, + "afterMetric": 919, + "beforeBound": 905, + "afterBound": 918, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "exactEdges", + "beforeMetric": 951, + "afterMetric": 961, + "beforeBound": 946, + "afterBound": 956, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "exactUniqueTypedEndpointPairs", + "beforeMetric": 943, + "afterMetric": 953, + "beforeBound": 938, + "afterBound": 948, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "exactUniqueTypedEndpointPairsPerThousandNodes", + "beforeMetric": 739, + "afterMetric": 737, + "beforeBound": 735, + "afterBound": 733, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "nodes", + "beforeMetric": 1276, + "afterMetric": 1292, + "beforeBound": 1276, + "afterBound": 1292, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "minimums", + "metric": "uniqueTypedEndpointPairs", + "beforeMetric": 1248, + "afterMetric": 1260, + "beforeBound": 1243, + "afterBound": 1255, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "maximums", + "metric": "communities", + "beforeMetric": 232, + "afterMetric": 239, + "beforeBound": 233, + "afterBound": 240, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "maximums", + "metric": "connectedComponents", + "beforeMetric": 229, + "afterMetric": 236, + "beforeBound": 230, + "afterBound": 237, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "maximums", + "metric": "exactConnectedComponents", + "beforeMetric": 503, + "afterMetric": 512, + "beforeBound": 504, + "afterBound": 513, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "maximums", + "metric": "exactIsolatedNodes", + "beforeMetric": 370, + "afterMetric": 373, + "beforeBound": 371, + "afterBound": 374, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "maximums", + "metric": "isolatedNodes", + "beforeMetric": 98, + "afterMetric": 99, + "beforeBound": 99, + "afterBound": 100, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "maximums", + "metric": "singletonCommunities", + "beforeMetric": 98, + "afterMetric": 99, + "beforeBound": 99, + "afterBound": 100, + "reason": "Measured correction on unchanged original corpus plus separately reviewed addition of two layout fixtures; previous bound margin retained." + }, + { + "category": "relationshipMinimums", + "relation": "contains", + "metric": "exactCrossFileEdges", + "beforeMetric": 12, + "afterMetric": 4, + "beforeBound": 12, + "afterBound": 4 + }, + { + "category": "relationshipMinimums", + "relation": "imports", + "metric": "exactCrossFileEdges", + "beforeMetric": 12, + "afterMetric": 14, + "beforeBound": 12, + "afterBound": 14 + }, + { + "category": "relationshipMinimums", + "relation": "imports", + "metric": "exactUniqueEndpointPairs", + "beforeMetric": 29, + "afterMetric": 31, + "beforeBound": 29, + "afterBound": 31 + }, + { + "category": "relationshipMinimums", + "relation": "references", + "metric": "exactUniqueEndpointPairs", + "beforeMetric": 49, + "afterMetric": 51, + "beforeBound": 49, + "afterBound": 51 + }, + { + "category": "relationshipMinimums", + "relation": "routes_to", + "metric": "exactUniqueEndpointPairs", + "beforeMetric": 113, + "afterMetric": 115, + "beforeBound": 111, + "afterBound": 113 + } + ], + "artifactSha256": { + "semantic-route-parent-fixture-delta/original-delta.json": "7ba3a6dc0c07c1d37bf9f1db588c2df6fe0d8eb21256986e4c67f201eaa1d5b9", + "semantic-route-parent-fixture-delta/expanded-delta.json": "a0ae2b90b86d4fe6b511d1b94be2a73cb69cd853e1524a44e4b8d961a057ae46", + "semantic-route-parent-fixture-delta/fixture-addition-delta.json": "7ebfc69c21c62ff8da71e68adc38542793a947f974d25eac4dbad9b6454e0e1a", + "semantic-route-parent-fixture-delta/source-inventories.json": "2fbdb4d3b12e29b00324832ac2710f2b29b427f15a51342ad7b67f315cb191fb" + } +} diff --git a/benchmarks/agent_query/source_first_hub_capture.py b/benchmarks/agent_query/source_first_hub_capture.py new file mode 100644 index 000000000..9a1e60ac9 --- /dev/null +++ b/benchmarks/agent_query/source_first_hub_capture.py @@ -0,0 +1,168 @@ +"""Capture registered public hub requests on pinned paired graph artifacts.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import shutil +import subprocess +import time +from pathlib import Path +from types import SimpleNamespace + +from benchmarks.agent_query.mcp_compare import verify_environment +from benchmarks.agent_query.mcp_transport import StdioMcp + + +def sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as stream: + for chunk in iter(lambda: stream.read(1024 * 1024), b""): + digest.update(chunk) + return digest.hexdigest() + + +def checked_source(root: Path, registered: dict) -> None: + head = subprocess.run( + ["git", "-C", str(root), "rev-parse", "HEAD"], + check=True, capture_output=True, text=True, + ).stdout.strip() + dirty = subprocess.run( + ["git", "-C", str(root), "status", "--porcelain=v1"], + check=True, capture_output=True, text=True, + ).stdout.strip() + if head != registered["commit"] or dirty: + raise ValueError(f"{registered['name']} source checkout changed") + for witness in registered["witnesses"]: + relative = Path(witness["file"]) + if relative.is_absolute() or ".." in relative.parts: + raise ValueError("invalid registered source path") + path = root / relative + if sha256(path) != witness["fileSha256"]: + raise ValueError(f"source bytes changed: {relative}") + lines = path.read_text().splitlines() + if lines[witness["line"] - 1] != witness["sourceLine"]: + raise ValueError(f"source anchor changed: {relative}:{witness['line']}") + + +def capture(args: argparse.Namespace) -> None: + registration = json.loads(args.registration.read_text()) + if registration["schema"] != "compass.source-first-hub-three-language-registration/1": + raise ValueError("unsupported registration schema") + source_run = json.loads((args.source_run / "run.json").read_text()) + if source_run["suiteDigest"] != registration["sourceSuiteSha256"]: + raise ValueError("source suite changed") + for name, path in [ + ("compass", args.compass), + ("graphifyMcpPython", args.graphify_python), + ("graphifyCli", args.graphify_cli), + ]: + if sha256(path) != registration["binarySha256"][name]: + raise ValueError(f"{name} binary changed") + if sha256(args.graphify_environment) != registration["graphifyMcpEnvironmentSha256"]: + raise ValueError("Graphify MCP environment manifest changed") + verify_environment(SimpleNamespace( + graphify_python=args.graphify_python, + graphify_environment=args.graphify_environment, + )) + + prepared = [] + for registered in registration["repositories"]: + matches = [item for item in source_run["repositories"] + if item["repository"] == registered["name"]] + if len(matches) != 1: + raise ValueError("registered repository has no unique captured run") + repository = matches[0] + root = Path(repository["source"]) + checked_source(root, registered) + graph_paths = {} + for tool in ("compass", "graphify"): + path = Path(repository[f"{tool}Graph"]) + if sha256(path) != registered["graphSha256"][tool]: + raise ValueError(f"{registered['name']} {tool} graph changed") + graph_paths[tool] = path + prepared.append((registered, root, graph_paths)) + + args.output.mkdir(parents=True, exist_ok=False) + shutil.copy2(args.registration, args.output / "registration.json") + shutil.copy2(Path(__file__), args.output / "collector.py") + report = { + "schema": "compass.source-first-hub-three-language-capture/1", + "complete": False, + "registrationSha256": sha256(args.registration), + "sourceRunJsonSha256": sha256(args.source_run / "run.json"), + "collectorSha256": sha256(Path(__file__)), + "transportSha256": sha256(Path(__file__).with_name("mcp_transport.py")), + "binarySha256": registration["binarySha256"], + "results": [], + } + run_file = args.output / "run.json" + for registered, root, graphs in prepared: + for tool in ("compass", "graphify"): + argv = ([str(args.compass), "serve"] if tool == "compass" else + [str(args.graphify_python), "-m", "graphify.serve"]) + argv += ["--graph", str(graphs[tool]), "--transport", "stdio"] + directory = args.output / "raw" / registered["name"] / tool + result = { + "repository": registered["name"], + "tool": tool, + "method": "god_nodes", + "arguments": registration["toolRequest"]["arguments"], + "graphSha256": registered["graphSha256"][tool], + "argv": argv, + } + started = time.monotonic() + try: + with StdioMcp( + argv, root, directory, + timeout=registration["toolRequest"]["timeoutSeconds"], + max_bytes=registration["toolRequest"]["maxResponseBytes"], + ) as session: + session.initialize() + listing = session.send("tools/list", {}) + advertised = {item["name"] for item in + listing.get("result", {}).get("tools", [])} + if "god_nodes" not in advertised: + raise ValueError("server did not advertise god_nodes") + response = session.send("tools/call", { + "name": "god_nodes", + "arguments": registration["toolRequest"]["arguments"], + }) + content = response.get("result", {}).get("content", []) + rendered = "\n".join(item["text"] for item in content + if item.get("type") == "text") + result.update({ + "response": response, + "text": rendered, + "textBytes": len(rendered.encode()), + "executionSucceeded": "error" not in response + and not response.get("result", {}).get("isError", False), + }) + except (OSError, ValueError, RuntimeError, TimeoutError) as error: + result.update({"executionSucceeded": False, "captureError": str(error)}) + result["wallMs"] = round((time.monotonic() - started) * 1000) + report["results"].append(result) + run_file.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n") + print(registered["name"], tool, result["executionSucceeded"], flush=True) + if sha256(graphs[tool]) != registered["graphSha256"][tool]: + raise ValueError("graph changed during capture") + checked_source(root, registered) + verify_environment(SimpleNamespace( + graphify_python=args.graphify_python, + graphify_environment=args.graphify_environment, + )) + report["complete"] = True + run_file.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--source-run", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--compass", type=Path, required=True) + parser.add_argument("--graphify-python", type=Path, required=True) + parser.add_argument("--graphify-cli", type=Path, required=True) + parser.add_argument("--graphify-environment", type=Path, required=True) + capture(parser.parse_args()) diff --git a/benchmarks/agent_query/source_first_hub_review.py b/benchmarks/agent_query/source_first_hub_review.py new file mode 100644 index 000000000..73f314a27 --- /dev/null +++ b/benchmarks/agent_query/source_first_hub_review.py @@ -0,0 +1,132 @@ +"""Review registered source witnesses against captured public hub responses. + +This checks retrieval and consistency on each tool's own stored graph. Source +roles are not independent labels for god-object defects. +""" + +from __future__ import annotations + +import argparse +from collections import Counter +import json +from pathlib import Path + +from benchmarks.agent_query.mcp_audit import audit +from benchmarks.agent_query.path_audit import MAX_GRAPH_BYTES, read_bounded +from benchmarks.agent_query.runner import _node_anchor, _sha256_file +from benchmarks.agent_query.source_first_hub_capture import checked_source + + +def load(path: Path, limit: int = 16 * 1024 * 1024) -> dict: + return json.loads(read_bounded(path, limit)) + + +def check_response(run: Path, row: dict) -> None: + directory = run / "raw" / row["repository"] / row["tool"] + expected = {"jsonrpc": "2.0", "id": 4, "method": "tools/call", + "params": {"name": "god_nodes", "arguments": row["arguments"]}} + request = load(directory / "04.request.json", 4096) + if request != expected: + raise ValueError("raw hub request differs from recorded request") + packets = [json.loads(line) for line in + read_bounded(directory / "04.response.jsonl", 16 * 1024 * 1024).splitlines()] + if packets != [row["response"]]: + raise ValueError("raw hub response differs from recorded response") + + +def review(args: argparse.Namespace) -> None: + run = load(args.run / "run.json", 32 * 1024 * 1024) + registration = load(args.registration) + source = load(args.source_run / "run.json") + if run["schema"] != "compass.source-first-hub-three-language-capture/1" or not run["complete"]: + raise ValueError("incomplete or unsupported hub capture") + if registration["schema"] != "compass.source-first-hub-three-language-registration/1": + raise ValueError("unsupported registration") + if run["registrationSha256"] != _sha256_file(args.registration) or _sha256_file(args.run / "registration.json") != run["registrationSha256"]: + raise ValueError("registration bytes changed") + if run["sourceRunJsonSha256"] != _sha256_file(args.source_run / "run.json") or source["suiteDigest"] != registration["sourceSuiteSha256"]: + raise ValueError("source capture changed") + if run["collectorSha256"] != _sha256_file(args.run / "collector.py"): + raise ValueError("captured collector changed") + if run["transportSha256"] != _sha256_file(Path(__file__).with_name("mcp_transport.py")) or run["binarySha256"] != registration["binarySha256"]: + raise ValueError("captured transport or binary manifest changed") + if len(run["results"]) != 2 * len(registration["repositories"]): + raise ValueError("unexpected result count") + pairs = [(row["repository"], row["tool"]) for row in run["results"]] + expected_pairs = [(repo["name"], tool) for repo in registration["repositories"] + for tool in ("compass", "graphify")] + if pairs != expected_pairs: + raise ValueError("missing, duplicate or reordered hub result") + results = [] + for row in run["results"]: + registered = next(r for r in registration["repositories"] if r["name"] == row["repository"]) + captured = next(r for r in source["repositories"] if r["repository"] == row["repository"]) + tool = row["tool"] + if tool not in ("compass", "graphify") or row["method"] != "god_nodes" or row["arguments"] != registration["toolRequest"]["arguments"]: + raise ValueError("unregistered hub request") + if row["graphSha256"] != registered["graphSha256"][tool]: + raise ValueError("recorded graph digest differs") + root = Path(captured["source"]) + checked_source(root, registered) + graph_path = Path(captured[f"{tool}Graph"]) + if _sha256_file(graph_path) != row["graphSha256"]: + raise ValueError("graph bytes changed") + graph = json.loads(read_bounded(graph_path, MAX_GRAPH_BYTES)) + if row["executionSucceeded"]: + check_response(args.run, row) + checked = audit({**row, "question": "hubs"}, graph) + hubs = checked.get("hubs", []) + if row["executionSucceeded"] and (len(hubs) != 100 or [h["rank"] for h in hubs] != list(range(1, 101))): + raise ValueError("successful response lacks 100 ordered hubs") + degree = Counter() + for source_id, target_id in {(e["source"], e["target"]) for e in graph["links"]}: + degree[source_id] += 1 + degree[target_id] += 1 + witnesses = [] + for witness in registered["witnesses"]: + matches = [node for node in graph["nodes"] if + (lambda anchor: anchor[0] == witness["file"] and + anchor[1] == witness["line"] and + witness["symbol"] in anchor[2])(_node_anchor(node, tool))] + result = {"symbol": witness["symbol"], "sourceFile": witness["file"], + "sourceLine": witness["line"], "sourceRole": witness["sourceRole"], + "graphDeclarationMatches": len(matches)} + if len(matches) == 1: + identifier = matches[0]["id"] + result.update(graphId=identifier, storedDegree=degree[identifier]) + hits = [hub for hub in hubs if hub.get("id") == identifier] + if len(hits) > 1: + raise ValueError("duplicate returned hub identity") + if hits: + hit = hits[0] + result.update(returnedRank=hit["rank"], returnedDegree=hit["degree"], + degreeMatches=hit["degreeMatches"], + sourceAnchorMatches=hit.get("sourceAnchorMatches")) + result["top10"] = bool(hits and hits[0]["rank"] <= 10) + result["top50"] = bool(hits and hits[0]["rank"] <= 50) + result["top100"] = bool(hits) + witnesses.append(result) + results.append({"repository": row["repository"], "tool": tool, + "executionSucceeded": row["executionSucceeded"], + "returned": checked.get("returned", 0), + "verifiedIdentities": checked.get("verifiedIdentities", 0), + "matchingDegrees": checked.get("matchingDegrees", 0), + "matchingSourceAnchors": checked.get("matchingSourceAnchors", 0), + "witnesses": witnesses}) + output = {"schema": "compass.source-first-hub-three-language-review/1", + "scope": __doc__, "registrationSha256": run["registrationSha256"], + "runJsonSha256": _sha256_file(args.run / "run.json"), + "results": results} + args.output.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n") + for result in results: + print(result["repository"], result["tool"], + [(w["symbol"], w.get("returnedRank")) for w in result["witnesses"]]) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--registration", type=Path, required=True) + parser.add_argument("--source-run", type=Path, required=True) + parser.add_argument("--run", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + review(parser.parse_args()) diff --git a/benchmarks/agent_query/source_first_hub_three_language_registration.json b/benchmarks/agent_query/source_first_hub_three_language_registration.json new file mode 100644 index 000000000..3c4f3df34 --- /dev/null +++ b/benchmarks/agent_query/source_first_hub_three_language_registration.json @@ -0,0 +1,68 @@ +{ + "schema": "compass.source-first-hub-three-language-registration/1", + "scope": "Source-first selected Go/Python/Rust hub-retrieval and graph-consistency development check on already captured graphs. Source roles are not independent god-object defect labels or a representative sample.", + "sourceRun": "source-first-3lang-01", + "sourceSuiteSha256": "13338a37b219b82d6b0a99f5a8b884cc27efa8043b1a38d5a32dcfa88a53da0e", + "toolRequest": { + "transport": "public stdio MCP", + "method": "god_nodes", + "arguments": {"top_n": 100}, + "timeoutSeconds": 120, + "maxResponseBytes": 16777216 + }, + "binarySha256": { + "compass": "17620181b2ca2fb051b234fa022c1fe1bd03913fad2246f48b643603fe85c623", + "graphifyMcpPython": "bc9a27bd52c265e86fcd73ef1d4165ec8a47695cffb7624cb0ee618dca83e6c0", + "graphifyCli": "a7fdb4ac8985755be15f10f89a2d17ee517130b3ac90c28c91644ae351881da3" + }, + "graphifyMcpEnvironmentSha256": "5c09a057c24e5d8528aa8e88d9195e1298b87fcc5d6b928e935bb439bc3c0535", + "reviewRules": [ + "Run the same public god_nodes(top_n=100) request on each frozen graph; report top-10, top-50 and top-100 prefixes without changing either output.", + "Join each preregistered witness to the exact graph declaration by repository-relative file, declaration start line and source symbol. A missing graph declaration is extraction unavailable, not a ranking miss.", + "Give retrieval credit only for an exact returned graph ID or a globally unique returned label with independently checked source identity. Ambiguous labels remain unresolved.", + "Recompute a returned row's distinct endpoint-pair degree on that tool's own graph. This checks graph consistency, not source correctness or semantic quality.", + "Keep source-role descriptions separate from god-object defect judgments. No source role, file length or high degree is a positive or negative defect label; do not compute god-object precision or superiority from this panel.", + "Retain raw requests, responses, transport errors, graph and source hashes, bounds and unavailable outcomes. Do not pool this selected panel with the Java MLCQ rating cohort." + ], + "repositories": [ + { + "name": "litestream", + "language": "Go", + "commit": "6a71ccd9ad2bea0c4dc19bc274a8dc64c9b0fafa", + "graphSha256": { + "compass": "8dd89c5a60e004c098104ee644b02ddb2d6a64698956ac7f25cdce7c1871a2db", + "graphify": "9cb6df8dcc053cea5b395292a7f460eaaeb2afc566acddb021ae003e51862b0e" + }, + "witnesses": [ + {"file": "store.go", "fileSha256": "56b3da1cdd69e7a3e30b4982f93fcfc4377f7572497c60ac3371cf4b867f7a17", "line": 87, "symbol": "Store", "sourceLine": "type Store struct {", "sourceRole": "Coordinates database lifecycle, compaction, retention, validation and heartbeat work."}, + {"file": "heartbeat.go", "fileSha256": "ef90f2e79f1a8f89bd34a9cada9e3c399a410cf774b5c2b3233863dc7cbf2581", "line": 17, "symbol": "HeartbeatClient", "sourceLine": "type HeartbeatClient struct {", "sourceRole": "Stores heartbeat HTTP timing and ping state."} + ] + }, + { + "name": "fastapi", + "language": "Python", + "commit": "0c2b6aafd7a2e3a5bf1055ea0ed0a41da15ba5f4", + "graphSha256": { + "compass": "1dc5712533cce50634e91994fb6bf888ea35eb0b6b3818432da69518652ac09a", + "graphify": "5ffe3ae56c206c0031fdda3d4f1d8ddaa6d270b9be54b5f3e5c086689829c8ab" + }, + "witnesses": [ + {"file": "fastapi/applications.py", "fileSha256": "38dccb19b2a0b0b984c8d7541263842954a37c087cf96b4463aea17873c6183c", "line": 42, "symbol": "FastAPI", "sourceLine": "class FastAPI(Starlette):", "sourceRole": "Framework application facade for initialization, middleware, OpenAPI and route registration."}, + {"file": "fastapi/datastructures.py", "fileSha256": "5cfba09e88c7738374ede1795e9d534e774fda032fd5f1b893ed0be1576beca7", "line": 153, "symbol": "DefaultPlaceholder", "sourceLine": "class DefaultPlaceholder:", "sourceRole": "Tracks whether a default value was overwritten, including truthy values."} + ] + }, + { + "name": "celld", + "language": "Rust", + "commit": "10cb1303dac710dcb3b557e318e08c855261f68b", + "graphSha256": { + "compass": "6db996ad031824f7b476c16145cc94287738eaba1e63f1802011f70559cfd1d6", + "graphify": "950caea25518bc7e44baa215d2cfcb8dd14c457ef283276b01b6eacf5ba0d750" + }, + "witnesses": [ + {"file": "crates/celld/peer_auth.rs", "fileSha256": "916bff6785a787db68f6dd62e4ac39c983280b3a4a6850e2010653c63dee54f9", "line": 60, "symbol": "PeerAuth", "sourceLine": "pub struct PeerAuth {", "sourceRole": "Signs and verifies peer requests and tracks replay state."}, + {"file": "crates/celld/lib.rs", "fileSha256": "ff26ac585c9da922e3dd38481371601abcc5b73f15bab35001ce6b8ae5d29f12", "line": 439, "symbol": "CellActivityGuard", "sourceLine": "pub struct CellActivityGuard {", "sourceRole": "Completion token that releases a cell activity reservation on drop."} + ] + } + ] +} diff --git a/benchmarks/agent_query/source_first_hub_three_language_review.json b/benchmarks/agent_query/source_first_hub_three_language_review.json new file mode 100644 index 000000000..c978a68b4 --- /dev/null +++ b/benchmarks/agent_query/source_first_hub_three_language_review.json @@ -0,0 +1,246 @@ +{ + "registrationSha256": "da554737c494f51eb15f4b7a8cce8a455382df2c228b97754a88dc46105fb586", + "results": [ + { + "executionSucceeded": true, + "matchingDegrees": 100, + "matchingSourceAnchors": 100, + "repository": "litestream", + "returned": 100, + "tool": "compass", + "verifiedIdentities": 100, + "witnesses": [ + { + "degreeMatches": true, + "graphDeclarationMatches": 1, + "graphId": "sha256:bdf24f8e667b4136921ec5e2e635f1fe317198550929d7dea374613f112cd960", + "returnedDegree": 67, + "returnedRank": 10, + "sourceAnchorMatches": true, + "sourceFile": "store.go", + "sourceLine": 87, + "sourceRole": "Coordinates database lifecycle, compaction, retention, validation and heartbeat work.", + "storedDegree": 67, + "symbol": "Store", + "top10": true, + "top100": true, + "top50": true + }, + { + "graphDeclarationMatches": 1, + "graphId": "sha256:4be04503638287425cbca5db6dd992be9980bd7d11eee27fa9fc6f80d97083a8", + "sourceFile": "heartbeat.go", + "sourceLine": 17, + "sourceRole": "Stores heartbeat HTTP timing and ping state.", + "storedDegree": 11, + "symbol": "HeartbeatClient", + "top10": false, + "top100": false, + "top50": false + } + ] + }, + { + "executionSucceeded": true, + "matchingDegrees": 75, + "matchingSourceAnchors": 0, + "repository": "litestream", + "returned": 100, + "tool": "graphify", + "verifiedIdentities": 75, + "witnesses": [ + { + "degreeMatches": true, + "graphDeclarationMatches": 1, + "graphId": "store_go_litestream_store", + "returnedDegree": 45, + "returnedRank": 13, + "sourceAnchorMatches": null, + "sourceFile": "store.go", + "sourceLine": 87, + "sourceRole": "Coordinates database lifecycle, compaction, retention, validation and heartbeat work.", + "storedDegree": 45, + "symbol": "Store", + "top10": false, + "top100": true, + "top50": true + }, + { + "graphDeclarationMatches": 1, + "graphId": "litestream_heartbeatclient", + "sourceFile": "heartbeat.go", + "sourceLine": 17, + "sourceRole": "Stores heartbeat HTTP timing and ping state.", + "storedDegree": 11, + "symbol": "HeartbeatClient", + "top10": false, + "top100": false, + "top50": false + } + ] + }, + { + "executionSucceeded": true, + "matchingDegrees": 100, + "matchingSourceAnchors": 100, + "repository": "fastapi", + "returned": 100, + "tool": "compass", + "verifiedIdentities": 100, + "witnesses": [ + { + "degreeMatches": true, + "graphDeclarationMatches": 1, + "graphId": "sha256:5c091923f867f766b802854f05750412a14072f3be1b5650c0b238b7efd8cefa", + "returnedDegree": 1401, + "returnedRank": 1, + "sourceAnchorMatches": true, + "sourceFile": "fastapi/applications.py", + "sourceLine": 42, + "sourceRole": "Framework application facade for initialization, middleware, OpenAPI and route registration.", + "storedDegree": 1401, + "symbol": "FastAPI", + "top10": true, + "top100": true, + "top50": true + }, + { + "degreeMatches": true, + "graphDeclarationMatches": 1, + "graphId": "sha256:eb50794f2e4694e41014bf1b89a51f5652e0c85f3c1a73b9860e310011d53874", + "returnedDegree": 42, + "returnedRank": 31, + "sourceAnchorMatches": true, + "sourceFile": "fastapi/datastructures.py", + "sourceLine": 153, + "sourceRole": "Tracks whether a default value was overwritten, including truthy values.", + "storedDegree": 42, + "symbol": "DefaultPlaceholder", + "top10": false, + "top100": true, + "top50": true + } + ] + }, + { + "executionSucceeded": true, + "matchingDegrees": 86, + "matchingSourceAnchors": 0, + "repository": "fastapi", + "returned": 100, + "tool": "graphify", + "verifiedIdentities": 86, + "witnesses": [ + { + "degreeMatches": true, + "graphDeclarationMatches": 1, + "graphId": "fastapi_applications_fastapi", + "returnedDegree": 830, + "returnedRank": 1, + "sourceAnchorMatches": null, + "sourceFile": "fastapi/applications.py", + "sourceLine": 42, + "sourceRole": "Framework application facade for initialization, middleware, OpenAPI and route registration.", + "storedDegree": 830, + "symbol": "FastAPI", + "top10": true, + "top100": true, + "top50": true + }, + { + "degreeMatches": true, + "graphDeclarationMatches": 1, + "graphId": "fastapi_datastructures_defaultplaceholder", + "returnedDegree": 26, + "returnedRank": 31, + "sourceAnchorMatches": null, + "sourceFile": "fastapi/datastructures.py", + "sourceLine": 153, + "sourceRole": "Tracks whether a default value was overwritten, including truthy values.", + "storedDegree": 26, + "symbol": "DefaultPlaceholder", + "top10": false, + "top100": true, + "top50": true + } + ] + }, + { + "executionSucceeded": true, + "matchingDegrees": 100, + "matchingSourceAnchors": 100, + "repository": "celld", + "returned": 100, + "tool": "compass", + "verifiedIdentities": 100, + "witnesses": [ + { + "graphDeclarationMatches": 1, + "graphId": "sha256:7ee2e00c0b938771dc2fe1219d8c9f78497b8db04e38ee16dacb34c103b38b2f", + "sourceFile": "crates/celld/peer_auth.rs", + "sourceLine": 60, + "sourceRole": "Signs and verifies peer requests and tracks replay state.", + "storedDegree": 27, + "symbol": "PeerAuth", + "top10": false, + "top100": false, + "top50": false + }, + { + "graphDeclarationMatches": 1, + "graphId": "sha256:1f821ef235bb5a09a7723afb766cdc3b8a52532f3f49a7f59d48ea7db7ed79eb", + "sourceFile": "crates/celld/lib.rs", + "sourceLine": 439, + "sourceRole": "Completion token that releases a cell activity reservation on drop.", + "storedDegree": 6, + "symbol": "CellActivityGuard", + "top10": false, + "top100": false, + "top50": false + } + ] + }, + { + "executionSucceeded": true, + "matchingDegrees": 86, + "matchingSourceAnchors": 0, + "repository": "celld", + "returned": 100, + "tool": "graphify", + "verifiedIdentities": 86, + "witnesses": [ + { + "degreeMatches": true, + "graphDeclarationMatches": 1, + "graphId": "crates_celld_peer_auth_peerauth", + "returnedDegree": 26, + "returnedRank": 55, + "sourceAnchorMatches": null, + "sourceFile": "crates/celld/peer_auth.rs", + "sourceLine": 60, + "sourceRole": "Signs and verifies peer requests and tracks replay state.", + "storedDegree": 26, + "symbol": "PeerAuth", + "top10": false, + "top100": true, + "top50": false + }, + { + "graphDeclarationMatches": 1, + "graphId": "crates_celld_lib_cellactivityguard", + "sourceFile": "crates/celld/lib.rs", + "sourceLine": 439, + "sourceRole": "Completion token that releases a cell activity reservation on drop.", + "storedDegree": 9, + "symbol": "CellActivityGuard", + "top10": false, + "top100": false, + "top50": false + } + ] + } + ], + "runJsonSha256": "4ce35f4a7dbd7218cfc6ee9e6120b5f75e712bd920d29501c70c5ed5bc6c7a0b", + "schema": "compass.source-first-hub-three-language-review/1", + "scope": "Review registered source witnesses against captured public hub responses.\n\nThis checks retrieval and consistency on each tool's own stored graph. Source\nroles are not independent labels for god-object defects.\n" +} diff --git a/benchmarks/agent_query/source_first_three_language_review.json b/benchmarks/agent_query/source_first_three_language_review.json new file mode 100644 index 000000000..33282f12f --- /dev/null +++ b/benchmarks/agent_query/source_first_three_language_review.json @@ -0,0 +1,389 @@ +{ + "caveat": "A source-backed edge does not validate every other returned relationship or explanation claim. Short-name ambiguity remains a valid refusal; structural paths do not answer direct-call requests.", + "graphPins": [ + { + "repository": "litestream", + "sha256": "8dd89c5a60e004c098104ee644b02ddb2d6a64698956ac7f25cdce7c1871a2db", + "tool": "compass" + }, + { + "repository": "litestream", + "sha256": "9cb6df8dcc053cea5b395292a7f460eaaeb2afc566acddb021ae003e51862b0e", + "tool": "graphify" + }, + { + "repository": "fastapi", + "sha256": "1dc5712533cce50634e91994fb6bf888ea35eb0b6b3818432da69518652ac09a", + "tool": "compass" + }, + { + "repository": "fastapi", + "sha256": "5ffe3ae56c206c0031fdda3d4f1d8ddaa6d270b9be54b5f3e5c086689829c8ab", + "tool": "graphify" + }, + { + "repository": "celld", + "sha256": "6db996ad031824f7b476c16145cc94287738eaba1e63f1802011f70559cfd1d6", + "tool": "compass" + }, + { + "repository": "celld", + "sha256": "950caea25518bc7e44baa215d2cfcb8dd14c457ef283276b01b6eacf5ba0d750", + "tool": "graphify" + } + ], + "questions": [ + { + "question": "litestream-explain-heartbeat", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "litestream", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "c3e84f8890f1789aae9e0f8339d576ee4356a4cdcf29523e262fb11e31792c4f", + "tool": "compass" + }, + { + "question": "litestream-explain-heartbeat", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "litestream", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "4da52cc0ef1e36ea8260a7134b25603118bd5e4e3f8435e90a3c452319cc686b", + "tool": "graphify" + }, + { + "question": "litestream-callees-heartbeat", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "litestream", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "94d7cd78879e63fdfb63d587e83f4db88cef61bda5fcd1c7436dbd121210489a", + "tool": "compass" + }, + { + "question": "litestream-callees-heartbeat", + "registeredTextPass": false, + "renderedDirectCallPath": null, + "repository": "litestream", + "requiredCallEdgesPresent": false, + "sourceSupportedPass": false, + "stdoutSha256": "4da52cc0ef1e36ea8260a7134b25603118bd5e4e3f8435e90a3c452319cc686b", + "tool": "graphify" + }, + { + "question": "litestream-callers-should-ping", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "litestream", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "b6c315a510dace2b262880e1d521746a79ccd00213d63fe87174c6b81e4d5222", + "tool": "compass" + }, + { + "question": "litestream-callers-should-ping", + "registeredTextPass": false, + "renderedDirectCallPath": null, + "repository": "litestream", + "requiredCallEdgesPresent": false, + "sourceSupportedPass": false, + "stdoutSha256": "63d7fce01a6734855ed3869c1bf582722ed044214ad434bb756bfb25bb4d10ae", + "tool": "graphify" + }, + { + "question": "litestream-path-heartbeat", + "registeredTextPass": true, + "renderedDirectCallPath": true, + "repository": "litestream", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "66379164fd4c7bf1cabba8b4f2ee2b14259767327abd5625ee7bda1d1c36132d", + "tool": "compass" + }, + { + "question": "litestream-path-heartbeat", + "registeredTextPass": true, + "renderedDirectCallPath": false, + "repository": "litestream", + "requiredCallEdgesPresent": false, + "sourceSupportedPass": false, + "stdoutSha256": "a6da1476f329d4f7d9d4bf184653214fc61a71255b0afa7d6e498e63e2f26119", + "tool": "graphify" + }, + { + "question": "fastapi-explain-route-handler", + "registeredTextPass": false, + "renderedDirectCallPath": null, + "repository": "fastapi", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": false, + "stdoutSha256": "63c4df38191450a06ca85c6a3b57be4e78623b031feaa1d70dc7236eea35a178", + "tool": "compass" + }, + { + "question": "fastapi-explain-route-handler", + "registeredTextPass": false, + "renderedDirectCallPath": null, + "repository": "fastapi", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": false, + "stdoutSha256": "e7dc941fdc6abce461dea492b304fa87f6a444f6b21c5c102085cc2542e72c0d", + "tool": "graphify" + }, + { + "question": "fastapi-callees-route-handler", + "registeredTextPass": false, + "renderedDirectCallPath": null, + "repository": "fastapi", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": false, + "stdoutSha256": "db8e7fe2d3c5822a4b76fe56f9e0b77ad698acf9c5fa1e7cffb09a9cae8f697c", + "tool": "compass" + }, + { + "question": "fastapi-callees-route-handler", + "registeredTextPass": false, + "renderedDirectCallPath": null, + "repository": "fastapi", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": false, + "stdoutSha256": "e7dc941fdc6abce461dea492b304fa87f6a444f6b21c5c102085cc2542e72c0d", + "tool": "graphify" + }, + { + "question": "fastapi-callers-request-handler", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "fastapi", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "9e2bfc33402f542aa3d7ced36a91707d45f84a3514f073cf4fce987073ca1007", + "tool": "compass" + }, + { + "question": "fastapi-callers-request-handler", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "fastapi", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "ab6e357a46466ba007fa00febecf090022577e482ffc06f51b9dccb8ccb5bfc8", + "tool": "graphify" + }, + { + "question": "fastapi-path-route-request", + "registeredTextPass": false, + "renderedDirectCallPath": false, + "repository": "fastapi", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": false, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "tool": "compass" + }, + { + "question": "fastapi-path-route-request", + "registeredTextPass": true, + "renderedDirectCallPath": false, + "repository": "fastapi", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": false, + "stdoutSha256": "95638cab09a5b6050fcc9fe3cac387f0105844d34dd9d702e96a82985c013e09", + "tool": "graphify" + }, + { + "question": "celld-explain-signed-headers", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "celld", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "eb2ef8dac2e1f6fe7e1844a29edec7325a4b89ee279450765b6e19e744dde119", + "tool": "compass" + }, + { + "question": "celld-explain-signed-headers", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "celld", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "bccba1e3ed85a11063ccff4b78b1b8f72baeb279dd9773b530bf0429cee81da8", + "tool": "graphify" + }, + { + "question": "celld-callees-signed-headers", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "celld", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "ee9457fcc25a34b078de6043eeb0f196360c816effa31c0bbf2c962a6e60b51a", + "tool": "compass" + }, + { + "question": "celld-callees-signed-headers", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "celld", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "bccba1e3ed85a11063ccff4b78b1b8f72baeb279dd9773b530bf0429cee81da8", + "tool": "graphify" + }, + { + "question": "celld-callers-sha-parts", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "celld", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "3a02f33d944cb40d482eca4f5f4e02831d638232bcea42c979070f673c04c502", + "tool": "compass" + }, + { + "question": "celld-callers-sha-parts", + "registeredTextPass": true, + "renderedDirectCallPath": null, + "repository": "celld", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "47f5729b836802a99e7b1cdee486ed8acff15db239d9c7f91041dc087978a89a", + "tool": "graphify" + }, + { + "question": "celld-path-signed-sha", + "registeredTextPass": true, + "renderedDirectCallPath": true, + "repository": "celld", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "d3e0520147b67bbbcb501a3aa54639505196dbf5e22b944f9cc605776fffb8e2", + "tool": "compass" + }, + { + "question": "celld-path-signed-sha", + "registeredTextPass": true, + "renderedDirectCallPath": true, + "repository": "celld", + "requiredCallEdgesPresent": true, + "sourceSupportedPass": true, + "stdoutSha256": "fb1ea7b1dbef051ae9508643d40775f82a1978ab1589802e92bb6af8a5a4935f", + "tool": "graphify" + } + ], + "registrationCommit": "ab93cd34", + "relationshipFacts": [ + { + "callLine": 721, + "callee": "ShouldPing", + "caller": "sendHeartbeatIfNeeded", + "edgeCounts": { + "compass": 1, + "graphify": 0 + }, + "factIndex": 0, + "repository": "litestream", + "sourceFile": "store.go" + }, + { + "callLine": 735, + "callee": "RecordPing", + "caller": "sendHeartbeatIfNeeded", + "edgeCounts": { + "compass": 1, + "graphify": 0 + }, + "factIndex": 1, + "repository": "litestream", + "sourceFile": "store.go" + }, + { + "callLine": 737, + "callee": "Ping", + "caller": "sendHeartbeatIfNeeded", + "edgeCounts": { + "compass": 1, + "graphify": 0 + }, + "factIndex": 2, + "repository": "litestream", + "sourceFile": "store.go" + }, + { + "callLine": 1232, + "callee": "get_request_handler", + "caller": "get_route_handler", + "edgeCounts": { + "compass": 1, + "graphify": 1 + }, + "factIndex": 0, + "repository": "fastapi", + "sourceFile": "fastapi/routing.py" + }, + { + "callLine": 145, + "callee": "now_ms", + "caller": "signed_headers_parts", + "edgeCounts": { + "compass": 1, + "graphify": 1 + }, + "factIndex": 0, + "repository": "celld", + "sourceFile": "crates/celld/peer_auth.rs" + }, + { + "callLine": 149, + "callee": "sha256_hex_parts", + "caller": "signed_headers_parts", + "edgeCounts": { + "compass": 1, + "graphify": 1 + }, + "factIndex": 1, + "repository": "celld", + "sourceFile": "crates/celld/peer_auth.rs" + } + ], + "runJsonSha256": "f28a92dd08363607f534632471e15f61e7f3d6cd3ce34e479ab04ff09ebdba4c", + "runnerSha256": "173242988699eb6fabd175c293634d3cf37c1394f76429540fd7af2a48ef7026", + "schema": "compass.source-first-three-language-review/1", + "scope": "Selected source-first Go/Python/Rust development questions; source-grounded static calls, not runtime reachability, authored explanations, or whole-graph accuracy", + "sourcePins": [ + { + "file": "heartbeat.go", + "repository": "litestream", + "sha256": "ef90f2e79f1a8f89bd34a9cada9e3c399a410cf774b5c2b3233863dc7cbf2581" + }, + { + "file": "store.go", + "repository": "litestream", + "sha256": "56b3da1cdd69e7a3e30b4982f93fcfc4377f7572497c60ac3371cf4b867f7a17" + }, + { + "file": "fastapi/routing.py", + "repository": "fastapi", + "sha256": "7b1ef65fb6b209445dc43be070a23324b7879aef9c6b9f63e6968234b7723b55" + }, + { + "file": "crates/celld/peer_auth.rs", + "repository": "celld", + "sha256": "916bff6785a787db68f6dd62e4ac39c983280b3a4a6850e2010653c63dee54f9" + } + ], + "suiteSha256": "13338a37b219b82d6b0a99f5a8b884cc27efa8043b1a38d5a32dcfa88a53da0e", + "totals": { + "registeredText": { + "compass": 9, + "graphify": 8 + }, + "sourceSupported": { + "compass": 9, + "graphify": 6 + } + } +} diff --git a/benchmarks/agent_query/source_first_three_language_suite.toml b/benchmarks/agent_query/source_first_three_language_suite.toml new file mode 100644 index 000000000..0aa647418 --- /dev/null +++ b/benchmarks/agent_query/source_first_three_language_suite.toml @@ -0,0 +1,200 @@ +# Registered from source before querying either tool on these repositories. +# These check declaration identity, direct calls, callers, and one-hop paths. +# They are selected source facts, not whole-graph precision or authored-answer scores. +# The shared runner preserves failures, response bytes, graph coverage, and timings. +schema = "compass.agent-query-suite/1" + +[[repository]] +name = "litestream" +language = "Go" +url = "https://github.com/benbjohnson/litestream.git" +commit = "6a71ccd9ad2bea0c4dc19bc274a8dc64c9b0fafa" + +[[repository.anchor]] +file = "store.go" +line = 715 +symbol = "sendHeartbeatIfNeeded" +judgment = "Store.sendHeartbeatIfNeeded is declared at store.go:715." + +[[repository.anchor]] +file = "heartbeat.go" +line = 68 +symbol = "ShouldPing" +judgment = "HeartbeatClient.ShouldPing is declared at heartbeat.go:68." + +[[repository.anchor]] +file = "heartbeat.go" +line = 80 +symbol = "RecordPing" +judgment = "HeartbeatClient.RecordPing is declared at heartbeat.go:80." + +[[repository.question]] +id = "litestream-explain-heartbeat" +kind = "explain" +subject = "Store.sendHeartbeatIfNeeded declaration" +compass = ["explain", "sendHeartbeatIfNeeded"] +graphify = ["explain", ".sendHeartbeatIfNeeded()"] +expect = "answer" +required = ["store.go", "715"] +judgment = "The method begins at store.go:715." + +[[repository.question]] +id = "litestream-callees-heartbeat" +kind = "callees" +subject = "direct internal calls of Store.sendHeartbeatIfNeeded" +compass = ["callees", "sendHeartbeatIfNeeded"] +graphify = ["explain", ".sendHeartbeatIfNeeded()"] +expect = "answer" +required = ["ShouldPing", "RecordPing", "Ping"] +judgment = "The method calls HeartbeatClient.ShouldPing at 721, RecordPing at 735, and Ping at 737." + +[[repository.question]] +id = "litestream-callers-should-ping" +kind = "callers" +subject = "direct production caller of HeartbeatClient.ShouldPing" +compass = ["callers", "ShouldPing"] +graphify = ["affected", ".ShouldPing()", "--depth", "1"] +expect = "answer" +required = ["sendHeartbeatIfNeeded"] +judgment = "Store.sendHeartbeatIfNeeded calls ShouldPing at store.go:721." + +[[repository.question]] +id = "litestream-path-heartbeat" +kind = "path" +subject = "Store.sendHeartbeatIfNeeded to HeartbeatClient.ShouldPing" +compass = ["path", "sendHeartbeatIfNeeded", "ShouldPing"] +graphify = ["path", ".sendHeartbeatIfNeeded()", ".ShouldPing()", "--undirected"] +expect = "answer" +required = ["sendHeartbeatIfNeeded", "ShouldPing"] +forbidden = ["NO PATH FOUND", "No path found"] +judgment = "A direct, source-supported call occurs at store.go:721; the path may be traversed undirected by both tools." + +[[repository]] +name = "fastapi" +language = "Python" +url = "https://github.com/fastapi/fastapi.git" +commit = "0c2b6aafd7a2e3a5bf1055ea0ed0a41da15ba5f4" + +[[repository.anchor]] +file = "fastapi/routing.py" +line = 375 +symbol = "get_request_handler" +judgment = "get_request_handler is declared at routing.py:375." + +[[repository.anchor]] +file = "fastapi/routing.py" +line = 1126 +symbol = "APIRoute" +judgment = "APIRoute is declared at routing.py:1126." + +[[repository.anchor]] +file = "fastapi/routing.py" +line = 1225 +symbol = "get_route_handler" +judgment = "APIRoute.get_route_handler is declared at routing.py:1225." + +[[repository.question]] +id = "fastapi-explain-route-handler" +kind = "explain" +subject = "APIRoute.get_route_handler declaration" +compass = ["explain", "get_route_handler"] +graphify = ["explain", ".get_route_handler()"] +expect = "answer" +required = ["routing.py", "1225"] +judgment = "APIRoute.get_route_handler begins at fastapi/routing.py:1225." + +[[repository.question]] +id = "fastapi-callees-route-handler" +kind = "callees" +subject = "direct callee of APIRoute.get_route_handler" +compass = ["callees", "get_route_handler"] +graphify = ["explain", ".get_route_handler()"] +expect = "answer" +required = ["get_request_handler"] +judgment = "get_route_handler returns get_request_handler(...) at routing.py:1232." + +[[repository.question]] +id = "fastapi-callers-request-handler" +kind = "callers" +subject = "direct caller of get_request_handler" +compass = ["callers", "get_request_handler"] +graphify = ["affected", "get_request_handler()", "--depth", "1"] +expect = "answer" +required = ["get_route_handler"] +judgment = "APIRoute.get_route_handler calls get_request_handler at routing.py:1232." + +[[repository.question]] +id = "fastapi-path-route-request" +kind = "path" +subject = "APIRoute.get_route_handler to get_request_handler" +compass = ["path", "get_route_handler", "get_request_handler"] +graphify = ["path", ".get_route_handler()", "get_request_handler()", "--undirected"] +expect = "answer" +required = ["get_route_handler", "get_request_handler"] +forbidden = ["NO PATH FOUND", "No path found"] +judgment = "A direct call at routing.py:1232 supports one hop between these declarations." + +[[repository]] +name = "celld" +language = "Rust" +url = "https://github.com/denoland/celld.git" +commit = "10cb1303dac710dcb3b557e318e08c855261f68b" + +[[repository.anchor]] +file = "crates/celld/peer_auth.rs" +line = 137 +symbol = "signed_headers_parts" +judgment = "PeerSigner.signed_headers_parts begins at peer_auth.rs:137." + +[[repository.anchor]] +file = "crates/celld/peer_auth.rs" +line = 341 +symbol = "now_ms" +judgment = "The now_ms helper begins at peer_auth.rs:341." + +[[repository.anchor]] +file = "crates/celld/peer_auth.rs" +line = 352 +symbol = "sha256_hex_parts" +judgment = "The sha256_hex_parts helper begins at peer_auth.rs:352." + +[[repository.question]] +id = "celld-explain-signed-headers" +kind = "explain" +subject = "signed_headers_parts declaration" +compass = ["explain", "signed_headers_parts"] +graphify = ["explain", ".signed_headers_parts()"] +expect = "answer" +required = ["peer_auth.rs", "137"] +judgment = "The method begins at crates/celld/peer_auth.rs:137." + +[[repository.question]] +id = "celld-callees-signed-headers" +kind = "callees" +subject = "direct local callees of signed_headers_parts" +compass = ["callees", "signed_headers_parts"] +graphify = ["explain", ".signed_headers_parts()"] +expect = "answer" +required = ["now_ms", "sha256_hex_parts"] +judgment = "signed_headers_parts calls now_ms at line 145 and sha256_hex_parts at line 149." + +[[repository.question]] +id = "celld-callers-sha-parts" +kind = "callers" +subject = "direct caller of sha256_hex_parts" +compass = ["callers", "sha256_hex_parts"] +graphify = ["affected", "sha256_hex_parts()", "--depth", "1"] +expect = "answer" +required = ["signed_headers_parts"] +judgment = "signed_headers_parts calls sha256_hex_parts at peer_auth.rs:149." + +[[repository.question]] +id = "celld-path-signed-sha" +kind = "path" +subject = "signed_headers_parts to sha256_hex_parts" +compass = ["path", "signed_headers_parts", "sha256_hex_parts"] +graphify = ["path", ".signed_headers_parts()", "sha256_hex_parts()", "--undirected"] +expect = "answer" +required = ["signed_headers_parts", "sha256_hex_parts"] +forbidden = ["NO PATH FOUND", "No path found"] +judgment = "A direct source-supported call occurs at peer_auth.rs:149." diff --git a/benchmarks/agent_query/source_windows.py b/benchmarks/agent_query/source_windows.py new file mode 100644 index 000000000..17e7ed099 --- /dev/null +++ b/benchmarks/agent_query/source_windows.py @@ -0,0 +1,169 @@ +"""Symmetric source-window control; anchors only, without oracle-based selection. + +This is an evaluation policy, not a production explanation implementation. +Byte intervals are authoritative, including cuts through a UTF-8 code point. +""" +from collections import defaultdict +import hashlib +from pathlib import Path + +from benchmarks.agent_query.community_tasks import read_bounded + +MAX_ROWS = 10000 +MAX_FILE_BYTES = 4194304 +MAX_FILES = 128 +MAX_TOTAL_FILE_BYTES = 16777216 + + +def sha(data): + return hashlib.sha256(data).hexdigest() + + +def source_windows(root, rows, budget, *, ordered_groups=None): + if type(budget) is not int or not 1 <= budget <= 1048576: + raise ValueError('source budget must be an integer from 1 to 1048576') + if not isinstance(rows, list) or len(rows) > MAX_ROWS: + raise ValueError('membership row limit exceeded') + root = Path(root).resolve() + groups = defaultdict(list) + for row in rows: + file, line = row.get('file'), row.get('line') + if not isinstance(file, str) or not file or type(line) is not int or line < 1: + raise ValueError('missing or invalid membership source anchor') + relative = Path(file) + if relative.is_absolute() or '..' in relative.parts: + raise ValueError('unsafe membership source path') + groups[file, line].append(row) + files = {} + offsets = {} + total = 0 + # Validate every anchor, including anchors beyond the retained-byte budget. + for file, line in sorted(groups): + if file not in files: + if len(files) >= MAX_FILES: + raise ValueError('source file count limit exceeded') + path = (root / file).resolve() + if not path.is_relative_to(root): + raise ValueError('source path escapes root') + data = read_bounded(path, MAX_FILE_BYTES) + total += len(data) + if total > MAX_TOTAL_FILE_BYTES: + raise ValueError('aggregate source read limit exceeded') + files[file] = data + starts = [0] + for text in data.splitlines(keepends=True): + starts.append(starts[-1] + len(text)) + offsets[file] = starts + if line >= len(offsets[file]): + raise ValueError('membership line outside source') + keys = sorted(groups) + if ordered_groups is None: + visit = keys + else: + if not isinstance(ordered_groups, list) or len(ordered_groups) != len(keys): + raise ValueError('window order must contain every source group exactly once') + for key in ordered_groups: + if (not isinstance(key, (list, tuple)) or len(key) != 2 + or not isinstance(key[0], str) or type(key[1]) is not int): + raise ValueError('invalid ordered source group') + visit = [tuple(key) for key in ordered_groups] + if len(set(visit)) != len(keys) or set(visit) != set(keys): + raise ValueError('window order must contain every source group exactly once') + # End boundaries belong to source order, never to the chosen visit order. + ends = {} + for index, (file, line) in enumerate(keys): + following = keys[index + 1] if index + 1 < len(keys) else None + start = offsets[file][line - 1] + ends[file, line] = (offsets[file][following[1] - 1] + if following and following[0] == file + else min(len(files[file]), start + 4096)) + windows = [] + remaining = budget + for file, line in visit: + if not remaining: + break + data = files[file] + start = offsets[file][line - 1] + end = ends[file, line] + kept_end = min(end, start + remaining) + part = data[start:kept_end] + windows.append(dict(file=file, startLine=line, startByte=start, endByte=kept_end, + requestedEndByte=end, partial=kept_end < end, + sourceBytes=len(part), sourceSha256=sha(part), + fileSha256=sha(data), members=groups[file, line])) + remaining -= len(part) + for file, data in files.items(): + if read_bounded(root / file, MAX_FILE_BYTES) != data: + raise ValueError('source changed during window planning') + return dict(budget=budget, sourceBytes=budget - remaining, windows=windows, + omittedGroups=[dict(file=f, line=n) for f, n in visit[len(windows):]], + sourceReadBytes=total, missingAnchorRows=[]) + + +def score_windows(root, case, control, *, identity_verified=False): + """Verify saved intervals and witness text before scoring all-or-nothing facts.""" + root = Path(root).resolve() + file = case['file'] + relative = Path(file) + path = (root / relative).resolve() + if relative.is_absolute() or '..' in relative.parts or not path.is_relative_to(root): + raise ValueError('unsafe question source path') + data = read_bounded(path, MAX_FILE_BYTES) + if sha(data) != case['sourceFileSha256']: + raise ValueError('question source hash mismatch') + source_lines = data.decode('utf-8').splitlines() + returned = {} + total = 0 + for w in control['windows']: + rel = Path(w['file']) + p = (root / rel).resolve() + if rel.is_absolute() or '..' in rel.parts or not p.is_relative_to(root): + raise ValueError('unsafe window source path') + raw = read_bounded(p, MAX_FILE_BYTES) + start, end = w['startByte'], w['endByte'] + if (type(start) is not int or type(end) is not int + or not 0 <= start <= end <= len(raw)): + raise ValueError('invalid window interval') + part = raw[start:end] + if sha(raw) != w['fileSha256'] or sha(part) != w['sourceSha256']: + raise ValueError('window hash mismatch') + if len(part) != w['sourceBytes']: + raise ValueError('window byte count mismatch') + starts = [0] + for text in raw.splitlines(keepends=True): + starts.append(starts[-1] + len(text)) + line = w['startLine'] + if type(line) is not int or not 1 <= line < len(starts) or starts[line - 1] != start: + raise ValueError('window line and byte disagree') + total += len(part) + if w['file'] == file: + for offset, text in enumerate(part.decode('utf-8', errors='replace').splitlines()): + # A clipped sequence is retained as replacement text, never padded. + number = line + offset + if number in returned: + raise ValueError('overlapping source windows') + returned[number] = text + if total != control['sourceBytes'] or total > control['budget']: + raise ValueError('source budget accounting mismatch') + judgments = [] + for fact in case['facts']: + missing = [] + literal = True + for witness in fact['witnesses']: + first, last = witness['startLine'], witness['endLine'] + if '\n'.join(source_lines[first - 1:last]).strip() != witness['text'].strip(): + raise ValueError('witness differs from pinned source') + for index, expected in enumerate(witness['text'].splitlines(), first): + actual = returned.get(index) + literal &= actual == expected + if actual is None or actual.strip() != expected.strip(): + missing.append(dict(line=index, expected=expected, returned=actual)) + # Fixed historical allowance, not a general missing-header rule. + allowance = (identity_verified and fact['id'] == 'click-1' and len(missing) == 1 + and missing[0]['line'] == 455 + and missing[0]['expected'] == 'class _AtomicFile:') + judgments.append(dict(fact=fact['id'], literalWitnessCoverage=literal, + sufficientSourceEvidence=not missing or allowance, + classHeaderAllowance=allowance, + missingAfterIndentNormalization=missing)) + return judgments diff --git a/benchmarks/agent_query/sql_prefix_build_context.json b/benchmarks/agent_query/sql_prefix_build_context.json new file mode 100644 index 000000000..2f654d60d --- /dev/null +++ b/benchmarks/agent_query/sql_prefix_build_context.json @@ -0,0 +1,23 @@ +{ + "schema": "compass.sql-prefix-build-context/1", + "registrationSha256": "f7f909424064c91844204475df74125a96a13127cfa17861fbf289553c114c39", + "timingCaptureStarted": false, + "reason": "The validation binary uses different debug-information settings from the frozen baseline. Before measuring, produce a separate candidate with the same explicit build settings as the original baseline validate.py. Validation results and original binary remain preserved.", + "baselineBuildScriptSha256": "0ce82fa6d32cb48a6d9bdaa876611e55e8795728b8374653f8f388b79976da93", + "baselineBuildLogSha256": "a79489e56b200092517e298a7e6b0892358dd8af72ea894972ff37b69e8f2b47", + "baselineProductionCommit": "89916af9", + "candidateProductionCommit": "1a1f6a69", + "productionDiffFiles": [ + "crates/compass-languages/src/sql.rs" + ], + "buildSettings": { + "CARGO_PROFILE_DEV_DEBUG": "0", + "CARGO_PROFILE_TEST_DEBUG": "0", + "CARGO_INCREMENTAL": "0", + "CARGO_BUILD_JOBS": "2", + "TSLP_OFFLINE": "1" + }, + "parserDefinitionsSha256": "b148f6435d9bd2010dc83ff2f112822d5fcce7fc2ef5d47f21dd38a2d8a0f80f", + "profile": "Cargo dev, unoptimized; not release-performance qualification.", + "requirements": "Use the same baseline-owned parser bundle and per-worktree target on the mounted volume. Freeze the matching binary and command/environment hashes, rerun SQL and product checks, then start the registered alternating sample runs. No overlap with this task\u2019s compilation. Original Blob development-build timeout observations remain unchanged." +} diff --git a/benchmarks/agent_query/sql_prefix_scan_registration.json b/benchmarks/agent_query/sql_prefix_scan_registration.json new file mode 100644 index 000000000..e75b50973 --- /dev/null +++ b/benchmarks/agent_query/sql_prefix_scan_registration.json @@ -0,0 +1,45 @@ +{ + "schema": "compass.sql-prefix-scan-registration/1", + "baselineCommit": "749ed287ce90c5bfe4fa47a920060aa37fa8bbe1", + "source": { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "trackedSqlFiles": 119 + }, + "selection": "Sort all tracked SQL files by byte size then path; take indices floor(n/4), floor(n/2), floor(3n/4), n-1. Preserve full files without editing. Selection frozen before candidate results.", + "samples": [ + { + "file": "engine/schema/src/main/resources/META-INF/db/schema-224to225-cleanup.sql", + "sortedIndex": 29, + "bytes": 938, + "sha256": "e3956e631ed1569790c0e715416726ed397e0d9d2e9a60551dcc41dcd29de92f" + }, + { + "file": "setup/db/postprocess-20to21.sql", + "sortedIndex": 59, + "bytes": 1949, + "sha256": "88784b0df00be6d6939ebe275c6d1aabcf8bac8636c00bf7d6ad08e2caee2aae" + }, + { + "file": "engine/schema/src/main/resources/META-INF/db/schema-41120to41200.sql", + "sortedIndex": 89, + "bytes": 10288, + "sha256": "03e7035ff015e9e3eb7f194a32d37f6e418244cee81853ec6d370b47e7589780" + }, + { + "file": "engine/schema/src/main/resources/META-INF/db/schema-430to440.sql", + "sortedIndex": 118, + "bytes": 411080, + "sha256": "99cc9ada9dae1119b8757f805211aa714702b81d2446c0f9fa58e9e7f3c62f4f" + } + ], + "baselineBinary": "calls-only-trails-01/compass", + "baselineBinarySha256": "80a970c1c403892fcafd82eac7e6461afec119f2008db9f9117419432e387ca6", + "hypothesis": "Reject impossible dollar-delimiter syntax before scanning the SQL prefix; preserve every extraction fact and diagnostic.", + "procedure": "For each complete source sample, copy once into a dedicated external input directory preserving its repository-relative path; use that same source directory for both binaries. Three fresh-output CLI extractions per binary, alternating old/new order by repeat. No cached output reuse. Same --code-only --no-viz --store sqlite options. Timeout and stream failures stay visible; no latency ratio if either observation is unavailable. Retain commands, wall time, outputs and graph digests. Full graph JSON and published canonical graph digests are compared; any nondeterministic metadata exclusion must be reported.", + "sampleTimeoutSeconds": 180, + "streamLimitBytes": 16777216, + "graphLimitBytes": 268435456, + "fullRepositoryFollowup": "After correctness checks, rerun Compass CloudStack on its original complete source, same 1200-second extraction limit and 256 MiB graph admission rule. Do not substitute sample results or rewrite the original failed run. No controlled Graphify speed claim from this diagnosis.", + "scope": "Development diagnosis of observed extraction bottleneck; not release-performance qualification, held-out evaluation, or god-object classification improvement." +} diff --git a/benchmarks/agent_query/sql_prefix_scan_review.json b/benchmarks/agent_query/sql_prefix_scan_review.json new file mode 100644 index 000000000..ab2ae2f22 --- /dev/null +++ b/benchmarks/agent_query/sql_prefix_scan_review.json @@ -0,0 +1,1305 @@ +{ + "schema": "compass.sql-prefix-review/1", + "status": "development diagnosis; no release or Graphify performance claim", + "source": { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "trackedSqlFiles": 119 + }, + "productionChange": "Reject impossible dollar-delimiter syntax before scanning a SQL statement prefix. Plausible delimiters retain statement-sensitive handling.", + "productionChangeCommit": "1a1f6a6977d42a694df545a08aaa997b5fe05f7a", + "baselineProductionCommit": "89916af9", + "candidateBuildCommit": "bbc6a419c389829a98aa69971fafb9d29fe21aaa", + "registrationSha256": "f7f909424064c91844204475df74125a96a13127cfa17861fbf289553c114c39", + "buildContextSha256": "a0714ebf0b5e6e43a326df5a7dbe3ee79ece8ac5db32a9d931a72f102abf1697", + "profile": "Cargo dev, unoptimized; not release-performance qualification.", + "buildSettings": { + "TSLP_OFFLINE": "1", + "CARGO_PROFILE_DEV_DEBUG": "0", + "CARGO_PROFILE_TEST_DEBUG": "0", + "CARGO_INCREMENTAL": "0", + "CARGO_BUILD_JOBS": "2" + }, + "binaries": { + "baseline": "80a970c1c403892fcafd82eac7e6461afec119f2008db9f9117419432e387ca6", + "candidate": "9375271e6718e780daede034534bd6b5676e0e1385718aed2fcec16946df25df" + }, + "environment": { + "platform": "macOS-26.5.2-arm64-arm-64bit-Mach-O", + "cpu": "Apple M2 Max", + "memoryBytes": 34359738368, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)\nbinary: rustc\ncommit-hash: 8bab26f4f68e0e26f0bb7960be334d5b520ea452\ncommit-date: 2026-07-14\nhost: aarch64-apple-darwin\nrelease: 1.97.1\nLLVM version: 22.1.6\n" + }, + "procedure": "For each complete source sample, copy once into a dedicated external input directory preserving its repository-relative path; use that same source directory for both binaries. Three fresh-output CLI extractions per binary, alternating old/new order by repeat. No cached output reuse. Same --code-only --no-viz --store sqlite options. Timeout and stream failures stay visible; no latency ratio if either observation is unavailable. Retain commands, wall time, outputs and graph digests. Full graph JSON and published canonical graph digests are compared; any nondeterministic metadata exclusion must be reported.", + "commandTemplate": [ + "/usr/bin/time", + "-l", + "", + "extract", + "", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "" + ], + "limits": { + "sampleTimeoutSeconds": 180, + "streamLimitBytes": 16777216, + "graphLimitBytes": 268435456 + }, + "externalRun": "sql-prefix-scan-01", + "artifacts": { + "run_samples.py": "f957611cc31d7ead80309fb9a085fda481cd7a10582816973fa96bc3e191f31c", + "samples.json": "e86abef9692e5391583a9f46d0662d77fdd0fc3ddf7f3d2e5b58d2148619d909", + "verify_samples.py": "27ea719ae2cb88b81e9eaab2c1cd7537fd455c02fbe87db91b5c9c551f5e307e", + "verified-samples.json": "28a7ee6b8e16ec4c4a4485559eff152318b3e2f5329ea31a3e8ddc87eca3a19b", + "matched-build.json": "2ac71dcc865034282312440de0061d7dca4fdb96b45a6e6ba1891d7611e11ace", + "build_matched.py": "af1dd9e48f6d4febc99cc0390b3b5b862de8d1a395194a230525522f63e7dcc1", + "checks-01/checks.json": "4316be9fe388943a68925b05d03a68f69b0fdefbde7777914624e0d850727f65", + "checks-before-retry.json": "095964775ca1122185077783015005982952fc79c2699ea161a3f5d5b7268870", + "parser-recovery.json": "e0eaff1d387664ca552eeb7baa892a4bad34cdd5a722df9603d564c8615b970c", + "sql-tests.log": "0db5bf9e94005de7c8c2891d3e6d12b29331eee15eb4c23e2453ba5d0b6a0bca", + "write_sql_report.py": "34160585c378a1611f8028c939bd80aa0209bcde5549ee43a50f2cfef0105187" + }, + "checks": [ + { + "name": "fmt", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 3641, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "sql-domain", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 22117, + "stdoutSha256": "7919a50b024e4a61fca8e291a11bd12da459ed68acb983c7f5a7c12a7a4ea487", + "stderrSha256": "dc5d40a4b52388cb952fb2d5e60130ce2e74d3fb7d15019eb32a5bf2096e341d" + }, + { + "name": "workspace-clippy", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 164376, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "c04e4fe9dec188b16c240bd10d28afe552d7b0a897da2a77241b639ebba5cf2a" + }, + { + "name": "workspace-tests", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 509231, + "stdoutSha256": "c6e390c0a05d59aa741e8557aed9f82cba7e1791083546c649e2c151a00be9f8", + "stderrSha256": "dcb9be4470d83d6247cf7d62749f5ad30953d40014b22a6f9bcc0f4a14787de9" + }, + { + "name": "product", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 335857, + "stdoutSha256": "e3508b2bd54ce2ce906d89970169f62f8856596ba5dac510a8a698b7a9613168", + "stderrSha256": "6a324e2910ef95d328cb8d1797ea24ae84426600cb3c066b8c10f27936f1c048" + }, + { + "name": "fixtures", + "exitCode": 1, + "timedOut": false, + "outputLimited": false, + "wallMs": 36, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "c7d420bc8df5baecb5f9e0898d9833621c8cd80e05493221a157c39f2ea0b54b" + }, + { + "name": "fixtures-retry", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 1448547, + "stdoutSha256": "7760142392afd3d4090b527940de1baf9a63d4898a93cbfe4dffcf609702a212", + "stderrSha256": "1498de5787005860afb41df2fd5572f7218359ea0f8ab5407d56b0334886aa63" + }, + { + "name": "benchmark-tests", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 2072, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "d86e1d635640b2c5efebeab74c8c48f0e89698034110c9428de880ee5f24d694" + }, + { + "name": "boundary", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 58, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "build", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 1314, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "6da422bbb22b76a5121c76b0eaaa70f006d102a88041cbbc8cda4d66d617bfd4" + } + ], + "matchingProfileChecks": [ + { + "name": "build", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "7725852b81cbb4ead2d0bbe3be3eef2aae639737d890bebd5a53c7ae457e39ff" + }, + { + "name": "sql-tests", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "stdoutSha256": "2aa1d33171ced6b02b616e84f387b6f54364b3429720038b5be717cc17dc26b8", + "stderrSha256": "8736f808818710a50e363548cf7f4275fd261985a54b4897dbf747e4026eae95" + }, + { + "name": "product", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "stdoutSha256": "e986ab762482aa98b7fee609730bac6f931e410f441720bd0d61a3e14db1b49f", + "stderrSha256": "6b47d0eb9a40c5982f1563f1bf312205de5b09ab70a17a6bf43a1ad9396ef4e6" + } + ], + "results": [ + { + "bytes": 938, + "candidateToBaselineMedianRatio": 1.1405940594059405, + "completeOldNewEquality": true, + "excludedGraphFields": [], + "file": "engine/schema/src/main/resources/META-INF/db/schema-224to225-cleanup.sql", + "sampleIndex": 0, + "sourceSha256": "e3956e631ed1569790c0e715416726ed397e0d9d2e9a60551dcc41dcd29de92f", + "successfulGraphCount": 6, + "successfulGraphsEqual": true, + "tools": { + "baseline": { + "canonicalGraphHashes": [ + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b", + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b", + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + ], + "graphHashes": [ + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298" + ], + "medianSuccessfulWallMs": 1010, + "peakRssBytes": [ + 50692096, + 50757632, + 50642944 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 2041, + 1010, + 815 + ] + }, + "candidate": { + "canonicalGraphHashes": [ + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b", + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b", + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + ], + "graphHashes": [ + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298" + ], + "medianSuccessfulWallMs": 1152, + "peakRssBytes": [ + 50855936, + 50642944, + 50708480 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 1928, + 1152, + 852 + ] + } + }, + "observations": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 2041, + "stdout_bytes": 481, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:29.330899+00:00", + "loadAverageBefore": [ + 2.45703125, + 5.28369140625, + 5.57861328125 + ], + "loadAverageAfter": [ + 2.45703125, + 5.28369140625, + 5.57861328125 + ], + "sampleIndex": 0, + "repeat": 0, + "tool": "baseline", + "stdoutSha256": "2da4089abcb6e30519e219229399cdeddcbb079953c2ad56dc69377f4b923a45", + "stderrSha256": "25d5d809c1bd6fe701a910213ffc0dd697ff3e4a9cfe38fdef4882a13d7006e7", + "peakRssBytes": 50692096, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1928, + "stdout_bytes": 482, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:31.374626+00:00", + "loadAverageBefore": [ + 2.45703125, + 5.28369140625, + 5.57861328125 + ], + "loadAverageAfter": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "sampleIndex": 0, + "repeat": 0, + "tool": "candidate", + "stdoutSha256": "dd0093774508773cd90fa9a3394856c0164f37e480dd962286fde04a7b88eb31", + "stderrSha256": "0b1d417bf84723be9687da9c8cdb1e04fdc0df30f80e3dbf91dadcf64610d4b1", + "peakRssBytes": 50855936, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1152, + "stdout_bytes": 482, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:33.303979+00:00", + "loadAverageBefore": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "loadAverageAfter": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "sampleIndex": 0, + "repeat": 1, + "tool": "candidate", + "stdoutSha256": "bd93753fd3b38ee547aea8c3c9387b3ea35328253c1cd2f58fec44bc7b66d306", + "stderrSha256": "0d102c049269a1d5e17fc14a01e002271ef33e912f8eab29c30f4253caf54045", + "peakRssBytes": 50642944, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1010, + "stdout_bytes": 481, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:34.457587+00:00", + "loadAverageBefore": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "loadAverageAfter": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "sampleIndex": 0, + "repeat": 1, + "tool": "baseline", + "stdoutSha256": "e31dc31eaafa5eb3da7bb64336a442ee3b8bc163bee38d9eb8f21fad7ae168f1", + "stderrSha256": "743c64a9ffa80e4f79a52036d59c35a93d3e00ae1af277d492292e81f7e3d197", + "peakRssBytes": 50757632, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 815, + "stdout_bytes": 481, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:35.469908+00:00", + "loadAverageBefore": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "loadAverageAfter": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "sampleIndex": 0, + "repeat": 2, + "tool": "baseline", + "stdoutSha256": "c0df69031543311f184124874590e27df62e520c995ab7f6d6b66c538118af85", + "stderrSha256": "bcd398b8fc85fbca9d104285e0bc4983537a47d0202acb7cc8f6b78c9250fe75", + "peakRssBytes": 50642944, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 852, + "stdout_bytes": 482, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:36.286022+00:00", + "loadAverageBefore": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "loadAverageAfter": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "sampleIndex": 0, + "repeat": 2, + "tool": "candidate", + "stdoutSha256": "c5bd3dd3544f6fc08746f3bd2e33b308740dfdea21c3ffe5915ec1f0d093334e", + "stderrSha256": "288af6ec691fa4730d5cf79934a29df2c39eee9e6223cac16f9008bad745c7bb", + "peakRssBytes": 50708480, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + } + ] + }, + { + "bytes": 1949, + "candidateToBaselineMedianRatio": 1.0727091633466135, + "completeOldNewEquality": true, + "excludedGraphFields": [], + "file": "setup/db/postprocess-20to21.sql", + "sampleIndex": 1, + "sourceSha256": "88784b0df00be6d6939ebe275c6d1aabcf8bac8636c00bf7d6ad08e2caee2aae", + "successfulGraphCount": 6, + "successfulGraphsEqual": true, + "tools": { + "baseline": { + "canonicalGraphHashes": [ + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace", + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace", + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + ], + "graphHashes": [ + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a" + ], + "medianSuccessfulWallMs": 1004, + "peakRssBytes": [ + 55574528, + 55705600, + 55394304 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 1149, + 1004, + 860 + ] + }, + "candidate": { + "canonicalGraphHashes": [ + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace", + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace", + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + ], + "graphHashes": [ + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a" + ], + "medianSuccessfulWallMs": 1077, + "peakRssBytes": [ + 55459840, + 55541760, + 55836672 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 907, + 1077, + 1299 + ] + } + }, + "observations": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1149, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:37.142939+00:00", + "loadAverageBefore": [ + 2.26025390625, + 5.19580078125, + 5.5458984375 + ], + "loadAverageAfter": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "sampleIndex": 1, + "repeat": 0, + "tool": "baseline", + "stdoutSha256": "f95f45cfdbd0ba1a4c81f303221430634f08a499e99f7c3218350311948a7dbc", + "stderrSha256": "ac37cf014af3ae6bdc8d8c8d0692157c7d4fba32b5db860f00d72ef4924b17ae", + "peakRssBytes": 55574528, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 907, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:38.294402+00:00", + "loadAverageBefore": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "loadAverageAfter": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "sampleIndex": 1, + "repeat": 0, + "tool": "candidate", + "stdoutSha256": "82f94b5995fcfcca004cf81f61f8a01e3ca5700f2f7e495b5cdb227e919e5a91", + "stderrSha256": "9139ab3e5a3cd620dffe74b83a986b49be3cccd81b6cf28eff9f75cbe56f7e91", + "peakRssBytes": 55459840, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1077, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:39.203434+00:00", + "loadAverageBefore": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "loadAverageAfter": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "sampleIndex": 1, + "repeat": 1, + "tool": "candidate", + "stdoutSha256": "6b2f6e078881ba2b7436c9472e0c31162173d8c3c5a119edba12787388b81a27", + "stderrSha256": "ae84c3ef25a46e9dd5f5c921dd0727e5ab76562d227cbbde9659aaea565508d2", + "peakRssBytes": 55541760, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1004, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:40.282027+00:00", + "loadAverageBefore": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "loadAverageAfter": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "sampleIndex": 1, + "repeat": 1, + "tool": "baseline", + "stdoutSha256": "925640ba8eaf1b441ee882e195abf6690f05fc8c1d36ae8e6494486a3704f35e", + "stderrSha256": "8de0eba1e9b4c26362983b7ec9e6a5a8caa06802ed0bd7613eecab875e64ba89", + "peakRssBytes": 55705600, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 860, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:41.288360+00:00", + "loadAverageBefore": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "loadAverageAfter": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "sampleIndex": 1, + "repeat": 2, + "tool": "baseline", + "stdoutSha256": "2a3615135ac429f9685e8bd57224cfa93dbd20806f75b485a61673da032ad214", + "stderrSha256": "ed5c392ca522f2d4a1e34bc346361e29018918573fefa134c3554fa665270414", + "peakRssBytes": 55394304, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1299, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:42.150303+00:00", + "loadAverageBefore": [ + 2.1591796875, + 5.1259765625, + 5.51904296875 + ], + "loadAverageAfter": [ + 2.22607421875, + 5.09033203125, + 5.50390625 + ], + "sampleIndex": 1, + "repeat": 2, + "tool": "candidate", + "stdoutSha256": "5783aca4536012bd19ec1898bb8752466fb9e99811a8db5503eb33c1608c6038", + "stderrSha256": "c0240e33feb19d6b1d808490bdccd3782aae877860fc772fa3adaebe5033c7fc", + "peakRssBytes": 55836672, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + } + ] + }, + { + "bytes": 10288, + "candidateToBaselineMedianRatio": 0.9277010560519903, + "completeOldNewEquality": true, + "excludedGraphFields": [], + "file": "engine/schema/src/main/resources/META-INF/db/schema-41120to41200.sql", + "sampleIndex": 2, + "sourceSha256": "03e7035ff015e9e3eb7f194a32d37f6e418244cee81853ec6d370b47e7589780", + "successfulGraphCount": 6, + "successfulGraphsEqual": true, + "tools": { + "baseline": { + "canonicalGraphHashes": [ + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839", + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839", + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + ], + "graphHashes": [ + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad" + ], + "medianSuccessfulWallMs": 2462, + "peakRssBytes": [ + 57671680, + 57573376, + 57491456 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 1954, + 4821, + 2462 + ] + }, + "candidate": { + "canonicalGraphHashes": [ + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839", + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839", + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + ], + "graphHashes": [ + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad" + ], + "medianSuccessfulWallMs": 2284, + "peakRssBytes": [ + 57507840, + 57622528, + 57671680 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 1966, + 2284, + 4629 + ] + } + }, + "observations": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1954, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:43.453147+00:00", + "loadAverageBefore": [ + 2.22607421875, + 5.09033203125, + 5.50390625 + ], + "loadAverageAfter": [ + 2.22607421875, + 5.09033203125, + 5.50390625 + ], + "sampleIndex": 2, + "repeat": 0, + "tool": "baseline", + "stdoutSha256": "f4a6f39afa4416f160fa23305174b143a70592bed1289fae642d85554e176fdf", + "stderrSha256": "aeb2e094970028fe9ad6af49c091b55af41952167b3a5403af99b3da40768100", + "peakRssBytes": 57671680, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1966, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:45.409315+00:00", + "loadAverageBefore": [ + 2.22607421875, + 5.09033203125, + 5.50390625 + ], + "loadAverageAfter": [ + 2.22607421875, + 5.09033203125, + 5.50390625 + ], + "sampleIndex": 2, + "repeat": 0, + "tool": "candidate", + "stdoutSha256": "1dc5f5c4cc332643accd3f645a49d8304d568a517f802cef42a7058921d5b659", + "stderrSha256": "8e6cf34f1749926fb262fab36a37d89979b39554af42de70479d177ef7c4ce9c", + "peakRssBytes": 57507840, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 2284, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:47.377772+00:00", + "loadAverageBefore": [ + 2.22607421875, + 5.09033203125, + 5.50390625 + ], + "loadAverageAfter": [ + 2.28759765625, + 5.05517578125, + 5.48876953125 + ], + "sampleIndex": 2, + "repeat": 1, + "tool": "candidate", + "stdoutSha256": "e2f8fca28ccd3bf9957539dc2d0743a5f8fad18ef3374f577e26486851cb731e", + "stderrSha256": "d192958a6213b58eb23e42bd1acb510c0c0b9c7fd93438df71bd573e714b13ed", + "peakRssBytes": 57622528, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 4821, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:49.668968+00:00", + "loadAverageBefore": [ + 2.28759765625, + 5.05517578125, + 5.48876953125 + ], + "loadAverageAfter": [ + 2.18408203125, + 4.98779296875, + 5.46240234375 + ], + "sampleIndex": 2, + "repeat": 1, + "tool": "baseline", + "stdoutSha256": "f88b4fcdca07e1163c56bc7399beb414bab2e589ef03b3a572f8480656d54b1b", + "stderrSha256": "af11ad8b7090f07f73c3808be27d47695e195fd83dfca424f7b0532b3911f4bd", + "peakRssBytes": 57573376, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 2462, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:54.494459+00:00", + "loadAverageBefore": [ + 2.18408203125, + 4.98779296875, + 5.46240234375 + ], + "loadAverageAfter": [ + 2.18408203125, + 4.98779296875, + 5.46240234375 + ], + "sampleIndex": 2, + "repeat": 2, + "tool": "baseline", + "stdoutSha256": "3b2784bb98fc5531372ebcd9807fc3bd3ee931ef83ad311d3e841b46c4e9922d", + "stderrSha256": "78a125064d179a4a3d8052b99156be3f565887be0782584ebf21148896adc25b", + "peakRssBytes": 57491456, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 4629, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:24:56.960340+00:00", + "loadAverageBefore": [ + 2.18408203125, + 4.98779296875, + 5.46240234375 + ], + "loadAverageAfter": [ + 2.2490234375, + 4.95458984375, + 5.44775390625 + ], + "sampleIndex": 2, + "repeat": 2, + "tool": "candidate", + "stdoutSha256": "e3466a64b835505e649f13524e28bef299a32708fa6ab3e196bf5c39823a3b08", + "stderrSha256": "9d5084f97c1e4147a6c542faefac0d3349096629f21e975de7a6e61681ce0c98", + "peakRssBytes": 57671680, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + } + ] + }, + { + "bytes": 411080, + "completeOldNewEquality": false, + "excludedGraphFields": [], + "file": "engine/schema/src/main/resources/META-INF/db/schema-430to440.sql", + "sampleIndex": 3, + "sourceSha256": "99cc9ada9dae1119b8757f805211aa714702b81d2446c0f9fa58e9e7f3c62f4f", + "successfulGraphCount": 3, + "successfulGraphsEqual": true, + "tools": { + "baseline": { + "canonicalGraphHashes": [ + null, + null, + null + ], + "graphHashes": [ + null, + null, + null + ], + "medianSuccessfulWallMs": null, + "peakRssBytes": [ + null, + null, + null + ], + "successful": 0, + "timeouts": 3, + "wallMs": [ + 180013, + 180005, + 180014 + ] + }, + "candidate": { + "canonicalGraphHashes": [ + "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d", + "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d", + "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + ], + "graphHashes": [ + "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d" + ], + "medianSuccessfulWallMs": 174175, + "peakRssBytes": [ + 110297088, + 105447424, + 110411776 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 173607, + 174175, + 176198 + ] + } + }, + "observations": [ + { + "exit_code": -9, + "timed_out": true, + "wall_ms": 180013, + "stdout_bytes": 0, + "stderr_bytes": 0, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:25:01.595653+00:00", + "loadAverageBefore": [ + 2.2490234375, + 4.95458984375, + 5.44775390625 + ], + "loadAverageAfter": [ + 3.3369140625, + 4.39208984375, + 5.12255859375 + ], + "sampleIndex": 3, + "repeat": 0, + "tool": "baseline", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "peakRssBytes": null + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 173607, + "stdout_bytes": 490, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:28:01.625631+00:00", + "loadAverageBefore": [ + 3.3369140625, + 4.39208984375, + 5.12255859375 + ], + "loadAverageAfter": [ + 2.82958984375, + 3.7255859375, + 4.70703125 + ], + "sampleIndex": 3, + "repeat": 0, + "tool": "candidate", + "stdoutSha256": "99aed09d5f1e7023d7a1003c199def3a5ba0d312cdf346b858497ae7e161ab80", + "stderrSha256": "79fc54d3d4658c613a42ce149b512bc6339ef6aba823a3f3d7f3c215c43a5460", + "peakRssBytes": 110297088, + "graphSha256": "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "graphBytes": 5175612, + "nodes": 1949, + "edges": 3732, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:60ddebd65af69a29dcfee88f1a9daf7c95f806bf05c8c3c3fd66eb3591bdc112", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:2b1fd9de2802921eb656f7221b97d21a71bf811d132b752f491849cec8b5e91d" + }, + "canonicalJsonSha256": "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 174175, + "stdout_bytes": 490, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:30:55.296331+00:00", + "loadAverageBefore": [ + 2.82958984375, + 3.7255859375, + 4.70703125 + ], + "loadAverageAfter": [ + 4.2529296875, + 3.908203125, + 4.59033203125 + ], + "sampleIndex": 3, + "repeat": 1, + "tool": "candidate", + "stdoutSha256": "a4a997b93919199294ca9d470613402877b01b5028d00899dc147de2bc400ecb", + "stderrSha256": "2a0f490b5a3a7f8de08f2043943318b9b10c5723841622746c2cffa6ac7b396e", + "peakRssBytes": 105447424, + "graphSha256": "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "graphBytes": 5175612, + "nodes": 1949, + "edges": 3732, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:60ddebd65af69a29dcfee88f1a9daf7c95f806bf05c8c3c3fd66eb3591bdc112", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:2b1fd9de2802921eb656f7221b97d21a71bf811d132b752f491849cec8b5e91d" + }, + "canonicalJsonSha256": "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + }, + { + "exit_code": -9, + "timed_out": true, + "wall_ms": 180005, + "stdout_bytes": 0, + "stderr_bytes": 0, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:33:49.556942+00:00", + "loadAverageBefore": [ + 4.2529296875, + 3.908203125, + 4.59033203125 + ], + "loadAverageAfter": [ + 4.103515625, + 4.00048828125, + 4.5009765625 + ], + "sampleIndex": 3, + "repeat": 1, + "tool": "baseline", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "peakRssBytes": null + }, + { + "exit_code": -9, + "timed_out": true, + "wall_ms": 180014, + "stdout_bytes": 0, + "stderr_bytes": 0, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:36:49.565143+00:00", + "loadAverageBefore": [ + 4.103515625, + 4.00048828125, + 4.5009765625 + ], + "loadAverageAfter": [ + 6.7880859375, + 4.8955078125, + 4.75 + ], + "sampleIndex": 3, + "repeat": 2, + "tool": "baseline", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "peakRssBytes": null + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 176198, + "stdout_bytes": 490, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T17:39:49.618522+00:00", + "loadAverageBefore": [ + 6.7880859375, + 4.8955078125, + 4.75 + ], + "loadAverageAfter": [ + 4.9638671875, + 5.22705078125, + 4.94091796875 + ], + "sampleIndex": 3, + "repeat": 2, + "tool": "candidate", + "stdoutSha256": "7bcea0c01bccf819e238aaa87d714c348a5e66a675723e326c8b84b1aa13904a", + "stderrSha256": "0466a9b08ddc4975c816274d33bf2fbe3e3531caa77a0d07540f3d2e29aa11a4", + "peakRssBytes": 110411776, + "graphSha256": "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "graphBytes": 5175612, + "nodes": 1949, + "edges": 3732, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:60ddebd65af69a29dcfee88f1a9daf7c95f806bf05c8c3c3fd66eb3591bdc112", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:2b1fd9de2802921eb656f7221b97d21a71bf811d132b752f491849cec8b5e91d" + }, + "canonicalJsonSha256": "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + } + ] + } + ], + "limitations": [ + "Unoptimized development binaries with matching explicit build settings; not release-performance qualification.", + "Three observations per binary and file, alternating order with fresh outputs and ordinary OS caches; no warmups or OS-cache flushing.", + "The same host also runs unrelated work; recorded load averages do not prove isolation. No confidence interval or tool-wide speed ranking.", + "Samples were selected before the candidate results but after profiling the CloudStack timeout. This is diagnosis, not held-out confirmation.", + "Graph equality includes all JSON fields and preserves array order. A missing baseline graph cannot establish old/new equality.", + "This optimization does not implement or validate god-object classification. Original full-repository timeout/admission failures remain unchanged." + ] +} diff --git a/benchmarks/agent_query/sql_regex_cache_registration.json b/benchmarks/agent_query/sql_regex_cache_registration.json new file mode 100644 index 000000000..d47339000 --- /dev/null +++ b/benchmarks/agent_query/sql_regex_cache_registration.json @@ -0,0 +1,58 @@ +{ + "schema": "compass.sql-regex-cache-registration/1", + "scope": "Development optimization prompted by an observed SQL regex-compilation profile; not held-out or broad performance qualification.", + "source": { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "trackedSqlFiles": 119 + }, + "samples": [ + { + "file": "engine/schema/src/main/resources/META-INF/db/schema-224to225-cleanup.sql", + "sortedIndex": 29, + "bytes": 938, + "sha256": "e3956e631ed1569790c0e715416726ed397e0d9d2e9a60551dcc41dcd29de92f" + }, + { + "file": "setup/db/postprocess-20to21.sql", + "sortedIndex": 59, + "bytes": 1949, + "sha256": "88784b0df00be6d6939ebe275c6d1aabcf8bac8636c00bf7d6ad08e2caee2aae" + }, + { + "file": "engine/schema/src/main/resources/META-INF/db/schema-41120to41200.sql", + "sortedIndex": 89, + "bytes": 10288, + "sha256": "03e7035ff015e9e3eb7f194a32d37f6e418244cee81853ec6d370b47e7589780" + }, + { + "file": "engine/schema/src/main/resources/META-INF/db/schema-430to440.sql", + "sortedIndex": 118, + "bytes": 411080, + "sha256": "99cc9ada9dae1119b8757f805211aa714702b81d2446c0f9fa58e9e7f3c62f4f" + } + ], + "sourceSelection": "Reuse all four complete SQL files from the prior registered diagnosis; no new selection based on cache results.", + "baselineProductionCommit": "1a1f6a6977d42a694df545a08aaa997b5fe05f7a", + "baselineBinarySha256": "96a99b19302fd3c912a07243643830f551b0e8023be619fbab51f8a7b2b86bd0", + "baselineConfirmation": "Before editing the cache, rebuild the current unchanged source with the same release command, offline parser bundle and per-worktree target; require the copied baseline hash to match. Record command, environment and source hashes. Do not run compilation alongside this task\u2019s pending whole-repository extraction.", + "candidatePolicy": "Only cache the fixed SQL read/write access regexes. Run native SQL/domain tests, applicable workspace/product/fixture checks, then build with matching release settings and freeze the candidate hash. Do not reuse the pending unoptimized whole-repository graph as cache-candidate output.", + "profile": { + "schema": "compass.sql-regex-profile/1", + "sourceSqlSha256": "d14a5ef35ae52f4bf749fdcbf6863deecd977d044a73d1b6a61241ec3a2b334d", + "profileSha256": "bc9e8775bb782cea3ba4a28bd53a69b598ec050fa12d2aecbac6962499b84eef", + "profileCaptureSha256": "bbda8ed6b4e73e9bde4572cd152d6f4575507611cbd2078c96c556ca3896a121", + "binarySha256": "9375271e6718e780daede034534bd6b5676e0e1385718aed2fcec16946df25df", + "durationSeconds": 2, + "intervalMilliseconds": 10, + "observation": "The sampled SQL extractor stack repeatedly enters State::add_access_matches and Regex::new. One branch records 60 such samples, and another records 3. This is a short snapshot, not a whole-run percentage.", + "sourceEvidence": "add_data_access_statement constructs the same one read and five write pattern strings per statement; add_access_matches recompiles them on each call. Patterns do not depend on source text.", + "proposedChange": "Cache only those fixed compiled read/write patterns, following existing local OnceLock regex caches. Preserve pattern order, captures, alias/CTE binding and emitted edge order.", + "limits": "Do not attribute all remaining runtime to this snapshot, change graph semantics, or replace original outcomes. The sampled whole-repository follow-up includes profiling overhead; the 24 prior per-file timings remain untouched." + }, + "procedure": "Same complete input root for baseline and candidate per file, fresh outputs, three repetitions per binary, alternating old/new order by repetition. Same --code-only --no-viz --store sqlite. Record timestamps, host load, wall time and peak RSS. No overlap with this task\u2019s compilation or other extraction. Ordinary OS caches; no warmups or OS-cache flushing. Compare complete graph JSON with no exclusions, preserve array order and all failures. No ratio if either side lacks all observations or complete equality. Background host work remains a limitation.", + "sampleTimeoutSeconds": 180, + "streamLimitBytes": 16777216, + "graphLimitBytes": 268435456, + "forbiddenClaims": "Do not promote this four-file development panel as whole-product release qualification, a Graphify speed ranking, god-object classification or held-out superiority. Preserve all previous debug-build outcomes. Any full-repository cache follow-up must have its own complete source and unchanged bounds." +} diff --git a/benchmarks/agent_query/sql_regex_cache_review.json b/benchmarks/agent_query/sql_regex_cache_review.json new file mode 100644 index 000000000..cd49fbcac --- /dev/null +++ b/benchmarks/agent_query/sql_regex_cache_review.json @@ -0,0 +1,1381 @@ +{ + "schema": "compass.sql-regex-cache-review/1", + "status": "matching release binaries on four development inputs; not whole-product or Graphify qualification", + "source": { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "trackedSqlFiles": 119 + }, + "productionChange": "Compile fixed SQL read/write access patterns once per process using OnceLock. Preserve pattern and capture order, alias/CTE binding and emitted records.", + "productionChangeCommit": "9df5dcf32f9581c1d9eeb299eb2123d807afe60c", + "baselineProductionCommit": "1a1f6a6977d42a694df545a08aaa997b5fe05f7a", + "registrationSha256": "134ec94d9acf79f2e0b4fe672a4aa6377e180ebcbe969751dd9cefb956ce511d", + "baselineRebuildConfirmed": true, + "sourceSqlSha256": "c1e9e5ad9452999c4a282a6f92ce15120f9862ad5e17e1e50d26f3d46676552a", + "buildSettings": { + "profile": "release", + "inputs": { + "schema": "compass.sql-regex-cache-build-inputs/1", + "baselineProductionCommit": "1a1f6a6977d42a694df545a08aaa997b5fe05f7a", + "candidateProductionCommit": "9df5dcf32f9581c1d9eeb299eb2123d807afe60c", + "configuration": [ + { + "path": "Cargo.toml", + "sha256": "fe4c17809055a12229a5bb55ac9c950d0ebe1d465958673390b73e408d71ee20", + "unchangedFromBaselineProductionCommit": true + }, + { + "path": "Cargo.lock", + "sha256": "cc35464cdeafe61a095ef46886eb3bc3943b1abbd9aa25118f07b4140c24978b", + "unchangedFromBaselineProductionCommit": true + }, + { + "path": ".cargo/config.toml", + "sha256": "231d2ddd6ae93691f5a7e599622b89a86365668b37cfcbee3e94c971508ff034", + "unchangedFromBaselineProductionCommit": true + }, + { + "path": "rust-toolchain.toml", + "sha256": "3617e46e3a6e60e653a4ee823df314534ab7d54c83c1b0fd866e008e3fee1bba", + "unchangedFromBaselineProductionCommit": true + }, + { + "path": "crates/compass-cli/Cargo.toml", + "sha256": "858c61af21eb7a702e662410a07956d52ef919d6e00eb520a5076bb744a88925", + "unchangedFromBaselineProductionCommit": true + }, + { + "path": "crates/compass-languages/Cargo.toml", + "sha256": "66c0d60cccfa1baa95b9d83c3802a5eec8bf5ff668ffa4dd1a358eea54d2f533", + "unchangedFromBaselineProductionCommit": true + } + ], + "releaseProfile": { + "codegenUnits": 1, + "lto": "thin", + "panic": "abort", + "strip": "symbols", + "optLevel": "Cargo release default (3)" + }, + "productionDifference": " crates/compass-languages/src/sql.rs | 58 +++++++++++++++++++++++++++++++------\n 1 file changed, 49 insertions(+), 9 deletions(-)\n" + }, + "command": [ + "cargo", + "build", + "--release", + "--locked", + "-p", + "compass-cli", + "--bin", + "compass" + ], + "offlineParsers": true, + "sameTargetAndParserBundle": true, + "temporaryDirectory": "separate external scratch directories", + "inherited": { + "RUSTFLAGS": null, + "CARGO_ENCODED_RUSTFLAGS": null, + "RUSTC_WRAPPER": null, + "CARGO_PROFILE_RELEASE_DEBUG": null, + "CARGO_PROFILE_RELEASE_OPT_LEVEL": null, + "CARGO_PROFILE_RELEASE_LTO": null, + "CARGO_PROFILE_RELEASE_CODEGEN_UNITS": null, + "CARGO_INCREMENTAL": null, + "CARGO_BUILD_JOBS": null + } + }, + "binaries": { + "baseline": "96a99b19302fd3c912a07243643830f551b0e8023be619fbab51f8a7b2b86bd0", + "candidate": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4" + }, + "environment": { + "platform": "macOS-26.5.2-arm64-arm-64bit-Mach-O", + "cpu": "Apple M2 Max", + "memoryBytes": 34359738368, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)\nbinary: rustc\ncommit-hash: 8bab26f4f68e0e26f0bb7960be334d5b520ea452\ncommit-date: 2026-07-14\nhost: aarch64-apple-darwin\nrelease: 1.97.1\nLLVM version: 22.1.6\n" + }, + "procedure": "Same complete input root for baseline and candidate per file, fresh outputs, three repetitions per binary, alternating old/new order by repetition. Same --code-only --no-viz --store sqlite. Record timestamps, host load, wall time and peak RSS. No overlap with this task\u2019s compilation or other extraction. Ordinary OS caches; no warmups or OS-cache flushing. Compare complete graph JSON with no exclusions, preserve array order and all failures. No ratio if either side lacks all observations or complete equality. Background host work remains a limitation.", + "commandTemplate": [ + "/usr/bin/time", + "-l", + "", + "extract", + "", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "" + ], + "limits": { + "sampleTimeoutSeconds": 180, + "streamLimitBytes": 16777216, + "graphLimitBytes": 268435456 + }, + "externalRun": "sql-regex-cache-01", + "artifacts": { + "run_samples.py": "5f68faf7f19ebf4f56ba02d955e7694e5a3cd5623f9759cf1c61c8a218bcd979", + "samples.json": "ab5a24ef33d193387201637b52dc53b5af9ecf1362e239b58ea5b2993552c497", + "verify_samples.py": "05676ecf4923a8f8c57fc2c2cd43093a495f33e9483bfd93a3e74bd4657b1556", + "verified-samples.json": "a98fd5b70b36535118eb9336879a8a101e2a0442b63453abadfd0362ce03bb5e", + "verified-samples-repeat.json": "a98fd5b70b36535118eb9336879a8a101e2a0442b63453abadfd0362ce03bb5e", + "checks.json": "4bd8c9f93427bc1b56e393a189f3a75a0461f68cccec6961a45a2f9ff07e8467", + "checks.py": "0841dc2eb6c2281e0b243a4076e0e4aed2d16116767435a84aed71dd19d1054c", + "baseline.json": "a8de799dfe812dd4efcc3c6d879129ca60d46e82f8547513cde030d8263ff754", + "build-inputs.json": "9785248298ec2141816dfbb64d976d8b798be60459c1675afd966511610e9eee", + "baseline-confirmation.json": "9e44097b506b527e4175c9ee3d3c3da418d9508be4d6c210dee9c435cfbe337b", + "confirm_baseline.py": "09d32ecd7229ca4353e8d151e9737dc6097a75847e57bd268fafa4fd875d7267", + "write_report.py": "7b00f6076b8dad59f31136285012c852a72a1c50a1714c47df03270071f526b8" + }, + "checks": [ + { + "name": "fmt", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 4045, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "sql-unit", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 1405, + "stdoutSha256": "20e93f1baf3c0bdef1e55174855b22f9334962bfbbb2ca0ee9d0cd4d91b205ae", + "stderrSha256": "4764d3a6eeb15a3d1411d3ed0cbabc10a7a7d5fdd335a7a0b317d1ce2b64f2b9" + }, + { + "name": "sql-domain", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 27320, + "stdoutSha256": "b374df61f028548340242a265663e634c5d5b16a4930f5b2bfa4f12eaec7afb0", + "stderrSha256": "59803888f28c6f5a445a79fc0870e2edbc80a179a9709f7aefc51e2da9a40d44" + }, + { + "name": "workspace-clippy", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 74105, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "897b47983c24e273dbecd6f8c55f9ca287e960b70ffccd092f76ed90eefd960b" + }, + { + "name": "workspace-tests", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 355102, + "stdoutSha256": "673a32b910bb8845c33aa993bbd3a9268eed488f79b6d4e9c703cbece8390bd6", + "stderrSha256": "9116869c83a1b6ba71e11a9d8a975b15d48727fd9b35f7a0d230702101381fb4" + }, + { + "name": "product", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 135915, + "stdoutSha256": "1504422c1441f5e07d65f27331af88b81145dc464923d275c03a85238fce0a69", + "stderrSha256": "4c54489f7a4c17643296f53b27d6faf8bd6c0052177f12b70b448531ea82152e" + }, + { + "name": "fixtures", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 997331, + "stdoutSha256": "227cf79dc922bf5999b8bb4400ffcb99e9733680adb7948b4535c530d83b10d2", + "stderrSha256": "6aca92f39ce04da98a9b0d91716e4dbbab53c8a090b1200264de83cdc03f0622" + }, + { + "name": "benchmark-tests", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 2214, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "31103128fc62d55080305821ed85b01ac7b59f768d01607ac8b1ffeedac98119" + }, + { + "name": "boundary", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 47, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "release-build", + "exitCode": 0, + "timedOut": false, + "outputLimited": false, + "wallMs": 1087, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "e4e969ef7c71972e6fb83df6c98e562aeb279d89756ffefb5fc32e55d26b9bb7" + } + ], + "results": [ + { + "bytes": 938, + "candidateToBaselineMedianRatio": 0.9563758389261745, + "completeOldNewEquality": true, + "excludedGraphFields": [], + "file": "engine/schema/src/main/resources/META-INF/db/schema-224to225-cleanup.sql", + "sampleIndex": 0, + "sourceSha256": "e3956e631ed1569790c0e715416726ed397e0d9d2e9a60551dcc41dcd29de92f", + "successfulGraphCount": 6, + "successfulGraphsEqual": true, + "tools": { + "baseline": { + "canonicalGraphHashes": [ + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b", + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b", + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + ], + "graphHashes": [ + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298" + ], + "medianSuccessfulWallMs": 596, + "peakRssBytes": [ + 25690112, + 25608192, + 25460736 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 992, + 596, + 520 + ] + }, + "candidate": { + "canonicalGraphHashes": [ + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b", + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b", + "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + ], + "graphHashes": [ + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298" + ], + "medianSuccessfulWallMs": 570, + "peakRssBytes": [ + 25526272, + 25509888, + 25559040 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 582, + 570, + 557 + ] + } + }, + "observations": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 992, + "stdout_bytes": 481, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:30.407206+00:00", + "loadAverageBefore": [ + 14.130859375, + 15.87646484375, + 14.0595703125 + ], + "loadAverageAfter": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "sampleIndex": 0, + "repeat": 0, + "tool": "baseline", + "stdoutSha256": "1b91e0a1ad29d8c6982b9514633dea2e3821360c42a9e5d25534ff6eac1ace0e", + "stderrSha256": "8b4f565560ab54d2518e1fc5944ab4c891ffbb416e3c869f9bfccc12c0d619d0", + "peakRssBytes": 25690112, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 582, + "stdout_bytes": 482, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:31.401420+00:00", + "loadAverageBefore": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "loadAverageAfter": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "sampleIndex": 0, + "repeat": 0, + "tool": "candidate", + "stdoutSha256": "c282b14e69090183925ab11a0a44399babff5d4228e8ba9c54c2ceb56413ec6f", + "stderrSha256": "e2efe5129a0773d170f1be132c7af043629b23d0257a1fa89b499624d7f9d7da", + "peakRssBytes": 25526272, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 570, + "stdout_bytes": 482, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:31.985447+00:00", + "loadAverageBefore": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "loadAverageAfter": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "sampleIndex": 0, + "repeat": 1, + "tool": "candidate", + "stdoutSha256": "cbe173527f03f6ea4fa85aee5cdb89f718e5a9ab4728d13f5f5bdc9847d61662", + "stderrSha256": "ea7329dacf2a1ba8ab5d06f449d648a7fdccf889f9b92f90bac3eedcd6267ce7", + "peakRssBytes": 25509888, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 596, + "stdout_bytes": 481, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:32.556560+00:00", + "loadAverageBefore": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "loadAverageAfter": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "sampleIndex": 0, + "repeat": 1, + "tool": "baseline", + "stdoutSha256": "2689cafc8afe875fd2eaa2d7084301dcd251425b346db340fa037e53575c1637", + "stderrSha256": "6c5094be373e0d73d087cfc7623bb9dc9b1a6053e2cf3a8694b5ad4b0738a75c", + "peakRssBytes": 25608192, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 520, + "stdout_bytes": 481, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:33.153812+00:00", + "loadAverageBefore": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "loadAverageAfter": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "sampleIndex": 0, + "repeat": 2, + "tool": "baseline", + "stdoutSha256": "4a09aca920104a38a06923b510470c7c1b5893d37de777d6692d4cce561aac03", + "stderrSha256": "973d8bcb724543203ffe64c8614e1d115e31c782843e0d462152cea0708ee9cf", + "peakRssBytes": 25460736, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 557, + "stdout_bytes": 482, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:33.675453+00:00", + "loadAverageBefore": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "loadAverageAfter": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "sampleIndex": 0, + "repeat": 2, + "tool": "candidate", + "stdoutSha256": "20120a849436c9bcf3a07d0bd5fd32a688d5bf66eb70a4be4b4144c56863cffd", + "stderrSha256": "2288654b2e97c0be2ddd4e35d98bdb23c44d1aff574e5f6033c5129d6c9f3af2", + "peakRssBytes": 25559040, + "graphSha256": "15e1869adcace69b2c2c9187482fde658158c74e1d452aabe75766e4a445e298", + "graphBytes": 4367, + "nodes": 2, + "edges": 1, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:bc4edc8c2745ec730fbd7bb80df1216bc17a41ec9afce5d148e9ff0cee5a6f3b", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:c94cf7fc2a4866ae6bd5eaf93ea3422dd21e1f26b6c7a3bba7035b43690ac3ec" + }, + "canonicalJsonSha256": "5605edc10792b3a26d064e9d0497cb79805e98582812163e59ec231d3a266f6b" + } + ] + }, + { + "bytes": 1949, + "candidateToBaselineMedianRatio": 1.0241379310344827, + "completeOldNewEquality": true, + "excludedGraphFields": [], + "file": "setup/db/postprocess-20to21.sql", + "sampleIndex": 1, + "sourceSha256": "88784b0df00be6d6939ebe275c6d1aabcf8bac8636c00bf7d6ad08e2caee2aae", + "successfulGraphCount": 6, + "successfulGraphsEqual": true, + "tools": { + "baseline": { + "canonicalGraphHashes": [ + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace", + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace", + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + ], + "graphHashes": [ + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a" + ], + "medianSuccessfulWallMs": 580, + "peakRssBytes": [ + 29130752, + 29442048, + 29048832 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 642, + 530, + 580 + ] + }, + "candidate": { + "canonicalGraphHashes": [ + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace", + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace", + "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + ], + "graphHashes": [ + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a" + ], + "medianSuccessfulWallMs": 594, + "peakRssBytes": [ + 30769152, + 30638080, + 30687232 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 652, + 594, + 579 + ] + } + }, + "observations": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 642, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:34.235294+00:00", + "loadAverageBefore": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "loadAverageAfter": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "sampleIndex": 1, + "repeat": 0, + "tool": "baseline", + "stdoutSha256": "860728bc37dd324f1ea8042935fb82af2d8c0acf5ef45e6bdd1ae18a6cf54eee", + "stderrSha256": "60d070cec9f47e1185c59e059b15207a93bc5c9f8d05be13c08eda6fa9ee8409", + "peakRssBytes": 29130752, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 652, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:34.879868+00:00", + "loadAverageBefore": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "loadAverageAfter": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "sampleIndex": 1, + "repeat": 0, + "tool": "candidate", + "stdoutSha256": "9f245c2504a76782c1a82966b2d5773ff7ef9874a64017f4c89b30a1d941e424", + "stderrSha256": "83d047d7e57efcda4319642dc879152fdb58eae818c0df767982def12df840f1", + "peakRssBytes": 30769152, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 594, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:35.533631+00:00", + "loadAverageBefore": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "loadAverageAfter": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "sampleIndex": 1, + "repeat": 1, + "tool": "candidate", + "stdoutSha256": "631b780b2b1f8ea935521f671cb0e66470d7580b35c6f0e53b9fb3a21c59877c", + "stderrSha256": "cab7a45e9476893fccb9cbd1ce94bd7591ef618be6ff62b6d794e4fbb15ed3ac", + "peakRssBytes": 30638080, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 530, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:36.129697+00:00", + "loadAverageBefore": [ + 13.4794921875, + 15.71240234375, + 14.01220703125 + ], + "loadAverageAfter": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "sampleIndex": 1, + "repeat": 1, + "tool": "baseline", + "stdoutSha256": "7ad370c93bd8c52772f86cff60e4b08ff3cfdff0ad0b5af5785932b8d18ac797", + "stderrSha256": "72e5abfabdf9c544ec7f9ef3a2d955e882c768f9edf034e283549c74a5f95156", + "peakRssBytes": 29442048, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 580, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:36.661875+00:00", + "loadAverageBefore": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "loadAverageAfter": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "sampleIndex": 1, + "repeat": 2, + "tool": "baseline", + "stdoutSha256": "238a7fcb629e81acf0a1dfdafcdca7baf9c5912692042a3dd295787a75ecd1bf", + "stderrSha256": "143e0872d513cab391eec5e175490006d627e99a320633b72e5359b620e4868e", + "peakRssBytes": 29048832, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 579, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:37.243603+00:00", + "loadAverageBefore": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "loadAverageAfter": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "sampleIndex": 1, + "repeat": 2, + "tool": "candidate", + "stdoutSha256": "249f9cb5479462b1e9cd6957f2df3a35bb1e248dfd4b20d1fac6571b77ac361b", + "stderrSha256": "11c9f98b099fe7ff64005b4361b993ee05bac4008cc51169b7395d223c363966", + "peakRssBytes": 30687232, + "graphSha256": "c77e7608a0e5f205d3998e1f9af6bfddb4ae8fd2944b81f7625b8404b1f1390a", + "graphBytes": 24840, + "nodes": 13, + "edges": 15, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:3b82dff6cbcdcec61460eff8d56f22b8eb85e6c7265829be2415f00ce4b5c251", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:46f28e43468f804023379a7e736c76575e629c648e81c65733d7d4f36f120f42" + }, + "canonicalJsonSha256": "2b4d7acf1ecf3f1f35cba2202529eba19c7d77b8b2db21025cc6bf0b9d2b6ace" + } + ] + }, + { + "bytes": 10288, + "candidateToBaselineMedianRatio": 1.0136986301369864, + "completeOldNewEquality": true, + "excludedGraphFields": [], + "file": "engine/schema/src/main/resources/META-INF/db/schema-41120to41200.sql", + "sampleIndex": 2, + "sourceSha256": "03e7035ff015e9e3eb7f194a32d37f6e418244cee81853ec6d370b47e7589780", + "successfulGraphCount": 6, + "successfulGraphsEqual": true, + "tools": { + "baseline": { + "canonicalGraphHashes": [ + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839", + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839", + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + ], + "graphHashes": [ + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad" + ], + "medianSuccessfulWallMs": 657, + "peakRssBytes": [ + 30900224, + 31145984, + 31113216 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 657, + 637, + 658 + ] + }, + "candidate": { + "canonicalGraphHashes": [ + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839", + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839", + "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + ], + "graphHashes": [ + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad" + ], + "medianSuccessfulWallMs": 666, + "peakRssBytes": [ + 32669696, + 32374784, + 32374784 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 643, + 666, + 692 + ] + } + }, + "observations": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 657, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:37.826282+00:00", + "loadAverageBefore": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "loadAverageAfter": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "sampleIndex": 2, + "repeat": 0, + "tool": "baseline", + "stdoutSha256": "3f1a541d945561b90508d7d9953da9bdc7841b1da4451753c279ea16be09e5eb", + "stderrSha256": "4cc1f5acd32941962e8488e39c5b1bd1c4181d0bd9239f8e4dd5b0f844ade4f5", + "peakRssBytes": 30900224, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 643, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:38.485124+00:00", + "loadAverageBefore": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "loadAverageAfter": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "sampleIndex": 2, + "repeat": 0, + "tool": "candidate", + "stdoutSha256": "64fe48ff256c9ce4002958127995edd52685e5abcef00b33d627d4b7a5c4c8e3", + "stderrSha256": "b5f702e5be50bd8787b7faa8e5172a3fed57a52f8e3a33e4d16dd593cdacb15b", + "peakRssBytes": 32669696, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 666, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:39.130746+00:00", + "loadAverageBefore": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "loadAverageAfter": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "sampleIndex": 2, + "repeat": 1, + "tool": "candidate", + "stdoutSha256": "365d4b394c344e971c2b0cf1a4b66bb846174837b43b29d26c069890438dc46c", + "stderrSha256": "296047ead6d3f673ed5fae7beb9451957000b192f99dffa035354d33dc28edf3", + "peakRssBytes": 32374784, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 637, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:39.800247+00:00", + "loadAverageBefore": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "loadAverageAfter": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "sampleIndex": 2, + "repeat": 1, + "tool": "baseline", + "stdoutSha256": "ebaf02eea757d65ce99ad1344bb9de7e9b681ef1e80c73d599fe9e5231667920", + "stderrSha256": "dff783b683f7b65866f952e27bf757fee0172c1dd91ee8cb4b1d04b88799e147", + "peakRssBytes": 31145984, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 658, + "stdout_bytes": 483, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:40.439618+00:00", + "loadAverageBefore": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "loadAverageAfter": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "sampleIndex": 2, + "repeat": 2, + "tool": "baseline", + "stdoutSha256": "9dbffcb447352fa3778bedaf94df942d12f03640afa2bb6723a0b9afc5665f85", + "stderrSha256": "e075dc54ffce3a9c0309d7a0320a1ce8ae3ef1b800d0de462e6242c65db1d466", + "peakRssBytes": 31113216, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 692, + "stdout_bytes": 484, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:41.100460+00:00", + "loadAverageBefore": [ + 12.72021484375, + 15.517578125, + 13.953125 + ], + "loadAverageAfter": [ + 12.021484375, + 15.326171875, + 13.89453125 + ], + "sampleIndex": 2, + "repeat": 2, + "tool": "candidate", + "stdoutSha256": "ec15a06447fece2ce053a9257fd7e855d9100e30384f3062685e2c34a1fcaaae", + "stderrSha256": "9c56efbecef393dfe9ecb8d261923e72ae773551374f86c9927c244c0bd86efd", + "peakRssBytes": 32374784, + "graphSha256": "5b9487fdfefccc7ab8c2790230d07edce8c6b0427b64495b6f14cc432ea1c0ad", + "graphBytes": 57703, + "nodes": 25, + "edges": 37, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:fdab0058ab80b6a487d0aa2e5ae1dfa565b3d31eaaa9b3d70cac6174b9c46997", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:35036ce810d331a48c3c24db7abe0f9f095716bc9101398a5651383bf7dee002" + }, + "canonicalJsonSha256": "608a379f9038d59fb6f37ad7a1d1938b055702f7115b3ccf09d71ab6d5940839" + } + ] + }, + { + "bytes": 411080, + "candidateToBaselineMedianRatio": 0.1257526103193354, + "completeOldNewEquality": true, + "excludedGraphFields": [], + "file": "engine/schema/src/main/resources/META-INF/db/schema-430to440.sql", + "sampleIndex": 3, + "sourceSha256": "99cc9ada9dae1119b8757f805211aa714702b81d2446c0f9fa58e9e7f3c62f4f", + "successfulGraphCount": 6, + "successfulGraphsEqual": true, + "tools": { + "baseline": { + "canonicalGraphHashes": [ + "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d", + "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d", + "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + ], + "graphHashes": [ + "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d" + ], + "medianSuccessfulWallMs": 13121, + "peakRssBytes": [ + 91881472, + 78774272, + 86212608 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 12403, + 13121, + 20833 + ] + }, + "candidate": { + "canonicalGraphHashes": [ + "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d", + "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d", + "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + ], + "graphHashes": [ + "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d" + ], + "medianSuccessfulWallMs": 1650, + "peakRssBytes": [ + 82493440, + 82542592, + 79937536 + ], + "successful": 3, + "timeouts": 0, + "wallMs": [ + 1650, + 1613, + 2319 + ] + } + }, + "observations": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 12403, + "stdout_bytes": 488, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:41.801171+00:00", + "loadAverageBefore": [ + 12.021484375, + 15.326171875, + 13.89453125 + ], + "loadAverageAfter": [ + 11.02783203125, + 15.00244140625, + 13.7958984375 + ], + "sampleIndex": 3, + "repeat": 0, + "tool": "baseline", + "stdoutSha256": "29ebb1c7a38d3f15cbd57a75b74905e9195c8ccb0f07593235a70bd241a75478", + "stderrSha256": "3002704177e4babf445c95af57dae051b364ad442afee2eed19f32cc0c411d6e", + "peakRssBytes": 91881472, + "graphSha256": "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "graphBytes": 5175612, + "nodes": 1949, + "edges": 3732, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:60ddebd65af69a29dcfee88f1a9daf7c95f806bf05c8c3c3fd66eb3591bdc112", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:2b1fd9de2802921eb656f7221b97d21a71bf811d132b752f491849cec8b5e91d" + }, + "canonicalJsonSha256": "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1650, + "stdout_bytes": 488, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:54.266784+00:00", + "loadAverageBefore": [ + 11.02783203125, + 15.00244140625, + 13.7958984375 + ], + "loadAverageAfter": [ + 11.02783203125, + 15.00244140625, + 13.7958984375 + ], + "sampleIndex": 3, + "repeat": 0, + "tool": "candidate", + "stdoutSha256": "130813d222676d1635cc32687c505aea822f0b1e5db7bdce54afcf28cd5c6cf2", + "stderrSha256": "266cd7b7893e3bb7fd846eaa7ad23d857f1590e830535d40669a507cec914093", + "peakRssBytes": 82493440, + "graphSha256": "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "graphBytes": 5175612, + "nodes": 1949, + "edges": 3732, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:60ddebd65af69a29dcfee88f1a9daf7c95f806bf05c8c3c3fd66eb3591bdc112", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:2b1fd9de2802921eb656f7221b97d21a71bf811d132b752f491849cec8b5e91d" + }, + "canonicalJsonSha256": "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 1613, + "stdout_bytes": 488, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:55.995632+00:00", + "loadAverageBefore": [ + 11.02783203125, + 15.00244140625, + 13.7958984375 + ], + "loadAverageAfter": [ + 10.46484375, + 14.8193359375, + 13.73828125 + ], + "sampleIndex": 3, + "repeat": 1, + "tool": "candidate", + "stdoutSha256": "2e651999668f6b6bb55336c74a6486fbf590643517a53ded3b1bd5d309ce78f7", + "stderrSha256": "fc543409d18028dfcc7621f682c19f636f134abd8053a6f58b4119a76a6e48e7", + "peakRssBytes": 82542592, + "graphSha256": "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "graphBytes": 5175612, + "nodes": 1949, + "edges": 3732, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:60ddebd65af69a29dcfee88f1a9daf7c95f806bf05c8c3c3fd66eb3591bdc112", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:2b1fd9de2802921eb656f7221b97d21a71bf811d132b752f491849cec8b5e91d" + }, + "canonicalJsonSha256": "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 13121, + "stdout_bytes": 488, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:52:57.674278+00:00", + "loadAverageBefore": [ + 10.46484375, + 14.8193359375, + 13.73828125 + ], + "loadAverageAfter": [ + 9.95068359375, + 14.5625, + 13.6591796875 + ], + "sampleIndex": 3, + "repeat": 1, + "tool": "baseline", + "stdoutSha256": "596bfd3c71b12749fe9b1b5ccc41dae62b04a45283547667649c1f18b4068c81", + "stderrSha256": "d15577dd65f02ea8ec92b6850709e689115bca2ae80bf3ed19a3e01393d3a8f5", + "peakRssBytes": 78774272, + "graphSha256": "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "graphBytes": 5175612, + "nodes": 1949, + "edges": 3732, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:60ddebd65af69a29dcfee88f1a9daf7c95f806bf05c8c3c3fd66eb3591bdc112", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:2b1fd9de2802921eb656f7221b97d21a71bf811d132b752f491849cec8b5e91d" + }, + "canonicalJsonSha256": "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 20833, + "stdout_bytes": 488, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:53:10.888162+00:00", + "loadAverageBefore": [ + 9.95068359375, + 14.5625, + 13.6591796875 + ], + "loadAverageAfter": [ + 14.2373046875, + 15.16650390625, + 13.900390625 + ], + "sampleIndex": 3, + "repeat": 2, + "tool": "baseline", + "stdoutSha256": "96fb6ce3e62d645bf2f6661865cb664b00a352278247bfb499e2bcbd5a273345", + "stderrSha256": "976ee0284f0e79b27d65c774ff416066e3d0d109b8b6b7c23045583678d7351b", + "peakRssBytes": 86212608, + "graphSha256": "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "graphBytes": 5175612, + "nodes": 1949, + "edges": 3732, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:60ddebd65af69a29dcfee88f1a9daf7c95f806bf05c8c3c3fd66eb3591bdc112", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:2b1fd9de2802921eb656f7221b97d21a71bf811d132b752f491849cec8b5e91d" + }, + "canonicalJsonSha256": "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 2319, + "stdout_bytes": 488, + "stderr_bytes": 777, + "output_limited": false, + "startedAtUtc": "2026-09-27T18:53:31.786731+00:00", + "loadAverageBefore": [ + 14.2373046875, + 15.16650390625, + 13.900390625 + ], + "loadAverageAfter": [ + 14.2373046875, + 15.16650390625, + 13.900390625 + ], + "sampleIndex": 3, + "repeat": 2, + "tool": "candidate", + "stdoutSha256": "a252480352c97c104882d7522b5c1a4406944d18f03de04be85b199e086fbc9a", + "stderrSha256": "37b05a740d03304c4b44b305cb424b29e4e5eb66c54ee6d6aee3ea53206208b3", + "peakRssBytes": 79937536, + "graphSha256": "0d2be2b7a8c51301140b0926ba39f64afafae9970bbdfe09c2185af4067d5b3d", + "graphBytes": 5175612, + "nodes": 1949, + "edges": 3732, + "graphBuild": { + "builderVersion": "0.3.30", + "schemaFingerprint": "sha256:ef30f24aab6e9246a9b350f964ede9d154db362efd9ddfca0823e68a6959468b", + "sourceTreeDigest": "sha256:60ddebd65af69a29dcfee88f1a9daf7c95f806bf05c8c3c3fd66eb3591bdc112", + "configurationDigest": "sha256:b8f73f897c534bbfff4dacc58f21762133778afffe56892fe8fddfa57b45a91a", + "generationId": "sha256:2b1fd9de2802921eb656f7221b97d21a71bf811d132b752f491849cec8b5e91d" + }, + "canonicalJsonSha256": "ca6603d1323d69dd59b1a5f6312296b48c8beff7d3987ee89ac41e14e43ea79d" + } + ] + } + ], + "limitations": [ + "All four inputs come from the previous CloudStack SQL diagnosis; they are development inputs, not unseen confirmation.", + "Matching release builds do not establish whole-product release qualification or cross-language performance.", + "Three observations per binary/file; ordinary OS caches, no warmups or OS-cache flushing, no confidence intervals.", + "Unrelated host work can affect results; timestamps and load averages are retained.", + "Every graph field and array order is compared. No ratio is reported without all six successful equal graphs.", + "No Graphify runtime comparison, god-object classification result, or replacement of the two previous whole-repository timeouts follows." + ] +} diff --git a/benchmarks/agent_query/sql_regex_cache_whole_registration.json b/benchmarks/agent_query/sql_regex_cache_whole_registration.json new file mode 100644 index 000000000..f37eb7d76 --- /dev/null +++ b/benchmarks/agent_query/sql_regex_cache_whole_registration.json @@ -0,0 +1,46 @@ +{ + "schema": "compass.sql-regex-cache-whole-registration/1", + "purpose": "Recover a complete CloudStack graph for the reviewed Blob cases and check whole-repository preservation after fixed SQL regex caching. This is a declared operational follow-up, not a repeated performance qualification.", + "source": { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "trackedSqlFiles": 119 + }, + "prerequisites": "The registered four-file release comparison must finish with all 24 outcomes retained, all six complete graphs per file equal, and all candidate native checks passed. Freeze both release executables before this follow-up.", + "binaries": { + "baselineSha256": "96a99b19302fd3c912a07243643830f551b0e8023be619fbab51f8a7b2b86bd0", + "candidateIdentity": "The frozen candidate hash in sql-regex-cache-01/checks.json and samples.json; it must be identical for the four-file and whole-repository arms." + }, + "extraction": { + "order": [ + "baseline", + "candidate" + ], + "repetitions": 1, + "scope": "Entire clean pinned apache/cloudstack checkout, with default native discovery. No language or path exclusions added.", + "arguments": [ + "extract", + "", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "" + ], + "timeoutSeconds": 1200, + "streamLimitBytes": 16777216, + "graphLimitBytes": 1073741824, + "originalGraphLimitBytes": 268435456, + "timing": "Record wall time, UTC timestamps and host load as operational observations. One fixed-order run per version cannot establish a speedup or release-performance qualification.", + "isolation": "No compilation or other extraction by this task during either run. Unrelated host work is disclosed; ordinary OS caches are not flushed." + }, + "comparison": "Retain every timeout, limit failure, publication error and partial-graph warning. Hash each admitted complete graph; identical bytes establish whole-artifact equality. Different hashes do not establish semantic inequality without further review, and cannot earn equality credit. Report admission under both original 256 MiB and follow-up 1 GiB bounds.", + "laterQueries": "Only a successfully published graph within the declared follow-up bound may supply the same eight-class Blob audit. Keep native ranking, source-assisted identity resolution and neighbor diagnostics distinct. Source truth and human Blob ratings cannot be substituted for native ranking output. Any query capture keeps the existing request and response limits.", + "preservation": "Do not overwrite or reclassify either prior unoptimized CloudStack timeout, original graph-admission failures, or any Graphify artifact. Graphify skipped all 119 SQL inputs in its frozen environment; this follow-up is not a Graphify speed comparison.", + "forbiddenClaims": [ + "No whole-product, cross-language or held-out superiority from this follow-up.", + "No degree-to-god-object inference, true-negative inference from absent hub rows, or availability-to-correctness inference.", + "No timing ratio based on a timeout or incomparable build profiles." + ] +} diff --git a/benchmarks/agent_query/sql_regex_cache_whole_repeat_registration.json b/benchmarks/agent_query/sql_regex_cache_whole_repeat_registration.json new file mode 100644 index 000000000..b42900091 --- /dev/null +++ b/benchmarks/agent_query/sql_regex_cache_whole_repeat_registration.json @@ -0,0 +1,58 @@ +{ + "schema": "compass.sql-regex-cache-whole-repeat-registration/1", + "purpose": "Investigate the longer cache-candidate observation on complete CloudStack using repeated counterbalanced release runs. This is a known development repository, not held-out confirmation or whole-product qualification.", + "trigger": { + "baselineWallMs": 193966, + "candidateWallMs": 280053, + "graphBytes": 671502979, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "interpretation": "Both initial observations succeeded and emitted identical partial-graph artifacts. Candidate took longer; cause unproven. Preserve both observations outside the new repeated panel." + }, + "source": { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "trackedSqlFiles": 119 + }, + "binaries": { + "baseline": "96a99b19302fd3c912a07243643830f551b0e8023be619fbab51f8a7b2b86bd0", + "candidate": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4" + }, + "repetitionsPerBinary": 3, + "orderByRepetition": [ + [ + "baseline", + "candidate" + ], + [ + "candidate", + "baseline" + ], + [ + "baseline", + "candidate" + ] + ], + "commandTemplate": [ + "/usr/bin/time", + "-l", + "", + "extract", + "", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "" + ], + "limits": { + "timeoutSeconds": 1200, + "streamBytes": 16777216, + "graphBytes": 1073741824 + }, + "isolation": "Start only after the registered Blob query capture and its verification terminate. No own compilation, other extraction, query capture or large-graph verification alongside these timed runs. Unrelated host work remains uncontrolled and must be disclosed. Keep ordinary OS caches; no warmups or cache flushing.", + "observations": "Record every result, UTC timestamps, host load before/after, wall time, user/sys CPU time, peak RSS and raw process-resource output. Preserve every timeout, artifact error and omission warning. Hash whole graphs and verify equal bytes against the original preserved artifact; do not exclude metadata or array order.", + "decision": "Report all six observations and per-binary medians only when all three observations of that binary succeed with admitted artifacts. Report a median ratio only if all six artifacts equal the original bytes. Flag a candidate median above 1.10 times baseline for investigation; do not approve a new performance baseline from this one repository. Do not explain differences as host noise or regex contention without further evidence.", + "noSubstitution": "Do not replace original full-source observations, SQL-file timings, previous unoptimized timeouts, graph admission failures or Graphify results. No reduced-source fallback or selective repeat of slow outcomes.", + "broaderLimits": "This performance diagnosis does not evaluate god-object classification, explanation quality, source precision, communities or overall superiority." +} diff --git a/benchmarks/agent_query/sql_regex_cache_whole_repeat_review.json b/benchmarks/agent_query/sql_regex_cache_whole_repeat_review.json new file mode 100644 index 000000000..7e3eef27e --- /dev/null +++ b/benchmarks/agent_query/sql_regex_cache_whole_repeat_review.json @@ -0,0 +1,458 @@ +{ + "schema": "compass.sql-regex-cache-whole-repeat-review/1", + "registrationSha256": "2a91c90209db4d19eeb825c5d3901ae215477472942d34835e61dac2e5883f4b", + "source": { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "trackedSqlFiles": 119 + }, + "binaries": { + "baseline": "96a99b19302fd3c912a07243643830f551b0e8023be619fbab51f8a7b2b86bd0", + "candidate": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4" + }, + "limits": { + "timeoutSeconds": 1200, + "streamBytes": 16777216, + "graphBytes": 1073741824 + }, + "initialReviewSha256": "4d694ec2cce46b9c2009b7b7af3beb8e8f884599df50199c848d264e2b23dab6", + "observations": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 235574, + "stdout_bytes": 510, + "stderr_bytes": 892, + "output_limited": false, + "repeat": 0, + "tool": "baseline", + "startedAtUtc": "2026-09-27T19:14:04.555003+00:00", + "loadAverageBefore": [ + 9.2041015625, + 9.6552734375, + 9.8857421875 + ], + "loadAverageAfter": [ + 3.65185546875, + 7.0224609375, + 8.728515625 + ], + "stdoutSha256": "edcf7359d4c0895ddd60736e30ab37a1bcbf0335a837f20d5199eda69c5e13c4", + "stderrSha256": "39e912a9aa48cbd1cd976d67d62c64ae0f5b4214fdc23604ff00e7ba4450f013", + "processTimesSeconds": { + "real": 235.53, + "user": 260.56, + "sys": 23.68 + }, + "peakRssBytes": 6372573184, + "graphBytes": 671502979, + "withinGraphBound": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "equalsInitialGraph": true, + "reportedCounts": { + "files": 6783, + "extracted": 6783, + "cached": 0, + "nodes": 173689, + "edges": 502158, + "communities": 2153 + }, + "reportedPublicationOmissions": { + "nodes": 1, + "edges": 45, + "identityCollisions": 0 + } + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 204082, + "stdout_bytes": 511, + "stderr_bytes": 892, + "output_limited": false, + "repeat": 0, + "tool": "candidate", + "startedAtUtc": "2026-09-27T19:18:01.165042+00:00", + "loadAverageBefore": [ + 3.65185546875, + 7.0224609375, + 8.728515625 + ], + "loadAverageAfter": [ + 4.8916015625, + 6.0654296875, + 7.96044921875 + ], + "stdoutSha256": "90bc5b3303540acc8eb18a9b63673082bf9abb6bf4dc291fb38fb485193e3e14", + "stderrSha256": "f0d340fb179e81c4f1eeb312c0a862a420b36706633d6ab9a3c0a69a79e1b4ce", + "processTimesSeconds": { + "real": 204.06, + "user": 228.76, + "sys": 23.49 + }, + "peakRssBytes": 6357172224, + "graphBytes": 671502979, + "withinGraphBound": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "equalsInitialGraph": true, + "reportedCounts": { + "files": 6783, + "extracted": 6783, + "cached": 0, + "nodes": 173689, + "edges": 502158, + "communities": 2153 + }, + "reportedPublicationOmissions": { + "nodes": 1, + "edges": 45, + "identityCollisions": 0 + } + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 210928, + "stdout_bytes": 511, + "stderr_bytes": 892, + "output_limited": false, + "repeat": 1, + "tool": "candidate", + "startedAtUtc": "2026-09-27T19:21:26.036844+00:00", + "loadAverageBefore": [ + 4.8916015625, + 6.0654296875, + 7.96044921875 + ], + "loadAverageAfter": [ + 5.89208984375, + 6.36181640625, + 7.7109375 + ], + "stdoutSha256": "106bf180ec5f98921eaebbca13501169aa1e7258ca896a71c45a94d88fb776c8", + "stderrSha256": "98fa0dc294669b0f1c7c0e692bafc2c1889d4ae30cfb3676fa6a2ac1f38c73f7", + "processTimesSeconds": { + "real": 210.92, + "user": 223.63, + "sys": 23.12 + }, + "peakRssBytes": 6380470272, + "graphBytes": 671502979, + "withinGraphBound": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "equalsInitialGraph": true, + "reportedCounts": { + "files": 6783, + "extracted": 6783, + "cached": 0, + "nodes": 173689, + "edges": 502158, + "communities": 2153 + }, + "reportedPublicationOmissions": { + "nodes": 1, + "edges": 45, + "identityCollisions": 0 + } + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 215288, + "stdout_bytes": 510, + "stderr_bytes": 892, + "output_limited": false, + "repeat": 1, + "tool": "baseline", + "startedAtUtc": "2026-09-27T19:24:57.999100+00:00", + "loadAverageBefore": [ + 5.66015625, + 6.3056640625, + 7.68310546875 + ], + "loadAverageAfter": [ + 7.3759765625, + 6.9384765625, + 7.6708984375 + ], + "stdoutSha256": "f5ec4fa80af666c5065819d2e078f52b3568e901f8528467510d3d3fb7e8c58f", + "stderrSha256": "5a59a579a4fcbcdb33a10dad6e1aebb4e91b83291318a8f76cedab0cc657c774", + "processTimesSeconds": { + "real": 215.27, + "user": 262.09, + "sys": 25.77 + }, + "peakRssBytes": 6059245568, + "graphBytes": 671502979, + "withinGraphBound": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "equalsInitialGraph": true, + "reportedCounts": { + "files": 6783, + "extracted": 6783, + "cached": 0, + "nodes": 173689, + "edges": 502158, + "communities": 2153 + }, + "reportedPublicationOmissions": { + "nodes": 1, + "edges": 45, + "identityCollisions": 0 + } + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 213526, + "stdout_bytes": 510, + "stderr_bytes": 892, + "output_limited": false, + "repeat": 2, + "tool": "baseline", + "startedAtUtc": "2026-09-27T19:28:34.025708+00:00", + "loadAverageBefore": [ + 7.3759765625, + 6.9384765625, + 7.6708984375 + ], + "loadAverageAfter": [ + 4.62353515625, + 6.08349609375, + 7.169921875 + ], + "stdoutSha256": "020e6e0d8b13020cc0458eddf099792fb9e526bfdcc8032ef8c2186c37b73306", + "stderrSha256": "972e4c45d8a03282a440100a5366f52a74afab4bdd4cde362fe11f8f13f360aa", + "processTimesSeconds": { + "real": 213.51, + "user": 255.5, + "sys": 23.55 + }, + "peakRssBytes": 6362300416, + "graphBytes": 671502979, + "withinGraphBound": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "equalsInitialGraph": true, + "reportedCounts": { + "files": 6783, + "extracted": 6783, + "cached": 0, + "nodes": 173689, + "edges": 502158, + "communities": 2153 + }, + "reportedPublicationOmissions": { + "nodes": 1, + "edges": 45, + "identityCollisions": 0 + } + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 203430, + "stdout_bytes": 511, + "stderr_bytes": 892, + "output_limited": false, + "repeat": 2, + "tool": "candidate", + "startedAtUtc": "2026-09-27T19:32:08.565581+00:00", + "loadAverageBefore": [ + 4.4931640625, + 6.0322265625, + 7.14501953125 + ], + "loadAverageAfter": [ + 5.0029296875, + 6.2412109375, + 7.06982421875 + ], + "stdoutSha256": "67f3043ecd93926604ee487773b77525507fec926d45518585a430df80e16f8f", + "stderrSha256": "215ac251cc61809cbfbda0535232deae2ccde5bc17732ccf4132faa1b22445ba", + "processTimesSeconds": { + "real": 203.42, + "user": 227.06, + "sys": 23.05 + }, + "peakRssBytes": 6367789056, + "graphBytes": 671502979, + "withinGraphBound": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "equalsInitialGraph": true, + "reportedCounts": { + "files": 6783, + "extracted": 6783, + "cached": 0, + "nodes": 173689, + "edges": 502158, + "communities": 2153 + }, + "reportedPublicationOmissions": { + "nodes": 1, + "edges": 45, + "identityCollisions": 0 + } + } + ], + "verification": { + "allSixEqualInitialGraph": true, + "candidateToBaselineMedianRatio": 0.9479487941733864, + "exceedsTenPercentMedianRegression": false, + "runSha256": "e4c088b9d89345ca8e0d3c57b48a96e05ad9b445da80d50a81298d727d844286", + "schema": "compass.sql-regex-cache-whole-repeat-verification/1", + "scope": "Known development repository, three observations per frozen release binary with ordinary OS caches and unrelated host work. No Graphify, whole-product or held-out claim.", + "tools": { + "baseline": { + "medianSystemCpuSeconds": 23.68, + "medianUserCpuSeconds": 260.56, + "medianWallMs": 215288, + "observations": [ + { + "admitted": true, + "diagnosticLinesOmitted": 0, + "diagnostics": [ + "warning: Compass published a partial graph after omitting 1 nodes and 45 edges; 0 identity collisions quarantined." + ], + "equalsInitialGraph": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "peakRssBytes": 6372573184, + "processTimesSeconds": { + "real": 235.53, + "sys": 23.68, + "user": 260.56 + }, + "repeat": 0, + "successful": true, + "tool": "baseline", + "wallMs": 235574 + }, + { + "admitted": true, + "diagnosticLinesOmitted": 0, + "diagnostics": [ + "warning: Compass published a partial graph after omitting 1 nodes and 45 edges; 0 identity collisions quarantined." + ], + "equalsInitialGraph": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "peakRssBytes": 6059245568, + "processTimesSeconds": { + "real": 215.27, + "sys": 25.77, + "user": 262.09 + }, + "repeat": 1, + "successful": true, + "tool": "baseline", + "wallMs": 215288 + }, + { + "admitted": true, + "diagnosticLinesOmitted": 0, + "diagnostics": [ + "warning: Compass published a partial graph after omitting 1 nodes and 45 edges; 0 identity collisions quarantined." + ], + "equalsInitialGraph": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "peakRssBytes": 6362300416, + "processTimesSeconds": { + "real": 213.51, + "sys": 23.55, + "user": 255.5 + }, + "repeat": 2, + "successful": true, + "tool": "baseline", + "wallMs": 213526 + } + ], + "successful": 3 + }, + "candidate": { + "medianSystemCpuSeconds": 23.12, + "medianUserCpuSeconds": 227.06, + "medianWallMs": 204082, + "observations": [ + { + "admitted": true, + "diagnosticLinesOmitted": 0, + "diagnostics": [ + "warning: Compass published a partial graph after omitting 1 nodes and 45 edges; 0 identity collisions quarantined." + ], + "equalsInitialGraph": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "peakRssBytes": 6357172224, + "processTimesSeconds": { + "real": 204.06, + "sys": 23.49, + "user": 228.76 + }, + "repeat": 0, + "successful": true, + "tool": "candidate", + "wallMs": 204082 + }, + { + "admitted": true, + "diagnosticLinesOmitted": 0, + "diagnostics": [ + "warning: Compass published a partial graph after omitting 1 nodes and 45 edges; 0 identity collisions quarantined." + ], + "equalsInitialGraph": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "peakRssBytes": 6380470272, + "processTimesSeconds": { + "real": 210.92, + "sys": 23.12, + "user": 223.63 + }, + "repeat": 1, + "successful": true, + "tool": "candidate", + "wallMs": 210928 + }, + { + "admitted": true, + "diagnosticLinesOmitted": 0, + "diagnostics": [ + "warning: Compass published a partial graph after omitting 1 nodes and 45 edges; 0 identity collisions quarantined." + ], + "equalsInitialGraph": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "peakRssBytes": 6367789056, + "processTimesSeconds": { + "real": 203.42, + "sys": 23.05, + "user": 227.06 + }, + "repeat": 2, + "successful": true, + "tool": "candidate", + "wallMs": 203430 + } + ], + "successful": 3 + } + }, + "verifierSha256": "bf58b63f11f431be6c378647ba2308bc01fc3d7eac68056d8daaad2ed716c1e6" + }, + "verificationRepeat": { + "byteIdentical": true, + "sha256": "a42cd0718dcc81119df0344d62d35564ba2cd8800727ce4120d39271a361660f" + }, + "artifacts": { + "run.py": "799e24d38a77691d1676fb13fd494e38a7f0d0d9b82fcb57b35c132b441f0f62", + "run.json": "e4c088b9d89345ca8e0d3c57b48a96e05ad9b445da80d50a81298d727d844286", + "verify.py": "bf58b63f11f431be6c378647ba2308bc01fc3d7eac68056d8daaad2ed716c1e6", + "verified.json": "a42cd0718dcc81119df0344d62d35564ba2cd8800727ce4120d39271a361660f", + "verified-repeat.json": "a42cd0718dcc81119df0344d62d35564ba2cd8800727ce4120d39271a361660f", + "publish.py": "9a796110e86b94e09a209ae67138fc7d6312dece71ca61916f2e87a2bb668464" + }, + "externalRun": "sql-regex-cache-01/whole-repeat", + "interpretation": [ + "All six observations belong to a separately registered alternating panel; the initial 193.966-second baseline and 280.053-second candidate remain unchanged outside it.", + "Three observations per frozen release binary on one known development repository do not establish a general speedup, confidence interval or approved release performance baseline.", + "Ordinary OS caches and unrelated host work were uncontrolled. No own compilation, other extraction, query capture or large-graph verification ran alongside this panel. Timing variation has no established cause.", + "Byte equality preserves the original partial graph, including one omitted node and 45 omitted edges. It does not establish complete extraction, source correctness, useful communities or god-object diagnosis.", + "Both artifacts exceed the original 256 MiB bound and fit the separately declared 1 GiB bound. Original admission failures, development-build timeouts and all Graphify results remain unchanged." + ] +} diff --git a/benchmarks/agent_query/sql_regex_cache_whole_review.json b/benchmarks/agent_query/sql_regex_cache_whole_review.json new file mode 100644 index 000000000..2ae02dd3e --- /dev/null +++ b/benchmarks/agent_query/sql_regex_cache_whole_review.json @@ -0,0 +1,177 @@ +{ + "schema": "compass.sql-regex-cache-whole-review/1", + "scope": "Declared complete-source release follow-up on pinned CloudStack; one fixed-order observation per version, not a timing qualification or Graphify speed comparison.", + "source": { + "repository": "apache/cloudstack", + "commit": "8d3feb100aab4a45b31a789f444038b892161eec", + "trackedSqlFiles": 119 + }, + "registrationSha256": "085d9148f4beb624a69f140fc103c7c18248d5b404be436177606332216c110b", + "fourFileReviewSha256": "1704cc9cae290c39bceb75c93bc086b63095a37eace09a99afc5ffec1add47bd", + "binaries": { + "baseline": "96a99b19302fd3c912a07243643830f551b0e8023be619fbab51f8a7b2b86bd0", + "candidate": "3292d14959e144f9eae60628aa737f5bfe1c6e5e666c8318934321f7aae82fb4" + }, + "limits": { + "order": [ + "baseline", + "candidate" + ], + "repetitions": 1, + "scope": "Entire clean pinned apache/cloudstack checkout, with default native discovery. No language or path exclusions added.", + "arguments": [ + "extract", + "", + "--code-only", + "--no-viz", + "--store", + "sqlite", + "--out", + "" + ], + "timeoutSeconds": 1200, + "streamLimitBytes": 16777216, + "graphLimitBytes": 1073741824, + "originalGraphLimitBytes": 268435456, + "timing": "Record wall time, UTC timestamps and host load as operational observations. One fixed-order run per version cannot establish a speedup or release-performance qualification.", + "isolation": "No compilation or other extraction by this task during either run. Unrelated host work is disclosed; ordinary OS caches are not flushed." + }, + "wholeArtifactByteEquality": true, + "verificationRepeat": { + "byteIdentical": true, + "sha256": "40bf61a2d565f0c5855e8660df8f9b56c5f7eb9bb6a6ff0c24bac045b10365b6" + }, + "results": [ + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 193966, + "stdout_bytes": 496, + "stderr_bytes": 115, + "output_limited": false, + "tool": "baseline", + "startedAtUtc": "2026-09-27T18:54:15.039171+00:00", + "loadAverageBefore": [ + 14.185546875, + 14.94775390625, + 13.8720703125 + ], + "loadAverageAfter": [ + 13.20849609375, + 14.01171875, + 13.7080078125 + ], + "stdoutSha256": "dce2b6f1308be12b4bd073bd3261291c1c3fb21e054d21dfe78193fba200db41", + "stderrSha256": "f719d69e7e891cf28c504abc2549344578307ca0870075b9e80740539ab79929", + "graphBytes": 671502979, + "withinOriginalGraphBound": false, + "withinFollowupGraphBound": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "verification": { + "admitted": true, + "diagnosticLinesOmitted": 0, + "diagnostics": [ + { + "line": "warning: Compass published a partial graph after omitting 1 nodes and 45 edges; 0 identity collisions quarantined.", + "stream": "stderr" + } + ], + "graphBytes": 671502979, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "outputLimited": false, + "successful": true, + "timedOut": false, + "tool": "baseline", + "wallMs": 193966, + "withinOriginalGraphBound": false + }, + "reportedCounts": { + "files": 6783, + "extracted": 6783, + "cached": 0, + "nodes": 173689, + "edges": 502158, + "communities": 2153 + }, + "reportedPublicationOmissions": { + "nodes": 1, + "edges": 45, + "identityCollisions": 0 + } + }, + { + "exit_code": 0, + "timed_out": false, + "wall_ms": 280053, + "stdout_bytes": 497, + "stderr_bytes": 115, + "output_limited": false, + "tool": "candidate", + "startedAtUtc": "2026-09-27T18:57:30.322832+00:00", + "loadAverageBefore": [ + 13.20849609375, + 14.01171875, + 13.7080078125 + ], + "loadAverageAfter": [ + 6.72021484375, + 9.140625, + 11.5185546875 + ], + "stdoutSha256": "b4a2605210e0f515fd2d77b4524adf1a9c24aeca9f91f5c8720abbf04476857c", + "stderrSha256": "f719d69e7e891cf28c504abc2549344578307ca0870075b9e80740539ab79929", + "graphBytes": 671502979, + "withinOriginalGraphBound": false, + "withinFollowupGraphBound": true, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "verification": { + "admitted": true, + "diagnosticLinesOmitted": 0, + "diagnostics": [ + { + "line": "warning: Compass published a partial graph after omitting 1 nodes and 45 edges; 0 identity collisions quarantined.", + "stream": "stderr" + } + ], + "graphBytes": 671502979, + "graphSha256": "b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69", + "outputLimited": false, + "successful": true, + "timedOut": false, + "tool": "candidate", + "wallMs": 280053, + "withinOriginalGraphBound": false + }, + "reportedCounts": { + "files": 6783, + "extracted": 6783, + "cached": 0, + "nodes": 173689, + "edges": 502158, + "communities": 2153 + }, + "reportedPublicationOmissions": { + "nodes": 1, + "edges": 45, + "identityCollisions": 0 + } + } + ], + "externalRun": "sql-regex-cache-01/whole", + "artifacts": { + "run_whole.py": "3d2bc46cf375b97e294242f290f3d68caf1b901c4812449970abab5e52618c90", + "whole/run.json": "901a0cdbaaec86d0aa6ef6bb2379c29badd3845fad3776ab6949ffd97c2fba97", + "verify_whole.py": "fc67d394be59c9c8438037db4e5a1a4f7dec59f4bbb29a7aa09a323e7b2d28b6", + "verified-whole.json": "40bf61a2d565f0c5855e8660df8f9b56c5f7eb9bb6a6ff0c24bac045b10365b6", + "verified-whole-repeat.json": "40bf61a2d565f0c5855e8660df8f9b56c5f7eb9bb6a6ff0c24bac045b10365b6", + "write_whole_report.py": "f9c210346d1c9f5afa9cd7fe8424af08a3be2ffde6bfd8262b691b149663a9bf" + }, + "interpretation": [ + "The candidate took longer in this single full-repository observation. Do not generalize the four-file SQL improvement to the whole repository; the cause of the longer observation is unproven.", + "The pre-cache release baseline already completes the whole repository. Recovery cannot be attributed solely to the regex cache; both earlier timeout attempts used unoptimized binaries.", + "Admission under the follow-up 1 GiB bound does not turn an oversized graph into a success under the original 256 MiB bound. Both outcomes remain explicit.", + "One observation per version, in fixed order with unrelated host work and ordinary OS caches, does not establish a speedup ratio or a general latency comparison.", + "Identical published graph bytes establish preservation for these two observations, not source-edge correctness, complete extraction coverage, useful communities or god-object classification.", + "Do not replace previous failures or any Graphify artifacts. The frozen Graphify CloudStack extraction skipped all 119 SQL files because its optional parser was absent." + ] +} diff --git a/benchmarks/agent_query/state_access_audit.py b/benchmarks/agent_query/state_access_audit.py new file mode 100644 index 000000000..a68dd2df6 --- /dev/null +++ b/benchmarks/agent_query/state_access_audit.py @@ -0,0 +1,167 @@ +"""Replay a source-registered, full-graph state-contact coverage diagnostic. + +This does not infer read/write effects, runtime aliasing, LCOM, or god objects. +Frozen graphs are compared equally; no public-query success is claimed. +""" +import argparse +from collections import Counter +import hashlib +import json +from pathlib import Path +import re +import subprocess + +MAX_GRAPH_BYTES = 512 * 1024 * 1024 +MAX_SOURCE_BYTES = 4 * 1024 * 1024 + + +def read(path, limit): + with path.open('rb') as stream: + data = stream.read(limit + 1) + if len(data) > limit: + raise ValueError(f'input exceeds {limit} bytes: {path}') + return data + + +def digest(data): + return hashlib.sha256(data).hexdigest() + + +def anchor(record, tool): + if tool == 'compass': + source = record.get('source', {}) + return source.get('file'), source.get('startLine') + match = re.fullmatch(r'L([1-9][0-9]*)(?:-L?[1-9][0-9]*)?', record.get('source_location', '')) + return record.get('source_file'), int(match[1]) if match else None + + +def name(record, tool): + return record.get('name' if tool == 'compass' else 'label', '').removeprefix('.').removesuffix('()') + + +def candidates(nodes, tool, file, line, symbol, *, constructor=False): + return sorted((n for n in nodes if anchor(n, tool) == (file, line) + and (name(n, tool) == symbol or + (constructor and n.get('kind') == 'constructor' and name(n, tool) == ''))), + key=lambda n: n['id']) + + +def occurrence(edge, tool, file, line): + if tool == 'compass': + # The relationship site is the edge occurrence; declaration evidence + # elsewhere on the record is not a substitute. + site = edge.get('relationshipSite', {}) + return (site.get('file'), site.get('startLine')) == (file, line) + return anchor(edge, tool) == (file, line) + + +def assess(graph, tool, case, group, access): + nodes = graph['nodes'] + methods = candidates(nodes, tool, case['file'], access['methodLine'], access['method'], + constructor=access['method'] == group['owner']) + states = candidates(nodes, tool, case['file'], group['declarationLine'], group['state']) + method_ids = {n['id'] for n in methods} + state_ids = {n['id'] for n in states} + connecting = [e for e in graph['links'] if + (e['source'] in method_ids and e['target'] in state_ids) or + (e['source'] in state_ids and e['target'] in method_ids)] + connecting.sort(key=lambda e: json.dumps(e, sort_keys=True)) + contacts = [e for e in connecting if e['source'] in method_ids and e['target'] in state_ids + and e.get('kind' if tool == 'compass' else 'relation') in {'references', 'reads', 'writes'}] + unique = len(methods) == len(states) == 1 + status = ('missing_callable' if not methods else 'ambiguous_callable' if len(methods) != 1 else + 'missing_state' if not states else 'ambiguous_state' if len(states) != 1 else + 'no_contact_edge' if not contacts else 'contact_edge') + return dict(repository=case['repository'], tool=tool, graphDirected=graph.get('directed'), owner=group['owner'], + state=group['state'], file=case['file'], declarationLine=group['declarationLine'], + access=access, methodCandidates=methods, stateCandidates=states, + connectingRecords=connecting, status=status, + contactSupported=unique and bool(contacts), + selectedLineSupported=unique and any(occurrence(e, tool, case['file'], access['line']) for e in contacts)) + + +def git(root, *args): + return subprocess.check_output(['git', '-C', str(root), *args], text=True, timeout=30).strip() + + +def evaluate(registration, artifact_root): + raw = read(registration, MAX_SOURCE_BYTES) + reg = json.loads(raw) + if reg['schema'] != 'compass.state-access-development-registration/1': + raise ValueError('unknown registration schema') + run_data = read(artifact_root / reg['graphRun'], MAX_SOURCE_BYTES) + if digest(run_data) != reg['graphRunSha256']: + raise ValueError('graph run hash mismatch') + repos = {r['repository']: r for r in json.loads(run_data)['repositories']} + rows, inputs = [], [] + for case in reg['cases']: + repo = repos[case['repository']] + root = Path(repo['source']).resolve() + path = (root / case['file']).resolve() + path.relative_to(root) + if git(root, 'rev-parse', 'HEAD') != case['commit'] or git(root, 'status', '--porcelain'): + raise ValueError('source checkout pin/status mismatch') + source = read(path, MAX_SOURCE_BYTES) + if digest(source) != case['sourceFileSha256']: + raise ValueError('source hash mismatch') + lines = source.decode('utf-8').splitlines() + for group in case['groups']: + if lines[group['declarationLine']-1] != group['declarationText']: + raise ValueError('declaration witness mismatch') + for a in group['accesses']: + if lines[a['line']-1] != a['text'] or not a['text'][a['column']-1:].startswith(a['expression']): + raise ValueError('access witness mismatch') + if not re.search(r'\b' + re.escape(a['method']) + r'\s*[<(]', lines[a['methodLine']-1]): + raise ValueError('method declaration witness mismatch') + for tool in ('compass', 'graphify'): + data = read(Path(repo[tool+'Graph']), MAX_GRAPH_BYTES) + if digest(data) != repo[tool+'GraphSha256']: + raise ValueError('graph hash mismatch') + graph = json.loads(data) + identifiers = {n['id'] for n in graph['nodes']} + if len(identifiers) != len(graph['nodes']): + raise ValueError('requires unique graph node IDs') + if any(e['source'] not in identifiers or e['target'] not in identifiers for e in graph['links']): + raise ValueError('dangling graph endpoint') + inputs.append(dict(repository=case['repository'], tool=tool, graphSha256=digest(data), + sourceFileSha256=digest(source), graphDirected=graph.get('directed'), bytes=len(data), + nodes=len(graph['nodes']), edges=len(graph['links']))) + rows.extend(assess(graph, tool, case, group, access) + for group in case['groups'] for access in group['accesses']) + # Source files are read-only throughout; do not accept concurrent drift. + if digest(read(path, MAX_SOURCE_BYTES)) != digest(source) or git(root, 'rev-parse', 'HEAD') != case['commit'] or git(root, 'status', '--porcelain'): + raise ValueError('source changed during audit') + summary = {} + for tool in ('compass', 'graphify'): + selected = [r for r in rows if r['tool'] == tool] + summary[tool] = dict(accessSites=len(selected), + uniqueCallableSites=sum(len(r['methodCandidates']) == 1 for r in selected), + uniqueStateSlots=len({(r['repository'], r['owner'], r['state']) for r in selected if len(r['stateCandidates']) == 1}), + contactSupported=sum(r['contactSupported'] for r in selected), + selectedLineSupported=sum(r['selectedLineSupported'] for r in selected), + status=dict(sorted(Counter(r['status'] for r in selected).items()))) + return dict(schema='compass.state-access-development-review/1', registrationSha256=digest(raw), + auditScriptSha256=digest(read(Path(__file__), MAX_SOURCE_BYTES)), + graphRunSha256=reg['graphRunSha256'], summary=summary, inputs=inputs, results=rows) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--registration', type=Path, required=True) + parser.add_argument('--artifact-root', type=Path, required=True) + parser.add_argument('--output', type=Path, required=True) + parser.add_argument('--verify', action='store_true', help='recompute and compare an existing result') + args = parser.parse_args() + report = evaluate(args.registration, args.artifact_root) + payload = (json.dumps(report, indent=2) + '\n').encode() + if args.verify: + if read(args.output, MAX_GRAPH_BYTES) != payload: + raise ValueError('saved review differs from recomputed evidence') + else: + with args.output.open('xb') as stream: + stream.write(payload) + print(json.dumps(report['summary'], indent=2)) + + +if __name__ == '__main__': + main() diff --git a/benchmarks/agent_query/state_access_development_registration.json b/benchmarks/agent_query/state_access_development_registration.json new file mode 100644 index 000000000..ff4e0daa6 --- /dev/null +++ b/benchmarks/agent_query/state_access_development_registration.json @@ -0,0 +1,321 @@ +{ + "schema": "compass.state-access-development-registration/1", + "baselineCommit": "7aef6a0c41dd82d3db0a1a74aff1d5c7f956c363", + "scope": "Known development subjects; prior graph inventories were observed, including missing reads/writes. Source-selected diagnostic, not blinded, held-out, representative, a query benchmark, or a god-object classifier.", + "graphRun": "rust-index-receiver-03/run.json", + "graphRunSha256": "9a6e670114f5be83773176e54bf0c4faf45582389164dea79ad17306eee1c50c", + "protocol": { + "denominator": "20 explicit state-access sites, two state slots with two different accessing methods in each of five repositories. Java includes a nested visitor; Redux uses closure variables, not object fields. Python first assignments serve as field introduction witnesses. These are not equivalent class-level cohesion samples.", + "identity": "Resolve callable and state nodes using exact pinned file, source declaration line and source symbol identity. Preserve all candidates; parameter shadowing and export/coincident nodes must not be silently collapsed. Missing or ambiguous endpoints remain failures for directly usable state evidence.", + "coverage": "For a uniquely identified callable and state slot, retain ALL graph records between the endpoints in either direction. A forward references/reads/writes edge is generic state-contact evidence. Separately require occurrence provenance matching the selected source access line. Calls to a field value type, owner type references, node containment, member names alone, and source snippets do not constitute state-access edges. Report absent state nodes separately from absent access links; do not interpret either as independence or low cohesion.", + "bounds": "Use the complete frozen graph (max 512 MiB each) equally for both tools. This is a representation diagnostic, not public query success, timing or response-efficiency evidence. Save exact candidate nodes and connecting records, input hashes and replayable verifier.", + "limitations": [ + "No interprocedural dataflow or runtime object identity inference.", + "No read/write precision score; receiver mutation is not automatically a field assignment.", + "Same-agent source judgment; no independent adjudication.", + "No god-object, LCOM, whole-class cohesion, extraction precision or broad superiority claim." + ] + }, + "cases": [ + { + "repository": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "file": "mux.go", + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "groups": [ + { + "owner": "Mux", + "state": "handler", + "declarationLine": 24, + "declarationText": "\thandler http.Handler", + "accesses": [ + { + "method": "Use", + "methodLine": 100, + "line": 101, + "column": 5, + "expression": "mx.handler", + "operation": "read", + "text": "\tif mx.handler != nil {" + }, + { + "method": "With", + "methodLine": 242, + "line": 245, + "column": 19, + "expression": "mx.handler", + "operation": "read", + "text": "\tif !mx.inline && mx.handler == nil {" + } + ] + }, + { + "owner": "Mux", + "state": "middlewares", + "declarationLine": 43, + "declarationText": "\tmiddlewares []func(http.Handler) http.Handler", + "accesses": [ + { + "method": "Use", + "methodLine": 100, + "line": 104, + "column": 2, + "expression": "mx.middlewares", + "operation": "write", + "text": "\tmx.middlewares = append(mx.middlewares, middlewares...)" + }, + { + "method": "With", + "methodLine": 242, + "line": 252, + "column": 31, + "expression": "mx.middlewares", + "operation": "read", + "text": "\t\tmws = make(Middlewares, len(mx.middlewares))" + } + ] + } + ] + }, + { + "repository": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "file": "src/click/_compat.py", + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "groups": [ + { + "owner": "_AtomicFile", + "state": "closed", + "declarationLine": 460, + "declarationText": " self.closed = False", + "accesses": [ + { + "method": "__init__", + "methodLine": 456, + "line": 460, + "column": 9, + "expression": "self.closed", + "operation": "write", + "text": " self.closed = False" + }, + { + "method": "close", + "methodLine": 466, + "line": 467, + "column": 12, + "expression": "self.closed", + "operation": "read", + "text": " if self.closed:" + } + ] + }, + { + "owner": "_AtomicFile", + "state": "_real_filename", + "declarationLine": 459, + "declarationText": " self._real_filename = real_filename", + "accesses": [ + { + "method": "__init__", + "methodLine": 456, + "line": 459, + "column": 9, + "expression": "self._real_filename", + "operation": "write", + "text": " self._real_filename = real_filename" + }, + { + "method": "name", + "methodLine": 463, + "line": 464, + "column": 16, + "expression": "self._real_filename", + "operation": "read", + "text": " return self._real_filename" + } + ] + } + ] + }, + { + "repository": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "groups": [ + { + "owner": "Cleaner", + "state": "safelist", + "declarationLine": 44, + "declarationText": " private final Safelist safelist;", + "accesses": [ + { + "method": "Cleaner", + "methodLine": 50, + "line": 52, + "column": 9, + "expression": "this.safelist", + "operation": "write", + "text": " this.safelist = safelist;" + }, + { + "method": "createSafeElement", + "methodLine": 188, + "line": 197, + "column": 17, + "expression": "safelist", + "operation": "read", + "text": " if (safelist.isSafeAttribute(sourceTag, sourceEl, sourceAttr)) { // will keep this attr" + } + ] + }, + { + "owner": "CleaningVisitor", + "state": "destination", + "declarationLine": 141, + "declarationText": " private Element destination; // current element to append nodes to", + "accesses": [ + { + "method": "CleaningVisitor", + "methodLine": 143, + "line": 145, + "column": 13, + "expression": "this.destination", + "operation": "write", + "text": " this.destination = destination;" + }, + { + "method": "head", + "methodLine": 148, + "line": 158, + "column": 21, + "expression": "destination", + "operation": "write", + "text": " destination = destChild;" + } + ] + } + ] + }, + { + "repository": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "file": "src/createStore.ts", + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "groups": [ + { + "owner": "createStore", + "state": "currentState", + "declarationLine": 137, + "declarationText": " let currentState: S | PreloadedState | undefined = preloadedState as", + "accesses": [ + { + "method": "getState", + "methodLine": 166, + "line": 175, + "column": 12, + "expression": "currentState", + "operation": "read", + "text": " return currentState as S" + }, + { + "method": "dispatch", + "methodLine": 270, + "line": 299, + "column": 7, + "expression": "currentState", + "operation": "write", + "text": " currentState = currentReducer(currentState, action)" + } + ] + }, + { + "owner": "createStore", + "state": "isDispatching", + "declarationLine": 143, + "declarationText": " let isDispatching = false", + "accesses": [ + { + "method": "getState", + "methodLine": 166, + "line": 167, + "column": 9, + "expression": "isDispatching", + "operation": "read", + "text": " if (isDispatching) {" + }, + { + "method": "dispatch", + "methodLine": 270, + "line": 298, + "column": 7, + "expression": "isDispatching", + "operation": "write", + "text": " isDispatching = true" + } + ] + } + ] + }, + { + "repository": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "file": "src/lib.rs", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "groups": [ + { + "owner": "IntoIter", + "state": "deferred_dirs", + "declarationLine": 598, + "declarationText": " deferred_dirs: Vec,", + "accesses": [ + { + "method": "handle_entry", + "methodLine": 840, + "line": 875, + "column": 13, + "expression": "self.deferred_dirs", + "operation": "receiver", + "text": " self.deferred_dirs.push(dent);" + }, + { + "method": "get_deferred_dir", + "methodLine": 884, + "line": 886, + "column": 29, + "expression": "self.deferred_dirs", + "operation": "read", + "text": " if self.depth < self.deferred_dirs.len() {" + } + ] + }, + { + "owner": "IntoIter", + "state": "oldest_opened", + "declarationLine": 591, + "declarationText": " oldest_opened: usize,", + "accesses": [ + { + "method": "push", + "methodLine": 901, + "line": 945, + "column": 13, + "expression": "self.oldest_opened", + "operation": "write", + "text": " self.oldest_opened = self.oldest_opened.checked_add(1).unwrap();" + }, + { + "method": "pop", + "methodLine": 950, + "line": 958, + "column": 9, + "expression": "self.oldest_opened", + "operation": "write", + "text": " self.oldest_opened = min(self.oldest_opened, self.stack_list.len());" + } + ] + } + ] + } + ] +} diff --git a/benchmarks/agent_query/state_access_development_review.json b/benchmarks/agent_query/state_access_development_review.json new file mode 100644 index 000000000..4a054e931 --- /dev/null +++ b/benchmarks/agent_query/state_access_development_review.json @@ -0,0 +1,2815 @@ +{ + "schema": "compass.state-access-development-review/1", + "registrationSha256": "4805af71d9ae358fa65dba8394228d77a8203589f8f5201c20fe469c6aa3362d", + "auditScriptSha256": "2bf95b707f18f34c9df4461a26f011b83d86f166efacfaab652f8e6231161058", + "graphRunSha256": "9a6e670114f5be83773176e54bf0c4faf45582389164dea79ad17306eee1c50c", + "summary": { + "compass": { + "accessSites": 20, + "uniqueCallableSites": 20, + "uniqueStateSlots": 6, + "contactSupported": 0, + "selectedLineSupported": 0, + "status": { + "missing_state": 8, + "no_contact_edge": 12 + } + }, + "graphify": { + "accessSites": 20, + "uniqueCallableSites": 20, + "uniqueStateSlots": 0, + "contactSupported": 0, + "selectedLineSupported": 0, + "status": { + "missing_state": 20 + } + } + }, + "inputs": [ + { + "repository": "chi", + "tool": "compass", + "graphSha256": "988ee732b04750f609628858e7a3fce8f97fce7ba1af22e6c17c6c4d6561e7f5", + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "graphDirected": true, + "bytes": 2488750, + "nodes": 729, + "edges": 1914 + }, + { + "repository": "chi", + "tool": "graphify", + "graphSha256": "498c40cd157af3d6543eab69094c8f6ecd9ed58962b44f84e7c03c3270fbfacf", + "sourceFileSha256": "cc44c2d620e6306b16d6d80f5f6c70f02b5814b357a4f5823372818f355ae67d", + "graphDirected": false, + "bytes": 1066128, + "nodes": 674, + "edges": 2563 + }, + { + "repository": "click", + "tool": "compass", + "graphSha256": "311dbf6ea613493cd7d45a2dee7725c2a868ec58569cc6b236988fedf3afbc93", + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "graphDirected": true, + "bytes": 9607995, + "nodes": 4264, + "edges": 6387 + }, + { + "repository": "click", + "tool": "graphify", + "graphSha256": "4b93f626310bcab3e80504d7e031f300020c801e86cdeed3d261b5c984767234", + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "graphDirected": false, + "bytes": 2855866, + "nodes": 2867, + "edges": 5257 + }, + { + "repository": "jsoup", + "tool": "compass", + "graphSha256": "3e7c2ca56a3e4a69d27a809237e73d604f948161cc8ffb3e3e1316437a320ead", + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "graphDirected": true, + "bytes": 26063627, + "nodes": 6116, + "edges": 21110 + }, + { + "repository": "jsoup", + "tool": "graphify", + "graphSha256": "2a06daf207c92172900179a308c0d4816366b045aa94c9e08c610e3f6185cf69", + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "graphDirected": false, + "bytes": 11153389, + "nodes": 5361, + "edges": 20456 + }, + { + "repository": "redux", + "tool": "compass", + "graphSha256": "8c40d1d66d19a90b395452505ce30d22a625759b3c5ff2c5b84223a68dd31b6b", + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "graphDirected": true, + "bytes": 8047006, + "nodes": 3503, + "edges": 5653 + }, + { + "repository": "redux", + "tool": "graphify", + "graphSha256": "52f619f953274059ab168869b6b138d4b5d64d66383b459875f61579c981749b", + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "graphDirected": false, + "bytes": 902536, + "nodes": 996, + "edges": 1597 + }, + { + "repository": "walkdir", + "tool": "compass", + "graphSha256": "e68fbe798dcf7422184736971dcdfc29d577e1e37269ea9c43456b9f6af54cb3", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "graphDirected": true, + "bytes": 1316088, + "nodes": 288, + "edges": 1206 + }, + { + "repository": "walkdir", + "tool": "graphify", + "graphSha256": "338587967603d146bbd7e2c7d07f99313c62c5b9f2a7d430dc56d094bbb709fd", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "graphDirected": false, + "bytes": 212674, + "nodes": 247, + "edges": 457 + } + ], + "results": [ + { + "repository": "chi", + "tool": "compass", + "graphDirected": true, + "owner": "Mux", + "state": "handler", + "file": "mux.go", + "declarationLine": 24, + "access": { + "method": "Use", + "methodLine": 100, + "line": 101, + "column": 5, + "expression": "mx.handler", + "operation": "read", + "text": "\tif mx.handler != nil {" + }, + "methodCandidates": [ + { + "id": "sha256:f592c330a46544e8c614e234af51ff29c320c18c021fc1bc1b5410a58761786b", + "kind": "method", + "name": ".Use()", + "qualifiedName": "chi.Mux::Use", + "language": "go", + "source": { + "file": "mux.go", + "startByte": 3098, + "endByte": 3323, + "startLine": 100, + "startColumn": 0, + "endLine": 105, + "endColumn": 1 + }, + "details": { + "type": "symbol", + "data": { + "signature": "func (mx *Mux) Use(middlewares ...func(http.Handler) http.Handler)", + "signatureDigest": "659f46b12b16aad7608083957e6fae567b04419465f28ead26a3fed332042e5e", + "implementationDigest": "90b90e0dc2512b2eaa1dde6c97ce763901114da265768319579d335e0f808dd5", + "sourceDigest": "245aefc44e489ad148dd12f50ed3d4cc4c2906ac1f0a7f9910971c08d775e488" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.go.universal", + "confidence": "exact", + "anchors": [ + { + "file": "mux.go", + "startByte": 3113, + "endByte": 3116, + "startLine": 100, + "startColumn": 15, + "endLine": 100, + "endColumn": 18 + } + ] + } + ], + "community": { + "id": 0, + "label": "NewRouter" + } + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "chi", + "tool": "compass", + "graphDirected": true, + "owner": "Mux", + "state": "handler", + "file": "mux.go", + "declarationLine": 24, + "access": { + "method": "With", + "methodLine": 242, + "line": 245, + "column": 19, + "expression": "mx.handler", + "operation": "read", + "text": "\tif !mx.inline && mx.handler == nil {" + }, + "methodCandidates": [ + { + "id": "sha256:8b2e84e1fc793772014c2d4ab2775681cef7c9e3f005e37905794d12600d4162", + "kind": "method", + "name": ".With()", + "qualifiedName": "chi.Mux::With", + "language": "go", + "source": { + "file": "mux.go", + "startByte": 7987, + "endByte": 8669, + "startLine": 242, + "startColumn": 0, + "endLine": 263, + "endColumn": 1 + }, + "details": { + "type": "symbol", + "data": { + "signature": "func (mx *Mux) With(middlewares ...func(http.Handler) http.Handler) Router", + "signatureDigest": "76785d02f71f43d41c2a72a89469f4245987421904054cfd01ea9d57b1df7446", + "implementationDigest": "67bd9b2192bc28c5f2e6fef637fa8ff9173a41dbe1406c1241cdaeae7b15cb37", + "sourceDigest": "c56a25f59fbbb7c878e3767265be7bf8c74fae9278fd616e64fb9eed8a0a70b0" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.go.universal", + "confidence": "exact", + "anchors": [ + { + "file": "mux.go", + "startByte": 8002, + "endByte": 8006, + "startLine": 242, + "startColumn": 15, + "endLine": 242, + "endColumn": 19 + } + ] + } + ], + "community": { + "id": 5, + "label": "Mux" + } + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "chi", + "tool": "compass", + "graphDirected": true, + "owner": "Mux", + "state": "middlewares", + "file": "mux.go", + "declarationLine": 43, + "access": { + "method": "Use", + "methodLine": 100, + "line": 104, + "column": 2, + "expression": "mx.middlewares", + "operation": "write", + "text": "\tmx.middlewares = append(mx.middlewares, middlewares...)" + }, + "methodCandidates": [ + { + "id": "sha256:f592c330a46544e8c614e234af51ff29c320c18c021fc1bc1b5410a58761786b", + "kind": "method", + "name": ".Use()", + "qualifiedName": "chi.Mux::Use", + "language": "go", + "source": { + "file": "mux.go", + "startByte": 3098, + "endByte": 3323, + "startLine": 100, + "startColumn": 0, + "endLine": 105, + "endColumn": 1 + }, + "details": { + "type": "symbol", + "data": { + "signature": "func (mx *Mux) Use(middlewares ...func(http.Handler) http.Handler)", + "signatureDigest": "659f46b12b16aad7608083957e6fae567b04419465f28ead26a3fed332042e5e", + "implementationDigest": "90b90e0dc2512b2eaa1dde6c97ce763901114da265768319579d335e0f808dd5", + "sourceDigest": "245aefc44e489ad148dd12f50ed3d4cc4c2906ac1f0a7f9910971c08d775e488" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.go.universal", + "confidence": "exact", + "anchors": [ + { + "file": "mux.go", + "startByte": 3113, + "endByte": 3116, + "startLine": 100, + "startColumn": 15, + "endLine": 100, + "endColumn": 18 + } + ] + } + ], + "community": { + "id": 0, + "label": "NewRouter" + } + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "chi", + "tool": "compass", + "graphDirected": true, + "owner": "Mux", + "state": "middlewares", + "file": "mux.go", + "declarationLine": 43, + "access": { + "method": "With", + "methodLine": 242, + "line": 252, + "column": 31, + "expression": "mx.middlewares", + "operation": "read", + "text": "\t\tmws = make(Middlewares, len(mx.middlewares))" + }, + "methodCandidates": [ + { + "id": "sha256:8b2e84e1fc793772014c2d4ab2775681cef7c9e3f005e37905794d12600d4162", + "kind": "method", + "name": ".With()", + "qualifiedName": "chi.Mux::With", + "language": "go", + "source": { + "file": "mux.go", + "startByte": 7987, + "endByte": 8669, + "startLine": 242, + "startColumn": 0, + "endLine": 263, + "endColumn": 1 + }, + "details": { + "type": "symbol", + "data": { + "signature": "func (mx *Mux) With(middlewares ...func(http.Handler) http.Handler) Router", + "signatureDigest": "76785d02f71f43d41c2a72a89469f4245987421904054cfd01ea9d57b1df7446", + "implementationDigest": "67bd9b2192bc28c5f2e6fef637fa8ff9173a41dbe1406c1241cdaeae7b15cb37", + "sourceDigest": "c56a25f59fbbb7c878e3767265be7bf8c74fae9278fd616e64fb9eed8a0a70b0" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.go.universal", + "confidence": "exact", + "anchors": [ + { + "file": "mux.go", + "startByte": 8002, + "endByte": 8006, + "startLine": 242, + "startColumn": 15, + "endLine": 242, + "endColumn": 19 + } + ] + } + ], + "community": { + "id": 5, + "label": "Mux" + } + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "chi", + "tool": "graphify", + "graphDirected": false, + "owner": "Mux", + "state": "handler", + "file": "mux.go", + "declarationLine": 24, + "access": { + "method": "Use", + "methodLine": 100, + "line": 101, + "column": 5, + "expression": "mx.handler", + "operation": "read", + "text": "\tif mx.handler != nil {" + }, + "methodCandidates": [ + { + "id": "chi_mux_use", + "label": ".Use()", + "_origin": "ast", + "community": 3, + "file_type": "code", + "norm_label": ".use()", + "source_file": "mux.go", + "source_location": "L100" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "chi", + "tool": "graphify", + "graphDirected": false, + "owner": "Mux", + "state": "handler", + "file": "mux.go", + "declarationLine": 24, + "access": { + "method": "With", + "methodLine": 242, + "line": 245, + "column": 19, + "expression": "mx.handler", + "operation": "read", + "text": "\tif !mx.inline && mx.handler == nil {" + }, + "methodCandidates": [ + { + "id": "chi_mux_with", + "label": ".With()", + "_origin": "ast", + "community": 3, + "file_type": "code", + "norm_label": ".with()", + "source_file": "mux.go", + "source_location": "L242" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "chi", + "tool": "graphify", + "graphDirected": false, + "owner": "Mux", + "state": "middlewares", + "file": "mux.go", + "declarationLine": 43, + "access": { + "method": "Use", + "methodLine": 100, + "line": 104, + "column": 2, + "expression": "mx.middlewares", + "operation": "write", + "text": "\tmx.middlewares = append(mx.middlewares, middlewares...)" + }, + "methodCandidates": [ + { + "id": "chi_mux_use", + "label": ".Use()", + "_origin": "ast", + "community": 3, + "file_type": "code", + "norm_label": ".use()", + "source_file": "mux.go", + "source_location": "L100" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "chi", + "tool": "graphify", + "graphDirected": false, + "owner": "Mux", + "state": "middlewares", + "file": "mux.go", + "declarationLine": 43, + "access": { + "method": "With", + "methodLine": 242, + "line": 252, + "column": 31, + "expression": "mx.middlewares", + "operation": "read", + "text": "\t\tmws = make(Middlewares, len(mx.middlewares))" + }, + "methodCandidates": [ + { + "id": "chi_mux_with", + "label": ".With()", + "_origin": "ast", + "community": 3, + "file_type": "code", + "norm_label": ".with()", + "source_file": "mux.go", + "source_location": "L242" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "click", + "tool": "compass", + "graphDirected": true, + "owner": "_AtomicFile", + "state": "closed", + "file": "src/click/_compat.py", + "declarationLine": 460, + "access": { + "method": "__init__", + "methodLine": 456, + "line": 460, + "column": 9, + "expression": "self.closed", + "operation": "write", + "text": " self.closed = False" + }, + "methodCandidates": [ + { + "id": "sha256:f2973c383f7639367620131c87a5de0b9e0845a87f6dadebdf32160c1463a936", + "kind": "method", + "name": ".__init__()", + "qualifiedName": "src.click._compat._AtomicFile::__init__", + "language": "python", + "source": { + "file": "src/click/_compat.py", + "startByte": 14270, + "endByte": 14486, + "startLine": 456, + "startColumn": 4, + "endLine": 460, + "endColumn": 27 + }, + "details": { + "type": "symbol", + "data": { + "signature": "def __init__(self, f: t.IO[t.Any], tmp_filename: str, real_filename: str) -> None", + "signatureDigest": "d84173be446ee24b0a12066c2d90d512722920fecc637e3a1bb05a40a9b63a33", + "implementationDigest": "c97120b074ed32f1c7f0de7c7a565a07e2b80ed4bc6f37afd943d33aabb53526", + "sourceDigest": "b44d8fcfa6fc78850c1d26c3deabf0a5f5ed78498681b34002b2e8ea9bd13336" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.python.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/click/_compat.py", + "startByte": 14274, + "endByte": 14282, + "startLine": 456, + "startColumn": 8, + "endLine": 456, + "endColumn": 16 + } + ] + } + ], + "community": { + "id": 6, + "label": "_compat.py" + } + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "click", + "tool": "compass", + "graphDirected": true, + "owner": "_AtomicFile", + "state": "closed", + "file": "src/click/_compat.py", + "declarationLine": 460, + "access": { + "method": "close", + "methodLine": 466, + "line": 467, + "column": 12, + "expression": "self.closed", + "operation": "read", + "text": " if self.closed:" + }, + "methodCandidates": [ + { + "id": "sha256:1e4e32dfcdfe036023e5c263eaba38bfe92eb391597b74fc5d70ab50a877cfa3", + "kind": "method", + "name": ".close()", + "qualifiedName": "src.click._compat._AtomicFile::close", + "language": "python", + "source": { + "file": "src/click/_compat.py", + "startByte": 14569, + "endByte": 14769, + "startLine": 466, + "startColumn": 4, + "endLine": 471, + "endColumn": 26 + }, + "details": { + "type": "symbol", + "data": { + "signature": "def close(self, delete: bool = False) -> None", + "signatureDigest": "b4cbfe07542f1c9e9615bbbb74e8576072d57f76e4e67d8068501cb01829b335", + "implementationDigest": "57dc0e3d39394fa5b9d60ecfffc5549534ed5e32b5cbc67afbbd03ca67be4132", + "sourceDigest": "a0941ad915697320c72c55a4fc7a5e521681c08d9718bcddc5e1f6fa74e32443" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.python.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/click/_compat.py", + "startByte": 14573, + "endByte": 14578, + "startLine": 466, + "startColumn": 8, + "endLine": 466, + "endColumn": 13 + } + ] + } + ], + "community": { + "id": 6, + "label": "_compat.py" + } + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "click", + "tool": "compass", + "graphDirected": true, + "owner": "_AtomicFile", + "state": "_real_filename", + "file": "src/click/_compat.py", + "declarationLine": 459, + "access": { + "method": "__init__", + "methodLine": 456, + "line": 459, + "column": 9, + "expression": "self._real_filename", + "operation": "write", + "text": " self._real_filename = real_filename" + }, + "methodCandidates": [ + { + "id": "sha256:f2973c383f7639367620131c87a5de0b9e0845a87f6dadebdf32160c1463a936", + "kind": "method", + "name": ".__init__()", + "qualifiedName": "src.click._compat._AtomicFile::__init__", + "language": "python", + "source": { + "file": "src/click/_compat.py", + "startByte": 14270, + "endByte": 14486, + "startLine": 456, + "startColumn": 4, + "endLine": 460, + "endColumn": 27 + }, + "details": { + "type": "symbol", + "data": { + "signature": "def __init__(self, f: t.IO[t.Any], tmp_filename: str, real_filename: str) -> None", + "signatureDigest": "d84173be446ee24b0a12066c2d90d512722920fecc637e3a1bb05a40a9b63a33", + "implementationDigest": "c97120b074ed32f1c7f0de7c7a565a07e2b80ed4bc6f37afd943d33aabb53526", + "sourceDigest": "b44d8fcfa6fc78850c1d26c3deabf0a5f5ed78498681b34002b2e8ea9bd13336" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.python.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/click/_compat.py", + "startByte": 14274, + "endByte": 14282, + "startLine": 456, + "startColumn": 8, + "endLine": 456, + "endColumn": 16 + } + ] + } + ], + "community": { + "id": 6, + "label": "_compat.py" + } + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "click", + "tool": "compass", + "graphDirected": true, + "owner": "_AtomicFile", + "state": "_real_filename", + "file": "src/click/_compat.py", + "declarationLine": 459, + "access": { + "method": "name", + "methodLine": 463, + "line": 464, + "column": 16, + "expression": "self._real_filename", + "operation": "read", + "text": " return self._real_filename" + }, + "methodCandidates": [ + { + "id": "sha256:e878c6438bdce958c03a089d80b07294ed83ae9ee2f0f0a633df5fbf50ae9e52", + "kind": "method", + "name": ".name()", + "qualifiedName": "src.click._compat._AtomicFile::name", + "language": "python", + "source": { + "file": "src/click/_compat.py", + "startByte": 14506, + "endByte": 14563, + "startLine": 463, + "startColumn": 4, + "endLine": 464, + "endColumn": 34 + }, + "details": { + "type": "symbol", + "data": { + "signature": "def name(self) -> str", + "signatureDigest": "8a1643fce1c80fbaf299e8f34d0f11be952d7c2bcc90d418a3deccb866d100bb", + "implementationDigest": "3d6432f964f785a26f97a41f7ef7e63ff0a12a6ddbedb2a1076fd45d0b6ec4e9", + "sourceDigest": "e9954a4c6cda3a6ce002f3f95b71b4077db90e46f92dfd8c12a6f1539ec18f28" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.python.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/click/_compat.py", + "startByte": 14510, + "endByte": 14514, + "startLine": 463, + "startColumn": 8, + "endLine": 463, + "endColumn": 12 + } + ] + } + ], + "community": { + "id": 6, + "label": "_compat.py" + } + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "click", + "tool": "graphify", + "graphDirected": false, + "owner": "_AtomicFile", + "state": "closed", + "file": "src/click/_compat.py", + "declarationLine": 460, + "access": { + "method": "__init__", + "methodLine": 456, + "line": 460, + "column": 9, + "expression": "self.closed", + "operation": "write", + "text": " self.closed = False" + }, + "methodCandidates": [ + { + "id": "src_click_compat_atomicfile_init", + "label": ".__init__()", + "_callable": true, + "_origin": "ast", + "community": 24, + "file_type": "code", + "norm_label": ".__init__()", + "source_file": "src/click/_compat.py", + "source_location": "L456" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "click", + "tool": "graphify", + "graphDirected": false, + "owner": "_AtomicFile", + "state": "closed", + "file": "src/click/_compat.py", + "declarationLine": 460, + "access": { + "method": "close", + "methodLine": 466, + "line": 467, + "column": 12, + "expression": "self.closed", + "operation": "read", + "text": " if self.closed:" + }, + "methodCandidates": [ + { + "id": "src_click_compat_atomicfile_close", + "label": ".close()", + "_callable": true, + "_origin": "ast", + "community": 86, + "file_type": "code", + "norm_label": ".close()", + "source_file": "src/click/_compat.py", + "source_location": "L466" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "click", + "tool": "graphify", + "graphDirected": false, + "owner": "_AtomicFile", + "state": "_real_filename", + "file": "src/click/_compat.py", + "declarationLine": 459, + "access": { + "method": "__init__", + "methodLine": 456, + "line": 459, + "column": 9, + "expression": "self._real_filename", + "operation": "write", + "text": " self._real_filename = real_filename" + }, + "methodCandidates": [ + { + "id": "src_click_compat_atomicfile_init", + "label": ".__init__()", + "_callable": true, + "_origin": "ast", + "community": 24, + "file_type": "code", + "norm_label": ".__init__()", + "source_file": "src/click/_compat.py", + "source_location": "L456" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "click", + "tool": "graphify", + "graphDirected": false, + "owner": "_AtomicFile", + "state": "_real_filename", + "file": "src/click/_compat.py", + "declarationLine": 459, + "access": { + "method": "name", + "methodLine": 463, + "line": 464, + "column": 16, + "expression": "self._real_filename", + "operation": "read", + "text": " return self._real_filename" + }, + "methodCandidates": [ + { + "id": "src_click_compat_atomicfile_name", + "label": ".name()", + "_callable": true, + "_origin": "ast", + "community": 86, + "file_type": "code", + "norm_label": ".name()", + "source_file": "src/click/_compat.py", + "source_location": "L463" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "jsoup", + "tool": "compass", + "graphDirected": true, + "owner": "Cleaner", + "state": "safelist", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "declarationLine": 44, + "access": { + "method": "Cleaner", + "methodLine": 50, + "line": 52, + "column": 9, + "expression": "this.safelist", + "operation": "write", + "text": " this.safelist = safelist;" + }, + "methodCandidates": [ + { + "id": "sha256:66aaadb3479119cae227c0e51b5674eae36cb9b29e80428e2697aa7cb45518f0", + "kind": "constructor", + "name": "", + "qualifiedName": "org.jsoup.safety.Cleaner::", + "language": "java", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 1862, + "endByte": 1973, + "startLine": 50, + "startColumn": 4, + "endLine": 53, + "endColumn": 5 + }, + "details": { + "type": "symbol", + "data": { + "signature": "(Safelist)", + "signatureDigest": "badd69d3211600d45ddfbcf7377277a60ad61504ea3e020a22767d87fc96d6e8", + "implementationDigest": "f920ff6f090dca6d9bcd05476c7541243bb3b48f3e355822c2ebf5100aeb2cad", + "sourceDigest": "dbbac29bf7eb7e8bc862fd54e7e880df8ce1bcf29f4691bc63fba6ba9db20579" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 1869, + "endByte": 1876, + "startLine": 50, + "startColumn": 11, + "endLine": 50, + "endColumn": 18 + } + ] + } + ], + "community": { + "id": 3, + "label": "Node" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:82d93a7cd4b92b3765fb539920bb5ca399119733f7cfc423203c4bebb16c1740", + "kind": "field", + "name": "safelist", + "qualifiedName": "org.jsoup.safety.Cleaner::safelist", + "language": "java", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 1705, + "endByte": 1713, + "startLine": 44, + "startColumn": 27, + "endLine": 44, + "endColumn": 35 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 1705, + "endByte": 1713, + "startLine": 44, + "startColumn": 27, + "endLine": 44, + "endColumn": 35 + } + ] + } + ], + "community": { + "id": 15, + "label": "CleanerTest" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "jsoup", + "tool": "compass", + "graphDirected": true, + "owner": "Cleaner", + "state": "safelist", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "declarationLine": 44, + "access": { + "method": "createSafeElement", + "methodLine": 188, + "line": 197, + "column": 17, + "expression": "safelist", + "operation": "read", + "text": " if (safelist.isSafeAttribute(sourceTag, sourceEl, sourceAttr)) { // will keep this attr" + }, + "methodCandidates": [ + { + "id": "sha256:7ce3db44fb899d894dd900ab8808bd0fdc411323a6276f4164fede39e46f8157", + "kind": "method", + "name": ".createSafeElement()", + "qualifiedName": "org.jsoup.safety.Cleaner::createSafeElement", + "language": "java", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 8590, + "endByte": 11143, + "startLine": 188, + "startColumn": 4, + "endLine": 235, + "endColumn": 5 + }, + "details": { + "type": "symbol", + "data": { + "signature": "createSafeElement(Element)", + "signatureDigest": "99594481f6906a1e74b1aab1c5ce684e04ebbed4dbd02f7fe443ae0ebec1cef7", + "implementationDigest": "309927ce932885f2f766962666b1b592ba1df08c4f4d9ca0e2a520fc441f0761", + "sourceDigest": "e62cb7d5f499dc6cb58a7af0e341574806d9f9798b3b502e20ddadd9d7ec603e" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 8610, + "endByte": 8627, + "startLine": 188, + "startColumn": 24, + "endLine": 188, + "endColumn": 41 + } + ] + } + ], + "community": { + "id": 5, + "label": "Attributes" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:82d93a7cd4b92b3765fb539920bb5ca399119733f7cfc423203c4bebb16c1740", + "kind": "field", + "name": "safelist", + "qualifiedName": "org.jsoup.safety.Cleaner::safelist", + "language": "java", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 1705, + "endByte": 1713, + "startLine": 44, + "startColumn": 27, + "endLine": 44, + "endColumn": 35 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 1705, + "endByte": 1713, + "startLine": 44, + "startColumn": 27, + "endLine": 44, + "endColumn": 35 + } + ] + } + ], + "community": { + "id": 15, + "label": "CleanerTest" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "jsoup", + "tool": "compass", + "graphDirected": true, + "owner": "CleaningVisitor", + "state": "destination", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "declarationLine": 141, + "access": { + "method": "CleaningVisitor", + "methodLine": 143, + "line": 145, + "column": 13, + "expression": "this.destination", + "operation": "write", + "text": " this.destination = destination;" + }, + "methodCandidates": [ + { + "id": "sha256:d82578355e71b0d55f68499706f70276db9cf44a16bf283bba6360df410deec5", + "kind": "constructor", + "name": "", + "qualifiedName": "org.jsoup.safety.Cleaner::CleaningVisitor::", + "language": "java", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6544, + "endByte": 6688, + "startLine": 143, + "startColumn": 8, + "endLine": 146, + "endColumn": 9 + }, + "details": { + "type": "symbol", + "data": { + "signature": "(Element,Element)", + "signatureDigest": "e8e92c45736788a17f106233dcb3198f7600101e4473e1fdf64b5f574c4e9780", + "implementationDigest": "6b2203f949da6991f90e660a94339fc571fcd632b7322801cc03a36a7d19109e", + "sourceDigest": "6c6a467c8a4ad1109775e3bef2e38139fab559e1c6a3ee4fb6d454739fb8efcc" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6552, + "endByte": 6567, + "startLine": 143, + "startColumn": 16, + "endLine": 143, + "endColumn": 31 + } + ] + } + ], + "community": { + "id": 10, + "label": "Element" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:b8452deb51561a6e6e1e8620c5ef9dcb5dae0f681633a87c34063a772975be8c", + "kind": "field", + "name": "destination", + "qualifiedName": "org.jsoup.safety.Cleaner::CleaningVisitor::destination", + "language": "java", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6484, + "endByte": 6495, + "startLine": 141, + "startColumn": 24, + "endLine": 141, + "endColumn": 35 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6484, + "endByte": 6495, + "startLine": 141, + "startColumn": 24, + "endLine": 141, + "endColumn": 35 + } + ] + } + ], + "community": { + "id": 10, + "label": "Element" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "jsoup", + "tool": "compass", + "graphDirected": true, + "owner": "CleaningVisitor", + "state": "destination", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "declarationLine": 141, + "access": { + "method": "head", + "methodLine": 148, + "line": 158, + "column": 21, + "expression": "destination", + "operation": "write", + "text": " destination = destChild;" + }, + "methodCandidates": [ + { + "id": "sha256:65912eb3660f15092355589775d874a7a702efcf0336e9865cf93b4fb56aaa29", + "kind": "method", + "name": ".head()", + "qualifiedName": "org.jsoup.safety.Cleaner::CleaningVisitor::head", + "language": "java", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6698, + "endByte": 8069, + "startLine": 148, + "startColumn": 8, + "endLine": 173, + "endColumn": 9 + }, + "details": { + "type": "symbol", + "data": { + "signature": "head(Node,int)", + "signatureDigest": "24041a46421d0170da7792402b63bfa06929d85ab9c7638648aabc3d7e6bc2bd", + "implementationDigest": "774186cc1e9706f6b22c053466513e970f55a68870e00ac677b1d2f6a4d4f75d", + "sourceDigest": "ff7dc01047765a1f468d43c800ac2f31c2ab0c608b8df791c0e4e35a134baa69" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6720, + "endByte": 6724, + "startLine": 148, + "startColumn": 30, + "endLine": 148, + "endColumn": 34 + } + ] + } + ], + "community": { + "id": 0, + "label": ".parse" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:b8452deb51561a6e6e1e8620c5ef9dcb5dae0f681633a87c34063a772975be8c", + "kind": "field", + "name": "destination", + "qualifiedName": "org.jsoup.safety.Cleaner::CleaningVisitor::destination", + "language": "java", + "source": { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6484, + "endByte": 6495, + "startLine": 141, + "startColumn": 24, + "endLine": 141, + "endColumn": 35 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.java.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "startByte": 6484, + "endByte": 6495, + "startLine": 141, + "startColumn": 24, + "endLine": 141, + "endColumn": 35 + } + ] + } + ], + "community": { + "id": 10, + "label": "Element" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "jsoup", + "tool": "graphify", + "graphDirected": false, + "owner": "Cleaner", + "state": "safelist", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "declarationLine": 44, + "access": { + "method": "Cleaner", + "methodLine": 50, + "line": 52, + "column": 9, + "expression": "this.safelist", + "operation": "write", + "text": " this.safelist = safelist;" + }, + "methodCandidates": [ + { + "id": "src_main_java_org_jsoup_safety_cleaner_cleaner_cleaner", + "label": ".Cleaner()", + "_callable": true, + "_origin": "ast", + "community": 129, + "file_type": "code", + "norm_label": ".cleaner()", + "source_file": "src/main/java/org/jsoup/safety/Cleaner.java", + "source_location": "L50" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "jsoup", + "tool": "graphify", + "graphDirected": false, + "owner": "Cleaner", + "state": "safelist", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "declarationLine": 44, + "access": { + "method": "createSafeElement", + "methodLine": 188, + "line": 197, + "column": 17, + "expression": "safelist", + "operation": "read", + "text": " if (safelist.isSafeAttribute(sourceTag, sourceEl, sourceAttr)) { // will keep this attr" + }, + "methodCandidates": [ + { + "id": "src_main_java_org_jsoup_safety_cleaner_cleaner_createsafeelement", + "label": ".createSafeElement()", + "_callable": true, + "_origin": "ast", + "community": 96, + "file_type": "code", + "metadata": { + "unresolved_calls": [ + { + "callee": "getHost", + "receiver_type": "URL", + "lang": "java", + "line": "L221" + } + ] + }, + "norm_label": ".createsafeelement()", + "source_file": "src/main/java/org/jsoup/safety/Cleaner.java", + "source_location": "L188" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "jsoup", + "tool": "graphify", + "graphDirected": false, + "owner": "CleaningVisitor", + "state": "destination", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "declarationLine": 141, + "access": { + "method": "CleaningVisitor", + "methodLine": 143, + "line": 145, + "column": 13, + "expression": "this.destination", + "operation": "write", + "text": " this.destination = destination;" + }, + "methodCandidates": [ + { + "id": "src_main_java_org_jsoup_safety_cleaner_cleaningvisitor_cleaningvisitor", + "label": ".CleaningVisitor()", + "_callable": true, + "_origin": "ast", + "community": 80, + "file_type": "code", + "norm_label": ".cleaningvisitor()", + "source_file": "src/main/java/org/jsoup/safety/Cleaner.java", + "source_location": "L143" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "jsoup", + "tool": "graphify", + "graphDirected": false, + "owner": "CleaningVisitor", + "state": "destination", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "declarationLine": 141, + "access": { + "method": "head", + "methodLine": 148, + "line": 158, + "column": 21, + "expression": "destination", + "operation": "write", + "text": " destination = destChild;" + }, + "methodCandidates": [ + { + "id": "src_main_java_org_jsoup_safety_cleaner_cleaningvisitor_head", + "label": ".head()", + "_callable": true, + "_origin": "ast", + "community": 80, + "file_type": "code", + "norm_label": ".head()", + "source_file": "src/main/java/org/jsoup/safety/Cleaner.java", + "source_location": "L148" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "redux", + "tool": "compass", + "graphDirected": true, + "owner": "createStore", + "state": "currentState", + "file": "src/createStore.ts", + "declarationLine": 137, + "access": { + "method": "getState", + "methodLine": 166, + "line": 175, + "column": 12, + "expression": "currentState", + "operation": "read", + "text": " return currentState as S" + }, + "methodCandidates": [ + { + "id": "sha256:ac32c352aac7217b9b481c36ebdbd1304d84593968416c35058a0445860f30e2", + "kind": "function", + "name": "getState()", + "qualifiedName": "createStore.createStore.getState", + "language": "typescript", + "source": { + "file": "src/createStore.ts", + "startByte": 5459, + "endByte": 5816, + "startLine": 166, + "startColumn": 2, + "endLine": 176, + "endColumn": 3 + }, + "details": { + "type": "symbol", + "data": { + "signature": "|params:|return:S" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.typescript.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/createStore.ts", + "startByte": 5468, + "endByte": 5476, + "startLine": 166, + "startColumn": 11, + "endLine": 166, + "endColumn": 19 + } + ] + } + ], + "community": { + "id": 15, + "label": "createStore (src/createStore.ts:L86)" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:f60e291b4921b2348cf32026034d2b812be220e0aca0765a380a634ce9799336", + "kind": "variable", + "name": "currentState", + "qualifiedName": "createStore.createStore.currentState", + "language": "typescript", + "source": { + "file": "src/createStore.ts", + "startByte": 4579, + "endByte": 4591, + "startLine": 137, + "startColumn": 6, + "endLine": 137, + "endColumn": 18 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.typescript.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/createStore.ts", + "startByte": 4579, + "endByte": 4591, + "startLine": 137, + "startColumn": 6, + "endLine": 137, + "endColumn": 18 + } + ] + } + ], + "community": { + "id": 15, + "label": "createStore (src/createStore.ts:L86)" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "redux", + "tool": "compass", + "graphDirected": true, + "owner": "createStore", + "state": "currentState", + "file": "src/createStore.ts", + "declarationLine": 137, + "access": { + "method": "dispatch", + "methodLine": 270, + "line": 299, + "column": 7, + "expression": "currentState", + "operation": "write", + "text": " currentState = currentReducer(currentState, action)" + }, + "methodCandidates": [ + { + "id": "sha256:ee27944e9b61e75b17b685fb67d51cccd459621e8ed9db30b18f5c7b02094612", + "kind": "function", + "name": "dispatch()", + "qualifiedName": "createStore.createStore.dispatch", + "language": "typescript", + "source": { + "file": "src/createStore.ts", + "startByte": 9622, + "endByte": 11000, + "startLine": 270, + "startColumn": 2, + "endLine": 309, + "endColumn": 3 + }, + "details": { + "type": "symbol", + "data": { + "signature": "|params:A" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.typescript.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/createStore.ts", + "startByte": 9631, + "endByte": 9639, + "startLine": 270, + "startColumn": 11, + "endLine": 270, + "endColumn": 19 + } + ] + } + ], + "community": { + "id": 15, + "label": "createStore (src/createStore.ts:L86)" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:f60e291b4921b2348cf32026034d2b812be220e0aca0765a380a634ce9799336", + "kind": "variable", + "name": "currentState", + "qualifiedName": "createStore.createStore.currentState", + "language": "typescript", + "source": { + "file": "src/createStore.ts", + "startByte": 4579, + "endByte": 4591, + "startLine": 137, + "startColumn": 6, + "endLine": 137, + "endColumn": 18 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.typescript.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/createStore.ts", + "startByte": 4579, + "endByte": 4591, + "startLine": 137, + "startColumn": 6, + "endLine": 137, + "endColumn": 18 + } + ] + } + ], + "community": { + "id": 15, + "label": "createStore (src/createStore.ts:L86)" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "redux", + "tool": "compass", + "graphDirected": true, + "owner": "createStore", + "state": "isDispatching", + "file": "src/createStore.ts", + "declarationLine": 143, + "access": { + "method": "getState", + "methodLine": 166, + "line": 167, + "column": 9, + "expression": "isDispatching", + "operation": "read", + "text": " if (isDispatching) {" + }, + "methodCandidates": [ + { + "id": "sha256:ac32c352aac7217b9b481c36ebdbd1304d84593968416c35058a0445860f30e2", + "kind": "function", + "name": "getState()", + "qualifiedName": "createStore.createStore.getState", + "language": "typescript", + "source": { + "file": "src/createStore.ts", + "startByte": 5459, + "endByte": 5816, + "startLine": 166, + "startColumn": 2, + "endLine": 176, + "endColumn": 3 + }, + "details": { + "type": "symbol", + "data": { + "signature": "|params:|return:S" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.typescript.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/createStore.ts", + "startByte": 5468, + "endByte": 5476, + "startLine": 166, + "startColumn": 11, + "endLine": 166, + "endColumn": 19 + } + ] + } + ], + "community": { + "id": 15, + "label": "createStore (src/createStore.ts:L86)" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:e624ded2e63d3070d23b0928b66dd153fcd656a4155b1d5522c6560b8dca5c38", + "kind": "variable", + "name": "isDispatching", + "qualifiedName": "createStore.createStore.isDispatching", + "language": "typescript", + "source": { + "file": "src/createStore.ts", + "startByte": 4827, + "endByte": 4840, + "startLine": 143, + "startColumn": 6, + "endLine": 143, + "endColumn": 19 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.typescript.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/createStore.ts", + "startByte": 4827, + "endByte": 4840, + "startLine": 143, + "startColumn": 6, + "endLine": 143, + "endColumn": 19 + } + ] + } + ], + "community": { + "id": 15, + "label": "createStore (src/createStore.ts:L86)" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "redux", + "tool": "compass", + "graphDirected": true, + "owner": "createStore", + "state": "isDispatching", + "file": "src/createStore.ts", + "declarationLine": 143, + "access": { + "method": "dispatch", + "methodLine": 270, + "line": 298, + "column": 7, + "expression": "isDispatching", + "operation": "write", + "text": " isDispatching = true" + }, + "methodCandidates": [ + { + "id": "sha256:ee27944e9b61e75b17b685fb67d51cccd459621e8ed9db30b18f5c7b02094612", + "kind": "function", + "name": "dispatch()", + "qualifiedName": "createStore.createStore.dispatch", + "language": "typescript", + "source": { + "file": "src/createStore.ts", + "startByte": 9622, + "endByte": 11000, + "startLine": 270, + "startColumn": 2, + "endLine": 309, + "endColumn": 3 + }, + "details": { + "type": "symbol", + "data": { + "signature": "|params:A" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.typescript.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/createStore.ts", + "startByte": 9631, + "endByte": 9639, + "startLine": 270, + "startColumn": 11, + "endLine": 270, + "endColumn": 19 + } + ] + } + ], + "community": { + "id": 15, + "label": "createStore (src/createStore.ts:L86)" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:e624ded2e63d3070d23b0928b66dd153fcd656a4155b1d5522c6560b8dca5c38", + "kind": "variable", + "name": "isDispatching", + "qualifiedName": "createStore.createStore.isDispatching", + "language": "typescript", + "source": { + "file": "src/createStore.ts", + "startByte": 4827, + "endByte": 4840, + "startLine": 143, + "startColumn": 6, + "endLine": 143, + "endColumn": 19 + }, + "details": { + "type": "symbol", + "data": {} + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.typescript.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/createStore.ts", + "startByte": 4827, + "endByte": 4840, + "startLine": 143, + "startColumn": 6, + "endLine": 143, + "endColumn": 19 + } + ] + } + ], + "community": { + "id": 15, + "label": "createStore (src/createStore.ts:L86)" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "redux", + "tool": "graphify", + "graphDirected": false, + "owner": "createStore", + "state": "currentState", + "file": "src/createStore.ts", + "declarationLine": 137, + "access": { + "method": "getState", + "methodLine": 166, + "line": 175, + "column": 12, + "expression": "currentState", + "operation": "read", + "text": " return currentState as S" + }, + "methodCandidates": [ + { + "id": "src_createstore_createstore_getstate", + "label": "getState()", + "_callable": true, + "_origin": "ast", + "community": 25, + "file_type": "code", + "norm_label": "getstate()", + "source_file": "src/createStore.ts", + "source_location": "L166" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "redux", + "tool": "graphify", + "graphDirected": false, + "owner": "createStore", + "state": "currentState", + "file": "src/createStore.ts", + "declarationLine": 137, + "access": { + "method": "dispatch", + "methodLine": 270, + "line": 299, + "column": 7, + "expression": "currentState", + "operation": "write", + "text": " currentState = currentReducer(currentState, action)" + }, + "methodCandidates": [ + { + "id": "src_createstore_createstore_dispatch", + "label": "dispatch()", + "_callable": true, + "_origin": "ast", + "community": 25, + "file_type": "code", + "norm_label": "dispatch()", + "source_file": "src/createStore.ts", + "source_location": "L270" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "redux", + "tool": "graphify", + "graphDirected": false, + "owner": "createStore", + "state": "isDispatching", + "file": "src/createStore.ts", + "declarationLine": 143, + "access": { + "method": "getState", + "methodLine": 166, + "line": 167, + "column": 9, + "expression": "isDispatching", + "operation": "read", + "text": " if (isDispatching) {" + }, + "methodCandidates": [ + { + "id": "src_createstore_createstore_getstate", + "label": "getState()", + "_callable": true, + "_origin": "ast", + "community": 25, + "file_type": "code", + "norm_label": "getstate()", + "source_file": "src/createStore.ts", + "source_location": "L166" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "redux", + "tool": "graphify", + "graphDirected": false, + "owner": "createStore", + "state": "isDispatching", + "file": "src/createStore.ts", + "declarationLine": 143, + "access": { + "method": "dispatch", + "methodLine": 270, + "line": 298, + "column": 7, + "expression": "isDispatching", + "operation": "write", + "text": " isDispatching = true" + }, + "methodCandidates": [ + { + "id": "src_createstore_createstore_dispatch", + "label": "dispatch()", + "_callable": true, + "_origin": "ast", + "community": 25, + "file_type": "code", + "norm_label": "dispatch()", + "source_file": "src/createStore.ts", + "source_location": "L270" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "walkdir", + "tool": "compass", + "graphDirected": true, + "owner": "IntoIter", + "state": "deferred_dirs", + "file": "src/lib.rs", + "declarationLine": 598, + "access": { + "method": "handle_entry", + "methodLine": 840, + "line": 875, + "column": 13, + "expression": "self.deferred_dirs", + "operation": "receiver", + "text": " self.deferred_dirs.push(dent);" + }, + "methodCandidates": [ + { + "id": "sha256:6157f09ad96d7be5e50367736300c88ecb6e1b6a992282d57aeabd7e5c0bc21e", + "kind": "method", + "name": ".handle_entry()", + "qualifiedName": "walkdir::IntoIter::handle_entry", + "language": "rust", + "source": { + "file": "src/lib.rs", + "startByte": 29143, + "endByte": 30869, + "startLine": 840, + "startColumn": 4, + "endLine": 882, + "endColumn": 5 + }, + "details": { + "type": "symbol", + "data": { + "signature": "fn handle_entry( &mut self, mut dent: DirEntry, ) -> Option>", + "signatureDigest": "310808d8882a85c24aded6c0eb9116d92403a8056cef0c155e27044ca844eff3", + "implementationDigest": "97e2e9dfc3833955d8153f6420bf6cc8aaaa10f2517086fda9d91f68f4c1c173", + "sourceDigest": "70d33c8bd4eae5883f1a1af831cd18d5caa5711bc2cc33a8c14f851f7305768b" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.rust.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/lib.rs", + "startByte": 29146, + "endByte": 29158, + "startLine": 840, + "startColumn": 7, + "endLine": 840, + "endColumn": 19 + } + ] + } + ], + "community": { + "id": 0, + "label": "DirEntry" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:413c3c0dfae5a89e15e2e094ec8961c9ef4acfb4c7a56fb06f4d6943734862c1", + "kind": "field", + "name": "deferred_dirs", + "qualifiedName": "walkdir::IntoIter::deferred_dirs", + "language": "rust", + "source": { + "file": "src/lib.rs", + "startByte": 20224, + "endByte": 20237, + "startLine": 598, + "startColumn": 4, + "endLine": 598, + "endColumn": 17 + }, + "details": { + "type": "symbol", + "data": { + "signature": "deferred_dirs: Vec", + "signatureDigest": "37906d395875d925db71ec7a0bd3e75893f147caf02be49839f7147d6668a281", + "sourceDigest": "6ee20049871a0b0aa99d93b490c4579d2909a7e7f9cbd415778b8e2f0cdf9d86" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.rust.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/lib.rs", + "startByte": 20224, + "endByte": 20237, + "startLine": 598, + "startColumn": 4, + "endLine": 598, + "endColumn": 17 + } + ] + } + ], + "community": { + "id": 0, + "label": "DirEntry" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "walkdir", + "tool": "compass", + "graphDirected": true, + "owner": "IntoIter", + "state": "deferred_dirs", + "file": "src/lib.rs", + "declarationLine": 598, + "access": { + "method": "get_deferred_dir", + "methodLine": 884, + "line": 886, + "column": 29, + "expression": "self.deferred_dirs", + "operation": "read", + "text": " if self.depth < self.deferred_dirs.len() {" + }, + "methodCandidates": [ + { + "id": "sha256:219c38f772358d6f0cd42cd06b879fe706b6672b0deee9461f8f7ec785618867", + "kind": "method", + "name": ".get_deferred_dir()", + "qualifiedName": "walkdir::IntoIter::get_deferred_dir", + "language": "rust", + "source": { + "file": "src/lib.rs", + "startByte": 30875, + "endByte": 31482, + "startLine": 884, + "startColumn": 4, + "endLine": 899, + "endColumn": 5 + }, + "details": { + "type": "symbol", + "data": { + "signature": "fn get_deferred_dir(&mut self) -> Option", + "signatureDigest": "7fed725f8244f07e0a984c8f87df3675c999315adb2015ff9fbd2e1e0569d6ba", + "implementationDigest": "0a593159692ab4c497de9873715dbd786d66320b28ce7cc0b47189042ea48b6a", + "sourceDigest": "2b7edf004c0eb7c3996b3b1d045dc30e1251559b0352fec36bc53304160f334e" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.rust.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/lib.rs", + "startByte": 30878, + "endByte": 30894, + "startLine": 884, + "startColumn": 7, + "endLine": 884, + "endColumn": 23 + } + ] + } + ], + "community": { + "id": 0, + "label": "DirEntry" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:413c3c0dfae5a89e15e2e094ec8961c9ef4acfb4c7a56fb06f4d6943734862c1", + "kind": "field", + "name": "deferred_dirs", + "qualifiedName": "walkdir::IntoIter::deferred_dirs", + "language": "rust", + "source": { + "file": "src/lib.rs", + "startByte": 20224, + "endByte": 20237, + "startLine": 598, + "startColumn": 4, + "endLine": 598, + "endColumn": 17 + }, + "details": { + "type": "symbol", + "data": { + "signature": "deferred_dirs: Vec", + "signatureDigest": "37906d395875d925db71ec7a0bd3e75893f147caf02be49839f7147d6668a281", + "sourceDigest": "6ee20049871a0b0aa99d93b490c4579d2909a7e7f9cbd415778b8e2f0cdf9d86" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.rust.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/lib.rs", + "startByte": 20224, + "endByte": 20237, + "startLine": 598, + "startColumn": 4, + "endLine": 598, + "endColumn": 17 + } + ] + } + ], + "community": { + "id": 0, + "label": "DirEntry" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "walkdir", + "tool": "compass", + "graphDirected": true, + "owner": "IntoIter", + "state": "oldest_opened", + "file": "src/lib.rs", + "declarationLine": 591, + "access": { + "method": "push", + "methodLine": 901, + "line": 945, + "column": 13, + "expression": "self.oldest_opened", + "operation": "write", + "text": " self.oldest_opened = self.oldest_opened.checked_add(1).unwrap();" + }, + "methodCandidates": [ + { + "id": "sha256:c4870d899db4c0d3e82cf28916d9cadef5b8d7b249ea6fe7aa97bc7d465dfe45", + "kind": "method", + "name": ".push()", + "qualifiedName": "walkdir::IntoIter::push", + "language": "rust", + "source": { + "file": "src/lib.rs", + "startByte": 31488, + "endByte": 33947, + "startLine": 901, + "startColumn": 4, + "endLine": 948, + "endColumn": 5 + }, + "details": { + "type": "symbol", + "data": { + "signature": "fn push(&mut self, dent: &DirEntry) -> Result<()>", + "signatureDigest": "cb10b4c8df4099b3ca4e1436d2b521ca35a83bbaf1fc95b74e90a582ed0d4b51", + "implementationDigest": "e8e95f68d459cb51b8ba9e86b13def3c4a5324058be52b2ff950c1352c0aa048", + "sourceDigest": "14aa7a18f314d62746ec2e5b1d3b947ba4f4e270760b4224db5e127645e9faff" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.rust.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/lib.rs", + "startByte": 31491, + "endByte": 31495, + "startLine": 901, + "startColumn": 7, + "endLine": 901, + "endColumn": 11 + } + ] + } + ], + "community": { + "id": 0, + "label": "DirEntry" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:b127352da415182e7b8716381b845e7ae6093fe6b79ceb9e0a48ebbffaeae1d3", + "kind": "field", + "name": "oldest_opened", + "qualifiedName": "walkdir::IntoIter::oldest_opened", + "language": "rust", + "source": { + "file": "src/lib.rs", + "startByte": 19882, + "endByte": 19895, + "startLine": 591, + "startColumn": 4, + "endLine": 591, + "endColumn": 17 + }, + "details": { + "type": "symbol", + "data": { + "signature": "oldest_opened: usize", + "signatureDigest": "b21b147403ccbf752075dc8deafc452ca756f8a458d6b87ebd58bd769acf4bbb", + "sourceDigest": "e21fc19d3741ff510e45f6238b1be153c24fb3899c0896a7ee0960a690f8c319" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.rust.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/lib.rs", + "startByte": 19882, + "endByte": 19895, + "startLine": 591, + "startColumn": 4, + "endLine": 591, + "endColumn": 17 + } + ] + } + ], + "community": { + "id": 0, + "label": "DirEntry" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "walkdir", + "tool": "compass", + "graphDirected": true, + "owner": "IntoIter", + "state": "oldest_opened", + "file": "src/lib.rs", + "declarationLine": 591, + "access": { + "method": "pop", + "methodLine": 950, + "line": 958, + "column": 9, + "expression": "self.oldest_opened", + "operation": "write", + "text": " self.oldest_opened = min(self.oldest_opened, self.stack_list.len());" + }, + "methodCandidates": [ + { + "id": "sha256:3d843599c82e0cf88d7512278cc2b4f2ffc87c5797785e0c9caad89ab4af8f98", + "kind": "method", + "name": ".pop()", + "qualifiedName": "walkdir::IntoIter::pop", + "language": "rust", + "source": { + "file": "src/lib.rs", + "startByte": 33953, + "endByte": 34437, + "startLine": 950, + "startColumn": 4, + "endLine": 959, + "endColumn": 5 + }, + "details": { + "type": "symbol", + "data": { + "signature": "fn pop(&mut self)", + "signatureDigest": "0fa51313f817eed32447ebd07cb6dcda1265a55558a49a35712231b89d0f8c25", + "implementationDigest": "55581b03dfee9d578e5c5cc50db986a587f795e0f0bd1cf4b60769627bba0549", + "sourceDigest": "1553775e6184fbdc67a0491e65098678af0c0dad5631134e7737adeef7d5bd70" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.rust.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/lib.rs", + "startByte": 33956, + "endByte": 33959, + "startLine": 950, + "startColumn": 7, + "endLine": 950, + "endColumn": 10 + } + ] + } + ], + "community": { + "id": 0, + "label": "DirEntry" + } + } + ], + "stateCandidates": [ + { + "id": "sha256:b127352da415182e7b8716381b845e7ae6093fe6b79ceb9e0a48ebbffaeae1d3", + "kind": "field", + "name": "oldest_opened", + "qualifiedName": "walkdir::IntoIter::oldest_opened", + "language": "rust", + "source": { + "file": "src/lib.rs", + "startByte": 19882, + "endByte": 19895, + "startLine": 591, + "startColumn": 4, + "endLine": 591, + "endColumn": 17 + }, + "details": { + "type": "symbol", + "data": { + "signature": "oldest_opened: usize", + "signatureDigest": "b21b147403ccbf752075dc8deafc452ca756f8a458d6b87ebd58bd769acf4bbb", + "sourceDigest": "e21fc19d3741ff510e45f6238b1be153c24fb3899c0896a7ee0960a690f8c319" + } + }, + "evidence": [ + { + "origin": "ast", + "extractor": "compass.languages.rust.universal", + "confidence": "exact", + "anchors": [ + { + "file": "src/lib.rs", + "startByte": 19882, + "endByte": 19895, + "startLine": 591, + "startColumn": 4, + "endLine": 591, + "endColumn": 17 + } + ] + } + ], + "community": { + "id": 0, + "label": "DirEntry" + } + } + ], + "connectingRecords": [], + "status": "no_contact_edge", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "walkdir", + "tool": "graphify", + "graphDirected": false, + "owner": "IntoIter", + "state": "deferred_dirs", + "file": "src/lib.rs", + "declarationLine": 598, + "access": { + "method": "handle_entry", + "methodLine": 840, + "line": 875, + "column": 13, + "expression": "self.deferred_dirs", + "operation": "receiver", + "text": " self.deferred_dirs.push(dent);" + }, + "methodCandidates": [ + { + "id": "src_lib_intoiter_handle_entry", + "label": ".handle_entry()", + "_origin": "ast", + "community": 2, + "file_type": "code", + "norm_label": ".handle_entry()", + "source_file": "src/lib.rs", + "source_location": "L840" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "walkdir", + "tool": "graphify", + "graphDirected": false, + "owner": "IntoIter", + "state": "deferred_dirs", + "file": "src/lib.rs", + "declarationLine": 598, + "access": { + "method": "get_deferred_dir", + "methodLine": 884, + "line": 886, + "column": 29, + "expression": "self.deferred_dirs", + "operation": "read", + "text": " if self.depth < self.deferred_dirs.len() {" + }, + "methodCandidates": [ + { + "id": "src_lib_intoiter_get_deferred_dir", + "label": ".get_deferred_dir()", + "_origin": "ast", + "community": 2, + "file_type": "code", + "norm_label": ".get_deferred_dir()", + "source_file": "src/lib.rs", + "source_location": "L884" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "walkdir", + "tool": "graphify", + "graphDirected": false, + "owner": "IntoIter", + "state": "oldest_opened", + "file": "src/lib.rs", + "declarationLine": 591, + "access": { + "method": "push", + "methodLine": 901, + "line": 945, + "column": 13, + "expression": "self.oldest_opened", + "operation": "write", + "text": " self.oldest_opened = self.oldest_opened.checked_add(1).unwrap();" + }, + "methodCandidates": [ + { + "id": "src_lib_intoiter_push", + "label": ".push()", + "_origin": "ast", + "community": 2, + "file_type": "code", + "norm_label": ".push()", + "source_file": "src/lib.rs", + "source_location": "L901" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + }, + { + "repository": "walkdir", + "tool": "graphify", + "graphDirected": false, + "owner": "IntoIter", + "state": "oldest_opened", + "file": "src/lib.rs", + "declarationLine": 591, + "access": { + "method": "pop", + "methodLine": 950, + "line": 958, + "column": 9, + "expression": "self.oldest_opened", + "operation": "write", + "text": " self.oldest_opened = min(self.oldest_opened, self.stack_list.len());" + }, + "methodCandidates": [ + { + "id": "src_lib_intoiter_pop", + "label": ".pop()", + "_origin": "ast", + "community": 2, + "file_type": "code", + "norm_label": ".pop()", + "source_file": "src/lib.rs", + "source_location": "L950" + } + ], + "stateCandidates": [], + "connectingRecords": [], + "status": "missing_state", + "contactSupported": false, + "selectedLineSupported": false + } + ] +} diff --git a/benchmarks/agent_query/suite_ask.toml b/benchmarks/agent_query/suite_ask.toml new file mode 100644 index 000000000..27febe2e5 --- /dev/null +++ b/benchmarks/agent_query/suite_ask.toml @@ -0,0 +1,227 @@ +# Natural-language routing development comparison across five real languages. +# Reuses source-reviewed caller/callee facts from suite_v2.toml; these are not +# independent held-out judgments. The exact same question and 2000-token budget +# are sent to Compass ask and Graphify query. One response, no follow-ups. +# Score selected-fact text recall first; this does not certify every returned edge. + +schema = "compass.agent-query-suite/1" + +[[repository]] +name = "cobra" +language = "Go" +url = "https://github.com/spf13/cobra.git" +commit = "adbc8813901bba65827259daa8e22ff94ec1f30e" + +[[repository.anchor]] +file = "command.go" +line = 1868 +symbol = "ParseFlags" +judgment = "command.go:1868 declares func (c *Command) ParseFlags(args []string) error." + +[[repository.anchor]] +file = "command.go" +line = 757 +symbol = "Find" +judgment = "command.go:757 declares func (c *Command) Find(args []string) (*Command, []string, error)." + +[[repository.anchor]] +file = "doc/md_docs.go" +line = 52 +symbol = "GenMarkdown" +judgment = "doc/md_docs.go:52 declares GenMarkdown, which consumes the cobra package it imports at line 27." + +[[repository.question]] +id = "cobra-ask-callers" +kind = "callers" +subject = "who calls cobra.Command::Find?" +compass = ["ask", "who calls cobra.Command::Find?", "--text-budget", "2000"] +graphify = ["query", "who calls cobra.Command::Find?", "--budget", "2000"] +expect = "answer" +required = ["ExecuteC", "command.go"] +judgment = "Same source fact as cobra2-callers-find. Find is called by ExecuteC at command.go:1123 and by InitDefaultHelpCmd (command.go:1263) at command.go:1276 and command.go:1294. This row changes the natural-language interface, not the underlying source judgment." + +[[repository.question]] +id = "cobra-ask-callees" +kind = "callees" +subject = "what does cobra.Command::ExecuteC call?" +compass = ["ask", "what does cobra.Command::ExecuteC call?", "--text-budget", "2000"] +graphify = ["query", "what does cobra.Command::ExecuteC call?", "--budget", "2000"] +expect = "answer" +required = ["Find", "execute", "Traverse"] +judgment = "Same source fact as cobra2-callees-executec. ExecuteC calls Traverse (command.go:1121), Find (command.go:1123) and execute (command.go:1148). This row changes the natural-language interface, not the underlying source judgment." + +[[repository]] +name = "flask" +language = "Python" +url = "https://github.com/pallets/flask.git" +commit = "d73fa1cdcbd8b1465c151db8924ba58b1dd14e35" + +[[repository.anchor]] +file = "src/flask/app.py" +line = 969 +symbol = "dispatch_request" +judgment = "src/flask/app.py:969 declares Flask.dispatch_request." + +[[repository.anchor]] +file = "src/flask/ctx.py" +line = 260 +symbol = "AppContext" +judgment = "src/flask/ctx.py:260 declares AppContext." + +[[repository.anchor]] +file = "src/flask/views.py" +line = 78 +symbol = "View.dispatch_request" +judgment = "src/flask/views.py:78 declares View.dispatch_request." + +[[repository.question]] +id = "flask-ask-callers" +kind = "callers" +subject = "who calls src.flask.app.Flask::full_dispatch_request?" +compass = ["ask", "who calls src.flask.app.Flask::full_dispatch_request?", "--text-budget", "2000"] +graphify = ["query", "who calls src.flask.app.Flask::full_dispatch_request?", "--budget", "2000"] +expect = "answer" +required = ["wsgi_app"] +judgment = "Same source fact as flask2-callers-fulldispatch. wsgi_app calls self.full_dispatch_request(ctx) at src/flask/app.py:1600. This row changes the natural-language interface, not the underlying source judgment." + +[[repository.question]] +id = "flask-ask-callees" +kind = "callees" +subject = "what does src.flask.app.Flask::full_dispatch_request call?" +compass = ["ask", "what does src.flask.app.Flask::full_dispatch_request call?", "--text-budget", "2000"] +graphify = ["query", "what does src.flask.app.Flask::full_dispatch_request call?", "--budget", "2000"] +expect = "answer" +required = ["preprocess_request", "dispatch_request", "finalize_request"] +judgment = "Same source fact as flask2-callees-fulldispatch. full_dispatch_request calls preprocess_request (app.py:1017), dispatch_request (1019) and finalize_request (1022). This row changes the natural-language interface, not the underlying source judgment." + +[[repository]] +name = "gson" +language = "Java" +url = "https://github.com/google/gson.git" +commit = "15ca7360379cf3c1502b59981569050489f2d73e" + +[[repository.anchor]] +file = "gson/src/main/java/com/google/gson/Gson.java" +line = 565 +symbol = "toJson(Object)" +judgment = "Gson.java:565 declares public String toJson(Object src)." + +[[repository.anchor]] +file = "gson/src/main/java/com/google/gson/stream/JsonWriter.java" +line = 526 +symbol = "value(String)" +judgment = "JsonWriter.java:526 starts the @CanIgnoreReturnValue annotation on public JsonWriter value(String value), whose method header is line 527." + +[[repository.anchor]] +file = "gson/src/main/java/com/google/gson/TypeAdapter.java" +line = 143 +symbol = "toJson(Writer, T)" +judgment = "TypeAdapter.java:143 declares final void toJson(Writer out, T value)." + +[[repository.question]] +id = "gson-ask-callers" +kind = "callers" +subject = "who calls com.google.gson.Gson::newJsonWriter?" +compass = ["ask", "who calls com.google.gson.Gson::newJsonWriter?", "--text-budget", "2000"] +graphify = ["query", "who calls com.google.gson.Gson::newJsonWriter?", "--budget", "2000"] +expect = "answer" +required = ["toJson", "Gson.java"] +judgment = "Same source fact as gson2-callers-newjsonwriter. newJsonWriter is called by the toJson overloads at Gson.java:642 and Gson.java:724. This row changes the natural-language interface, not the underlying source judgment." + +[[repository.question]] +id = "gson-ask-callees" +kind = "callees" +subject = "what does com.google.gson.Gson::newJsonWriter call?" +compass = ["ask", "what does com.google.gson.Gson::newJsonWriter call?", "--text-budget", "2000"] +graphify = ["query", "what does com.google.gson.Gson::newJsonWriter call?", "--budget", "2000"] +expect = "answer" +required = ["setHtmlSafe", "setSerializeNulls"] +judgment = "Same source fact as gson2-callees-newjsonwriter. newJsonWriter calls setFormattingStyle (Gson.java:802), setHtmlSafe (803), setStrictness (804) and setSerializeNulls (805) on the writer it returns. This row changes the natural-language interface, not the underlying source judgment." + +[[repository]] +name = "zod" +language = "TypeScript" +url = "https://github.com/colinhacks/zod.git" +commit = "d2b135cfb7a3582b9eb515756b9166bcb9521f4a" + +[[repository.anchor]] +file = "packages/zod/src/v4/classic/schemas.ts" +line = 303 +symbol = "ZodType.safeParse" +judgment = "packages/zod/src/v4/classic/schemas.ts:303 implements ZodType.safeParse." + +[[repository.anchor]] +file = "packages/zod/src/v4/classic/from-json-schema.ts" +line = 105 +symbol = "detectVersion" +judgment = "packages/zod/src/v4/classic/from-json-schema.ts:105 declares detectVersion." + +[[repository.anchor]] +file = "packages/zod/src/v4/classic/parse.ts" +line = 22 +symbol = "safeParse" +judgment = "packages/zod/src/v4/classic/parse.ts:22 exports the classic safeParse entry point." + +[[repository.question]] +id = "zod-ask-callers" +kind = "callers" +subject = "who calls detectVersion?" +compass = ["ask", "who calls detectVersion?", "--text-budget", "2000"] +graphify = ["query", "who calls detectVersion?", "--budget", "2000"] +expect = "answer" +required = ["fromJSONSchema", "from-json-schema.ts"] +judgment = "Same source fact as zod2-callers-detectversion. fromJSONSchema calls detectVersion(normalized, params?.defaultTarget) at from-json-schema.ts:931. This row changes the natural-language interface, not the underlying source judgment." + +[[repository.question]] +id = "zod-ask-callees" +kind = "callees" +subject = "what does convertSchema call?" +compass = ["ask", "what does convertSchema call?", "--text-budget", "2000"] +graphify = ["query", "what does convertSchema call?", "--budget", "2000"] +expect = "answer" +required = ["convertBaseSchema"] +judgment = "Same source fact as zod2-callees-convertschema. convertSchema calls convertBaseSchema(schema, ctx) at from-json-schema.ts:814. This row changes the natural-language interface, not the underlying source judgment." + +[[repository]] +name = "axum" +language = "Rust" +url = "https://github.com/tokio-rs/axum.git" +commit = "af1345b53a259b0990be1ff853f9b56c05040ef7" + +[[repository.anchor]] +file = "src/routing/mod.rs" +line = 192 +symbol = "Router::route" +judgment = "src/routing/mod.rs:192 declares pub fn route(self, path: &str, method_router: MethodRouter) -> Self." + +[[repository.anchor]] +file = "src/routing/path_router.rs" +line = 22 +symbol = "validate_path" +judgment = "src/routing/path_router.rs:22 declares fn validate_path." + +[[repository.anchor]] +file = "src/serve/mod.rs" +line = 106 +symbol = "serve" +judgment = "src/serve/mod.rs:106 declares pub fn serve." + +[[repository.question]] +id = "axum-ask-callers" +kind = "callers" +subject = "who calls validate_path?" +compass = ["ask", "who calls validate_path?", "--text-budget", "2000"] +graphify = ["query", "who calls validate_path?", "--budget", "2000"] +expect = "answer" +required = ["route"] +judgment = "Same source fact as axum2-callers-validate-path. validate_path is called by PathRouter::route at path_router.rs:71 and PathRouter::route_endpoint at line 125. This row changes the natural-language interface, not the underlying source judgment." + +[[repository.question]] +id = "axum-ask-callees" +kind = "callees" +subject = "what does validate_path call?" +compass = ["ask", "what does validate_path call?", "--text-budget", "2000"] +graphify = ["query", "what does validate_path call?", "--budget", "2000"] +expect = "answer" +required = ["validate_v07_paths"] +judgment = "Same source fact as axum2-callees-validate-path. validate_path (path_router.rs:22) calls validate_v07_paths(path) at path_router.rs:30, declared at path_router.rs:36. This row changes the natural-language interface, not the underlying source judgment." diff --git a/benchmarks/agent_query/suite_fd.toml b/benchmarks/agent_query/suite_fd.toml new file mode 100644 index 000000000..cad7458e9 --- /dev/null +++ b/benchmarks/agent_query/suite_fd.toml @@ -0,0 +1,168 @@ +# Source-first diagnostic sample, registered before querying either tool on fd. +# This is one additional Rust repository, not a representative held-out corpus. +# Text matching remains a recall proxy; edge_witnesses_fd.json separately +# records relationship identity and every reviewed occurrence for selected calls. +# Default query forms are used on both tools. Undirected path semantics match. +# Source excerpts are reported separately as a feature capability. +schema = "compass.agent-query-suite/1" + +[[repository]] +name = "fd" +language = "Rust" +url = "https://github.com/sharkdp/fd.git" +commit = "b422e5d8c9cffaa1ae43ba68e7b97a60fb3e8ae5" + +[[repository.anchor]] +file = "src/exec/command.rs" +line = 60 +symbol = "execute_commands" +judgment = "The generic free function is declared at line 60." + +[[repository.anchor]] +file = "src/exec/mod.rs" +line = 51 +symbol = "new_batch" +judgment = "CommandSet::new_batch begins at line 51." + +[[repository.anchor]] +file = "src/exec/command.rs" +line = 101 +symbol = "handle_cmd_error" +judgment = "The free error handler is declared at line 101." + +[[repository.anchor]] +file = "src/filter/size.rs" +line = 28 +symbol = "from_string" +judgment = "SizeFilter::from_string starts at line 28; OwnerFilter has another method with this name." + +[[repository.anchor]] +file = "src/exec/mod.rs" +line = 191 +symbol = "finish" +judgment = "CommandBuilder::finish begins at line 191." + +[[repository.question]] +id = "fd-explain-execute-commands" +kind = "explain" +subject = "execute_commands declaration" +compass = ["explain", "execute_commands"] +graphify = ["explain", "execute_commands()"] +expect = "answer" +required = ["src/exec/command.rs", "60"] +judgment = "src/exec/command.rs:60 declares execute_commands." + +[[repository.question]] +id = "fd-explain-new-batch" +kind = "explain" +subject = "CommandSet::new_batch declaration" +compass = ["explain", "new_batch"] +graphify = ["explain", ".new_batch()"] +expect = "answer" +required = ["src/exec/mod.rs", "51"] +judgment = "src/exec/mod.rs:51 declares the unique new_batch method." + +[[repository.question]] +id = "fd-source-handle-error" +kind = "explain_source" +subject = "handle_cmd_error declaration source" +compass = ["explain", "handle_cmd_error", "--source", "--root", "."] +graphify = ["explain", "handle_cmd_error()"] +expect = "answer" +required = ["pub fn handle_cmd_error(cmd: Option<&Command>, err: io::Error) -> ExitCode"] +judgment = "The requested declaration text is src/exec/command.rs:101." + +[[repository.question]] +id = "fd-callers-execute-commands" +kind = "callers" +subject = "direct callers of execute_commands" +compass = ["callers", "execute_commands"] +graphify = ["affected", "execute_commands()", "--depth", "1"] +expect = "answer" +required = ["execute", "src/exec/mod.rs"] +judgment = "CommandSet::execute at mod.rs:76 calls execute_commands at mod.rs:87." + +[[repository.question]] +id = "fd-callees-execute-commands" +kind = "callees" +subject = "internal callees of execute_commands" +compass = ["callees", "execute_commands"] +graphify = ["explain", "execute_commands()"] +expect = "answer" +required = ["handle_cmd_error", "write"] +judgment = "execute_commands calls handle_cmd_error at lines 68 and 93, and OutputBuffer::write at lines 87, 92, 97 of command.rs." + +[[repository.question]] +id = "fd-callees-execute-batch" +kind = "callees" +subject = "internal callees of CommandSet::execute_batch" +compass = ["callees", "execute_batch"] +graphify = ["explain", ".execute_batch()"] +expect = "answer" +required = ["handle_cmd_error", "merge_exitcodes", "finish"] +judgment = "mod.rs:90-120 calls handle_cmd_error at 105/112/118, CommandBuilder::finish at 111, and merge_exitcodes at 116." + +[[repository.question]] +id = "fd-path-command-error" +kind = "path" +subject = "execute_commands to handle_cmd_error" +compass = ["path", "execute_commands", "handle_cmd_error"] +graphify = ["path", "execute_commands()", "handle_cmd_error()", "--undirected"] +expect = "answer" +required = ["execute_commands", "handle_cmd_error"] +forbidden = ["NO PATH FOUND", "No path found"] +judgment = "Direct calls occur at command.rs:68 and 93; a valid source-supported one-hop relationship exists." + +[[repository.question]] +id = "fd-path-batch-exitcodes" +kind = "path" +subject = "execute_batch to merge_exitcodes" +compass = ["path", "execute_batch", "merge_exitcodes"] +graphify = ["path", ".execute_batch()", "merge_exitcodes()", "--undirected"] +expect = "answer" +required = ["execute_batch", "merge_exitcodes"] +forbidden = ["NO PATH FOUND", "No path found"] +judgment = "CommandSet::execute_batch calls merge_exitcodes at mod.rs:116; the target is declared at exit_codes.rs:46." + +[[repository.question]] +id = "fd-ambiguous-new" +kind = "ambiguity" +subject = "new constructor ambiguity" +compass = ["search", "new"] +graphify = ["explain", "new"] +expect = "pick_list" +required_one_of = ["src/exec/mod.rs", "src/exec/command.rs"] +min_one_of = 1 +judgment = "CommandSet::new, CommandBuilder::new and CommandTemplate::new occur at mod.rs:36/136/220; OutputBuffer::new is command.rs:19." + +[[repository.question]] +id = "fd-negative" +kind = "negative" +subject = "absent symbol CompassAuditAbsentFdSymbol9021" +compass = ["search", "CompassAuditAbsentFdSymbol9021"] +graphify = ["explain", "CompassAuditAbsentFdSymbol9021"] +expect = "no_match" +judgment = "The exact identifier is absent from all tracked files at the pinned commit." + +[[repository.question]] +id = "fd-file-exec-exitcodes" +kind = "file_path" +subject = "src/exec/mod.rs to src/exit_codes.rs" +compass = ["path", "src/exec/mod.rs", "src/exit_codes.rs"] +graphify = ["path", "src/exec/mod.rs", "src/exit_codes.rs", "--undirected"] +expect = "answer" +required = ["mod.rs", "exit_codes"] +forbidden = ["NO PATH FOUND", "No path found"] +judgment = "mod.rs:14 imports ExitCode and merge_exitcodes; the latter is called at 116 and declared in exit_codes.rs:46." + +[[repository.question]] +id = "fd-broad-command-errors" +kind = "broad" +subject = "how are command errors handled" +compass = ["query", "how are command errors handled"] +graphify = ["query", "how are command errors handled"] +expect = "answer" +budget_tokens = 600 +max_follow_ups = 3 +required = ["handle_cmd_error"] +judgment = "handle_cmd_error at command.rs:101 branches on command-not-found and reports other execution errors." diff --git a/benchmarks/agent_query/suite_heldout_a.toml b/benchmarks/agent_query/suite_heldout_a.toml new file mode 100644 index 000000000..67d77621e --- /dev/null +++ b/benchmarks/agent_query/suite_heldout_a.toml @@ -0,0 +1,834 @@ +# Held-out confirmation panel A. Product binaries are frozen before this panel. +# Questions and source witnesses are committed before either tool builds or queries these repositories. +# Purposively chosen small libraries, one per existing language; not a random or representative sample. +# Primary verdicts are text recall proxies. Separate edge/path audits retain exact identities and source sites. +# Callers/affected and callees/explain are corresponding public operations, not identical relation-filter interfaces. +# Paths are undirected for both tools. All failures, ambiguities, and bound outcomes remain in the denominator. +# Broad query pages start at 600 estimated tokens, with up to three documented follow-ups; ask rows request 2000. +schema = "compass.agent-query-suite/1" + +[[repository]] +name = "chi" +language = "Go" +url = "https://github.com/go-chi/chi.git" +commit = "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc" + +[[repository.anchor]] +file = "chi.go" +line = 62 +symbol = "NewRouter" +judgment = "Source declaration: func NewRouter() *Mux {" + +[[repository.anchor]] +file = "context.go" +line = 11 +symbol = "URLParam" +judgment = "Source declaration: func URLParam(r *http.Request, key string) string {" + +[[repository.anchor]] +file = "context.go" +line = 16 +symbol = "URLParamFromCtx" +judgment = "Source declaration: func URLParamFromCtx(ctx context.Context, key string) string {" + +[[repository.anchor]] +file = "context.go" +line = 25 +symbol = "RouteContext" +judgment = "Source declaration: func RouteContext(ctx context.Context) *Context {" + +[[repository.anchor]] +file = "context.go" +line = 31 +symbol = "NewRouteContext" +judgment = "Source declaration: func NewRouteContext() *Context {" + +[[repository.anchor]] +file = "context.go" +line = 124 +symbol = "URLParam" +judgment = "Source declaration: func (x *Context) URLParam(key string) string {" + +[[repository.anchor]] +file = "mux.go" +line = 52 +symbol = "NewMux" +judgment = "Source declaration: func NewMux() *Mux {" + +[[repository.question]] +id = "chi-holdout-explain-primary" +kind = "explain" +subject = "Locate NewRouter declaration" +compass = ["explain", "NewRouter"] +graphify = ["explain", "NewRouter"] +expect = "answer" +required = ["chi.go", "62"] +judgment = "chi.go:62: func NewRouter() *Mux {" + +[[repository.question]] +id = "chi-holdout-explain-target" +kind = "explain" +subject = "Locate NewMux declaration" +compass = ["explain", "NewMux"] +graphify = ["explain", "NewMux"] +expect = "answer" +required = ["mux.go", "52"] +judgment = "mux.go:52: func NewMux() *Mux {" + +[[repository.question]] +id = "chi-holdout-callers" +kind = "callers" +subject = "Direct callers of NewMux" +compass = ["callers", "NewMux"] +graphify = ["affected", "NewMux", "--depth", "1"] +expect = "answer" +required = ["NewRouter", "chi.go"] +judgment = "NewRouter directly calls NewMux; source occurrences are recorded separately." + +[[repository.question]] +id = "chi-holdout-callees" +kind = "callees" +subject = "Direct internal callees of NewRouter" +compass = ["callees", "NewRouter"] +graphify = ["explain", "NewRouter"] +expect = "answer" +required = ["NewMux"] +judgment = "Reviewed lexical body calls; source witnesses disambiguate selected endpoints." + +[[repository.question]] +id = "chi-holdout-path-forward" +kind = "path" +subject = "Undirected navigation from NewRouter to NewMux" +compass = ["path", "NewRouter", "NewMux"] +graphify = ["path", "NewRouter", "NewMux", "--undirected"] +expect = "answer" +required = ["NewRouter", "NewMux"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at chi.go:63; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "chi-holdout-path-reverse" +kind = "path" +subject = "Undirected navigation from NewMux to NewRouter" +compass = ["path", "NewMux", "NewRouter"] +graphify = ["path", "NewMux", "NewRouter", "--undirected"] +expect = "answer" +required = ["NewMux", "NewRouter"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at chi.go:63; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "chi-holdout-file-path" +kind = "file_path" +subject = "Connect chi.go and mux.go" +compass = ["path", "chi.go", "mux.go"] +graphify = ["path", "chi.go", "mux.go", "--undirected"] +expect = "answer" +required = ["chi.go", "mux.go"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "The reviewed files contain a direct internal call/import or re-export relationship; no particular intermediate file route is prescribed." + +[[repository.question]] +id = "chi-holdout-ambiguity" +kind = "ambiguity" +subject = "Distinguish same-named URLParam declarations" +compass = ["search", "URLParam"] +graphify = ["explain", "URLParam"] +expect = "pick_list" +required_one_of = ["context.go"] +min_one_of = 1 +min_candidates = 2 +judgment = "Distinct declaration anchors are recorded for this unqualified name; require candidates rather than silently choosing." + +[[repository.question]] +id = "chi-holdout-negative" +kind = "negative" +subject = "Reject absent exact symbol HeldoutAbsentChiSymbol8197" +compass = ["search", "HeldoutAbsentChiSymbol8197"] +graphify = ["explain", "HeldoutAbsentChiSymbol8197"] +expect = "no_match" +judgment = "The exact sentinel is absent from the pinned checkout; a convenient fuzzy substitute is not a correct answer." + +[[repository.question]] +id = "chi-holdout-broad" +kind = "broad" +subject = "how is a new router created" +compass = ["query", "how is a new router created"] +graphify = ["query", "how is a new router created"] +expect = "answer" +required = ["NewRouter"] +budget_tokens = 600 +max_follow_ups = 3 +judgment = "The reviewed primary declaration implements this task. Required name presence is only a recall proxy, not whole-answer correctness." + +[[repository.question]] +id = "chi-holdout-ask-callers" +kind = "callers" +subject = "who calls NewMux" +compass = ["ask", "who calls NewMux", "--text-budget", "2000"] +graphify = ["query", "who calls NewMux", "--budget", "2000"] +expect = "answer" +required = ["NewRouter", "chi.go"] +judgment = "Same incoming-call task as direct callers, through each product natural-language entry point; separately inspect subject and direction before a correctness claim." + +[[repository]] +name = "click" +language = "Python" +url = "https://github.com/pallets/click.git" +commit = "06b2a678741131fd577ce170e23e5ca0aeba0309" + +[[repository.anchor]] +file = "src/click/_compat.py" +line = 361 +symbol = "_wrap_io_open" +judgment = "Source declaration: def _wrap_io_open(" + +[[repository.anchor]] +file = "src/click/_compat.py" +line = 374 +symbol = "open_stream" +judgment = "Source declaration: def open_stream(" + +[[repository.anchor]] +file = "src/click/_compat.py" +line = 466 +symbol = "close" +judgment = "Source declaration: def close(self, delete: bool = False) -> None:" + +[[repository.anchor]] +file = "src/click/utils.py" +line = 153 +symbol = "open" +judgment = "Source declaration: def open(self) -> t.IO[t.Any]:" + +[[repository.anchor]] +file = "src/click/utils.py" +line = 171 +symbol = "close" +judgment = "Source declaration: def close(self) -> None:" + +[[repository.anchor]] +file = "src/click/utils.py" +line = 381 +symbol = "open_file" +judgment = "Source declaration: def open_file(" + +[[repository.anchor]] +file = "src/click/utils.py" +line = 430 +symbol = "format_filename" +judgment = "Source declaration: def format_filename(" + +[[repository.question]] +id = "click-holdout-explain-primary" +kind = "explain" +subject = "Locate open_file declaration" +compass = ["explain", "open_file"] +graphify = ["explain", "open_file"] +expect = "answer" +required = ["src/click/utils.py", "381"] +judgment = "src/click/utils.py:381: def open_file(" + +[[repository.question]] +id = "click-holdout-explain-target" +kind = "explain" +subject = "Locate open_stream declaration" +compass = ["explain", "open_stream"] +graphify = ["explain", "open_stream"] +expect = "answer" +required = ["src/click/_compat.py", "374"] +judgment = "src/click/_compat.py:374: def open_stream(" + +[[repository.question]] +id = "click-holdout-callers" +kind = "callers" +subject = "Direct callers of open_stream" +compass = ["callers", "open_stream"] +graphify = ["affected", "open_stream", "--depth", "1"] +expect = "answer" +required = ["open_file", "utils.py"] +judgment = "open_file directly calls open_stream; source occurrences are recorded separately." + +[[repository.question]] +id = "click-holdout-callees" +kind = "callees" +subject = "Direct internal callees of open_file" +compass = ["callees", "open_file"] +graphify = ["explain", "open_file"] +expect = "answer" +required = ["open_stream"] +judgment = "Reviewed lexical body calls; source witnesses disambiguate selected endpoints." + +[[repository.question]] +id = "click-holdout-path-forward" +kind = "path" +subject = "Undirected navigation from open_file to open_stream" +compass = ["path", "open_file", "open_stream"] +graphify = ["path", "open_file", "open_stream", "--undirected"] +expect = "answer" +required = ["open_file", "open_stream"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at src/click/utils.py:422; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "click-holdout-path-reverse" +kind = "path" +subject = "Undirected navigation from open_stream to open_file" +compass = ["path", "open_stream", "open_file"] +graphify = ["path", "open_stream", "open_file", "--undirected"] +expect = "answer" +required = ["open_stream", "open_file"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at src/click/utils.py:422; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "click-holdout-file-path" +kind = "file_path" +subject = "Connect src/click/utils.py and src/click/_compat.py" +compass = ["path", "src/click/utils.py", "src/click/_compat.py"] +graphify = ["path", "src/click/utils.py", "src/click/_compat.py", "--undirected"] +expect = "answer" +required = ["utils.py", "_compat.py"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "The reviewed files contain a direct internal call/import or re-export relationship; no particular intermediate file route is prescribed." + +[[repository.question]] +id = "click-holdout-ambiguity" +kind = "ambiguity" +subject = "Distinguish same-named close declarations" +compass = ["search", "close"] +graphify = ["explain", "close"] +expect = "pick_list" +required_one_of = ["utils.py", "_compat.py"] +min_one_of = 1 +min_candidates = 2 +judgment = "Distinct declaration anchors are recorded for this unqualified name; require candidates rather than silently choosing." + +[[repository.question]] +id = "click-holdout-negative" +kind = "negative" +subject = "Reject absent exact symbol HeldoutAbsentClickSymbol8197" +compass = ["search", "HeldoutAbsentClickSymbol8197"] +graphify = ["explain", "HeldoutAbsentClickSymbol8197"] +expect = "no_match" +judgment = "The exact sentinel is absent from the pinned checkout; a convenient fuzzy substitute is not a correct answer." + +[[repository.question]] +id = "click-holdout-broad" +kind = "broad" +subject = "how are files opened with lazy or atomic writes" +compass = ["query", "how are files opened with lazy or atomic writes"] +graphify = ["query", "how are files opened with lazy or atomic writes"] +expect = "answer" +required = ["open_file"] +budget_tokens = 600 +max_follow_ups = 3 +judgment = "The reviewed primary declaration implements this task. Required name presence is only a recall proxy, not whole-answer correctness." + +[[repository.question]] +id = "click-holdout-ask-callers" +kind = "callers" +subject = "who calls open_stream" +compass = ["ask", "who calls open_stream", "--text-budget", "2000"] +graphify = ["query", "who calls open_stream", "--budget", "2000"] +expect = "answer" +required = ["open_file", "utils.py"] +judgment = "Same incoming-call task as direct callers, through each product natural-language entry point; separately inspect subject and direction before a correctness claim." + +[[repository]] +name = "jsoup" +language = "Java" +url = "https://github.com/jhy/jsoup.git" +commit = "37aea49902972cec9a53dc2c65023729f1c3715b" + +[[repository.anchor]] +file = "src/main/java/org/jsoup/Jsoup.java" +line = 434 +symbol = "isValid" +judgment = "Source declaration: public static boolean isValid(String bodyHtml, Safelist safelist) {" + +[[repository.anchor]] +file = "src/main/java/org/jsoup/nodes/Document.java" +line = 65 +symbol = "createShell" +judgment = "Source declaration: public static Document createShell(String baseUri) {" + +[[repository.anchor]] +file = "src/main/java/org/jsoup/safety/Cleaner.java" +line = 62 +symbol = "clean" +judgment = "Source declaration: public Document clean(Document dirtyDocument) {" + +[[repository.anchor]] +file = "src/main/java/org/jsoup/safety/Cleaner.java" +line = 94 +symbol = "isValid" +judgment = "Source declaration: public boolean isValid(Document dirtyDocument) {" + +[[repository.anchor]] +file = "src/main/java/org/jsoup/safety/Cleaner.java" +line = 124 +symbol = "isValidBodyHtml" +judgment = "Source declaration: public boolean isValidBodyHtml(String bodyHtml) {" + +[[repository.anchor]] +file = "src/main/java/org/jsoup/safety/Cleaner.java" +line = 182 +symbol = "copySafeNodes" +judgment = "Source declaration: private int copySafeNodes(Element source, Element dest) {" + +[[repository.question]] +id = "jsoup-holdout-explain-primary" +kind = "explain" +subject = "Locate isValidBodyHtml declaration" +compass = ["explain", "isValidBodyHtml"] +graphify = ["explain", "isValidBodyHtml"] +expect = "answer" +required = ["src/main/java/org/jsoup/safety/Cleaner.java", "124"] +judgment = "src/main/java/org/jsoup/safety/Cleaner.java:124: public boolean isValidBodyHtml(String bodyHtml) {" + +[[repository.question]] +id = "jsoup-holdout-explain-target" +kind = "explain" +subject = "Locate copySafeNodes declaration" +compass = ["explain", "copySafeNodes"] +graphify = ["explain", "copySafeNodes"] +expect = "answer" +required = ["src/main/java/org/jsoup/safety/Cleaner.java", "182"] +judgment = "src/main/java/org/jsoup/safety/Cleaner.java:182: private int copySafeNodes(Element source, Element dest) {" + +[[repository.question]] +id = "jsoup-holdout-callers" +kind = "callers" +subject = "Direct callers of copySafeNodes" +compass = ["callers", "copySafeNodes"] +graphify = ["affected", "copySafeNodes", "--depth", "1"] +expect = "answer" +required = ["isValidBodyHtml", "Cleaner.java"] +judgment = "isValidBodyHtml directly calls copySafeNodes; source occurrences are recorded separately." + +[[repository.question]] +id = "jsoup-holdout-callees" +kind = "callees" +subject = "Direct internal callees of isValidBodyHtml" +compass = ["callees", "isValidBodyHtml"] +graphify = ["explain", "isValidBodyHtml"] +expect = "answer" +required = ["copySafeNodes", "createShell"] +judgment = "Reviewed lexical body calls; source witnesses disambiguate selected endpoints." + +[[repository.question]] +id = "jsoup-holdout-path-forward" +kind = "path" +subject = "Undirected navigation from isValidBodyHtml to copySafeNodes" +compass = ["path", "isValidBodyHtml", "copySafeNodes"] +graphify = ["path", "isValidBodyHtml", "copySafeNodes", "--undirected"] +expect = "answer" +required = ["isValidBodyHtml", "copySafeNodes"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at src/main/java/org/jsoup/safety/Cleaner.java:131; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "jsoup-holdout-path-reverse" +kind = "path" +subject = "Undirected navigation from copySafeNodes to isValidBodyHtml" +compass = ["path", "copySafeNodes", "isValidBodyHtml"] +graphify = ["path", "copySafeNodes", "isValidBodyHtml", "--undirected"] +expect = "answer" +required = ["copySafeNodes", "isValidBodyHtml"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at src/main/java/org/jsoup/safety/Cleaner.java:131; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "jsoup-holdout-file-path" +kind = "file_path" +subject = "Connect src/main/java/org/jsoup/safety/Cleaner.java and src/main/java/org/jsoup/parser/Parser.java" +compass = ["path", "src/main/java/org/jsoup/safety/Cleaner.java", "src/main/java/org/jsoup/parser/Parser.java"] +graphify = ["path", "src/main/java/org/jsoup/safety/Cleaner.java", "src/main/java/org/jsoup/parser/Parser.java", "--undirected"] +expect = "answer" +required = ["Cleaner.java", "Parser.java"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "The reviewed files contain a direct internal call/import or re-export relationship; no particular intermediate file route is prescribed." + +[[repository.question]] +id = "jsoup-holdout-ambiguity" +kind = "ambiguity" +subject = "Distinguish same-named isValid declarations" +compass = ["search", "isValid"] +graphify = ["explain", "isValid"] +expect = "pick_list" +required_one_of = ["Cleaner.java", "Jsoup.java"] +min_one_of = 1 +min_candidates = 2 +judgment = "Distinct declaration anchors are recorded for this unqualified name; require candidates rather than silently choosing." + +[[repository.question]] +id = "jsoup-holdout-negative" +kind = "negative" +subject = "Reject absent exact symbol HeldoutAbsentJsoupSymbol8197" +compass = ["search", "HeldoutAbsentJsoupSymbol8197"] +graphify = ["explain", "HeldoutAbsentJsoupSymbol8197"] +expect = "no_match" +judgment = "The exact sentinel is absent from the pinned checkout; a convenient fuzzy substitute is not a correct answer." + +[[repository.question]] +id = "jsoup-holdout-broad" +kind = "broad" +subject = "how is body HTML validated against a safelist" +compass = ["query", "how is body HTML validated against a safelist"] +graphify = ["query", "how is body HTML validated against a safelist"] +expect = "answer" +required = ["isValidBodyHtml"] +budget_tokens = 600 +max_follow_ups = 3 +judgment = "The reviewed primary declaration implements this task. Required name presence is only a recall proxy, not whole-answer correctness." + +[[repository.question]] +id = "jsoup-holdout-ask-callers" +kind = "callers" +subject = "who calls copySafeNodes" +compass = ["ask", "who calls copySafeNodes", "--text-budget", "2000"] +graphify = ["query", "who calls copySafeNodes", "--budget", "2000"] +expect = "answer" +required = ["isValidBodyHtml", "Cleaner.java"] +judgment = "Same incoming-call task as direct callers, through each product natural-language entry point; separately inspect subject and direction before a correctness claim." + +[[repository]] +name = "redux" +language = "TypeScript" +url = "https://github.com/reduxjs/redux.git" +commit = "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e" + +[[repository.anchor]] +file = "src/createStore.ts" +line = 201 +symbol = "subscribe" +judgment = "Source declaration: function subscribe(listener: () => void) {" + +[[repository.anchor]] +file = "src/createStore.ts" +line = 355 +symbol = "subscribe" +judgment = "Source declaration: subscribe(observer: unknown) {" + +[[repository.anchor]] +file = "src/utils/isAction.ts" +line = 4 +symbol = "isAction" +judgment = "Source declaration: export default function isAction(action: unknown): action is Action {" + +[[repository.anchor]] +file = "src/utils/isPlainObject.ts" +line = 5 +symbol = "isPlainObject" +judgment = "Source declaration: export default function isPlainObject(obj: any): obj is object {" + +[[repository.anchor]] +file = "src/utils/kindOf.ts" +line = 2 +symbol = "miniKindOf" +judgment = "Source declaration: export function miniKindOf(val: any): string {" + +[[repository.anchor]] +file = "src/utils/kindOf.ts" +line = 40 +symbol = "ctorName" +judgment = "Source declaration: function ctorName(val: any): string | null {" + +[[repository.anchor]] +file = "src/utils/kindOf.ts" +line = 44 +symbol = "isError" +judgment = "Source declaration: function isError(val: any) {" + +[[repository.anchor]] +file = "src/utils/kindOf.ts" +line = 53 +symbol = "isDate" +judgment = "Source declaration: function isDate(val: any) {" + +[[repository.anchor]] +file = "src/utils/kindOf.ts" +line = 62 +symbol = "kindOf" +judgment = "Source declaration: export function kindOf(val: any) {" + +[[repository.question]] +id = "redux-holdout-explain-primary" +kind = "explain" +subject = "Locate miniKindOf declaration" +compass = ["explain", "miniKindOf"] +graphify = ["explain", "miniKindOf"] +expect = "answer" +required = ["src/utils/kindOf.ts", "2"] +judgment = "src/utils/kindOf.ts:2: export function miniKindOf(val: any): string {" + +[[repository.question]] +id = "redux-holdout-explain-target" +kind = "explain" +subject = "Locate ctorName declaration" +compass = ["explain", "ctorName"] +graphify = ["explain", "ctorName"] +expect = "answer" +required = ["src/utils/kindOf.ts", "40"] +judgment = "src/utils/kindOf.ts:40: function ctorName(val: any): string | null {" + +[[repository.question]] +id = "redux-holdout-callers" +kind = "callers" +subject = "Direct callers of ctorName" +compass = ["callers", "ctorName"] +graphify = ["affected", "ctorName", "--depth", "1"] +expect = "answer" +required = ["miniKindOf", "kindOf.ts"] +judgment = "miniKindOf directly calls ctorName; source occurrences are recorded separately." + +[[repository.question]] +id = "redux-holdout-callees" +kind = "callees" +subject = "Direct internal callees of miniKindOf" +compass = ["callees", "miniKindOf"] +graphify = ["explain", "miniKindOf"] +expect = "answer" +required = ["isDate", "isError", "ctorName"] +judgment = "Reviewed lexical body calls; source witnesses disambiguate selected endpoints." + +[[repository.question]] +id = "redux-holdout-path-forward" +kind = "path" +subject = "Undirected navigation from miniKindOf to ctorName" +compass = ["path", "miniKindOf", "ctorName"] +graphify = ["path", "miniKindOf", "ctorName", "--undirected"] +expect = "answer" +required = ["miniKindOf", "ctorName"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at src/utils/kindOf.ts:21; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "redux-holdout-path-reverse" +kind = "path" +subject = "Undirected navigation from ctorName to miniKindOf" +compass = ["path", "ctorName", "miniKindOf"] +graphify = ["path", "ctorName", "miniKindOf", "--undirected"] +expect = "answer" +required = ["ctorName", "miniKindOf"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at src/utils/kindOf.ts:21; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "redux-holdout-file-path" +kind = "file_path" +subject = "Connect src/utils/isAction.ts and src/utils/isPlainObject.ts" +compass = ["path", "src/utils/isAction.ts", "src/utils/isPlainObject.ts"] +graphify = ["path", "src/utils/isAction.ts", "src/utils/isPlainObject.ts", "--undirected"] +expect = "answer" +required = ["isAction.ts", "isPlainObject.ts"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "The reviewed files contain a direct internal call/import or re-export relationship; no particular intermediate file route is prescribed." + +[[repository.question]] +id = "redux-holdout-ambiguity" +kind = "ambiguity" +subject = "Distinguish same-named subscribe declarations" +compass = ["search", "subscribe"] +graphify = ["explain", "subscribe"] +expect = "pick_list" +required_one_of = ["createStore.ts"] +min_one_of = 1 +min_candidates = 2 +judgment = "Distinct declaration anchors are recorded for this unqualified name; require candidates rather than silently choosing." + +[[repository.question]] +id = "redux-holdout-negative" +kind = "negative" +subject = "Reject absent exact symbol HeldoutAbsentReduxSymbol8197" +compass = ["search", "HeldoutAbsentReduxSymbol8197"] +graphify = ["explain", "HeldoutAbsentReduxSymbol8197"] +expect = "no_match" +judgment = "The exact sentinel is absent from the pinned checkout; a convenient fuzzy substitute is not a correct answer." + +[[repository.question]] +id = "redux-holdout-broad" +kind = "broad" +subject = "how is the kind of a value detected" +compass = ["query", "how is the kind of a value detected"] +graphify = ["query", "how is the kind of a value detected"] +expect = "answer" +required = ["miniKindOf"] +budget_tokens = 600 +max_follow_ups = 3 +judgment = "The reviewed primary declaration implements this task. Required name presence is only a recall proxy, not whole-answer correctness." + +[[repository.question]] +id = "redux-holdout-ask-callers" +kind = "callers" +subject = "who calls ctorName" +compass = ["ask", "who calls ctorName", "--text-budget", "2000"] +graphify = ["query", "who calls ctorName", "--budget", "2000"] +expect = "answer" +required = ["miniKindOf", "kindOf.ts"] +judgment = "Same incoming-call task as direct callers, through each product natural-language entry point; separately inspect subject and direction before a correctness claim." + +[[repository]] +name = "walkdir" +language = "Rust" +url = "https://github.com/BurntSushi/walkdir.git" +commit = "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec" + +[[repository.anchor]] +file = "src/dent.rs" +line = 77 +symbol = "path" +judgment = "Source declaration: pub fn path(&self) -> &Path {" + +[[repository.anchor]] +file = "src/error.rs" +line = 46 +symbol = "path" +judgment = "Source declaration: pub fn path(&self) -> Option<&Path> {" + +[[repository.anchor]] +file = "src/lib.rs" +line = 417 +symbol = "sort_by" +judgment = "Source declaration: pub fn sort_by(mut self, cmp: F) -> Self" + +[[repository.anchor]] +file = "src/lib.rs" +line = 439 +symbol = "sort_by_key" +judgment = "Source declaration: pub fn sort_by_key(self, mut cmp: F) -> Self" + +[[repository.anchor]] +file = "src/lib.rs" +line = 456 +symbol = "sort_by_file_name" +judgment = "Source declaration: pub fn sort_by_file_name(self) -> Self {" + +[[repository.anchor]] +file = "src/lib.rs" +line = 687 +symbol = "next" +judgment = "Source declaration: fn next(&mut self) -> Option> {" + +[[repository.anchor]] +file = "src/lib.rs" +line = 950 +symbol = "pop" +judgment = "Source declaration: fn pop(&mut self) {" + +[[repository.question]] +id = "walkdir-holdout-explain-primary" +kind = "explain" +subject = "Locate sort_by_file_name declaration" +compass = ["explain", "sort_by_file_name"] +graphify = ["explain", "sort_by_file_name"] +expect = "answer" +required = ["src/lib.rs", "456"] +judgment = "src/lib.rs:456: pub fn sort_by_file_name(self) -> Self {" + +[[repository.question]] +id = "walkdir-holdout-explain-target" +kind = "explain" +subject = "Locate sort_by declaration" +compass = ["explain", "sort_by"] +graphify = ["explain", "sort_by"] +expect = "answer" +required = ["src/lib.rs", "417"] +judgment = "src/lib.rs:417: pub fn sort_by(mut self, cmp: F) -> Self" + +[[repository.question]] +id = "walkdir-holdout-callers" +kind = "callers" +subject = "Direct callers of sort_by" +compass = ["callers", "sort_by"] +graphify = ["affected", "sort_by", "--depth", "1"] +expect = "answer" +required = ["sort_by_file_name", "lib.rs"] +judgment = "sort_by_file_name directly calls sort_by; source occurrences are recorded separately." + +[[repository.question]] +id = "walkdir-holdout-callees" +kind = "callees" +subject = "Direct internal callees of sort_by_file_name" +compass = ["callees", "sort_by_file_name"] +graphify = ["explain", "sort_by_file_name"] +expect = "answer" +required = ["sort_by"] +judgment = "Reviewed lexical body calls; source witnesses disambiguate selected endpoints." + +[[repository.question]] +id = "walkdir-holdout-path-forward" +kind = "path" +subject = "Undirected navigation from sort_by_file_name to sort_by" +compass = ["path", "sort_by_file_name", "sort_by"] +graphify = ["path", "sort_by_file_name", "sort_by", "--undirected"] +expect = "answer" +required = ["sort_by_file_name", "sort_by"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at src/lib.rs:457; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "walkdir-holdout-path-reverse" +kind = "path" +subject = "Undirected navigation from sort_by to sort_by_file_name" +compass = ["path", "sort_by", "sort_by_file_name"] +graphify = ["path", "sort_by", "sort_by_file_name", "--undirected"] +expect = "answer" +required = ["sort_by", "sort_by_file_name"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "A direct call occurs at src/lib.rs:457; reverse traversal must preserve the stored call direction." + +[[repository.question]] +id = "walkdir-holdout-file-path" +kind = "file_path" +subject = "Connect src/lib.rs and src/dent.rs" +compass = ["path", "src/lib.rs", "src/dent.rs"] +graphify = ["path", "src/lib.rs", "src/dent.rs", "--undirected"] +expect = "answer" +required = ["lib.rs", "dent.rs"] +forbidden = ["NO PATH FOUND", "No path found", "No directed path found"] +judgment = "The reviewed files contain a direct internal call/import or re-export relationship; no particular intermediate file route is prescribed." + +[[repository.question]] +id = "walkdir-holdout-ambiguity" +kind = "ambiguity" +subject = "Distinguish same-named path declarations" +compass = ["search", "path"] +graphify = ["explain", "path"] +expect = "pick_list" +required_one_of = ["dent.rs", "error.rs"] +min_one_of = 1 +min_candidates = 2 +judgment = "Distinct declaration anchors are recorded for this unqualified name; require candidates rather than silently choosing." + +[[repository.question]] +id = "walkdir-holdout-negative" +kind = "negative" +subject = "Reject absent exact symbol HeldoutAbsentWalkdirSymbol8197" +compass = ["search", "HeldoutAbsentWalkdirSymbol8197"] +graphify = ["explain", "HeldoutAbsentWalkdirSymbol8197"] +expect = "no_match" +judgment = "The exact sentinel is absent from the pinned checkout; a convenient fuzzy substitute is not a correct answer." + +[[repository.question]] +id = "walkdir-holdout-broad" +kind = "broad" +subject = "how are directory entries sorted by file name" +compass = ["query", "how are directory entries sorted by file name"] +graphify = ["query", "how are directory entries sorted by file name"] +expect = "answer" +required = ["sort_by_file_name"] +budget_tokens = 600 +max_follow_ups = 3 +judgment = "The reviewed primary declaration implements this task. Required name presence is only a recall proxy, not whole-answer correctness." + +[[repository.question]] +id = "walkdir-holdout-ask-callers" +kind = "callers" +subject = "who calls sort_by" +compass = ["ask", "who calls sort_by", "--text-budget", "2000"] +graphify = ["query", "who calls sort_by", "--budget", "2000"] +expect = "answer" +required = ["sort_by_file_name", "lib.rs"] +judgment = "Same incoming-call task as direct callers, through each product natural-language entry point; separately inspect subject and direction before a correctness claim." diff --git a/benchmarks/agent_query/suite_mcp.json b/benchmarks/agent_query/suite_mcp.json new file mode 100644 index 000000000..33814e20a --- /dev/null +++ b/benchmarks/agent_query/suite_mcp.json @@ -0,0 +1,20 @@ +{ + "schema": "compass.mcp-comparison-inputs/1", + "scope": "Development comparison on the existing five pinned repository graphs. Graph consistency, source correctness, and design quality are separate. Inputs are committed before these MCP questions execute.", + "policy": { + "god_nodes": "Return top 10 hubs. Independently check displayed degree against distinct stored directed endpoint pairs, counting self-loops twice. Ambiguous labels do not verify identity. Report source-backed declarations separately; degree does not prove a god-object defect.", + "get_community": "Return every member of the largest stored community; break size ties by smallest numeric ID. Compare the exact multiset of displayed labels and source files with that tool's graph. Different partitions are allowed. Also query a community ID above the stored maximum and require not found.", + "get_neighbors": "Return calls adjacent to the exact source declaration identified below, using its tool-specific exact ID as input. Compare distinct direction/neighbor/relation triples with stored calls. Separately report repeated-site information and ambiguous labels. ID lookup is preparation, not a measured retrieval success.", + "ambiguous_neighbors": "The same unqualified label denotes multiple source declarations. Require explicit ambiguity or a candidate list; selecting one neighbor list silently fails.", + "graph_stats": "Compare node and community counts with the captured graph, and edge count with stored edge records. Report representation discrepancies rather than treating more edges as better.", + "bounds": "60 seconds per RPC; 16 MiB per response/stderr and 64 MiB per session. For full membership/neighbor enumeration, Graphify receives token_budget=262144; Compass exposes no equivalent option. Record truncation, requested bounds, actual text bytes, and protocol overhead separately. This arm measures complete enumeration, not equal 2000-token answers.", + "source_review": "Review every returned hub identity for source location and inspect its declared role. Review neighbor call directions against the previously reviewed source facts. Functional cluster and god-object judgments remain separate and cannot be inferred from consistency scores." + }, + "repositories": [ + {"name":"cobra", "file":"command.go", "line":757, "symbol":"Find", "sourceText":"func (c *Command) Find(", "ambiguousLabel":null}, + {"name":"flask", "file":"src/flask/app.py", "line":995, "symbol":"full_dispatch_request", "sourceText":"def full_dispatch_request(", "ambiguousLabel":"url_for"}, + {"name":"gson", "file":"gson/src/main/java/com/google/gson/Gson.java", "line":797, "symbol":"newJsonWriter", "sourceText":"public JsonWriter newJsonWriter(", "ambiguousLabel":"toJson"}, + {"name":"zod", "file":"packages/zod/src/v4/classic/from-json-schema.ts", "line":105, "symbol":"detectVersion", "sourceText":"function detectVersion(", "ambiguousLabel":"safeParse"}, + {"name":"axum", "file":"src/routing/path_router.rs", "line":22, "symbol":"validate_path", "sourceText":"fn validate_path(", "ambiguousLabel":"with_state"} + ] +} diff --git a/benchmarks/agent_query/suite_mcp_panel_a.json b/benchmarks/agent_query/suite_mcp_panel_a.json new file mode 100644 index 000000000..6d4ba25c5 --- /dev/null +++ b/benchmarks/agent_query/suite_mcp_panel_a.json @@ -0,0 +1,65 @@ +{ + "schema": "compass.mcp-comparison-inputs/1", + "scope": "Development MCP extension on panel A after its CLI outputs were observed. Use original frozen panel-A graphs and the hub-evidence Compass binary; commit these questions before MCP execution. Prepared IDs are not scored as node retrieval. Counts and membership measure stored-graph consistency, not source precision, functional community quality, or god-object diagnosis.", + "policy": { + "god_nodes": "Return top 10 hubs. Independently check displayed degree against distinct stored directed endpoint pairs, counting self-loops twice. Ambiguous labels do not verify identity. Report source-backed declarations separately; degree does not prove a god-object defect.", + "get_community": "Return every member of the largest stored community; break size ties by smallest numeric ID. Compare the exact multiset of displayed labels and source files with that tool's graph. Different partitions are allowed. Also query a community ID above the stored maximum and require not found.", + "get_neighbors": "Return calls adjacent to the exact source declaration identified below, using its tool-specific exact ID as input. Compare distinct direction/neighbor/relation triples with stored calls. Separately report repeated-site information and ambiguous labels. ID lookup is preparation, not a measured retrieval success.", + "ambiguous_neighbors": "The same unqualified label denotes multiple source declarations. Require explicit ambiguity or a candidate list; selecting one neighbor list silently fails.", + "graph_stats": "Compare node and community counts with the captured graph, and edge count with stored edge records. Report representation discrepancies rather than treating more edges as better.", + "bounds": "60 seconds per RPC; 16 MiB per response/stderr and 64 MiB per session. For full membership/neighbor enumeration, Graphify receives token_budget=262144; Compass exposes no equivalent option. Record truncation, requested bounds, actual text bytes, and protocol overhead separately. This arm measures complete enumeration, not equal 2000-token answers.", + "source_review": "Review every returned hub identity for source location and inspect its declared role. Review neighbor call directions against the previously reviewed source facts. Functional cluster and god-object judgments remain separate and cannot be inferred from consistency scores." + }, + "repositories": [ + { + "name": "chi", + "commit": "3d1777a1ef8881f7d1da0b02c76ca8f0a29cd2bc", + "file": "context.go", + "line": 16, + "symbol": "URLParamFromCtx", + "sourceText": "func URLParamFromCtx(ctx context.Context, key string) string {", + "sourceFileSha256": "b19edcca252e2fe74e82802c4c7ce1a1c0855728f9ede1288f0224283dfc7e53", + "ambiguousLabel": "URLParam" + }, + { + "name": "click", + "commit": "06b2a678741131fd577ce170e23e5ca0aeba0309", + "file": "src/click/_compat.py", + "line": 374, + "symbol": "open_stream", + "sourceText": "def open_stream(", + "sourceFileSha256": "8db1da2965cf3e5dc66c6c53833cbc613ea1cd2440b9d0eb6aa8360eb46d4913", + "ambiguousLabel": "close" + }, + { + "name": "jsoup", + "commit": "37aea49902972cec9a53dc2c65023729f1c3715b", + "file": "src/main/java/org/jsoup/safety/Cleaner.java", + "line": 124, + "symbol": "isValidBodyHtml", + "sourceText": "public boolean isValidBodyHtml(String bodyHtml) {", + "sourceFileSha256": "7116b40cb8be432493dff5eea6cee4e774867b08c04cc04157b8137d97102a0d", + "ambiguousLabel": "isValid" + }, + { + "name": "redux", + "commit": "3ae0f79bdcce35ac2a4895e284ef04b7dc0ebd5e", + "file": "src/createStore.ts", + "line": 201, + "symbol": "subscribe", + "sourceText": "function subscribe(listener: () => void) {", + "sourceFileSha256": "4dc8195c8fb1cceb8bd182b1469eaf4978049a767f00b4558c1ddb9c1b398695", + "ambiguousLabel": "subscribe" + }, + { + "name": "walkdir", + "commit": "6fd031c82ba5a4204b4ce6eae73dacb00dc072ec", + "file": "src/lib.rs", + "line": 456, + "symbol": "sort_by_file_name", + "sourceText": "pub fn sort_by_file_name(self) -> Self {", + "sourceFileSha256": "3f7d673f9e278a71de2cb5f90353a44ea7803a98d49c2f72a68cb26dce8c966a", + "ambiguousLabel": "sort_by" + } + ] +} diff --git a/benchmarks/agent_query/suite_mcp_path_labels.json b/benchmarks/agent_query/suite_mcp_path_labels.json new file mode 100644 index 000000000..7795f3aca --- /dev/null +++ b/benchmarks/agent_query/suite_mcp_path_labels.json @@ -0,0 +1,916 @@ +{ + "schema": "compass.mcp-comparison-inputs/1", + "scope": "Development label-input path arm added after the exact-ID diagnostic exposed Graphify endpoint substitution. Uses the same source-reviewed positive endpoint pairs and bounds, with each graph display label as input. This separates public label behavior from the exact-ID defect; not held-out evidence.", + "policy": { + "positive": "Verify actual ordered node chain, stored edge relation and displayed direction, and minimum hop distance. Ambiguous display labels leave identity unverified. Separately compare the reviewed source witness.", + "hop-limit": "No positive path beyond max_hops; an explicit bound outcome is not global disconnection.", + "missing": "Unknown endpoint must remain unresolved, not match a convenient fuzzy node.", + "ambiguous": "At least two exact terminal-label declarations match. Refuse to choose; a warning followed by a path is not preserved ambiguity.", + "disconnected": "A symmetrically selected source-anchored pair lies in different undirected components in each graph. Require no path; no graph modification or synthetic fixture.", + "bounds": "Same 60-second/16-MiB-RPC and 64-MiB-session limits. max_hops=8 for positives, ambiguity, missing, and disconnected; one fewer than the shorter stored distance for the bound case. Graphify gets undirected=true; Compass currently exposes undirected navigation only." + }, + "repositories": [ + { + "name": "cobra", + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "file": "command.go", + "line": 757, + "sourceText": "func (c *Command) Find(", + "graphSha256": { + "compass": "6f862024bd68b88b734a43421a21cc2074a94ab7d68cc8857d59609112c9c7db", + "graphify": "218aa21e02fad4506206c34acfc6d9ff58a2a0052615d92e4377c74bf977a937" + }, + "anchors": [ + { + "file": "command.go", + "line": 757, + "text": "func (c *Command) Find(", + "labels": [ + ".Find()" + ] + }, + { + "file": "args.go", + "line": 28, + "text": "func legacyArgs(", + "labels": [ + "legacyArgs()" + ] + } + ], + "pathQuestions": [ + { + "id": "path-label-forward", + "arguments": { + "compass": { + "source": ".Find()", + "target": "legacyArgs()", + "max_hops": 8 + }, + "graphify": { + "source": ".Find()", + "target": "legacyArgs()", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "sourceWitness": { + "repository": "cobra", + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "question": "cobra2-path-find-legacyargs", + "category": "call", + "nodes": [ + { + "file": "command.go", + "line": 757, + "text": "func (c *Command) Find(", + "labels": [ + ".Find()" + ] + }, + { + "file": "args.go", + "line": 28, + "text": "func legacyArgs(", + "labels": [ + "legacyArgs()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "command.go", + "line": 776, + "text": "legacyArgs(commandFound, stripFlags(a, commandFound))" + } + } + ] + }, + "endpointIds": { + "compass": [ + "sha256:caa6cf6216cb2dae7b47b44982140343a1204532221f6c393aabb4db55e9e1d8", + "sha256:77f4b61d6489e81ebd6fa1c0b0cce4fe02802d648c0b872c3d0d7c4b970e8de5" + ], + "graphify": [ + "cobra_command_find", + "args_legacyargs" + ] + } + } + }, + { + "id": "path-label-reverse", + "arguments": { + "compass": { + "source": "legacyArgs()", + "target": ".Find()", + "max_hops": 8 + }, + "graphify": { + "source": "legacyArgs()", + "target": ".Find()", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "endpointIds": { + "compass": [ + "sha256:77f4b61d6489e81ebd6fa1c0b0cce4fe02802d648c0b872c3d0d7c4b970e8de5", + "sha256:caa6cf6216cb2dae7b47b44982140343a1204532221f6c393aabb4db55e9e1d8" + ], + "graphify": [ + "args_legacyargs", + "cobra_command_find" + ] + } + } + }, + { + "id": "path-label-hop-limit", + "arguments": { + "compass": { + "source": ".Find()", + "target": "legacyArgs()", + "max_hops": 0 + }, + "graphify": { + "source": ".Find()", + "target": "legacyArgs()", + "max_hops": 0, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 1, + "graphify": 1 + }, + "endpointIds": { + "compass": [ + "sha256:caa6cf6216cb2dae7b47b44982140343a1204532221f6c393aabb4db55e9e1d8", + "sha256:77f4b61d6489e81ebd6fa1c0b0cce4fe02802d648c0b872c3d0d7c4b970e8de5" + ], + "graphify": [ + "cobra_command_find", + "args_legacyargs" + ] + } + } + } + ] + }, + { + "name": "flask", + "commit": "d73fa1cdcbd8b1465c151db8924ba58b1dd14e35", + "file": "src/flask/app.py", + "line": 995, + "sourceText": "def full_dispatch_request(", + "graphSha256": { + "compass": "227fe2d1f74cf835caa3ec15897f05544832fbf7f394e1c02e5134101a07c3ad", + "graphify": "ca35435af286c5c565fc66f55de569c2e3235f75c902182290ee15603ff103cc" + }, + "anchors": [ + { + "file": "src/flask/app.py", + "line": 995, + "text": "def full_dispatch_request(", + "labels": [ + ".full_dispatch_request()" + ] + }, + { + "file": "src/flask/app.py", + "line": 1024, + "text": "def finalize_request(", + "labels": [ + ".finalize_request()" + ] + }, + { + "file": "docs/conf.py", + "line": 1, + "text": "import packaging.version" + }, + { + "file": "examples/celery/make_celery.py", + "line": 1, + "text": "from task_app import create_app" + } + ], + "pathQuestions": [ + { + "id": "path-label-forward", + "arguments": { + "compass": { + "source": ".full_dispatch_request()", + "target": ".finalize_request()", + "max_hops": 8 + }, + "graphify": { + "source": ".full_dispatch_request()", + "target": ".finalize_request()", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "sourceWitness": { + "repository": "flask", + "commit": "d73fa1cdcbd8b1465c151db8924ba58b1dd14e35", + "question": "flask2-path-fulldispatch-finalize", + "category": "call", + "nodes": [ + { + "file": "src/flask/app.py", + "line": 995, + "text": "def full_dispatch_request(", + "labels": [ + ".full_dispatch_request()" + ] + }, + { + "file": "src/flask/app.py", + "line": 1024, + "text": "def finalize_request(", + "labels": [ + ".finalize_request()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/flask/app.py", + "line": 1022, + "text": "self.finalize_request(ctx, rv)" + } + } + ] + }, + "endpointIds": { + "compass": [ + "sha256:afb60b148d2acb75824b381e59be62fa72cdb6443730e29b942ce2d8a4ead0d5", + "sha256:4fee624450db1903a6292eeba05c2ae2932efb632a554d032f01926c6a909baf" + ], + "graphify": [ + "src_flask_app_flask_full_dispatch_request", + "src_flask_app_flask_finalize_request" + ] + } + } + }, + { + "id": "path-label-reverse", + "arguments": { + "compass": { + "source": ".finalize_request()", + "target": ".full_dispatch_request()", + "max_hops": 8 + }, + "graphify": { + "source": ".finalize_request()", + "target": ".full_dispatch_request()", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "endpointIds": { + "compass": [ + "sha256:4fee624450db1903a6292eeba05c2ae2932efb632a554d032f01926c6a909baf", + "sha256:afb60b148d2acb75824b381e59be62fa72cdb6443730e29b942ce2d8a4ead0d5" + ], + "graphify": [ + "src_flask_app_flask_finalize_request", + "src_flask_app_flask_full_dispatch_request" + ] + } + } + }, + { + "id": "path-label-hop-limit", + "arguments": { + "compass": { + "source": ".full_dispatch_request()", + "target": ".finalize_request()", + "max_hops": 0 + }, + "graphify": { + "source": ".full_dispatch_request()", + "target": ".finalize_request()", + "max_hops": 0, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 1, + "graphify": 1 + }, + "endpointIds": { + "compass": [ + "sha256:afb60b148d2acb75824b381e59be62fa72cdb6443730e29b942ce2d8a4ead0d5", + "sha256:4fee624450db1903a6292eeba05c2ae2932efb632a554d032f01926c6a909baf" + ], + "graphify": [ + "src_flask_app_flask_full_dispatch_request", + "src_flask_app_flask_finalize_request" + ] + } + } + } + ] + }, + { + "name": "gson", + "commit": "15ca7360379cf3c1502b59981569050489f2d73e", + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "sourceText": "public JsonWriter newJsonWriter(", + "graphSha256": { + "compass": "5856ddc99ec4025c9e36d128783e6e7393f45af76f617caa38fd6938aca23ea7", + "graphify": "92471ab8f5bb5d34aedddd2263fa24a43ae4ed31b34d06c8d433fe0f0dada447" + }, + "anchors": [ + { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "text": "public JsonWriter newJsonWriter(", + "labels": [ + ".newJsonWriter()" + ] + }, + { + "file": "gson/src/main/java/com/google/gson/stream/JsonWriter.java", + "line": 162, + "text": "public class JsonWriter", + "labels": [ + "JsonWriter" + ] + }, + { + "file": "extras/src/main/java/com/google/gson/extras/examples/rawcollections/RawCollectionsExample.java", + "line": 1, + "text": "/*" + }, + { + "file": "gson/src/main/java/com/google/gson/annotations/package-info.java", + "line": 1, + "text": "/*" + } + ], + "pathQuestions": [ + { + "id": "path-label-forward", + "arguments": { + "compass": { + "source": ".newJsonWriter()", + "target": "JsonWriter", + "max_hops": 8 + }, + "graphify": { + "source": ".newJsonWriter()", + "target": "JsonWriter", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "sourceWitness": { + "repository": "gson", + "commit": "15ca7360379cf3c1502b59981569050489f2d73e", + "question": "gson2-path-newjsonwriter-jsonwriter", + "category": "construction-reference", + "nodes": [ + { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "text": "public JsonWriter newJsonWriter(", + "labels": [ + ".newJsonWriter()" + ] + }, + { + "file": "gson/src/main/java/com/google/gson/stream/JsonWriter.java", + "line": 162, + "text": "public class JsonWriter", + "labels": [ + "JsonWriter" + ] + } + ], + "steps": [ + { + "relations": [ + "instantiates", + "references" + ], + "direction": "forward", + "sitesByRelation": { + "instantiates": { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 801, + "text": "new JsonWriter(writer)" + }, + "references": { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "text": "public JsonWriter newJsonWriter(" + } + } + } + ] + }, + "endpointIds": { + "compass": [ + "sha256:64e3ea7fc1f10444bca6ebed48973575a302fb826ba05905c6fe904323930fb1", + "sha256:2222e85b9b69a13e38de1c9654b1ce8a86e75815310c570ee793038eab5017b8" + ], + "graphify": [ + "gson_src_main_java_com_google_gson_gson_gson_newjsonwriter", + "gson_src_main_java_com_google_gson_stream_jsonwriter_jsonwriter" + ] + } + } + }, + { + "id": "path-label-reverse", + "arguments": { + "compass": { + "source": "JsonWriter", + "target": ".newJsonWriter()", + "max_hops": 8 + }, + "graphify": { + "source": "JsonWriter", + "target": ".newJsonWriter()", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "endpointIds": { + "compass": [ + "sha256:2222e85b9b69a13e38de1c9654b1ce8a86e75815310c570ee793038eab5017b8", + "sha256:64e3ea7fc1f10444bca6ebed48973575a302fb826ba05905c6fe904323930fb1" + ], + "graphify": [ + "gson_src_main_java_com_google_gson_stream_jsonwriter_jsonwriter", + "gson_src_main_java_com_google_gson_gson_gson_newjsonwriter" + ] + } + } + }, + { + "id": "path-label-hop-limit", + "arguments": { + "compass": { + "source": ".newJsonWriter()", + "target": "JsonWriter", + "max_hops": 0 + }, + "graphify": { + "source": ".newJsonWriter()", + "target": "JsonWriter", + "max_hops": 0, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 1, + "graphify": 1 + }, + "endpointIds": { + "compass": [ + "sha256:64e3ea7fc1f10444bca6ebed48973575a302fb826ba05905c6fe904323930fb1", + "sha256:2222e85b9b69a13e38de1c9654b1ce8a86e75815310c570ee793038eab5017b8" + ], + "graphify": [ + "gson_src_main_java_com_google_gson_gson_gson_newjsonwriter", + "gson_src_main_java_com_google_gson_stream_jsonwriter_jsonwriter" + ] + } + } + } + ] + }, + { + "name": "zod", + "commit": "d2b135cfb7a3582b9eb515756b9166bcb9521f4a", + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 105, + "sourceText": "function detectVersion(", + "graphSha256": { + "compass": "e33192de01f403cfde6c0030ba219c8e24fd26b561b984b6b710a46b3cc981e8", + "graphify": "c0f6d021616326da6b7daf5105b3b996c0bb4ba17c0bf54a062f2e692147b01a" + }, + "anchors": [ + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 105, + "text": "function detectVersion(", + "labels": [ + "detectVersion()" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 1, + "text": "", + "labels": [ + "from-json-schema", + "from-json-schema.ts" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 808, + "text": "function convertSchema(", + "labels": [ + "convertSchema()" + ] + }, + { + "file": ".claude/skills/triage/scripts/reindex.mjs", + "line": 17, + "text": "const dir = join(root, \".triage\", kind);" + }, + { + "file": ".configs/tsconfig.base.json", + "line": 1, + "text": "{" + } + ], + "pathQuestions": [ + { + "id": "path-label-forward", + "arguments": { + "compass": { + "source": "detectVersion()", + "target": "convertSchema()", + "max_hops": 8 + }, + "graphify": { + "source": "detectVersion()", + "target": "convertSchema()", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 2, + "graphify": 2 + }, + "sourceWitness": { + "repository": "zod", + "commit": "d2b135cfb7a3582b9eb515756b9166bcb9521f4a", + "question": "zod2-path-detectversion-convertschema", + "category": "file-containment", + "nodes": [ + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 105, + "text": "function detectVersion(", + "labels": [ + "detectVersion()" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 1, + "text": "", + "labels": [ + "from-json-schema", + "from-json-schema.ts" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 808, + "text": "function convertSchema(", + "labels": [ + "convertSchema()" + ] + } + ], + "steps": [ + { + "relations": [ + "contains" + ], + "direction": "reverse" + }, + { + "relations": [ + "contains" + ], + "direction": "forward" + } + ] + }, + "endpointIds": { + "compass": [ + "sha256:a2ac366671d620c9721b85a975ca31e89ac2d076ceeb83b2aa9071a6611f7843", + "sha256:c24727f300fe1110afad52b8dae8fa5921e84d5471f2e144ce6724af95d3f674" + ], + "graphify": [ + "packages_zod_src_v4_classic_from_json_schema_detectversion", + "packages_zod_src_v4_classic_from_json_schema_convertschema" + ] + } + } + }, + { + "id": "path-label-reverse", + "arguments": { + "compass": { + "source": "convertSchema()", + "target": "detectVersion()", + "max_hops": 8 + }, + "graphify": { + "source": "convertSchema()", + "target": "detectVersion()", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 2, + "graphify": 2 + }, + "endpointIds": { + "compass": [ + "sha256:c24727f300fe1110afad52b8dae8fa5921e84d5471f2e144ce6724af95d3f674", + "sha256:a2ac366671d620c9721b85a975ca31e89ac2d076ceeb83b2aa9071a6611f7843" + ], + "graphify": [ + "packages_zod_src_v4_classic_from_json_schema_convertschema", + "packages_zod_src_v4_classic_from_json_schema_detectversion" + ] + } + } + }, + { + "id": "path-label-hop-limit", + "arguments": { + "compass": { + "source": "detectVersion()", + "target": "convertSchema()", + "max_hops": 1 + }, + "graphify": { + "source": "detectVersion()", + "target": "convertSchema()", + "max_hops": 1, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 2, + "graphify": 2 + }, + "endpointIds": { + "compass": [ + "sha256:a2ac366671d620c9721b85a975ca31e89ac2d076ceeb83b2aa9071a6611f7843", + "sha256:c24727f300fe1110afad52b8dae8fa5921e84d5471f2e144ce6724af95d3f674" + ], + "graphify": [ + "packages_zod_src_v4_classic_from_json_schema_detectversion", + "packages_zod_src_v4_classic_from_json_schema_convertschema" + ] + } + } + } + ] + }, + { + "name": "axum", + "commit": "af1345b53a259b0990be1ff853f9b56c05040ef7", + "file": "src/routing/path_router.rs", + "line": 22, + "sourceText": "fn validate_path(", + "graphSha256": { + "compass": "2cc12d5060c83389c077e4eade892991fa8f7021b59d8f6f1dc98c14c2109812", + "graphify": "6ed791a771190e98ba2905e08480a9fa6ed733f46d56212ae3a4c90018d79b52" + }, + "anchors": [ + { + "file": "src/routing/path_router.rs", + "line": 22, + "text": "fn validate_path(", + "labels": [ + "validate_path()" + ] + }, + { + "file": "src/routing/path_router.rs", + "line": 36, + "text": "fn validate_v07_paths(", + "labels": [ + "validate_v07_paths()" + ] + }, + { + "file": "benches/benches.rs", + "line": 1, + "text": "#![allow(missing_docs)]" + }, + { + "file": "src/macros.rs", + "line": 1, + "text": "//! Internal macros" + } + ], + "pathQuestions": [ + { + "id": "path-label-forward", + "arguments": { + "compass": { + "source": "validate_path()", + "target": "validate_v07_paths()", + "max_hops": 8 + }, + "graphify": { + "source": "validate_path()", + "target": "validate_v07_paths()", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "sourceWitness": { + "repository": "axum", + "commit": "af1345b53a259b0990be1ff853f9b56c05040ef7", + "question": "axum2-path-validate-v07", + "category": "call", + "nodes": [ + { + "file": "src/routing/path_router.rs", + "line": 22, + "text": "fn validate_path(", + "labels": [ + "validate_path()" + ] + }, + { + "file": "src/routing/path_router.rs", + "line": 36, + "text": "fn validate_v07_paths(", + "labels": [ + "validate_v07_paths()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/routing/path_router.rs", + "line": 30, + "text": "validate_v07_paths(path)?" + } + } + ] + }, + "endpointIds": { + "compass": [ + "sha256:cbc027447c34fee567bd17fffd9fcdf6375504bf7590e421c97bf1be9d0f8efb", + "sha256:85ede979be9c1d48d63310ebfc8ab0785c71b64b196ce83430ada74f3ad0654b" + ], + "graphify": [ + "src_routing_path_router_validate_path", + "src_routing_path_router_validate_v07_paths" + ] + } + } + }, + { + "id": "path-label-reverse", + "arguments": { + "compass": { + "source": "validate_v07_paths()", + "target": "validate_path()", + "max_hops": 8 + }, + "graphify": { + "source": "validate_v07_paths()", + "target": "validate_path()", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "endpointIds": { + "compass": [ + "sha256:85ede979be9c1d48d63310ebfc8ab0785c71b64b196ce83430ada74f3ad0654b", + "sha256:cbc027447c34fee567bd17fffd9fcdf6375504bf7590e421c97bf1be9d0f8efb" + ], + "graphify": [ + "src_routing_path_router_validate_v07_paths", + "src_routing_path_router_validate_path" + ] + } + } + }, + { + "id": "path-label-hop-limit", + "arguments": { + "compass": { + "source": "validate_path()", + "target": "validate_v07_paths()", + "max_hops": 0 + }, + "graphify": { + "source": "validate_path()", + "target": "validate_v07_paths()", + "max_hops": 0, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 1, + "graphify": 1 + }, + "endpointIds": { + "compass": [ + "sha256:cbc027447c34fee567bd17fffd9fcdf6375504bf7590e421c97bf1be9d0f8efb", + "sha256:85ede979be9c1d48d63310ebfc8ab0785c71b64b196ce83430ada74f3ad0654b" + ], + "graphify": [ + "src_routing_path_router_validate_path", + "src_routing_path_router_validate_v07_paths" + ] + } + } + } + ] + } + ] +} diff --git a/benchmarks/agent_query/suite_mcp_paths.json b/benchmarks/agent_query/suite_mcp_paths.json new file mode 100644 index 000000000..c42a9d9c8 --- /dev/null +++ b/benchmarks/agent_query/suite_mcp_paths.json @@ -0,0 +1,1013 @@ +{ + "schema": "compass.mcp-comparison-inputs/1", + "scope": "Development MCP shortest-path comparison on pinned real graphs. Exact IDs are prepared symmetrically from source anchors; this is not measured node retrieval. All tasks use undirected navigation. Disconnected pairs are selected from both graphs and measure graph consistency, not source execution reachability. Previously reviewed positive witnesses remain post-output development witnesses; inputs were written before the first new RPCs but the intended pre-execution commit was prevented by a benchmark-test failure; the first capture is a development diagnostic, not a preregistered run.", + "policy": { + "positive": "Verify actual ordered node chain, stored edge relation and displayed direction, and minimum hop distance. Ambiguous display labels leave identity unverified. Separately compare the reviewed source witness.", + "hop-limit": "No positive path beyond max_hops; an explicit bound outcome is not global disconnection.", + "missing": "Unknown endpoint must remain unresolved, not match a convenient fuzzy node.", + "ambiguous": "At least two exact terminal-label declarations match. Refuse to choose; a warning followed by a path is not preserved ambiguity.", + "disconnected": "A symmetrically selected source-anchored pair lies in different undirected components in each graph. Require no path; no graph modification or synthetic fixture.", + "bounds": "Same 60-second/16-MiB-RPC and 64-MiB-session limits. max_hops=8 for positives, ambiguity, missing, and disconnected; one fewer than the shorter stored distance for the bound case. Graphify gets undirected=true; Compass currently exposes undirected navigation only." + }, + "repositories": [ + { + "name": "cobra", + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "file": "command.go", + "line": 757, + "sourceText": "func (c *Command) Find(", + "graphSha256": { + "compass": "6f862024bd68b88b734a43421a21cc2074a94ab7d68cc8857d59609112c9c7db", + "graphify": "218aa21e02fad4506206c34acfc6d9ff58a2a0052615d92e4377c74bf977a937" + }, + "anchors": [ + { + "file": "command.go", + "line": 757, + "text": "func (c *Command) Find(", + "labels": [ + ".Find()" + ] + }, + { + "file": "args.go", + "line": 28, + "text": "func legacyArgs(", + "labels": [ + "legacyArgs()" + ] + } + ], + "pathQuestions": [ + { + "id": "path-forward", + "arguments": { + "compass": { + "source": "sha256:caa6cf6216cb2dae7b47b44982140343a1204532221f6c393aabb4db55e9e1d8", + "target": "sha256:77f4b61d6489e81ebd6fa1c0b0cce4fe02802d648c0b872c3d0d7c4b970e8de5", + "max_hops": 8 + }, + "graphify": { + "source": "cobra_command_find", + "target": "args_legacyargs", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "sourceWitness": { + "repository": "cobra", + "commit": "adbc8813901bba65827259daa8e22ff94ec1f30e", + "question": "cobra2-path-find-legacyargs", + "category": "call", + "nodes": [ + { + "file": "command.go", + "line": 757, + "text": "func (c *Command) Find(", + "labels": [ + ".Find()" + ] + }, + { + "file": "args.go", + "line": 28, + "text": "func legacyArgs(", + "labels": [ + "legacyArgs()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "command.go", + "line": 776, + "text": "legacyArgs(commandFound, stripFlags(a, commandFound))" + } + } + ] + } + } + }, + { + "id": "path-reverse", + "arguments": { + "compass": { + "source": "sha256:77f4b61d6489e81ebd6fa1c0b0cce4fe02802d648c0b872c3d0d7c4b970e8de5", + "target": "sha256:caa6cf6216cb2dae7b47b44982140343a1204532221f6c393aabb4db55e9e1d8", + "max_hops": 8 + }, + "graphify": { + "source": "args_legacyargs", + "target": "cobra_command_find", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + } + } + }, + { + "id": "path-hop-limit", + "arguments": { + "compass": { + "source": "sha256:caa6cf6216cb2dae7b47b44982140343a1204532221f6c393aabb4db55e9e1d8", + "target": "sha256:77f4b61d6489e81ebd6fa1c0b0cce4fe02802d648c0b872c3d0d7c4b970e8de5", + "max_hops": 0 + }, + "graphify": { + "source": "cobra_command_find", + "target": "args_legacyargs", + "max_hops": 0, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 1, + "graphify": 1 + } + } + }, + { + "id": "path-missing-source", + "arguments": { + "compass": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "sha256:77f4b61d6489e81ebd6fa1c0b0cce4fe02802d648c0b872c3d0d7c4b970e8de5", + "max_hops": 8 + }, + "graphify": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "args_legacyargs", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "unresolved" + } + } + ] + }, + { + "name": "flask", + "commit": "d73fa1cdcbd8b1465c151db8924ba58b1dd14e35", + "file": "src/flask/app.py", + "line": 995, + "sourceText": "def full_dispatch_request(", + "graphSha256": { + "compass": "227fe2d1f74cf835caa3ec15897f05544832fbf7f394e1c02e5134101a07c3ad", + "graphify": "ca35435af286c5c565fc66f55de569c2e3235f75c902182290ee15603ff103cc" + }, + "anchors": [ + { + "file": "src/flask/app.py", + "line": 995, + "text": "def full_dispatch_request(", + "labels": [ + ".full_dispatch_request()" + ] + }, + { + "file": "src/flask/app.py", + "line": 1024, + "text": "def finalize_request(", + "labels": [ + ".finalize_request()" + ] + }, + { + "file": "docs/conf.py", + "line": 1, + "text": "import packaging.version" + }, + { + "file": "examples/celery/make_celery.py", + "line": 1, + "text": "from task_app import create_app" + } + ], + "pathQuestions": [ + { + "id": "path-forward", + "arguments": { + "compass": { + "source": "sha256:afb60b148d2acb75824b381e59be62fa72cdb6443730e29b942ce2d8a4ead0d5", + "target": "sha256:4fee624450db1903a6292eeba05c2ae2932efb632a554d032f01926c6a909baf", + "max_hops": 8 + }, + "graphify": { + "source": "src_flask_app_flask_full_dispatch_request", + "target": "src_flask_app_flask_finalize_request", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "sourceWitness": { + "repository": "flask", + "commit": "d73fa1cdcbd8b1465c151db8924ba58b1dd14e35", + "question": "flask2-path-fulldispatch-finalize", + "category": "call", + "nodes": [ + { + "file": "src/flask/app.py", + "line": 995, + "text": "def full_dispatch_request(", + "labels": [ + ".full_dispatch_request()" + ] + }, + { + "file": "src/flask/app.py", + "line": 1024, + "text": "def finalize_request(", + "labels": [ + ".finalize_request()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/flask/app.py", + "line": 1022, + "text": "self.finalize_request(ctx, rv)" + } + } + ] + } + } + }, + { + "id": "path-reverse", + "arguments": { + "compass": { + "source": "sha256:4fee624450db1903a6292eeba05c2ae2932efb632a554d032f01926c6a909baf", + "target": "sha256:afb60b148d2acb75824b381e59be62fa72cdb6443730e29b942ce2d8a4ead0d5", + "max_hops": 8 + }, + "graphify": { + "source": "src_flask_app_flask_finalize_request", + "target": "src_flask_app_flask_full_dispatch_request", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + } + } + }, + { + "id": "path-hop-limit", + "arguments": { + "compass": { + "source": "sha256:afb60b148d2acb75824b381e59be62fa72cdb6443730e29b942ce2d8a4ead0d5", + "target": "sha256:4fee624450db1903a6292eeba05c2ae2932efb632a554d032f01926c6a909baf", + "max_hops": 0 + }, + "graphify": { + "source": "src_flask_app_flask_full_dispatch_request", + "target": "src_flask_app_flask_finalize_request", + "max_hops": 0, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 1, + "graphify": 1 + } + } + }, + { + "id": "path-missing-source", + "arguments": { + "compass": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "sha256:4fee624450db1903a6292eeba05c2ae2932efb632a554d032f01926c6a909baf", + "max_hops": 8 + }, + "graphify": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "src_flask_app_flask_finalize_request", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "unresolved" + } + }, + { + "id": "path-ambiguous-source", + "arguments": { + "compass": { + "source": "url_for", + "target": "sha256:4fee624450db1903a6292eeba05c2ae2932efb632a554d032f01926c6a909baf", + "max_hops": 8 + }, + "graphify": { + "source": "url_for", + "target": "src_flask_app_flask_finalize_request", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "ambiguous" + } + }, + { + "id": "path-disconnected", + "arguments": { + "compass": { + "source": "sha256:1a76cfec23de97677c659fd8d7c5754a2e5fad9a6451a6acb4924916e8b310c4", + "target": "sha256:d7fad8c6dfcfa1e4a1f83ff180b467116358f7d99f058814c19fefd1cb6dc95f", + "max_hops": 8 + }, + "graphify": { + "source": "docs_conf", + "target": "examples_celery_make_celery", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "disconnected" + } + } + ] + }, + { + "name": "gson", + "commit": "15ca7360379cf3c1502b59981569050489f2d73e", + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "sourceText": "public JsonWriter newJsonWriter(", + "graphSha256": { + "compass": "5856ddc99ec4025c9e36d128783e6e7393f45af76f617caa38fd6938aca23ea7", + "graphify": "92471ab8f5bb5d34aedddd2263fa24a43ae4ed31b34d06c8d433fe0f0dada447" + }, + "anchors": [ + { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "text": "public JsonWriter newJsonWriter(", + "labels": [ + ".newJsonWriter()" + ] + }, + { + "file": "gson/src/main/java/com/google/gson/stream/JsonWriter.java", + "line": 162, + "text": "public class JsonWriter", + "labels": [ + "JsonWriter" + ] + }, + { + "file": "extras/src/main/java/com/google/gson/extras/examples/rawcollections/RawCollectionsExample.java", + "line": 1, + "text": "/*" + }, + { + "file": "gson/src/main/java/com/google/gson/annotations/package-info.java", + "line": 1, + "text": "/*" + } + ], + "pathQuestions": [ + { + "id": "path-forward", + "arguments": { + "compass": { + "source": "sha256:64e3ea7fc1f10444bca6ebed48973575a302fb826ba05905c6fe904323930fb1", + "target": "sha256:2222e85b9b69a13e38de1c9654b1ce8a86e75815310c570ee793038eab5017b8", + "max_hops": 8 + }, + "graphify": { + "source": "gson_src_main_java_com_google_gson_gson_gson_newjsonwriter", + "target": "gson_src_main_java_com_google_gson_stream_jsonwriter_jsonwriter", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "sourceWitness": { + "repository": "gson", + "commit": "15ca7360379cf3c1502b59981569050489f2d73e", + "question": "gson2-path-newjsonwriter-jsonwriter", + "category": "construction-reference", + "nodes": [ + { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "text": "public JsonWriter newJsonWriter(", + "labels": [ + ".newJsonWriter()" + ] + }, + { + "file": "gson/src/main/java/com/google/gson/stream/JsonWriter.java", + "line": 162, + "text": "public class JsonWriter", + "labels": [ + "JsonWriter" + ] + } + ], + "steps": [ + { + "relations": [ + "instantiates", + "references" + ], + "direction": "forward", + "sitesByRelation": { + "instantiates": { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 801, + "text": "new JsonWriter(writer)" + }, + "references": { + "file": "gson/src/main/java/com/google/gson/Gson.java", + "line": 797, + "text": "public JsonWriter newJsonWriter(" + } + } + } + ] + } + } + }, + { + "id": "path-reverse", + "arguments": { + "compass": { + "source": "sha256:2222e85b9b69a13e38de1c9654b1ce8a86e75815310c570ee793038eab5017b8", + "target": "sha256:64e3ea7fc1f10444bca6ebed48973575a302fb826ba05905c6fe904323930fb1", + "max_hops": 8 + }, + "graphify": { + "source": "gson_src_main_java_com_google_gson_stream_jsonwriter_jsonwriter", + "target": "gson_src_main_java_com_google_gson_gson_gson_newjsonwriter", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + } + } + }, + { + "id": "path-hop-limit", + "arguments": { + "compass": { + "source": "sha256:64e3ea7fc1f10444bca6ebed48973575a302fb826ba05905c6fe904323930fb1", + "target": "sha256:2222e85b9b69a13e38de1c9654b1ce8a86e75815310c570ee793038eab5017b8", + "max_hops": 0 + }, + "graphify": { + "source": "gson_src_main_java_com_google_gson_gson_gson_newjsonwriter", + "target": "gson_src_main_java_com_google_gson_stream_jsonwriter_jsonwriter", + "max_hops": 0, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 1, + "graphify": 1 + } + } + }, + { + "id": "path-missing-source", + "arguments": { + "compass": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "sha256:2222e85b9b69a13e38de1c9654b1ce8a86e75815310c570ee793038eab5017b8", + "max_hops": 8 + }, + "graphify": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "gson_src_main_java_com_google_gson_stream_jsonwriter_jsonwriter", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "unresolved" + } + }, + { + "id": "path-ambiguous-source", + "arguments": { + "compass": { + "source": "toJson", + "target": "sha256:2222e85b9b69a13e38de1c9654b1ce8a86e75815310c570ee793038eab5017b8", + "max_hops": 8 + }, + "graphify": { + "source": "toJson", + "target": "gson_src_main_java_com_google_gson_stream_jsonwriter_jsonwriter", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "ambiguous" + } + }, + { + "id": "path-disconnected", + "arguments": { + "compass": { + "source": "sha256:fd738ecee462cf8301dec9714d844e4833d5633c86ca80268f97478f1e48b2ec", + "target": "sha256:be5ecb530bbb853203267e0c7f289304e916e7659246abc657d5083579d51488", + "max_hops": 8 + }, + "graphify": { + "source": "extras_src_main_java_com_google_gson_extras_examples_rawcollections_rawcollectionsexample", + "target": "gson_src_main_java_com_google_gson_annotations_package_info", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "disconnected" + } + } + ] + }, + { + "name": "zod", + "commit": "d2b135cfb7a3582b9eb515756b9166bcb9521f4a", + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 105, + "sourceText": "function detectVersion(", + "graphSha256": { + "compass": "e33192de01f403cfde6c0030ba219c8e24fd26b561b984b6b710a46b3cc981e8", + "graphify": "c0f6d021616326da6b7daf5105b3b996c0bb4ba17c0bf54a062f2e692147b01a" + }, + "anchors": [ + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 105, + "text": "function detectVersion(", + "labels": [ + "detectVersion()" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 1, + "text": "", + "labels": [ + "from-json-schema", + "from-json-schema.ts" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 808, + "text": "function convertSchema(", + "labels": [ + "convertSchema()" + ] + }, + { + "file": ".claude/skills/triage/scripts/reindex.mjs", + "line": 17, + "text": "const dir = join(root, \".triage\", kind);" + }, + { + "file": ".configs/tsconfig.base.json", + "line": 1, + "text": "{" + } + ], + "pathQuestions": [ + { + "id": "path-forward", + "arguments": { + "compass": { + "source": "sha256:a2ac366671d620c9721b85a975ca31e89ac2d076ceeb83b2aa9071a6611f7843", + "target": "sha256:c24727f300fe1110afad52b8dae8fa5921e84d5471f2e144ce6724af95d3f674", + "max_hops": 8 + }, + "graphify": { + "source": "packages_zod_src_v4_classic_from_json_schema_detectversion", + "target": "packages_zod_src_v4_classic_from_json_schema_convertschema", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 2, + "graphify": 2 + }, + "sourceWitness": { + "repository": "zod", + "commit": "d2b135cfb7a3582b9eb515756b9166bcb9521f4a", + "question": "zod2-path-detectversion-convertschema", + "category": "file-containment", + "nodes": [ + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 105, + "text": "function detectVersion(", + "labels": [ + "detectVersion()" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 1, + "text": "", + "labels": [ + "from-json-schema", + "from-json-schema.ts" + ] + }, + { + "file": "packages/zod/src/v4/classic/from-json-schema.ts", + "line": 808, + "text": "function convertSchema(", + "labels": [ + "convertSchema()" + ] + } + ], + "steps": [ + { + "relations": [ + "contains" + ], + "direction": "reverse" + }, + { + "relations": [ + "contains" + ], + "direction": "forward" + } + ] + } + } + }, + { + "id": "path-reverse", + "arguments": { + "compass": { + "source": "sha256:c24727f300fe1110afad52b8dae8fa5921e84d5471f2e144ce6724af95d3f674", + "target": "sha256:a2ac366671d620c9721b85a975ca31e89ac2d076ceeb83b2aa9071a6611f7843", + "max_hops": 8 + }, + "graphify": { + "source": "packages_zod_src_v4_classic_from_json_schema_convertschema", + "target": "packages_zod_src_v4_classic_from_json_schema_detectversion", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 2, + "graphify": 2 + } + } + }, + { + "id": "path-hop-limit", + "arguments": { + "compass": { + "source": "sha256:a2ac366671d620c9721b85a975ca31e89ac2d076ceeb83b2aa9071a6611f7843", + "target": "sha256:c24727f300fe1110afad52b8dae8fa5921e84d5471f2e144ce6724af95d3f674", + "max_hops": 1 + }, + "graphify": { + "source": "packages_zod_src_v4_classic_from_json_schema_detectversion", + "target": "packages_zod_src_v4_classic_from_json_schema_convertschema", + "max_hops": 1, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 2, + "graphify": 2 + } + } + }, + { + "id": "path-missing-source", + "arguments": { + "compass": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "sha256:c24727f300fe1110afad52b8dae8fa5921e84d5471f2e144ce6724af95d3f674", + "max_hops": 8 + }, + "graphify": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "packages_zod_src_v4_classic_from_json_schema_convertschema", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "unresolved" + } + }, + { + "id": "path-ambiguous-source", + "arguments": { + "compass": { + "source": "safeParse", + "target": "sha256:c24727f300fe1110afad52b8dae8fa5921e84d5471f2e144ce6724af95d3f674", + "max_hops": 8 + }, + "graphify": { + "source": "safeParse", + "target": "packages_zod_src_v4_classic_from_json_schema_convertschema", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "ambiguous" + } + }, + { + "id": "path-disconnected", + "arguments": { + "compass": { + "source": "sha256:55feeed2916b9a3ce9249d83a36778c24d4f04a78c08c2358e3d4bb7ba36faf3", + "target": "sha256:d8b8d907733c4fd37c339650fac32f06d5e3974f2d9499985367c72e7f98100b", + "max_hops": 8 + }, + "graphify": { + "source": "claude_skills_triage_scripts_reindex_dir", + "target": "configs_tsconfig_base", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "disconnected" + } + } + ] + }, + { + "name": "axum", + "commit": "af1345b53a259b0990be1ff853f9b56c05040ef7", + "file": "src/routing/path_router.rs", + "line": 22, + "sourceText": "fn validate_path(", + "graphSha256": { + "compass": "2cc12d5060c83389c077e4eade892991fa8f7021b59d8f6f1dc98c14c2109812", + "graphify": "6ed791a771190e98ba2905e08480a9fa6ed733f46d56212ae3a4c90018d79b52" + }, + "anchors": [ + { + "file": "src/routing/path_router.rs", + "line": 22, + "text": "fn validate_path(", + "labels": [ + "validate_path()" + ] + }, + { + "file": "src/routing/path_router.rs", + "line": 36, + "text": "fn validate_v07_paths(", + "labels": [ + "validate_v07_paths()" + ] + }, + { + "file": "benches/benches.rs", + "line": 1, + "text": "#![allow(missing_docs)]" + }, + { + "file": "src/macros.rs", + "line": 1, + "text": "//! Internal macros" + } + ], + "pathQuestions": [ + { + "id": "path-forward", + "arguments": { + "compass": { + "source": "sha256:cbc027447c34fee567bd17fffd9fcdf6375504bf7590e421c97bf1be9d0f8efb", + "target": "sha256:85ede979be9c1d48d63310ebfc8ab0785c71b64b196ce83430ada74f3ad0654b", + "max_hops": 8 + }, + "graphify": { + "source": "src_routing_path_router_validate_path", + "target": "src_routing_path_router_validate_v07_paths", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + }, + "sourceWitness": { + "repository": "axum", + "commit": "af1345b53a259b0990be1ff853f9b56c05040ef7", + "question": "axum2-path-validate-v07", + "category": "call", + "nodes": [ + { + "file": "src/routing/path_router.rs", + "line": 22, + "text": "fn validate_path(", + "labels": [ + "validate_path()" + ] + }, + { + "file": "src/routing/path_router.rs", + "line": 36, + "text": "fn validate_v07_paths(", + "labels": [ + "validate_v07_paths()" + ] + } + ], + "steps": [ + { + "relations": [ + "calls" + ], + "direction": "forward", + "site": { + "file": "src/routing/path_router.rs", + "line": 30, + "text": "validate_v07_paths(path)?" + } + } + ] + } + } + }, + { + "id": "path-reverse", + "arguments": { + "compass": { + "source": "sha256:85ede979be9c1d48d63310ebfc8ab0785c71b64b196ce83430ada74f3ad0654b", + "target": "sha256:cbc027447c34fee567bd17fffd9fcdf6375504bf7590e421c97bf1be9d0f8efb", + "max_hops": 8 + }, + "graphify": { + "source": "src_routing_path_router_validate_v07_paths", + "target": "src_routing_path_router_validate_path", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "path", + "hops": { + "compass": 1, + "graphify": 1 + } + } + }, + { + "id": "path-hop-limit", + "arguments": { + "compass": { + "source": "sha256:cbc027447c34fee567bd17fffd9fcdf6375504bf7590e421c97bf1be9d0f8efb", + "target": "sha256:85ede979be9c1d48d63310ebfc8ab0785c71b64b196ce83430ada74f3ad0654b", + "max_hops": 0 + }, + "graphify": { + "source": "src_routing_path_router_validate_path", + "target": "src_routing_path_router_validate_v07_paths", + "max_hops": 0, + "undirected": true + } + }, + "expected": { + "outcome": "depth-limit", + "hops": { + "compass": 1, + "graphify": 1 + } + } + }, + { + "id": "path-missing-source", + "arguments": { + "compass": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "sha256:85ede979be9c1d48d63310ebfc8ab0785c71b64b196ce83430ada74f3ad0654b", + "max_hops": 8 + }, + "graphify": { + "source": "__compass_mcp_path_absent_7ed706b894__", + "target": "src_routing_path_router_validate_v07_paths", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "unresolved" + } + }, + { + "id": "path-ambiguous-source", + "arguments": { + "compass": { + "source": "with_state", + "target": "sha256:85ede979be9c1d48d63310ebfc8ab0785c71b64b196ce83430ada74f3ad0654b", + "max_hops": 8 + }, + "graphify": { + "source": "with_state", + "target": "src_routing_path_router_validate_v07_paths", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "ambiguous" + } + }, + { + "id": "path-disconnected", + "arguments": { + "compass": { + "source": "sha256:c1950b3a15e552f198603684ad1c0fabbdac3da2a9b6fe67168907b334a25533", + "target": "sha256:f41133670252fffda7d266a65b5e0b9f2121957331570519ec0eec5bec04832e", + "max_hops": 8 + }, + "graphify": { + "source": "benches_benches", + "target": "src_macros", + "max_hops": 8, + "undirected": true + } + }, + "expected": { + "outcome": "disconnected" + } + } + ] + } + ] +} diff --git a/benchmarks/agent_query/suite_v2.toml b/benchmarks/agent_query/suite_v2.toml index ed80c8f9e..f0e5be48a 100644 --- a/benchmarks/agent_query/suite_v2.toml +++ b/benchmarks/agent_query/suite_v2.toml @@ -328,9 +328,9 @@ judgment = "Gson.java:565 declares public String toJson(Object src)." [[repository.anchor]] file = "gson/src/main/java/com/google/gson/stream/JsonWriter.java" -line = 527 +line = 526 symbol = "value(String)" -judgment = "JsonWriter.java:527 declares public JsonWriter value(String value)." +judgment = "JsonWriter.java:526 starts the @CanIgnoreReturnValue annotation on public JsonWriter value(String value), whose method header is line 527." [[repository.anchor]] file = "gson/src/main/java/com/google/gson/TypeAdapter.java" diff --git a/benchmarks/agent_query/tests/test_community_identity.py b/benchmarks/agent_query/tests/test_community_identity.py new file mode 100644 index 000000000..42942ccbc --- /dev/null +++ b/benchmarks/agent_query/tests/test_community_identity.py @@ -0,0 +1,83 @@ +import copy +import unittest + +from benchmarks.agent_query.community_identity import resolver_request, selected_id + + +class CommunityIdentityTests(unittest.TestCase): + seed = dict(file='src/a.rs', startLine=10, symbol='run') + + def compass(self, nodes=None): + if nodes is None: + nodes = [dict(id='a', name='run()', source=dict(file='src/a.rs', startLine=10))] + return dict(executionSucceeded=True, response=dict(result=dict(structuredContent=dict( + schema='compass.mcp.tool-result/1', transportTruncation=dict(truncated=False), + result=dict(schema='compass.query/1', operation='search', truncated=False, + nodes=nodes, results=[dict(nodeId=n['id']) for n in nodes], diagnostics=[]))))) + + def test_member_variants_use_common_symbol_without_selecting_declaration(self): + text = ' run [src/a.rs]\n .run() [src/a.rs]' + c = resolver_request('compass', text, self.seed) + self.assertEqual(c['selection']['status'], 'ambiguous') + self.assertEqual(c['request']['arguments']['query'], 'run') + g = resolver_request('graphify', text, self.seed) + self.assertEqual(g['request']['arguments']['label'], 'src/a.rs::run') + self.assertIsNone(resolver_request('compass', ' run [other.rs]', self.seed)['request']) + + def test_exact_source_match_returns_observed_id_for_both_tools(self): + self.assertEqual(selected_id('compass', self.compass(), self.seed)['selector'], 'a') + g = dict(executionSucceeded=True, text='Node: .run()\n ID: actual_id\n Source: src/a.rs L10\n Degree: 4') + self.assertEqual(selected_id('graphify', g, self.seed)['selector'], 'actual_id') + + def test_duplicate_exact_anchor_is_ambiguous_not_ranked(self): + nodes = self.compass()['response']['result']['structuredContent']['result']['nodes'] + nodes.append(dict(id='b', name='run()', source=dict(file='src/a.rs', startLine=10))) + for order in [nodes, list(reversed(nodes))]: + r = selected_id('compass', self.compass(order), self.seed) + self.assertEqual(r['matchedIds'], ['a', 'b']) + self.assertEqual(r['status'], 'ambiguous') + self.assertIsNone(r['selector']) + + def test_partial_source_symbol_or_different_start_cannot_select_id(self): + for change in [dict(name='runner()'), dict(source=dict(file='src/b.rs', startLine=10)), + dict(source=dict(file='src/a.rs', startLine=1, endLine=20)), + dict(source=dict(file='src/a.rs', startLine=True))]: + node = dict(id='a', name='run()', source=dict(file='src/a.rs', startLine=10)) + node.update(change) + self.assertIsNone(selected_id('compass', self.compass([node]), self.seed)['selector']) + for source in ['src/a.rs L9', 'src/b.rs L10', 'src/a.rs unknown']: + r = selected_id('graphify', dict(executionSucceeded=True,text='Node: run()\n ID: a\n Source: '+source),self.seed) + self.assertIsNone(r['selector']) + + def test_truncation_unknown_schema_and_tool_errors_fail_closed(self): + for layer in ['transport', 'semantic', 'diagnostic', 'schema', 'failure']: + call = self.compass() + e = call['response']['result']['structuredContent']; b = e['result'] + if layer == 'transport': e['transportTruncation']['truncated'] = True + elif layer == 'semantic': b['truncated'] = True + elif layer == 'diagnostic': b['diagnostics'] = [dict(code='bounded_truncation')] + elif layer == 'schema': b['schema'] = 'compass.query/99' + else: call['executionSucceeded'] = False + self.assertIsNone(selected_id('compass', call, self.seed)['selector']) + + def test_only_returned_search_hits_can_supply_ids(self): + call = self.compass() + call['response']['result']['structuredContent']['result']['results'] = [] + self.assertIsNone(selected_id('compass',call,self.seed)['selector']) + + def test_missing_hit_nodes_duplicate_ids_and_invalid_diagnostics_are_rejected(self): + for variant in ['missing', 'duplicate', 'diagnostic']: + call=self.compass(); b=call['response']['result']['structuredContent']['result'] + if variant=='missing': b['results']=[dict(nodeId='not-returned')] + elif variant=='duplicate': b['nodes'].append(copy.deepcopy(b['nodes'][0])) + else: b['diagnostics']=['not-an-object'] + self.assertEqual(selected_id('compass',call,self.seed)['status'],'invalid') + + def test_multiple_graphify_ids_and_ambiguity_text_are_unresolved(self): + for text in ['Ambiguous: run matches 2 nodes.', + 'Node: run()\n ID: a\n ID: b\n Source: src/a.rs L10']: + self.assertIsNone(selected_id('graphify',dict(executionSucceeded=True,text=text),self.seed)['selector']) + + +if __name__ == '__main__': + unittest.main() diff --git a/benchmarks/agent_query/tests/test_community_navigation.py b/benchmarks/agent_query/tests/test_community_navigation.py new file mode 100644 index 000000000..8ec9e145b --- /dev/null +++ b/benchmarks/agent_query/tests/test_community_navigation.py @@ -0,0 +1,108 @@ +import unittest + +from benchmarks.agent_query.community_navigation import score_navigation, select_label + + +class CommunityNavigationTests(unittest.TestCase): + seed = dict(file='a.rs', symbol='run', startLine=10) + + def graph(self): + return dict(nodes=[dict(id='a', name='Runner.run()', label='Runner.run()'), + dict(id='b', name='finish()', label='finish()')], + links=[dict(source='a', target='b', kind='calls', relation='calls')]) + + def test_selector_uses_exact_file_and_terminal_symbol(self): + text = 'Community 0 (4 nodes):\n Runner.run() [a.rs]\n run_more [a.rs]\n run [b.rs]\n Runner [a.rs]' + result = select_label(text, self.seed) + self.assertEqual(result['selector'], 'Runner.run()') + self.assertEqual(len(result['matchingRows']), 1) + + def test_identical_rows_are_retained_without_inventing_an_id(self): + result = select_label(' run [a.rs]\n run [a.rs]', self.seed) + self.assertEqual(result['selector'], 'run') + self.assertEqual(len(result['matchingRows']), 2) + + def test_distinct_labels_are_ambiguous_not_first_match(self): + result = select_label(' A.run() [a.rs]\n B.run() [a.rs]', self.seed) + self.assertIsNone(result['selector']) + self.assertEqual(result['status'], 'ambiguous') + + def test_missing_or_incomplete_member_rows_do_not_match(self): + for text in ['', ' run [a.rs', ' run [b.rs]', ' runner [a.rs]']: + self.assertEqual(select_label(text, self.seed)['status'], 'missing') + + def test_unique_seed_and_target_are_supported_for_both_tools(self): + for tool in ['compass', 'graphify']: + result = score_navigation('Neighbors of Runner.run():\n --> finish() [calls] [EXTRACTED] at=a.rs:L12', self.graph(), tool, 'a', 'b', True) + self.assertTrue(result['seedIdentitySupported']) + self.assertTrue(result['collaboratorIdentitySupported']) + self.assertTrue(result['displayedAdjacencyMatches']) + + def test_matching_adjacency_does_not_resolve_duplicate_seed(self): + graph = self.graph() + graph['nodes'].append(dict(id='duplicate', name='Runner.run()')) + result = score_navigation('Neighbors of Runner.run():\n --> finish() [calls] [exact]', graph, 'compass', 'a', 'b', True) + self.assertTrue(result['displayedAdjacencyMatches']) + self.assertTrue(result['collaboratorDisplayed']) + self.assertFalse(result['seedIdentitySupported']) + self.assertFalse(result['collaboratorIdentitySupported']) + + def test_duplicate_target_label_is_not_identity_support(self): + graph = self.graph() + graph['nodes'].append(dict(id='other', name='finish()')) + result = score_navigation('Neighbors of Runner.run():\n --> finish() [calls] [exact]', graph, 'compass', 'a', 'b', True) + self.assertTrue(result['seedIdentitySupported']) + self.assertTrue(result['collaboratorDisplayed']) + self.assertFalse(result['collaboratorIdentitySupported']) + + def test_failure_wrong_direction_or_relation_cannot_reach_collaborator(self): + for text, success in [ + ('Neighbors of Runner.run():\n --> finish() [calls] [exact]', False), + ('Neighbors of Runner.run():\n <-- finish() [calls] [exact]', True), + ('Neighbors of Runner.run():\n --> finish() [contains] [exact]', True), + ('Ambiguous: run matches 2 nodes.', True), + ]: + result = score_navigation(text, self.graph(), 'compass', 'a', 'b', success) + self.assertFalse(result['collaboratorIdentitySupported']) + self.assertFalse(result['collaboratorDisplayed']) + + def test_parallel_calls_are_distinct_neighbors_not_occurrence_recall(self): + graph = self.graph() + graph['links'] *= 2 + result = score_navigation('Neighbors of Runner.run():\n --> finish() [calls] [exact]', graph, 'compass', 'a', 'b', True) + self.assertEqual(result['graphDirectCallRecords'], 2) + self.assertEqual(result['expectedDisplayedNeighbors'], 1) + self.assertTrue(result['displayedAdjacencyMatches']) + + def test_missing_target_oracle_does_not_hide_valid_seed_navigation(self): + result = score_navigation('Neighbors of Runner.run():\n --> finish() [calls] [exact]', + self.graph(), 'compass', 'a', None, True) + self.assertTrue(result['seedIdentitySupported']) + self.assertTrue(result['displayedAdjacencyMatches']) + self.assertFalse(result['collaboratorDisplayed']) + self.assertFalse(result['collaboratorIdentitySupported']) + self.assertEqual(result['collaboratorLabelCandidates'], []) + + def test_mismatch_diagnostics_have_stable_sorted_order(self): + graph = self.graph() + graph['nodes'].extend([dict(id='x', name='Zulu()'), dict(id='y', name='Alpha()')]) + graph['links'].extend([dict(source='a', target='x', kind='calls'), + dict(source='a', target='y', kind='calls')]) + text = 'Neighbors of Runner.run():\n --> ZExtra() [calls] [exact]\n --> AExtra() [calls] [exact]' + result = score_navigation(text, graph, 'compass', 'a', 'b', True) + self.assertEqual(result['missingDisplayedNeighbors'], + sorted([('-->', 'finish()'), ('-->', 'Zulu()'), ('-->', 'Alpha()')])) + self.assertEqual(result['extraDisplayedNeighbors'], + [('-->', 'AExtra()'), ('-->', 'ZExtra()')]) + + def test_duplicate_neighbor_names_preserve_multiplicity_of_identities(self): + graph = self.graph() + graph['nodes'].append(dict(id='other', name='finish()')) + graph['links'].append(dict(source='a', target='other', kind='calls')) + result = score_navigation('Neighbors of Runner.run():\n --> finish() [calls] [exact]', graph, 'compass', 'a', 'b', True) + self.assertEqual(result['expectedDisplayedNeighbors'], 2) + self.assertFalse(result['displayedAdjacencyMatches']) + + +if __name__ == '__main__': + unittest.main() diff --git a/benchmarks/agent_query/tests/test_community_tasks.py b/benchmarks/agent_query/tests/test_community_tasks.py new file mode 100644 index 000000000..61ae22ac6 --- /dev/null +++ b/benchmarks/agent_query/tests/test_community_tasks.py @@ -0,0 +1,130 @@ +import copy +from pathlib import Path +import tempfile +import unittest + +from benchmarks.agent_query.community_tasks import audit_graph, read_bounded + + +class CommunityTaskTests(unittest.TestCase): + limits = dict(maxNodes=100, maxEdges=100) + + def tasks(self): + return [dict(id="task-a", declarations=[ + dict(id="a", file="a.rs", startLine=10, symbol="alpha"), + dict(id="b", file="b.rs", startLine=20, symbol="beta"), + ]), dict(id="task-b", declarations=[ + dict(id="c", file="a.rs", startLine=30, symbol="gamma"), + ])] + + def graph(self, tool="compass"): + nodes = [] + for identifier, name, file, line, group in [ + ("a", "alpha", "a.rs", 10, 0), + ("b", "beta", "b.rs", 20, 0), + ("c", "gamma", "a.rs", 30, 1), + ]: + if tool == "compass": + nodes.append(dict(id=identifier, name=name, source=dict(file=file, startLine=line), community=dict(id=group))) + else: + nodes.append(dict(id=identifier, label=name + "()", source_file=file, + source_location=f"L{line}", community=group)) + return dict(nodes=nodes, links=[]) + + def test_zero_is_a_real_community_and_pair_denominators_are_separate(self): + for tool in ["compass", "graphify"]: + result = audit_graph(self.graph(tool), tool, self.tasks(), self.limits) + self.assertEqual(result["summaries"]["within_task"]["same_community"], 1) + self.assertEqual(result["summaries"]["cross_task"]["different_community"], 2) + self.assertEqual(result["summaries"]["within_task/cross_file"]["same_community"], 1) + self.assertEqual(result["declarations"][0]["communityNodes"], 2) + self.assertEqual(result["declarations"][0]["communitySourceFiles"], 2) + + def test_node_order_and_community_renumbering_do_not_change_pair_outcomes(self): + graph = self.graph() + first = audit_graph(graph, "compass", self.tasks(), self.limits) + graph["nodes"].reverse() + for node in graph["nodes"]: + node["community"]["id"] += 90 + second = audit_graph(graph, "compass", self.tasks(), self.limits) + self.assertEqual(first["pairs"], second["pairs"]) + self.assertEqual(first["summaries"], second["summaries"]) + + def test_missing_and_unassigned_nodes_are_not_separated_successes(self): + for mode in ["missing", "unassigned"]: + graph = self.graph() + if mode == "missing": + graph["nodes"].pop(1) + else: + graph["nodes"][1].pop("community") + result = audit_graph(graph, "compass", self.tasks(), self.limits) + self.assertEqual(result["declarations"][1]["status"], mode) + self.assertEqual(result["summaries"]["within_task"]["unresolved"], 1) + self.assertEqual(result["summaries"]["cross_task"]["unresolved"], 1) + + def test_duplicate_anchor_preserves_both_identities_as_ambiguous(self): + graph = self.graph() + duplicate = copy.deepcopy(graph["nodes"][0]) + duplicate["id"] = "a-second" + duplicate["community"]["id"] = 1 + graph["nodes"].append(duplicate) + result = audit_graph(graph, "compass", self.tasks(), self.limits) + self.assertEqual(result["declarations"][0]["status"], "ambiguous") + self.assertEqual(result["declarations"][0]["matchedNodeIds"], ["a", "a-second"]) + self.assertEqual(result["summaries"]["within_task"]["unresolved"], 1) + + def test_exact_start_and_name_are_required_not_container_extent_or_substring(self): + for change in [dict(name="alphabet"), dict(source=dict(file="a.rs", startLine=1, endLine=50))]: + graph = self.graph() + graph["nodes"][0].update(change) + result = audit_graph(graph, "compass", self.tasks(), self.limits) + self.assertEqual(result["declarations"][0]["status"], "missing") + + def test_boolean_and_negative_communities_fail_closed(self): + for tool in ["compass", "graphify"]: + for value in [False, -1, "0"]: + graph = self.graph(tool) + graph["nodes"][0]["community"] = dict(id=value) if tool == "compass" else value + with self.assertRaises(ValueError): + audit_graph(graph, tool, self.tasks(), self.limits) + + def test_duplicate_node_ids_and_repeated_source_judgments_fail(self): + graph = self.graph() + graph["nodes"].append(copy.deepcopy(graph["nodes"][0])) + with self.assertRaises(ValueError): + audit_graph(graph, "compass", self.tasks(), self.limits) + tasks = self.tasks() + tasks[1]["declarations"] = copy.deepcopy(tasks[0]["declarations"]) + with self.assertRaises(ValueError): + audit_graph(self.graph(), "compass", tasks, self.limits) + + def test_duplicate_task_ids_and_large_pair_sets_fail(self): + tasks = self.tasks() + tasks[1]["id"] = tasks[0]["id"] + with self.assertRaises(ValueError): + audit_graph(self.graph(), "compass", tasks, self.limits) + with self.assertRaises(ValueError): + audit_graph(self.graph(), "compass", [dict(id="a", declarations=[{}] * 257)], self.limits) + + def test_graph_and_file_bounds_are_errors_not_empty_evidence(self): + with self.assertRaises(ValueError): + audit_graph(self.graph(), "compass", self.tasks(), dict(maxNodes=2, maxEdges=100)) + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "input.json" + path.write_bytes(b"abcde") + self.assertEqual(read_bounded(path, 5), b"abcde") + with self.assertRaises(ValueError): + read_bounded(path, 4) + for limit in [-1, False, 10**12]: + with self.assertRaises(ValueError): + read_bounded(path, limit) + + def test_boolean_source_line_is_not_an_integer_anchor(self): + tasks = self.tasks() + tasks[0]["declarations"][0]["startLine"] = True + with self.assertRaises(ValueError): + audit_graph(self.graph(), "compass", tasks, self.limits) + + +if __name__ == "__main__": + unittest.main() diff --git a/benchmarks/agent_query/tests/test_directed_identity.py b/benchmarks/agent_query/tests/test_directed_identity.py new file mode 100644 index 000000000..a4d2e0d75 --- /dev/null +++ b/benchmarks/agent_query/tests/test_directed_identity.py @@ -0,0 +1,33 @@ +import unittest + +from benchmarks.agent_query.directed_identity import resolver + + +class DirectedIdentityTests(unittest.TestCase): + def test_resolvers_use_only_the_same_public_source_coordinates(self): + witness=dict(file='src/a.rs',line=7,symbol='run',id='oracle-id-must-not-be-used') + c,req=resolver('compass',witness) + self.assertEqual(c,dict(file='src/a.rs',startLine=7,symbol='run')) + self.assertEqual(req,dict(method='search_symbols',arguments=dict(query='run',max_candidates=256,max_nodes=500,max_response_bytes=524288))) + g,req=resolver('graphify',witness) + self.assertEqual(c,g) + self.assertEqual(req,dict(method='get_node',arguments=dict(label='src/a.rs::run'))) + + def test_unsupported_public_delimiter_fails_instead_of_changing_scope(self): + with self.assertRaises(ValueError):resolver('graphify',dict(file='src/a::b.rs',line=7,symbol='run')) + + def test_unknown_tools_fail_explicitly(self): + with self.assertRaises(ValueError):resolver('other',dict(file='a.rs',line=7,symbol='run')) + + def test_exact_workflow_scopes_compass_without_changing_shared_coordinates(self): + witness=dict(file='src/a.rs',line=7,symbol='next',id='not-a-public-id') + coordinate,request=resolver('compass',witness,exact=True) + self.assertEqual(coordinate,dict(file='src/a.rs',startLine=7,symbol='next')) + self.assertEqual(request['arguments'],dict(query='next',exact=True,source_file='src/a.rs',start_line=7,max_candidates=256,max_nodes=500,max_response_bytes=524288)) + + def test_exact_workflow_keeps_graphify_native_request_and_postcheck_coordinates(self): + witness=dict(file='src/a.rs',line=7,symbol='next') + self.assertEqual(resolver('graphify',witness,exact=True),resolver('graphify',witness)) + + +if __name__=='__main__':unittest.main() diff --git a/benchmarks/agent_query/tests/test_edge_audit.py b/benchmarks/agent_query/tests/test_edge_audit.py new file mode 100644 index 000000000..7a7d34692 --- /dev/null +++ b/benchmarks/agent_query/tests/test_edge_audit.py @@ -0,0 +1,107 @@ +from __future__ import annotations + +import copy +from pathlib import Path +import tempfile +import unittest + +from benchmarks.agent_query.edge_audit import audit_edges + + +class EdgeAuditTests(unittest.TestCase): + def setUp(self) -> None: + temporary = tempfile.TemporaryDirectory() + self.addCleanup(temporary.cleanup) + self.root = Path(temporary.name) + (self.root / "code.rs").write_text("fn caller() {}\nfn target() {}\ntarget();\ntarget();\n") + self.witness = {"id": "calls", "expected": "present", "relation": "calls", + "source": {"file": "code.rs", "line": 1, "symbol": "caller", "text": "fn caller"}, + "target": {"file": "code.rs", "line": 2, "symbol": "target", "text": "fn target"}, + "occurrences": [{"file": "code.rs", "line": line, "text": "target();"} + for line in (3, 4)]} + self.graph = {"nodes": [ + {"id": symbol, "name": symbol, "source": {"file": "code.rs", "startLine": line}} + for line, symbol in enumerate(("caller", "target"), 1)], + "edges": [{"source": "caller", "target": "target", "kind": "calls", + "relationshipSite": {"file": "code.rs", "startLine": line}} + for line in (3, 4)]} + + def audit(self, graph=None, tool="compass"): + return audit_edges({"witnesses": [self.witness]}, tool, + self.graph if graph is None else graph, self.root)[0] + + def test_complete_occurrences_match(self) -> None: + result = self.audit() + self.assertTrue(result["matched"]) + self.assertEqual(result["matchedOccurrences"], 2) + + def test_graphify_semantic_direction_matches_the_same_policy(self) -> None: + graph = {"nodes": [{"id": symbol, "label": symbol + "()", "source_file": "code.rs", + "source_location": f"L{line}"} + for line, symbol in enumerate(("caller", "target"), 1)], + "links": [{"source": "target", "target": "caller", "_src": "caller", "_tgt": "target", + "relation": "calls", "source_file": "code.rs", "source_location": f"L{line}"} + for line in (3, 4)]} + self.assertTrue(self.audit(graph, "graphify")["matched"]) + + def test_one_edge_does_not_prove_all_occurrences(self) -> None: + self.graph["edges"].pop() + result = self.audit() + self.assertTrue(result["relationshipMatched"]) + self.assertFalse(result["matched"]) + self.assertEqual(result["matchedOccurrences"], 1) + self.assertEqual(result["missingOccurrences"], [{"file": "code.rs", "line": 4, "count": 1}]) + + def test_duplicate_site_does_not_recover_a_missing_site(self) -> None: + self.graph["edges"][1] = copy.deepcopy(self.graph["edges"][0]) + result = self.audit() + self.assertFalse(result["matched"]) + self.assertEqual(result["matchedOccurrences"], 1) + self.assertEqual(result["unexpectedOccurrences"], [{"file": "code.rs", "line": 3, "count": 1}]) + + def test_negative_requires_both_endpoint_identities(self) -> None: + self.witness.update(expected="absent", occurrences=[]) + self.assertFalse(self.audit()["matched"]) + self.graph["edges"] = [] + self.assertTrue(self.audit()["matched"]) + self.graph["nodes"].pop() + self.assertFalse(self.audit()["matched"]) + + def test_wrong_owner_or_direction_never_matches(self) -> None: + for reverse in (False, True): + graph = copy.deepcopy(self.graph) + other = copy.deepcopy(graph["nodes"][1]) + other["id"] = "other-owner" + other["source"]["startLine"] = 99 + other["source"]["file"] = "elsewhere.rs" + graph["nodes"].append(other) + for edge in graph["edges"]: + if reverse: + edge["source"], edge["target"] = edge["target"], edge["source"] + else: + edge["target"] = "other-owner" + self.assertFalse(self.audit(graph)["relationshipMatched"]) + + def test_ambiguous_anchors_and_invalid_ids_cannot_pass(self) -> None: + rival = copy.deepcopy(self.graph["nodes"][0]) + rival["id"] = "another-caller" + self.graph["nodes"].append(rival) + result = self.audit() + self.assertFalse(result["endpointIdentityVerified"]) + self.assertEqual(result["expectedOccurrences"], 2) + rival["id"] = "caller" + with self.assertRaisesRegex(ValueError, "unique nonempty"): + self.audit() + + def test_source_drift_or_malformed_expectation_fails_before_scoring(self) -> None: + self.witness["expected"] = "maybe" + with self.assertRaisesRegex(ValueError, "unsupported edge expectation"): + self.audit() + self.witness["expected"] = "present" + (self.root / "code.rs").write_text("changed\n") + with self.assertRaisesRegex(ValueError, "source witness changed"): + self.audit() + + +if __name__ == "__main__": + unittest.main() diff --git a/benchmarks/agent_query/tests/test_go_struct_field_probe.py b/benchmarks/agent_query/tests/test_go_struct_field_probe.py new file mode 100644 index 000000000..dd497e8ca --- /dev/null +++ b/benchmarks/agent_query/tests/test_go_struct_field_probe.py @@ -0,0 +1,53 @@ +import unittest + +from benchmarks.agent_query.go_struct_field_probe import compare + + +FIELD = {"file": "store.go", "struct": "Store", "structLine": 3, + "field": "Value", "fieldLine": 4} + + +def graph(*, shared=False, duplicate=False, field_kind="field", field_line=4): + nodes = [ + {"id": "owner", "kind": "struct", "name": "Store", + "source": {"file": "store.go", "startLine": 3}}, + {"id": "field", "kind": field_kind, "name": "Value", + "source": {"file": "store.go", "startLine": field_line}}, + ] + links = [{"source": "owner", "target": "field", "kind": "contains"}] + if shared: + nodes.append({"id": "other", "kind": "struct", "name": "Other", + "source": {"file": "store.go", "startLine": 10}}) + links.append({"source": "other", "target": "field", "kind": "contains"}) + if duplicate: + nodes.append({"id": "duplicate", "kind": "field", "name": "Value", + "source": {"file": "store.go", "startLine": 4}}) + links.append({"source": "owner", "target": "duplicate", "kind": "contains"}) + return {"directed": True, "nodes": nodes, "links": links} + + +class GoStructFieldProbeTests(unittest.TestCase): + def test_exact_source_field_and_unique_owner_required(self): + self.assertEqual(compare(graph(), "compass", [FIELD])["statusCounts"], {"matched": 1}) + self.assertEqual(compare(graph(shared=True), "compass", [FIELD])["statusCounts"], + {"ambiguous-field": 1}) + self.assertEqual(compare(graph(duplicate=True), "compass", [FIELD])["statusCounts"], + {"ambiguous-field": 1}) + self.assertEqual(compare(graph(field_kind="method"), "compass", [FIELD])["statusCounts"], + {"missing-field": 1}) + self.assertEqual(compare(graph(field_line=5), "compass", [FIELD])["statusCounts"], + {"missing-field": 1}) + + def test_graphify_field_type_context_is_not_a_declaration(self): + graphify = {"directed": False, "nodes": [ + {"id": "owner", "label": "Store", "source_file": "store.go", "source_location": "L3"}, + {"id": "type", "label": "int", "source_file": "store.go", "source_location": "L4"}], + "links": [{"source": "owner", "target": "type", "relation": "references", + "context": "field", "source_file": "store.go", "source_location": "L4"}]} + result = compare(graphify, "graphify", [FIELD]) + self.assertEqual(result["statusCounts"], {"missing-field": 1}) + self.assertEqual(result["fieldTypeContextRecords"], 1) + + +if __name__ == "__main__": + unittest.main() diff --git a/benchmarks/agent_query/tests/test_hub_evidence.py b/benchmarks/agent_query/tests/test_hub_evidence.py new file mode 100644 index 000000000..1dfdb168c --- /dev/null +++ b/benchmarks/agent_query/tests/test_hub_evidence.py @@ -0,0 +1,86 @@ +import copy +import hashlib +from pathlib import Path +import tempfile +import unittest + +from benchmarks.agent_query.hub_evidence_audit import connectivity, check_summary, check_review, check_text_rows, check_request + + +class HubEvidenceTests(unittest.TestCase): + def test_requests_cannot_be_relabelled_after_capture(self): + row=dict(response=dict(id=5),arguments=dict(top_n=10)) + request=dict(jsonrpc='2.0',method='tools/call',id=5,params=dict(name='god_nodes',arguments=dict(top_n=10))) + check_request(request,row) + for changed in [dict(top_n=1),dict(top_n=True),dict(top_n=10,extra='bad')]: + request['params']['arguments']=changed + with self.assertRaises(ValueError):check_request(request,row) + + def graph(self, directed=True): + return {'directed': directed, 'nodes':[{'id':'a'}, {'id':'b'}], 'links':[ + {'source':'a','target':'b','kind':'calls'}, + {'source':'a','target':'b','kind':'calls'}, + {'source':'b','target':'a','kind':'references'}, + {'source':'a','target':'a','kind':'calls'}, + {'source':'a','target':'missing','kind':'calls'}]} + + def test_parallel_and_loop_records_are_not_pair_degree(self): + result=connectivity(self.graph(),'compass','a') + self.assertEqual(result['edgeRecords'],4) + self.assertEqual(result['selfLoopRecords'],1) + self.assertEqual(result['relations'][0],dict(relation='calls',edgeRecords=3, + incomingRecords=1,outgoingRecords=3,undirectedRecords=0)) + + def test_undirected_does_not_invent_arrow_directions(self): + graph=self.graph(False) + for edge in graph['links']: + edge['relation']=edge.pop('kind') + result=connectivity(graph,'graphify','a') + self.assertEqual(result['relations'][0],dict(relation='calls',edgeRecords=3, + incomingRecords=0,outgoingRecords=0,undirectedRecords=3)) + + def test_cap_reports_omitted_records_and_stable_order(self): + graph=self.graph() + graph['links']=[dict(source='a',target='b',kind=f'r{i:02}') for i in range(20)] + graph['links'].append(dict(source='a',target='b',kind='r19')) + result=connectivity(graph,'compass','a') + self.assertEqual(result['edgeRecords'],21) + self.assertEqual(result['omittedRelationKinds'],4) + self.assertEqual(result['omittedRelationRecords'],4) + self.assertEqual([r['relation'] for r in result['relations'][:2]],['r19','r00']) + graph['links'].reverse() + self.assertEqual(result,connectivity(graph,'compass','a')) + + def test_bad_count_direction_and_boolean_counter_fail(self): + expected=connectivity(self.graph(),'compass','a') + self.assertTrue(check_summary(expected,expected)) + for key,value in [('edgeRecords',5),('selfLoopRecords',True),('directed',False)]: + actual=copy.deepcopy(expected);actual[key]=value + self.assertFalse(check_summary(actual,expected)) + actual=copy.deepcopy(expected);actual['relations'][0]['incomingRecords']=0 + self.assertFalse(check_summary(actual,expected)) + + def test_text_rows_must_belong_to_the_right_hub(self): + graph=self.graph();graph['links']=graph['links'][:1] + expected=connectivity(graph,'compass','a') + block='\n kind: function | incident records: 1 | self-loops: 0\n relation "calls": incoming 0, outgoing 1, undirected 0' + text=' 1. A - 1 edges'+block+'\n 2. B - 1 edges' + self.assertTrue(check_text_rows(text,1,expected)) + self.assertFalse(check_text_rows(text,2,expected)) + self.assertFalse(check_text_rows(text.replace('outgoing 1','outgoing 2'),1,expected)) + + def test_review_requires_exact_source_and_contains_paths(self): + with tempfile.TemporaryDirectory() as directory: + root=Path(directory);data=b'class Service:\n pass\n';(root/'a.py').write_bytes(data) + node={'id':'a','name':'Service','source':{'file':'a.py','startLine':1}} + review=dict(id='a',file='a.py',line=1,sourceText=data.decode().rstrip('\n'), + sourceFileSha256=hashlib.sha256(data).hexdigest()) + check_review(review,node,'compass',root) + review['sourceText']='wrong' + with self.assertRaises(ValueError):check_review(review,node,'compass',root) + node['source']['file']='../escape.py';review['file']='../escape.py' + with self.assertRaises(ValueError):check_review(review,node,'compass',root) + + +if __name__ == '__main__': + unittest.main() diff --git a/benchmarks/agent_query/tests/test_hub_navigation.py b/benchmarks/agent_query/tests/test_hub_navigation.py new file mode 100644 index 000000000..916328e9f --- /dev/null +++ b/benchmarks/agent_query/tests/test_hub_navigation.py @@ -0,0 +1,37 @@ +import unittest + +from benchmarks.agent_query.hub_navigation import check_navigation, selectors, server_paths + + +class HubNavigationTests(unittest.TestCase): + def test_server_launch_preserves_the_captured_virtual_environment(self): + run={'servers':{'graphify':{'executable':'/global/python'}}, + 'results':[{'tool':'graphify','argv':['/isolated/env/bin/python']}, + {'tool':'compass','argv':['/frozen/compass']}]} + self.assertEqual(server_paths(run)['graphify'],'/isolated/env/bin/python') + + def test_legacy_selector_is_the_returned_label(self): + row={'response':{'result':{}},'text':'God nodes (most connected):\n 1. run() - 9 edges'} + self.assertEqual(selectors(row),[(1,'run()','display-label')]) + + def test_explicit_selector_preserves_id_bytes(self): + row={'response':{'result':{'structuredContent':{ + 'schema':'compass.mcp.tool-result/1', + 'result':{'schema':'compass.mcp.hubs/1','nodes':[{'id':'A"\\\n','rank':1}]}}}}} + self.assertEqual(selectors(row),[(1,'A"\\\n','explicit-id')]) + + def test_unknown_identity_cannot_be_resolved_by_matching_neighbors(self): + graph={'nodes':[{'id':'a','name':'Alpha'}],'links':[]} + result=check_navigation('Neighbors of Alpha:',graph,'compass',None) + self.assertFalse(result['navigationResolved']) + + def test_neighbor_labels_preserve_multiplicity_between_distinct_nodes(self): + graph={'nodes':[{'id':'a','name':'Alpha'},{'id':'b','name':'run()'}, + {'id':'c','name':'run()'}], + 'links':[{'source':'a','target':'b'},{'source':'a','target':'c'}, + {'source':'a','target':'b'}]} + one='Neighbors of Alpha:\n --> run() [calls] [EXTRACTED]' + self.assertFalse(check_navigation(one,graph,'compass','a')['navigationResolved']) + two=one+'\n --> run() [calls] [EXTRACTED]' + self.assertTrue(check_navigation(two,graph,'compass','a')['navigationResolved']) + self.assertFalse(check_navigation(two.replace('-->','<--'),graph,'compass','a')['navigationResolved']) diff --git a/benchmarks/agent_query/tests/test_java_source_fields.py b/benchmarks/agent_query/tests/test_java_source_fields.py new file mode 100644 index 000000000..66e9228b3 --- /dev/null +++ b/benchmarks/agent_query/tests/test_java_source_fields.py @@ -0,0 +1,169 @@ +import copy +from collections import Counter +import json +from pathlib import Path +import tempfile +import unittest + +from benchmarks.agent_query.java_source_fields import ( + compare, load_capture, position, sha, utf16_to_bytes, +) + +FIXTURES = Path('benchmarks/agent_query/fixtures/java_field_bindings') + + +class JavaSourceFieldsTests(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.manifest = json.loads((FIXTURES / 'adversarial-manifest.json').read_text()) + cls.capture = load_capture(FIXTURES / 'adversarial.jsonl', FIXTURES, cls.manifest['files']) + cls.raw = [json.loads(s) for s in (FIXTURES / 'adversarial.jsonl').read_text().splitlines()] + + def test_utf16_conversion_rejects_split_surrogates_and_non_integer_positions(self): + offsets = utf16_to_bytes('a🧭λ') + self.assertEqual(list(offsets), [0, 1, -1, 5, 7]) + for bad in [2, -1, 5, True, None]: + with self.subTest(bad=bad), self.assertRaises(ValueError): + position(offsets, bad) + self.assertEqual(position(offsets, 4), 7) + + def test_fixture_capture_hash_and_all_44_registered_compiler_cases(self): + manifest = json.loads((FIXTURES / 'scope-manifest.json').read_text()) + self.assertEqual(sha(FIXTURES / 'scope.jsonl'), manifest['captureSha256']) + capture = load_capture(FIXTURES / 'scope.jsonl', + Path('benchmarks/agent_query/fixtures/java_state_access'), manifest['files']) + reg = json.loads(Path('benchmarks/agent_query/java_state_scope_registration.json').read_text()) + fields = {(f['line'], f['name']): key for key, f in reg['fields'].items()} + for case in reg['cases']: + actual = [fields[r['target']['startLine'], r['target']['name']] + for r in capture['references'] if r['line'] == case['line'] and r['target']] + self.assertEqual(Counter(actual), Counter(case['expectedFields']), case['id']) + self.assertEqual(len(capture['references']), 45) + self.assertEqual(sum(not c['expectedFields'] for c in reg['cases']), 8) + + def test_adversarial_source_owners_and_overloads(self): + refs = self.capture['references'] + rows = {line: [r for r in refs if r['line'] == line] for line in [9, 10, 11, 12, 19, 24, 30]} + self.assertEqual(rows[9][0]['owner']['kind'], 'field') + self.assertEqual(rows[10][0]['owner']['kind'], 'class') + self.assertNotEqual(rows[11][0]['owner']['id'], rows[12][0]['owner']['id']) + self.assertEqual(rows[19][0]['owner']['name'], 'lambda') + for line in [24, 30]: + self.assertEqual(rows[line][0]['owner']['name'], 'get') + self.assertEqual(rows[line][0]['target']['startLine'], line - 1) + + def test_compound_multiplicity_constant_folding_and_enum_constants(self): + refs = self.capture['references'] + self.assertEqual([r['name'] for r in refs if r['line'] == 13], ['left', 'right', 'left']) + self.assertEqual([r['name'] for r in refs if r['line'] == 14], ['LIMIT']) + self.assertEqual([r['targetKind'] for r in refs if r['line'] == 35], ['enum_constant']) + self.assertEqual([r['target']['qualified'] for r in refs if r['line'] == 20], + ['bindings.Base::left', 'bindings.BindingFixture::left']) + + def test_external_and_unsupported_raw_spelling_are_preserved(self): + external = [r for r in self.capture['references'] if r['line'] == 15] + self.assertEqual(len(external), 1) + self.assertIsNone(external[0]['target']) + escaped = [r for r in self.capture['references'] if r['line'] == 18][0] + self.assertEqual(escaped['target']['name'], 'x') + self.assertIsNone(escaped['startByte']) + self.assertEqual(len(self.capture['references']), 20) + self.assertEqual(Counter(r['targetOrigin'] for r in self.capture['references']), + {'source': 17, 'external': 1, 'array-length': 1, 'class-literal': 1}) + self.assertEqual(sha(FIXTURES / 'adversarial.jsonl'), self.manifest['captureSha256']) + self.assertEqual(sha(Path('benchmarks/agent_query/java_oracle/FieldBindings.java')), self.manifest['toolSha256']) + + def mutated(self, mutate): + rows = copy.deepcopy(self.raw) + mutate(rows) + with tempfile.TemporaryDirectory() as directory: + p = Path(directory) / 'capture.jsonl' + p.write_text('\n'.join(json.dumps(r) for r in rows) + '\n') + return load_capture(p, FIXTURES, self.manifest['files']) + + def test_incomplete_unknown_schema_and_count_drift_fail(self): + for mutate in [lambda r: r.pop(), lambda r: r[0].update(schema='unknown/2'), + lambda r: r[-1].update(fieldReferences=0), + lambda r: r[-1].update(unboundExpressions=1)]: + with self.subTest(mutate=mutate), self.assertRaises(ValueError): + self.mutated(mutate) + + def test_duplicate_occurrence_and_corrupt_anchor_fail(self): + def duplicate(rows): + rows.insert(-1, next(r for r in rows if r['type'] == 'fieldReference')) + def corrupt(rows): + next(r for r in rows if r['type'] == 'fieldReference')['tokenStartUtf16'] += 1 + for mutate in [duplicate, corrupt]: + with self.subTest(mutate=mutate), self.assertRaises(ValueError): + self.mutated(mutate) + + def test_source_hash_drift_is_not_an_empty_oracle(self): + with self.assertRaises(ValueError): + load_capture(FIXTURES / 'adversarial.jsonl', FIXTURES, {'BindingFixture.java': '0' * 64}) + + def graph(self): + row = next(r for r in self.capture['references'] if r['line'] == 11) + def node(id, decl): + return dict(id=id, kind=decl['kind'], name=decl['name'], source=dict( + file=decl['file'], startByte=decl['startByte'], endByte=decl['endByte'], + startLine=decl['startLine'], endLine=decl['endLine'])) + graph = dict(directed=True, nodes=[node('method', row['owner']), node('field', row['target'])], + links=[dict(id='edge', source='method', target='field', kind='references', + relationshipSite=dict(file=row['file'], startByte=row['startByte'], + endByte=row['endByte'], startLine=row['line']))]) + return graph + + def assess(self, graph, tool='compass'): + return compare(graph, tool, self.capture, self.manifest['files']) + + def test_exact_target_owner_and_occurrence_are_jointly_required(self): + result = self.assess(self.graph()) + self.assertEqual(result['contactStatus'], {'verified_target_and_owner': 1}) + self.assertEqual(result['summary']['field']['exactTargetAndOwner'], 1) + self.assertEqual(result['summary']['field']['unsupportedAnchors'], 1) + + def test_wrong_target_and_wrong_owner_are_distinct(self): + for which, status in [('field', 'wrong_target'), ('method', 'wrong_owner')]: + graph = self.graph() + row = next(r for r in self.capture['references'] if r['line'] == 12) + decl = row['target'] if which == 'field' else row['owner'] + node = next(n for n in graph['nodes'] if n['id'] == which) + node.update(name=decl['name'], source=dict(file=decl['file'], startByte=decl['startByte'], + endByte=decl['endByte'], startLine=decl['startLine'], endLine=decl['endLine'])) + self.assertEqual(self.assess(graph)['contactStatus'], {status: 1}) + + def test_duplicate_declaration_identities_remain_ambiguous(self): + graph = self.graph() + duplicate = dict(graph['nodes'][1], id='other-field') + graph['nodes'].append(duplicate) + result = self.assess(graph) + self.assertEqual(result['contactStatus'], {'ambiguous_target': 1}) + self.assertEqual(result['summary']['field']['exactTargetAndOwner'], 0) + + def test_missing_anchor_is_retained_using_owner_file_only_for_scope(self): + graph = self.graph() + del graph['links'][0]['relationshipSite'] + self.assertEqual(self.assess(graph)['contactStatus'], {'unanchored': 1}) + + def test_graphify_line_contact_is_not_upgraded_to_exact_span(self): + graph = dict(directed=False, nodes=[ + dict(id='method', label='.read()', _callable=True, source_file='BindingFixture.java', source_location='L11'), + dict(id='field', label='left', source_file='BindingFixture.java', source_location='L6')], + links=[dict(source='method', target='field', relation='references', source_file='BindingFixture.java', source_location='L11')]) + result = self.assess(graph, 'graphify') + self.assertEqual(result['contactStatus'], {'unanchored': 1}) + self.assertEqual(result['summary']['field']['exactTargetAndOwner'], 0) + graph['links'][0].update(source='field', target='method') + self.assertEqual(self.assess(graph, 'graphify')['contactStatus'], {'unanchored': 1}) + + def test_duplicate_graph_ids_and_dangling_endpoints_fail(self): + for mutation in [lambda g: g['nodes'].append(g['nodes'][0]), + lambda g: g['links'][0].update(target='absent')]: + graph = self.graph() + mutation(graph) + with self.assertRaises(ValueError): + self.assess(graph) + + +if __name__ == '__main__': + unittest.main() diff --git a/benchmarks/agent_query/tests/test_java_state_scope.py b/benchmarks/agent_query/tests/test_java_state_scope.py new file mode 100644 index 000000000..06a60ebb7 --- /dev/null +++ b/benchmarks/agent_query/tests/test_java_state_scope.py @@ -0,0 +1,197 @@ +import copy +import json +from pathlib import Path +import struct +import tempfile +import unittest + +from benchmarks.agent_query.java_state_scope_audit import ( + ClassReader, field_declaration, graph_inventory, parse_javap, registration, +) + + +DISASSEMBLY = '''Compiled from "Fixture.java" +class audit.Box { + int value; + descriptor: I + + int get(); + descriptor: ()I + Code: + 0: aload_0 + 1: getfield #7 // Field value:I + 4: aload_0 + 5: getfield #7 // Field audit/Other.value:I + 8: iadd + 9: ireturn + LineNumberTable: + line 10: 0 + line 11: 4 + + private int lambda$get$0(); + descriptor: ()I + Code: + 0: aload_0 + 1: getfield #7 // Field value:I + 4: ireturn + LineNumberTable: + line 12: 0 +} +''' + + +def cls(parent=None, fields=(), interfaces=()): + return dict(parent=parent, interfaces=list(interfaces), fields=[ + dict(name=name, descriptor='I', synthetic=False) for name in fields]) + + +class JavaScopeTests(unittest.TestCase): + def test_registered_source_is_unchanged_and_all_targets_exist(self): + reg = registration(Path('benchmarks/agent_query/java_state_scope_registration.json')) + self.assertEqual(len(reg['cases']), 44) + self.assertEqual(sum(not c['expectedFields'] for c in reg['cases']), 8) + self.assertEqual(sum(len(c['expectedFields']) for c in reg['cases']), 45) + + def test_field_bytecodes_keep_offset_owner_and_lambda_method(self): + rows, covered = parse_javap(DISASSEMBLY, 'audit.Box') + self.assertEqual(covered, {10, 11, 12}) + self.assertEqual([(r['owner'], r['line'], r['offset']) for r in rows], + [('audit.Box', 10, 1), ('audit.Other', 11, 5), ('audit.Box', 12, 1)]) + self.assertIn('lambda$get$0', rows[-1]['method']) + + def test_multiplicity_and_repeated_source_line_are_preserved(self): + rows, _ = parse_javap(DISASSEMBLY.replace('line 11: 4', 'line 10: 4'), 'audit.Box') + self.assertEqual(sum(r['line'] == 10 for r in rows), 2) + + def test_field_hiding_uses_declared_bytecode_owner(self): + classes = {'Base': cls(fields=['value']), 'Sub': cls('Base', ['value']), 'Inner': cls('Base')} + self.assertEqual(field_declaration(classes, 'Base', 'value', 'I')['owner'], 'Base') + self.assertEqual(field_declaration(classes, 'Sub', 'value', 'I')['owner'], 'Sub') + self.assertEqual(field_declaration(classes, 'Inner', 'value', 'I')['owner'], 'Base') + + def test_ambiguous_missing_and_cyclic_fields_fail(self): + for classes, owner in [ + ({'A': cls('B'), 'B': cls('A')}, 'A'), + ({'A': cls()}, 'A'), + ({'A': cls(interfaces=['B', 'C']), 'B': cls(fields=['value']), 'C': cls(fields=['value'])}, 'A'), + ]: + with self.subTest(classes=classes), self.assertRaises(ValueError): + field_declaration(classes, owner, 'value', 'I') + + def test_missing_or_ambiguous_line_tables_fail(self): + for text in [DISASSEMBLY.replace(' line 10: 0\n', ''), + DISASSEMBLY.replace('line 11: 4', 'line 11: 0'), + DISASSEMBLY.replace('line 11: 4', 'line 11: 3')]: + with self.subTest(text=text), self.assertRaises(ValueError): + parse_javap(text, 'audit.Box') + + def test_unrecognized_field_instruction_is_not_dropped(self): + with self.assertRaises(ValueError): + parse_javap(DISASSEMBLY.replace('// Field value:I', '// Unexpected value:I'), 'audit.Box') + + def test_empty_or_unordered_bytecode_fails(self): + for text in ['', DISASSEMBLY.replace(' 5: getfield', ' 1: getfield')]: + with self.subTest(text=text), self.assertRaises(ValueError): + parse_javap(text, 'audit.Box') + + def test_class_metadata_and_synthetic_field_flags(self): + def utf(text): + raw = text.encode() + return b'\1' + struct.pack('>H', len(raw)) + raw + # Pool: class name, Class entry, field name, field descriptor. + data = (b'\xca\xfe\xba\xbe' + struct.pack('>HHH', 0, 61, 5) + + utf('audit/Box') + b'\7\0\1' + utf('this$0') + utf('Laudit/Outer;') + + struct.pack('>HHHHH', 0, 2, 0, 0, 1) + + struct.pack('>HHHH', 0x1010, 3, 4, 0)) + result = ClassReader(data).parse() + self.assertEqual(result['owner'], 'audit.Box') + self.assertTrue(result['fields'][0]['synthetic']) + self.assertEqual(result['major'], 61) + with self.assertRaises(ValueError): + ClassReader(data[:-1]).parse() + with self.assertRaises(ValueError): + ClassReader(b'bad!').parse() + + + def test_graph_inventory_never_scores_empty_negatives_as_precision(self): + reg = dict(source='Fixture.java', fields=dict(value=dict(owner='Box', name='value', line=2)), + cases=[dict(id='positive', line=5, expectedFields=['value']), + dict(id='negative', line=6, expectedFields=[])]) + graph = dict(directed=True, nodes=[dict(id='field', name='value', kind='field', + source=dict(file='Fixture.java', startLine=2))], links=[]) + result = graph_inventory(graph, 'compass', reg) + self.assertEqual(result['summary']['uniqueFields'], 1) + self.assertEqual(result['summary']['occurrenceTargetsMatched'], 0) + self.assertEqual(result['summary']['negativeCasesWithContact'], 0) + self.assertIsNone(result['summary']['edgePrecision']) + self.assertFalse(result['summary']['callerOwnershipScored']) + + def test_graph_inventory_retains_duplicates_and_wrong_targets(self): + reg = dict(source='Fixture.java', fields=dict(value=dict(name='value', line=2)), + cases=[dict(id='positive', line=5, expectedFields=['value']), + dict(id='negative', line=6, expectedFields=[])]) + graph = dict(directed=True, nodes=[ + dict(id='field', name='value', kind='field', source=dict(file='Fixture.java', startLine=2)), + dict(id='method', name='get', kind='method', source=dict(file='Fixture.java', startLine=4))], links=[ + dict(id='one', source='method', target='field', kind='references', + relationshipSite=dict(file='Fixture.java', startLine=5)), + dict(id='two', source='method', target='field', kind='references', + relationshipSite=dict(file='Fixture.java', startLine=5)), + dict(id='bad', source='method', target='field', kind='references', + relationshipSite=dict(file='Fixture.java', startLine=6))]) + result = graph_inventory(graph, 'compass', reg) + self.assertEqual(len(result['allContactRecords']), 3) + self.assertEqual(result['summary']['occurrenceTargetsMatched'], 1) + self.assertEqual(result['summary']['negativeCasesWithContact'], 1) + self.assertEqual(result['cases'][0]['unexpectedTargets'], ['value']) + self.assertEqual(result['cases'][1]['unexpectedTargets'], ['value']) + graph['nodes'].append(dict(graph['nodes'][0], id='duplicate')) + result = graph_inventory(graph, 'compass', reg) + self.assertEqual(result['summary']['ambiguousFields'], 1) + self.assertEqual(result['summary']['occurrenceTargetsMatched'], 0) + + def test_graphify_direction_and_absent_occurrence_remain_visible(self): + reg = dict(source='Fixture.java', fields=dict(value=dict(name='value', line=2)), + cases=[dict(id='positive', line=5, expectedFields=['value'])]) + graph = dict(directed=False, nodes=[ + dict(id='f', label='value', source_file='Fixture.java', source_location='L2'), + dict(id='m', label='get', source_file='Fixture.java', source_location='L4')], links=[ + dict(source='m', target='f', relation='references')]) + result = graph_inventory(graph, 'graphify', reg) + self.assertFalse(result['graphDirected']) + self.assertEqual(result['summary']['fieldContactRecords'], 1) + self.assertEqual(result['summary']['occurrenceTargetsMatched'], 0) + graph['links'][0].update(source_file='Fixture.java', source_location='L5') + self.assertEqual(graph_inventory(graph, 'graphify', reg)['summary']['occurrenceTargetsMatched'], 1) + graph['links'][0].update(source='f', target='m') + self.assertEqual(graph_inventory(graph, 'graphify', reg)['summary']['occurrenceTargetsMatched'], 0) + + def test_invalid_graph_identity_fails(self): + reg = dict(source='Fixture.java', fields={}, cases=[]) + for graph in [dict(nodes=[dict(id='x'), dict(id='x')], links=[]), + dict(nodes=[dict(id='x')], links=[dict(source='x', target='missing')])]: + with self.subTest(graph=graph), self.assertRaises(ValueError): + graph_inventory(graph, 'compass', reg) + + + def test_registration_refuses_changed_source_or_unknown_fields(self): + original = json.loads(Path('benchmarks/agent_query/java_state_scope_registration.json').read_text()) + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / 'registration.json' + for mutation in ['hash', 'target', 'duplicate', 'line']: + data = copy.deepcopy(original) + if mutation == 'hash': + data['sourceSha256'] = 'wrong' + elif mutation == 'target': + data['cases'][0]['expectedFields'] = ['invented'] + elif mutation == 'duplicate': + data['cases'].append(data['cases'][0]) + else: + data['cases'][0]['text'] = 'wrong' + path.write_text(json.dumps(data)) + with self.subTest(mutation=mutation), self.assertRaises(ValueError): + registration(path) + + +if __name__ == '__main__': + unittest.main() diff --git a/benchmarks/agent_query/tests/test_mcp_audit.py b/benchmarks/agent_query/tests/test_mcp_audit.py new file mode 100644 index 000000000..dc8fd798c --- /dev/null +++ b/benchmarks/agent_query/tests/test_mcp_audit.py @@ -0,0 +1,91 @@ +import unittest +from benchmarks.agent_query.mcp_audit import audit + + +class McpAuditTests(unittest.TestCase): + def test_new_panel_repository_must_be_captured_exactly_once(self): + from benchmarks.agent_query.mcp_compare import captured_repository + record = {'repository': 'chi'} + self.assertEqual(captured_repository({'repositories': [record]}, 'chi'), record) + for records in [[], [record, record]]: + with self.assertRaises(ValueError): + captured_repository({'repositories': records}, 'chi') + + def test_repository_keys_cannot_escape_raw_capture_directory(self): + from benchmarks.agent_query.mcp_compare import captured_repository + for name in ['../chi', '/chi', 'chi/other', 'chi\\other', '.', '', 'a' * 81, None]: + with self.subTest(name=name), self.assertRaises(ValueError): + captured_repository({'repositories': [{'repository': name}]}, name) + + def test_connection_failure_does_not_remove_remaining_questions(self): + from benchmarks.agent_query.mcp_compare import skipped_results + questions=[('hubs','god_nodes',{'top_n':10}),('community','get_community',{'community_id':0})] + rows=skipped_results('cobra','compass',questions,'digest',['compass']) + self.assertEqual([r['question'] for r in rows],['hubs','community']) + self.assertTrue(all(not r['executionSucceeded'] and r['captureError'] for r in rows)) + + def setUp(self): + self.graph={'nodes':[{'id':'a','name':'Alpha','community':{'id':2},'source':{'file':'a.rs','startLine':1}}, + {'id':'b','name':'Beta','community':{'id':2},'source':{'file':'b.rs','startLine':1}}], + 'links':[{'source':'a','target':'b','kind':'calls'}]} + + def row(self,kind,text,arguments=None): + return {'repository':'fixture','tool':'compass','question':kind,'text':text, + 'arguments':arguments or {},'executionSucceeded':True} + + def test_missing_real_community_fails(self): + r=audit(self.row('community','Community 2 not found.',{'community_id':2}),self.graph) + self.assertFalse(r['membershipMatches']);self.assertEqual(r['missingMembers'],2) + + def test_membership_multiset_and_header(self): + text='Community 2 — Core (2 nodes):\n Alpha [a.rs]\n Beta [b.rs]' + self.assertTrue(audit(self.row('community',text,{'community_id':2}),self.graph)['membershipMatches']) + self.assertFalse(audit(self.row('community',text.replace('Beta [b.rs]','Alpha [a.rs]'),{'community_id':2}),self.graph)['membershipMatches']) + + def test_unambiguous_display_does_not_prove_overloaded_identity(self): + self.graph['nodes'][1]['name']='Alpha' + r=audit(self.row('hubs','God nodes (most connected):\n 1. Alpha - 1 edges'),self.graph) + self.assertEqual(r['verifiedIdentities'],0) + self.assertEqual(r['matchingDegrees'],0) + + def test_degree_collapses_parallel_pairs_and_counts_self_loop_twice(self): + self.graph['links'] += [dict(self.graph['links'][0]),{'source':'a','target':'a','kind':'calls'}] + r=audit(self.row('hubs','God nodes (most connected):\n 1. Alpha - 3 edges'),self.graph) + self.assertEqual(r['matchingDegrees'],1) + + def test_explicit_hub_identity_must_exist_and_match_source(self): + self.graph['nodes'][1]['name']='Alpha' + row=self.row('hubs','God nodes (most connected):\n 1. Alpha - 1 edges') + record={'id':'a','label':'Alpha','degree':1,'rank':1,'sourceFile':'a.rs','startLine':1} + row['response']={'result':{'structuredContent':{'schema':'compass.mcp.tool-result/1', + 'result':{'schema':'compass.mcp.hubs/1','nodes':[record]}}}} + checked=audit(row,self.graph) + self.assertEqual(checked['explicitIdentities'],1) + self.assertEqual(checked['matchingSourceAnchors'],1) + record['sourceFile']='b.rs' + self.assertEqual(audit(row,self.graph)['matchingSourceAnchors'],0) + record['id']='missing' + self.assertEqual(audit(row,self.graph)['verifiedIdentities'],0) + + def test_structured_hubs_cannot_hide_missing_or_duplicate_rows(self): + row=self.row('hubs','God nodes (most connected):\n 1. Alpha - 1 edges\n 2. Alpha - 1 edges') + nodes=[{'id':'a','label':'Alpha','degree':1,'rank':rank,'sourceFile':'a.rs','startLine':1} for rank in (1,2)] + row['response']={'result':{'structuredContent':{'schema':'compass.mcp.tool-result/1', + 'result':{'schema':'compass.mcp.hubs/1','nodes':nodes}}}} + self.assertEqual(audit(row,self.graph)['verifiedIdentities'],1) + nodes.pop() + with self.assertRaises(ValueError):audit(row,self.graph) + + def test_silent_selection_is_not_ambiguity(self): + r=audit(self.row('ambiguous-neighbors','Neighbors of ambiguous_name:\n --> Alpha [calls] [EXTRACTED]'),self.graph) + self.assertFalse(r['ambiguityPreserved']) + self.assertTrue(audit(self.row('ambiguous-neighbors','Ambiguous: choose an ID'),self.graph)['ambiguityPreserved']) + + def test_neighbor_direction_and_missing_relationship(self): + args={'label':'a'} + self.assertTrue(audit(self.row('neighbors','Neighbors of Alpha:\n --> Beta [calls] [EXTRACTED]',args),self.graph)['displayedPairsMatch']) + self.assertFalse(audit(self.row('neighbors','Neighbors of Alpha:\n <-- Beta [calls] [EXTRACTED]',args),self.graph)['displayedPairsMatch']) + + def test_stats_dont_accept_missing_communities(self): + r=audit(self.row('stats','Nodes: 2\nEdges: 1\nCommunities: 0'),self.graph) + self.assertFalse(r['graphCountsMatch']) diff --git a/benchmarks/agent_query/tests/test_mcp_paths.py b/benchmarks/agent_query/tests/test_mcp_paths.py new file mode 100644 index 000000000..47c7fbb54 --- /dev/null +++ b/benchmarks/agent_query/tests/test_mcp_paths.py @@ -0,0 +1,110 @@ +import unittest +from benchmarks.agent_query.mcp_compare import prepare_questions +from benchmarks.agent_query.mcp_path_audit import audit, parse_path + + +class PreparedPathTests(unittest.TestCase): + def question(self, **extra): + return {'pathQuestions':[{'id':'path', 'arguments':{ + 'graphify':{'source':'a','target':'b','max_hops':8,**extra}}}]} + + def test_direction_is_explicit_for_shared_navigation(self): + with self.assertRaises(ValueError):prepare_questions({},'graphify',self.question()) + result=prepare_questions({},'graphify',self.question(undirected=True)) + self.assertEqual(result[0][1],'shortest_path') + + def test_prepared_endpoint_is_not_changed_by_graph_lookup(self): + result=prepare_questions({},'graphify',self.question(undirected=True)) + self.assertEqual(result[0][2]['source'],'a') + + def test_invalid_hop_bound_and_unknown_argument_fail(self): + for extra in [{'undirected':True,'max_hops':True}, {'undirected':True,'other':'bad'}]: + with self.assertRaises(ValueError):prepare_questions({},'graphify',self.question(**extra)) + + def test_prepared_questions_have_a_fixed_count_bound_and_unique_ids(self): + witness=self.question(undirected=True) + witness['pathQuestions'] *= 2 + with self.assertRaises(ValueError):prepare_questions({},'graphify',witness) + witness['pathQuestions'] *= 20 + with self.assertRaises(ValueError):prepare_questions({},'graphify',witness) + + +class PathAuditTests(unittest.TestCase): + def setUp(self): + self.graph={'nodes':[{'id':'a','name':'Alpha'},{'id':'b','name':'Beta'},{'id':'c','name':'Gamma'}], + 'links':[{'source':'a','target':'b','kind':'calls'}, + {'source':'a','target':'b','kind':'references'}]} + + def row(self,text,source='a',target='b',hops=8): + return {'repository':'fixture','tool':'compass','question':'q','text':text, + 'arguments':{'source':source,'target':target,'max_hops':hops},'executionSucceeded':True} + + def check(self,text,outcome='path',**kwargs): + return audit(self.row(text,**kwargs),self.graph,{'expected':{'outcome':outcome}}) + + def test_parallel_relations_and_reverse_navigation(self): + self.assertTrue(self.check('Shortest path (1 hops):\n Alpha --calls/references [EXTRACTED]--> Beta')['matched']) + self.assertTrue(self.check('Shortest path (1 hops):\n Beta <--calls-- Alpha',source='b',target='a')['matched']) + self.assertFalse(self.check('Shortest path (1 hops):\n Alpha <--calls-- Beta')['matched']) + + def test_endpoint_echo_and_unsupported_relation_are_not_paths(self): + self.assertFalse(self.check('Alpha Beta')['matched']) + self.assertFalse(self.check('Shortest path (1 hops):\n Alpha --imports--> Beta')['matched']) + with self.assertRaises(ValueError):parse_path('Shortest path (2 hops):\n Alpha --calls--> Beta') + + def test_missing_and_ambiguous_identity_are_distinct(self): + self.assertFalse(self.check('warning: ambiguous\nShortest path (1 hops):\n Alpha --calls--> Beta','ambiguous')['matched']) + self.assertTrue(self.check('Ambiguous endpoint: choose an ID','ambiguous')['matched']) + self.assertTrue(self.check("No node matching source 'missing' found.",'unresolved',source='missing')['matched']) + + def test_limit_does_not_prove_disconnection(self): + self.assertTrue(self.check('Path exceeds max_hops=0 (1 hops found).','depth-limit',hops=0)['matched']) + self.assertFalse(self.check("No path found between 'Alpha' and 'Beta'.",'depth-limit',hops=0)['matched']) + self.assertTrue(self.check("No path found between 'Alpha' and 'Gamma'.",'disconnected',target='c')['matched']) + + def test_failed_execution_cannot_pass_from_error_text(self): + row=self.row("No node matching source 'missing' found.",source='missing') + row['executionSucceeded']=False + self.assertFalse(audit(row,self.graph,{'expected':{'outcome':'unresolved'}})['matched']) + + def test_structured_negative_status_must_agree_with_text(self): + for outcome,text,target,hops,status in [ + ('depth-limit','No path found within max_hops=0.','b',0,'depth_limit'), + ('disconnected',"No path found between 'Alpha' and 'Gamma'.",'c',8,'disconnected')]: + row=self.row(text,target=target,hops=hops) + payload={'schema':'compass.mcp.path/1','source':'a','target':target,'maxHops':hops,'status':status} + row['response']={'result':{'structuredContent':{'schema':'compass.mcp.tool-result/1','result':payload}}} + question={'expected':{'outcome':outcome}} + self.assertTrue(audit(row,self.graph,question)['matched']) + payload['status']='found' + self.assertFalse(audit(row,self.graph,question)['matched']) + + def test_colliding_display_label_does_not_identify_a_path(self): + self.graph['nodes'].append({'id':'d','name':'Beta'}) + checked=self.check('Shortest path (1 hops):\n Alpha --calls--> Beta') + self.assertFalse(checked['matched']) + self.assertIn('identity',checked['failure']) + + def test_graphify_direction_uses_semantic_markers(self): + graph={'nodes':[{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], + 'links':[{'source':'b','target':'a','_src':'a','_tgt':'b','relation':'calls'}]} + row=self.row('Shortest path (1 hops):\n Alpha --calls [EXTRACTED]--> Beta') + row['tool']='graphify' + self.assertTrue(audit(row,graph,{'expected':{'outcome':'path'}})['matched']) + + def test_label_requests_keep_independent_expected_endpoint_ids(self): + row=self.row('Shortest path (1 hops):\n Alpha --calls--> Beta',source='Alpha',target='Beta') + question={'expected':{'outcome':'path','endpointIds':{'compass':['a','b']}}} + self.assertTrue(audit(row,self.graph,question)['matched']) + + def test_structured_ids_disambiguate_but_must_match_the_recorded_edges(self): + self.graph['nodes'].append({'id':'d','name':'Beta'}) + row=self.row('Shortest path (1 hops):\n Alpha --calls--> Beta') + payload={'schema':'compass.mcp.path/1','status':'found','source':'a','target':'b','maxHops':8,'hops':1, + 'nodes':[{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], + 'steps':[{'from':'a','to':'b','source':'a','target':'b','direction':'forward','relation':'calls','edgeId':None}]} + row['response']={'result':{'structuredContent':{'schema':'compass.mcp.tool-result/1','result':payload}}} + question={'expected':{'outcome':'path'}} + self.assertTrue(audit(row,self.graph,question)['matched']) + payload['steps'][0]['target']='d' + self.assertFalse(audit(row,self.graph,question)['matched']) diff --git a/benchmarks/agent_query/tests/test_mcp_transport.py b/benchmarks/agent_query/tests/test_mcp_transport.py new file mode 100644 index 000000000..5e23e454b --- /dev/null +++ b/benchmarks/agent_query/tests/test_mcp_transport.py @@ -0,0 +1,54 @@ +from pathlib import Path +import sys +import tempfile +import unittest +from unittest.mock import patch + +from benchmarks.agent_query.mcp_transport import StdioMcp + + +class McpTransportTests(unittest.TestCase): + def test_unsupported_platform_fails_before_starting_a_process(self): + with tempfile.TemporaryDirectory() as d: + root = Path(d) + client = StdioMcp([sys.executable], root, root/'capture') + with patch('benchmarks.agent_query.mcp_transport.os.name', 'nt'): + with self.assertRaisesRegex(OSError, 'POSIX'): + client.__enter__() + self.assertFalse((root/'capture').exists()) + + def invoke(self, body, *, timeout=1, max_bytes=4096): + with tempfile.TemporaryDirectory() as d: + root = Path(d) + script = root / 'server.py' + script.write_text('import sys,json,time\nr=json.loads(sys.stdin.readline())\n'+body) + with StdioMcp([sys.executable, str(script)], root, root/'capture', timeout, max_bytes) as client: + return client.send('tools/list', {}) + + def test_response(self): + r = self.invoke('print(json.dumps({"jsonrpc":"2.0","id":r["id"],"result":{"tools":[]}}),flush=True)') + self.assertEqual(r['result']['tools'], []) + + def test_wrong_id(self): + with self.assertRaisesRegex(ValueError, 'ID'): + self.invoke('print(json.dumps({"jsonrpc":"2.0","id":42,"result":{}}),flush=True)') + + def test_eof(self): + with self.assertRaisesRegex(RuntimeError, 'closed stdout'): + self.invoke('pass') + + def test_deadline(self): + with self.assertRaises(TimeoutError): + self.invoke('time.sleep(5)', timeout=.05) + + def test_output_limit(self): + with self.assertRaisesRegex(ValueError, 'byte bound'): + self.invoke('print("x"*5000,flush=True)', max_bytes=100) + + def test_stderr_limit(self): + with self.assertRaisesRegex(ValueError, 'stderr bound'): + self.invoke('print("x"*5000,file=sys.stderr,flush=True);time.sleep(.2)', max_bytes=100) + + def test_notification_then_response(self): + r = self.invoke('print(json.dumps({"jsonrpc":"2.0","method":"notice"}),flush=True)\nprint(json.dumps({"jsonrpc":"2.0","id":r["id"],"result":{}}),flush=True)') + self.assertEqual(r['result'], {}) diff --git a/benchmarks/agent_query/tests/test_member_focus.py b/benchmarks/agent_query/tests/test_member_focus.py new file mode 100644 index 000000000..a9690b8ee --- /dev/null +++ b/benchmarks/agent_query/tests/test_member_focus.py @@ -0,0 +1,85 @@ +import hashlib +import json +from pathlib import Path +import unittest + +from benchmarks.agent_query.member_focus import canonical, focus_groups, focus_terms, name_terms + + +class MemberFocusTests(unittest.TestCase): + def row(self, label, line=1, file='x'): + return dict(label=label, file=file, line=line) + + def test_frozen_lexicon_matches_recorded_production_sources(self): + lexicon = json.loads(Path('benchmarks/agent_query/member_focus_lexicon.json').read_text()) + for file, expected in lexicon['sourceSha256'].items(): + self.assertEqual(hashlib.sha256(Path(file).read_bytes()).hexdigest(), expected) + + def test_terms_match_the_five_captured_native_focus_questions(self): + questions = json.loads(Path('benchmarks/agent_query/responsibility_questions_panel_a.json').read_text()) + prior = json.loads(Path('benchmarks/agent_query/explanation_focus_review.json').read_text()) + for case in questions['cases']: + expected = next(r['focusTerms'] for r in prior['results'] + if r['repository'] == case['repository'] and r['arm'] == 'focused') + self.assertEqual(focus_terms(case['question']), expected) + + def test_case_snake_camel_morphology_and_unicode(self): + terms = set(focus_terms('checking loops')) + for name in ['checkLoop', '.check_loop()', 'CHECK_LOOP']: + self.assertEqual(name_terms(name) & terms, {'check', 'loop'}) + self.assertEqual(name_terms('Résumé'), {'resume'}) + self.assertEqual(focus_terms('résumé'), ['resume']) + self.assertEqual(focus_terms('路由处理'), ['处理', '由处', '路由', '路由处理']) + for raw, expected in [('routing', 'route'), ('dependencies', 'dependency'), + ('mapped', 'map'), ('using', 'use')]: + self.assertEqual(canonical(raw), expected) + + def test_duplicate_query_terms_do_not_add_weight(self): + self.assertEqual(focus_terms('loop loop loops'), ['loop']) + self.assertEqual(focus_groups([self.row('loopLoop')], 'loop')['groups'][0]['score'], 1) + + def test_duplicate_and_alternate_labels_use_maximum_not_union(self): + rows = [self.row('check'), self.row('loop'), self.row('check')] + report = focus_groups(rows, 'check loop') + self.assertEqual(len(report['groups']), 1) + self.assertEqual(report['groups'][0]['score'], 1) + self.assertEqual([r['label'] for r in report['groups'][0]['labels']], ['check', 'loop']) + + def test_highest_score_first_then_source_order_independent_of_rows(self): + rows = [self.row('loop', 3), self.row('loop', 1), self.row('checkLoop', 2)] + expected = focus_groups(rows, 'check loop') + self.assertEqual([g['line'] for g in expected['groups']], [2, 1, 3]) + self.assertEqual(focus_groups(list(reversed(rows)), 'check loop'), expected) + + def test_zero_matches_preserve_all_groups_and_source_order(self): + rows = [self.row('first', 10), self.row('second', 1), self.row('third', 1, 'a')] + report = focus_groups(rows, 'absent') + self.assertEqual([(g['file'], g['line']) for g in report['groups']], [('a', 1), ('x', 1), ('x', 10)]) + self.assertTrue(all(g['score'] == 0 for g in report['groups'])) + + def test_paths_kinds_and_other_tool_metadata_do_not_rank(self): + row = self.row('plain', file='loop/check.rs') + row.update(kind='loop', sourceText='loop', id='loop', score=999) + self.assertEqual(focus_groups([row], 'loop')['groups'][0]['score'], 0) + + def test_empty_invalid_and_excessive_queries_fail(self): + for query in ['', '!!!', None, 'x' * 4097, ' '.join(f'term{i}' for i in range(33))]: + with self.subTest(query=query), self.assertRaises(ValueError): + focus_terms(query) + self.assertEqual(focus_terms('With'), ['with']) + + def test_invalid_labels_and_anchors_fail(self): + for row in [None, {}, self.row('', 1), self.row('loop', True), + self.row('loop', 0), self.row('loop', file=''), self.row('x' * 4097)]: + with self.subTest(row=row), self.assertRaises(ValueError): + focus_groups([row], 'loop') + + def test_row_and_aggregate_metadata_bounds(self): + with self.assertRaises(ValueError): + focus_groups([self.row('loop')] * 10001, 'loop') + with self.assertRaises(ValueError): + focus_groups([self.row('loop', file='x' * 2000)] * 1000, 'loop') + + +if __name__ == '__main__': + unittest.main() diff --git a/benchmarks/agent_query/tests/test_mlcq_corpus.py b/benchmarks/agent_query/tests/test_mlcq_corpus.py new file mode 100644 index 000000000..38d2a3330 --- /dev/null +++ b/benchmarks/agent_query/tests/test_mlcq_corpus.py @@ -0,0 +1,76 @@ +import csv +import io +import unittest + +from benchmarks.agent_query.mlcq_corpus import FIELDS, MAX_BYTES, census, select_cohorts + + +def row(identifier, sample, reviewer, severity='none', **changes): + value = dict(zip(FIELDS, [''] * len(FIELDS))) + value.update(id=str(identifier), sample_id=str(sample), reviewer_id=str(reviewer), + smell='blob', severity=severity, type='class', code_name='org.example.C'+str(sample), + repository='git@github.com:example/project.git', commit_hash='a'*40, + path='/src/C.java', start_line='10', end_line='20') + return value | changes + + +def encode(rows): + output = io.StringIO(newline='') + writer = csv.DictWriter(output, fieldnames=FIELDS, delimiter=';'); writer.writeheader(); writer.writerows(rows) + return output.getvalue().encode() + + +class MlcqCorpusTests(unittest.TestCase): + def test_preserves_disagreement_minor_and_strong_consensus(self): + data = encode([row(1, 1, 1), row(2, 1, 2), row(3, 2, 1, 'major'), row(4, 2, 2, 'critical'), + row(5, 3, 1, 'minor'), row(6, 3, 2, 'minor'), row(7, 4, 1), row(8, 4, 2, 'major')]) + r = census(data) + self.assertEqual([s['classification'] for s in r['samples']], + ['unanimous-none', 'unanimous-major-critical', 'minor-or-disagreement', 'minor-or-disagreement']) + self.assertEqual(r['blobReviews'], 8) + self.assertEqual(select_cohorts(r), []) + + def test_repeated_reviewer_never_creates_an_independent_vote(self): + r = census(encode([row(1, 1, 7, 'major'), row(2, 1, 7, 'major')]))['samples'][0] + self.assertEqual(r['classification'], 'single-reviewer') + self.assertEqual(r['duplicateReviewerRows'], 1) + self.assertEqual(len(r['ratings']), 2) + + def test_same_reviewer_conflict_is_preserved_and_excluded(self): + r = census(encode([row(1, 1, 1), row(2, 1, 1, 'major'), row(3, 1, 2)])) + self.assertEqual(r['samples'][0]['classification'], 'conflicting-same-reviewer') + + def test_selection_retains_all_secondary_samples_and_is_order_independent(self): + rows = [] + for sample in range(1, 5): + for reviewer in [1, 2]: + rows.append(row(len(rows)+1, sample, reviewer, 'major' if sample <= 2 else 'none')) + rows.append(row(9, 5, 1, 'minor')) + first, second = census(encode(rows)), census(encode(rows[::-1])) + self.assertEqual(select_cohorts(first), select_cohorts(second)) + self.assertEqual(len(select_cohorts(first)), 5) + self.assertTrue(first['projects'][0]['eligible']) + + def test_identity_conflicts_and_duplicate_review_ids_fail(self): + for rows in [[row(1, 1, 1), row(2, 1, 2, path='/elsewhere.java')], + [row(1, 1, 1), row(1, 2, 1)]]: + with self.assertRaises(ValueError): census(encode(rows)) + + def test_paths_revisions_and_line_bounds_fail_closed(self): + for changes in [dict(path='/../x.java'), dict(path='//x.java'), dict(path='/a/./b.java'), + dict(path='a\\b.java'), dict(commit_hash='main'), dict(start_line='0'), + dict(end_line='9'), dict(repository='https://attacker.invalid/x'), dict(severity='high')]: + with self.subTest(changes=changes), self.assertRaises(ValueError): + census(encode([row(1, 1, 1, **changes)])) + + def test_nonblob_rows_do_not_become_clean_class_samples(self): + r = census(encode([row(1, 1, 1, smell='long method', type='function')])) + self.assertEqual(r['totalReviews'], 1) + self.assertEqual(r['blobSamples'], 0) + + def test_schema_and_byte_bounds(self): + for data in [b'x;y\n1;2\n', b'x'*(MAX_BYTES+1)]: + with self.assertRaises(ValueError): census(data) + + +if __name__ == '__main__': unittest.main() diff --git a/benchmarks/agent_query/tests/test_mlcq_hubs.py b/benchmarks/agent_query/tests/test_mlcq_hubs.py new file mode 100644 index 000000000..ed3bb30ba --- /dev/null +++ b/benchmarks/agent_query/tests/test_mlcq_hubs.py @@ -0,0 +1,80 @@ +import unittest + +from benchmarks.agent_query.mlcq_hubs import evaluate_ranking + + +def node(identifier, name='C', file='C.java', line=1): + return dict(id=identifier, label=name, source_file=file, source_location=f'L{line}') + + +def score(nodes, text=' 1. C - 1 edges', success=True, rating='unanimous-major-critical'): + return evaluate_ranking('graphify', 'r', dict(text=text, executionSucceeded=success), + dict(nodes=nodes, links=[]), + [dict(repository='r', sampleId=1, classification=rating)], + [dict(repository='r', sampleId=1, file='C.java', line=1, symbol='C')]) + + +class MlcqHubTests(unittest.TestCase): + def test_exact_unique_identity_and_degree_are_separate(self): + result = score([node('c')]) + self.assertEqual(result['cases'][0]['atCutoff']['10'], 'retrieved') + self.assertFalse(result['graphConsistency']['hubs'][0]['degreeMatches']) + + def test_unlabeled_hubs_are_not_false_positives(self): + result = score([node('c'), node('d', 'D')], ' 1. D - 7 edges') + self.assertEqual(result['cutoffs']['10']['unanimous-major-critical'], {'not-returned': 1}) + self.assertEqual(result['cutoffs']['10']['unanimous-none'], {}) + + def test_duplicate_label_cannot_borrow_source_identity(self): + result = score([node('c'), node('d', file='Other.java')]) + self.assertEqual(result['cases'][0]['graphIds'], ['c']) + self.assertEqual(result['cases'][0]['atCutoff']['100'], 'ambiguous-output') + self.assertIsNone(result['cases'][0]['rank']) + + def test_missing_and_ambiguous_source_are_distinct(self): + self.assertEqual(score([node('x', file='X.java')])['cases'][0]['atCutoff']['10'], 'source-missing') + self.assertEqual(score([node('c'), node('d')])['cases'][0]['atCutoff']['10'], 'source-ambiguous') + + def test_failed_capture_keeps_denominator(self): + result = score([], success=False) + self.assertEqual(result['cutoffs']['100']['unanimous-major-critical'], {'capture-unavailable': 1}) + + def test_none_rating_is_not_treated_as_positive(self): + result = score([node('c')], rating='unanimous-none') + self.assertEqual(result['cutoffs']['10']['unanimous-none'], {'retrieved': 1}) + self.assertEqual(result['cutoffs']['10']['unanimous-major-critical'], {}) + + def test_cutoffs_do_not_use_future_rank(self): + nodes = [node(str(i), f'D{i}', f'D{i}.java') for i in range(10)] + [node('c')] + text = '\n'.join(f" {i+1}. {n['label']} - 1 edges" for i,n in enumerate(nodes)) + result = score(nodes, text)['cases'][0] + self.assertEqual(result['rank'], 11) + self.assertEqual(result['atCutoff'], {'10':'not-returned', '50':'retrieved', '100':'retrieved'}) + + def test_compass_explicit_id_resolves_duplicate_display_names(self): + nodes=[dict(id='c',name='C',source=dict(file='C.java',startLine=1)), + dict(id='d',name='C',source=dict(file='Other.java',startLine=1))] + record=dict(id='c',label='C',rank=1,degree=1,sourceFile='C.java',startLine=1) + call=dict(executionSucceeded=True,text=' 1. C - 1 edges',response=dict(result=dict( + structuredContent=dict(schema='compass.mcp.tool-result/1',result=dict( + schema='compass.mcp.hubs/1',nodes=[record]))))) + samples=[dict(repository='r',sampleId=1,classification='unanimous-none')] + witnesses=[dict(repository='r',sampleId=1,file='C.java',line=1,symbol='C')] + result=evaluate_ranking('compass','r',call,dict(nodes=nodes,links=[]),samples,witnesses) + self.assertEqual(result['cases'][0]['atCutoff']['10'],'retrieved') + record['id']='invented' + with self.assertRaises(ValueError): + evaluate_ranking('compass','r',call,dict(nodes=nodes,links=[]),samples,witnesses) + + def test_duplicate_graph_ids_and_incomplete_witnesses_fail_closed(self): + with self.assertRaises(ValueError): score([node('c'),node('c')]) + with self.assertRaises(ValueError): + evaluate_ranking('graphify','r',None,None, + [dict(repository='r',sampleId=1,classification='unanimous-none')],[]) + + def test_invalid_rank_and_repeated_identity_rejected(self): + for text in ['', ' 2. C - 1 edges', ' 1. C - 1 edges\n 2. C - 1 edges']: + with self.subTest(text=text), self.assertRaises(ValueError): score([node('c')], text) + + +if __name__ == '__main__': unittest.main() diff --git a/benchmarks/agent_query/tests/test_neighbor_identity.py b/benchmarks/agent_query/tests/test_neighbor_identity.py new file mode 100644 index 000000000..dc109c039 --- /dev/null +++ b/benchmarks/agent_query/tests/test_neighbor_identity.py @@ -0,0 +1,83 @@ +import copy +import unittest + +from benchmarks.agent_query.neighbor_identity import audit_direct, destination_request + + +class NeighborIdentityTests(unittest.TestCase): + def fixture(self): + graph=dict(directed=True,nodes=[dict(id='a',name='run'),dict(id='b',name='close'),dict(id='c',name='close')], + links=[dict(id='call',source='a',target='b',kind='calls',evidence=[dict(origin='ast')])]) + body=dict(schema='compass.query.neighbors/1', directionBasis='stored-endpoints',graphDirected=True, + seed=graph['nodes'][0], relationFilter='calls', truncated=False, + neighbors=[dict(direction='outgoing',node=graph['nodes'][1],edges=graph['links'])]) + call=dict(executionSucceeded=True,response=dict(result=dict(structuredContent=dict( + schema='compass.mcp.tool-result/1',transportTruncation=dict(truncated=False),result=copy.deepcopy(body))))) + return graph,call + + def test_explicit_identity_is_supported_even_when_label_collides(self): + graph,call=self.fixture() + result=audit_direct(call,graph,'compass','a','b') + self.assertTrue(result['explicitDestinationSupported']) + self.assertTrue(result['fullProjectionMatches']) + + def test_mutated_ids_records_anchors_direction_and_truncation_cannot_pass(self): + for variant in ['id','edge','direction','seed','node','duplicate','missing','truncated','schema','transport']: + graph,call=self.fixture(); envelope=call['response']['result']['structuredContent']; b=envelope['result'] + if variant=='id': b['neighbors'][0]['node']['id']='c' + elif variant=='edge': b['neighbors'][0]['edges'][0]['evidence'][0]['origin']='invented' + elif variant=='direction': b['neighbors'][0]['direction']='incoming' + elif variant=='seed': b['seed']['id']='c' + elif variant=='node': b['neighbors'][0]['node']['source']=dict(file='invented.rs',startLine=1) + elif variant=='duplicate': b['neighbors'].append(copy.deepcopy(b['neighbors'][0])) + elif variant=='missing': b['neighbors'][0]['edges']=[] + elif variant=='truncated': b['truncated']=True + elif variant=='schema': b['schema']='compass.query.neighbors/99' + else: envelope['transportTruncation']['truncated']=True + self.assertFalse(audit_direct(call,graph,'compass','a','b')['explicitDestinationSupported'],variant) + + def test_legacy_text_does_not_turn_unique_labels_into_explicit_ids(self): + graph,call=self.fixture() + call['response']['result'].pop('structuredContent') + call['text']='Neighbors of run:\n --> close [calls] [EXTRACTED]' + for tool in ['compass','graphify']: + self.assertFalse(audit_direct(call,graph,tool,'a','b')['explicitDestinationSupported']) + + def test_parallel_record_loss_and_extra_records_fail_projection(self): + graph,call=self.fixture() + graph['links'].append(copy.deepcopy(graph['links'][0])) + self.assertFalse(audit_direct(call,graph,'compass','a','b')['fullProjectionMatches']) + call['response']['result']['structuredContent']['result']['neighbors'][0]['edges'].append(copy.deepcopy(graph['links'][0])) + self.assertTrue(audit_direct(call,graph,'compass','a','b')['fullProjectionMatches']) + + def test_unfiltered_projection_keeps_noncall_relations(self): + graph,call=self.fixture() + body=call['response']['result']['structuredContent']['result'] + body['relationFilter']='' + edge=dict(id='contains',source='a',target='c',kind='contains') + graph['links'].append(edge) + self.assertFalse(audit_direct(call,graph,'compass','a',None,relation_filter=None)['fullProjectionMatches']) + body['neighbors'].append(dict(direction='outgoing',node=graph['nodes'][2],edges=[edge])) + self.assertTrue(audit_direct(call,graph,'compass','a',None,relation_filter=None)['fullProjectionMatches']) + self.assertFalse(audit_direct(call,graph,'compass','a',None)['fullProjectionMatches']) + + def test_unfiltered_projection_requires_the_native_string_filter(self): + for value in [None, 'calls', 0, False]: + graph,call=self.fixture() + call['response']['result']['structuredContent']['result']['relationFilter']=value + self.assertFalse(audit_direct(call,graph,'compass','a',None,relation_filter=None)['fullProjectionMatches'],value) + graph,call=self.fixture() + del call['response']['result']['structuredContent']['result']['relationFilter'] + self.assertFalse(audit_direct(call,graph,'compass','a',None,relation_filter=None)['fullProjectionMatches']) + + def test_followup_uses_only_returned_outgoing_symbol_and_public_coordinates(self): + target=dict(file='src/a.py',symbol='close',startLine=10) + call=dict(executionSucceeded=True,text='Neighbors of run:\n --> close() [calls] [EXTRACTED]') + self.assertEqual(destination_request('compass',call,target)['arguments']['query'],'close') + self.assertEqual(destination_request('graphify',call,target)['arguments']['label'],'src/a.py::close') + for text in [' <-- close() [calls] [EXTRACTED]',' --> close() [contains] [EXTRACTED]', ' --> other() [calls] [EXTRACTED]']: + self.assertIsNone(destination_request('compass',dict(executionSucceeded=True,text=text),target)) + self.assertIsNone(destination_request('compass',dict(executionSucceeded=False,text=call['text']),target)) + + +if __name__=='__main__': unittest.main() diff --git a/benchmarks/agent_query/tests/test_path_audit.py b/benchmarks/agent_query/tests/test_path_audit.py new file mode 100644 index 000000000..e143b47dd --- /dev/null +++ b/benchmarks/agent_query/tests/test_path_audit.py @@ -0,0 +1,149 @@ +from __future__ import annotations + +import copy +from pathlib import Path +import tempfile +import unittest + +from benchmarks.agent_query.path_audit import audit_observation, audit_path, parse_path + + +class PathAuditTests(unittest.TestCase): + def setUp(self) -> None: + self.temporary = tempfile.TemporaryDirectory() + self.addCleanup(self.temporary.cleanup) + self.root = Path(self.temporary.name) + (self.root / "code.rs").write_text("fn start() {}\nfn finish() {}\nfinish();\n") + self.witness = { + "category": "call", + "nodes": [ + {"file": "code.rs", "line": 1, "text": "fn start()", "labels": ["start()"]}, + {"file": "code.rs", "line": 2, "text": "fn finish()", "labels": ["finish()"]}, + ], + "steps": [{"relations": ["calls"], "direction": "forward", + "site": {"file": "code.rs", "line": 3, "text": "finish();"}}], + } + self.compass = { + "nodes": [ + {"id": "s", "name": "start()", "source": {"file": "code.rs", "startLine": 1}}, + {"id": "t", "name": "finish()", "source": {"file": "code.rs", "startLine": 2}}, + ], + "edges": [{"source": "s", "target": "t", "kind": "calls", + "relationshipSite": {"file": "code.rs", "startLine": 3}}], + } + self.graphify = { + "nodes": [ + {"id": "s", "label": "start()", "source_file": "code.rs", "source_location": "L1"}, + {"id": "t", "label": "finish()", "source_file": "code.rs", "source_location": "L2"}, + ], + "links": [{"source": "t", "target": "s", "_src": "s", "_tgt": "t", + "relation": "calls", "source_file": "code.rs", "source_location": "L3"}], + } + self.output = "Shortest path (1 hops):\n start() --calls [EXTRACTED]--> finish()\n" + + def audit(self, graph=None, output=None, tool="compass"): + return audit_path(self.witness, tool, graph or self.compass, + self.output if output is None else output, self.root) + + def test_both_formats_and_semantic_direction_are_supported(self) -> None: + self.assertTrue(self.audit()["matched"]) + result = self.audit(self.graphify, tool="graphify") + self.assertTrue(result["matched"]) + self.assertTrue(result["steps"][0]["reviewedSiteSupported"]) + compass = self.output.replace("Shortest path (1 hops)", "Best path (weighted, 1 hops, weight 1)") + self.assertTrue(self.audit(output=compass)["matched"]) + + def test_endpoint_mentions_and_false_headers_do_not_prove_a_path(self) -> None: + for text in ("start() finish()", "No path found between start() and finish()", + self.output.replace("1 hops", "2 hops"), self.output + self.output): + with self.subTest(text=text): + self.assertFalse(self.audit(output=text)["matched"]) + + def test_wrong_printed_direction_and_relation_fail(self) -> None: + for text in (self.output.replace("--calls [EXTRACTED]-->", "<--calls [EXTRACTED]--"), + self.output.replace("--calls", "--references")): + self.assertFalse(self.audit(output=text)["matched"]) + + def test_missing_or_reversed_graph_edge_fails(self) -> None: + graph = copy.deepcopy(self.compass) + graph["edges"] = [] + self.assertFalse(self.audit(graph)["matched"]) + graph["edges"] = [{"source": "t", "target": "s", "kind": "calls"}] + self.assertFalse(self.audit(graph)["matched"]) + + def test_wrong_occurrence_and_wrong_declaration_fail(self) -> None: + for field in ("site", "declaration"): + graph = copy.deepcopy(self.compass) + if field == "site": + graph["edges"][0]["relationshipSite"]["startLine"] = 2 + else: + graph["nodes"][0]["source"]["startLine"] = 2 + self.assertFalse(self.audit(graph)["matched"]) + + def test_ambiguous_labels_are_not_resolved_using_the_expected_answer(self) -> None: + graph = copy.deepcopy(self.compass) + rival = copy.deepcopy(graph["nodes"][0]) + rival["id"] = "other" + rival["source"]["file"] = "elsewhere.rs" + graph["nodes"].append(rival) + result = self.audit(graph) + self.assertFalse(result["matched"]) + self.assertIn("unverified identity", result["failures"][0]) + + def test_source_witness_drift_fails_instead_of_scoring(self) -> None: + (self.root / "code.rs").write_text("changed\n") + with self.assertRaisesRegex(ValueError, "source witness changed"): + self.audit() + + def test_coarse_relation_uses_its_own_reviewed_source_site(self) -> None: + step = self.witness["steps"][0] + step["relations"].append("references") + step["sitesByRelation"] = { + "calls": step.pop("site"), + "references": {"file": "code.rs", "line": 1, "text": "fn start()"}, + } + graph = copy.deepcopy(self.compass) + graph["edges"][0]["kind"] = "references" + output = self.output.replace("--calls", "--references") + self.assertFalse(self.audit(graph, output)["matched"]) + graph["edges"][0]["relationshipSite"]["startLine"] = 1 + self.assertTrue(self.audit(graph, output)["matched"]) + graph["edges"][0]["relationshipSite"]["startLine"] = True + self.assertFalse(self.audit(graph, output)["matched"]) + + def test_invalid_or_duplicate_ids_fail_instead_of_scoring(self) -> None: + for identity in (None, "", 1, "s"): + graph = copy.deepcopy(self.compass) + graph["nodes"][1]["id"] = identity + with self.subTest(identity=identity), self.assertRaisesRegex(ValueError, "graph node IDs"): + self.audit(graph) + + def test_hop_count_is_bounded(self) -> None: + with self.assertRaises(ValueError): + parse_path("Shortest path (1000000 hops):\n start()\n") + + def test_unsuccessful_execution_never_passes_even_with_a_valid_path(self) -> None: + successful = {"exitCode": 0, "timedOut": False, "followUps": 0} + for output in ("", self.output): + for field, value, reason in (("exitCode", 1, "command exited"), + ("timedOut", True, "timed out"), + ("followUps", 1, "multiple responses")): + observation = {**successful, field: value} + with self.subTest(field=field, output=output): + result = audit_observation(self.witness, "compass", self.compass, + output, self.root, observation) + self.assertFalse(result["matched"]) + self.assertEqual(result["execution"], observation) + self.assertTrue(any(reason in failure for failure in result["failures"])) + self.assertTrue(audit_observation(self.witness, "compass", self.compass, + self.output, self.root, successful)["matched"]) + + def test_source_drift_still_aborts_an_unsuccessful_execution(self) -> None: + (self.root / "code.rs").write_text("changed\n") + with self.assertRaisesRegex(ValueError, "source witness changed"): + audit_observation(self.witness, "compass", self.compass, "", self.root, + {"exitCode": 1, "timedOut": False, "followUps": 0}) + + +if __name__ == "__main__": + unittest.main() diff --git a/benchmarks/agent_query/tests/test_public_neighbor_paths.py b/benchmarks/agent_query/tests/test_public_neighbor_paths.py new file mode 100644 index 000000000..3c6c1d813 --- /dev/null +++ b/benchmarks/agent_query/tests/test_public_neighbor_paths.py @@ -0,0 +1,181 @@ +import copy +import itertools +import unittest + +from benchmarks.agent_query.public_neighbor_paths import ( + PublicWalk, WorkflowStop, graphify_node, neighbors, +) + + +BOUNDS = dict(maxDepth=8, maxExpandedNodes=128, maxRequests=512, + maxOutgoingGroups=8192, maxWorkflowResponseBytes=16777216, + workflowTimeoutSeconds=180, graphifyTokenBudget=262144) + + +def node(identifier): + return dict(id=identifier, label=identifier, file='fixture.rs', line=ord(identifier[0])) + + +def raw_node(identifier): + n = node(identifier) + return dict(id=identifier, name=n['label'], source=dict(file=n['file'], startLine=n['line'])) + + +def compass_response(seed, targets): + body = dict(schema='compass.query.neighbors/1', directionBasis='stored-endpoints', + graphDirected=True, relationFilter='calls', truncated=False, + seed=raw_node(seed), neighbors=[]) + for target in targets: + body['neighbors'].append(dict(direction='outgoing', node=raw_node(target), edges=[ + dict(source=seed, target=target, kind='calls', id=seed+target, + evidence=[dict(origin='ast', confidence='exact')])])) + return dict(executionSucceeded=True, wireResponseBytes=100, response=dict(result=dict( + structuredContent=dict(schema='compass.mcp.tool-result/1', result=body, + transportTruncation=dict(truncated=False))))) + + +def graphify_response(text): + return dict(executionSucceeded=True, text=text, wireResponseBytes=100) + + +class PublicNeighborPathTests(unittest.TestCase): + def walk(self, edges, **bounds): + def invoke(method, args): + self.assertEqual(method, 'get_neighbors') + self.assertEqual(args['relation_filter'], 'calls') + return compass_response(args['label'], edges.get(args['label'], [])) + return PublicWalk('compass', invoke, BOUNDS | bounds) + + def test_breadth_first_directed_deterministic_and_cycles(self): + for ordering in [['d', 'b'], ['b', 'd']]: + walk = self.walk(dict(a=ordering, b=['a', 'c'], c=['z'], d=['z'])) + result = walk.walk(node('a'), node('z')) + self.assertEqual([n['id'] for n in result['nodes']], ['a', 'd', 'z']) + self.assertEqual(walk.expanded, 3) + + def test_same_node_needs_no_request(self): + walk = self.walk({}) + self.assertEqual(walk.walk(node('a'), node('a'))['steps'], []) + self.assertEqual(walk.metrics()['requests'], 0) + + def test_depth_limit_and_closed_cycle_never_prove_global_absence(self): + for edges, frontier in [(dict(a=['b'], b=['z']), True), (dict(a=['a']), False)]: + result = self.walk(edges, maxDepth=1).walk(node('a'), node('z')) + self.assertEqual(result['status'], 'no-path-in-public-projection') + self.assertEqual(result['depthFrontier'], frontier) + self.assertFalse(result['globalAbsenceProven']) + + def test_request_node_group_byte_and_time_bounds(self): + for bounds, reason in [({'maxRequests': 1}, 'request-limit'), + ({'maxExpandedNodes': 1}, 'expanded-node-limit'), + ({'maxOutgoingGroups': 0}, 'outgoing-group-limit'), + ({'maxWorkflowResponseBytes': 99}, 'workflow-response-byte-limit'), + ({'workflowTimeoutSeconds': 0}, 'workflow-time-limit')]: + with self.subTest(bounds=bounds), self.assertRaisesRegex(WorkflowStop, reason): + self.walk(dict(a=['b'], b=['z']), **bounds).walk(node('a'), node('z')) + + def test_endpoint_requests_share_budget(self): + walk = self.walk(dict(a=['z']), maxRequests=1) + walk.request('get_neighbors', dict(label='a', relation_filter='calls')) + with self.assertRaisesRegex(WorkflowStop, 'request-limit'): + walk.walk(node('a'), node('z')) + + def test_transport_failure_stops_without_retry(self): + walk = PublicWalk('compass', lambda *_: dict(captureError='closed'), BOUNDS) + with self.assertRaisesRegex(WorkflowStop, 'transport-error'): + walk.walk(node('a'), node('z')) + self.assertEqual(len(walk.calls), 1) + + def test_incoming_and_heuristic_edges_excluded(self): + response = compass_response('a', ['b', 'c']) + groups = response['response']['result']['structuredContent']['result']['neighbors'] + groups[0]['direction'] = 'incoming' + groups[1]['edges'][0]['evidence'][0]['confidence'] = 'heuristic' + self.assertEqual(neighbors('compass', response, node('a')), []) + + def test_bad_identity_direction_filter_record_or_truncation_stops(self): + for field in ['seed', 'direction', 'filter', 'edge', 'transport', 'truncated']: + response = compass_response('a', ['z']) + env = response['response']['result']['structuredContent']; body = env['result'] + if field == 'seed': body['seed']['id'] = 'wrong' + elif field == 'direction': body['directionBasis'] = 'undirected' + elif field == 'filter': body['relationFilter'] = '' + elif field == 'edge': body['neighbors'][0]['edges'][0]['target'] = 'wrong' + elif field == 'transport': env['transportTruncation']['truncated'] = True + else: body['truncated'] = True + with self.subTest(field=field), self.assertRaises(WorkflowStop): + neighbors('compass', response, node('a')) + + def test_parallel_records_retained(self): + response = compass_response('a', ['z']) + group = response['response']['result']['structuredContent']['result']['neighbors'][0] + extra = copy.deepcopy(group['edges'][0]); extra['id'] = 'second'; group['edges'].append(extra) + self.assertEqual(len(neighbors('compass', response, node('a'))[0]['records']), 2) + + def test_graphify_resolver_refuses_ambiguity_fuzzy_labels_and_missing_anchors(self): + valid = graphify_response('Node: close()\n ID: abc\n Source: a.py L10-L20') + self.assertEqual(graphify_node(valid, 'close()')['id'], 'abc') + self.assertIsNone(graphify_node(valid, 'close')) + for text in ['Ambiguous: close\n id: abc', 'Node: close()\n ID: abc', + valid['text']+'\nNode: close()']: + self.assertIsNone(graphify_node(graphify_response(text), 'close()')) + + def test_graphify_text_direction_relation_confidence_and_truncation(self): + text = ('Neighbors of a:\n --> z [calls] [EXTRACTED] at=a.py:L3\n' + ' <-- c [calls] [EXTRACTED]\n --> d [calls] [INFERRED]\n' + ' --> e [calls_extra] [EXTRACTED]') + self.assertEqual([g['label'] for g in neighbors('graphify', graphify_response(text), node('a'))], ['z']) + for malformed in ['[!] TRUNCATED\n'+text, text+'\n... truncated', text.replace('Neighbors of a', 'Neighbors of b')]: + with self.assertRaises(WorkflowStop): + neighbors('graphify', graphify_response(malformed), node('a')) + + def test_graphify_labels_resolved_once_failures_cached_and_costed(self): + def invoke(method, args): + if method == 'get_node': + return graphify_response('Node: b\n ID: b\n Source: fixture.rs L98') if args['label'] == 'b' else graphify_response('Ambiguous: missing') + self.assertEqual(args['relation_filter'], 'calls') + return graphify_response('Neighbors of '+args['label']+':\n --> b [calls] [EXTRACTED]\n --> missing [calls] [EXTRACTED]') + walk = PublicWalk('graphify', invoke, BOUNDS) + result = walk.walk(node('a'), node('z')) + self.assertEqual(len(walk.calls), 4) # two expansions, two cached resolutions + self.assertEqual(walk.bytes, 400) + self.assertTrue(result['identityIncomplete']) + self.assertEqual(len(walk.identity_gaps), 2) + + def test_graphify_success_retains_sites_and_charges_bridge_lookups(self): + def invoke(method, args): + if method == 'get_node': + n = node(args['label']) + return graphify_response(f"Node: {n['label']}\n ID: {n['id']}\n Source: fixture.rs L{n['line']}") + target = dict(a='b', b='z')[args['label']] + return graphify_response(f"Neighbors of {args['label']}:\n --> {target} [calls] [EXTRACTED] at=fixture.rs:L2") + walk = PublicWalk('graphify', invoke, BOUNDS) + result = walk.walk(node('a'), node('z')) + self.assertEqual([n['id'] for n in result['nodes']], ['a', 'b', 'z']) + self.assertEqual(result['steps'][0]['records'][0]['site'], 'fixture.rs:L2') + self.assertEqual(walk.metrics()['requests'], 4) + + def test_independent_simple_path_oracle_all_four_node_directed_graphs(self): + # All 4096 directed simple graphs, including cycles. Enumerate simple + # paths by permutations independently of the production FIFO walk. + vertices = 'abcd' + pairs = [(a, b) for a in vertices for b in vertices if a != b] + for mask in range(1 << len(pairs)): + edges = {v: [] for v in vertices} + for i, (a, b) in enumerate(pairs): + if mask & (1 << i): edges[a].append(b) + lengths = [] + for count in range(3): + for middle in itertools.permutations('bc', count): + route = ('a', *middle, 'd') + if all(b in edges[a] for a, b in zip(route, route[1:])): + lengths.append(len(route)-1) + for depth in [1, 2, 3]: + result = self.walk(edges, maxDepth=depth).walk(node('a'), node('d')) + expected = min(lengths) if lengths and min(lengths) <= depth else None + actual = len(result['steps']) if result['status'] == 'candidate-path' else None + self.assertEqual(actual, expected, (mask, depth)) + + +if __name__ == '__main__': + unittest.main() diff --git a/benchmarks/agent_query/tests/test_runner.py b/benchmarks/agent_query/tests/test_runner.py index 44bd726e9..90e7d1cf5 100644 --- a/benchmarks/agent_query/tests/test_runner.py +++ b/benchmarks/agent_query/tests/test_runner.py @@ -3,10 +3,19 @@ import json from pathlib import Path import tempfile +import sys +import subprocess import unittest +from unittest.mock import patch from benchmarks.agent_query.runner import ( Anchor, + CommandResult, + _compass_graph, + _verify_source, + prepare_repository, + run_question, + run_bounded, Question, Repository, _paired_summary, @@ -14,6 +23,7 @@ graph_metrics, judge, load_suite, + render_report, ) ROOT = Path(__file__).resolve().parents[1] @@ -41,6 +51,51 @@ def question(**overrides) -> Question: class SuiteTests(unittest.TestCase): + def test_ask_suite_uses_identical_questions_and_budgets(self) -> None: + suite = load_suite(ROOT / "suite_ask.toml") + self.assertEqual({r.language for r in suite.repositories}, + {"Go", "Python", "Java", "TypeScript", "Rust"}) + for repository in suite.repositories: + self.assertEqual({q.kind for q in repository.questions}, {"callers", "callees"}) + self.assertEqual(len(repository.questions), 2) + for question in repository.questions: + self.assertEqual(question.compass, ("ask", question.subject, "--text-budget", "2000")) + self.assertEqual(question.graphify, ("query", question.subject, "--budget", "2000")) + self.assertEqual(question.max_follow_ups, 0) + self.assertIn("Same source fact", question.judgment) + + def test_fd_source_first_inputs_remain_distinct_and_pinned(self) -> None: + suite = load_suite(ROOT / "suite_fd.toml") + self.assertEqual(len(suite.repositories), 1) + repository = suite.repository("fd") + self.assertEqual(len(repository.questions), 12) + self.assertEqual(len(repository.anchors), 5) + manifest = json.loads((ROOT / "edge_witnesses_fd.json").read_text()) + self.assertEqual(manifest["schema"], "compass.agent-edge-witnesses/1") + self.assertEqual(manifest["repository"], repository.name) + self.assertEqual(manifest["commit"], repository.commit) + witnesses = manifest["witnesses"] + self.assertEqual(len({row["id"] for row in witnesses}), 12) + self.assertEqual(sum(row["expected"] == "present" for row in witnesses), 10) + self.assertEqual(sum(len(row["occurrences"]) for row in witnesses), 16) + for row in witnesses: + self.assertEqual(bool(row["occurrences"]), row["expected"] == "present") + self.assertTrue(row["judgment"]) + for question in repository.questions: + self.assertNotIn("--brief", question.compass) + if question.kind in {"path", "file_path"}: + self.assertIn("--undirected", question.graphify) + + def test_report_describes_the_actual_repository_count(self) -> None: + run = {"runId": "test", "suiteDigest": "digest", "startedAt": "date", + "tools": [], "graphMetrics": [], "observations": [], "questions": [], + "summaries": {}, "paired": {}, "repositories": [{"repository": "fd"}], + "verdict": {key: "unmeasured" for key in + ("correctness", "tokens", "pairedTokens", "split", "graphQuality")}} + self.assertIn("sample of 1 repository", render_report(run)) + run["repositories"].append({"repository": "second"}) + self.assertIn("sample of 2 repositories", render_report(run)) + def test_checked_in_suite_covers_five_languages(self) -> None: suite = load_suite(ROOT / "suite.toml") self.assertEqual(len(suite.digest), 64) @@ -166,6 +221,217 @@ def test_paired_tokens_are_zero_without_a_shared_answer(self) -> None: self.assertEqual(summary["medianGraphifyTokens"], 0) +class ExecutionEvidenceTests(unittest.TestCase): + def test_source_root_must_contain_the_reviewed_anchor_files(self) -> None: + repository = load_suite(ROOT / "suite.toml").repositories[0] + with tempfile.TemporaryDirectory() as temporary: + responses = [subprocess.CompletedProcess([], 0, stdout=value) for value in ( + "false\n", repository.commit + "\n", "", + )] + with patch("benchmarks.agent_query.runner.subprocess.run", side_effect=responses): + with self.assertRaisesRegex(RuntimeError, "reviewed source file"): + _verify_source(repository, Path(temporary)) + + def test_bare_repository_is_not_accepted_as_source(self) -> None: + repository = load_suite(ROOT / "suite.toml").repositories[0] + with tempfile.TemporaryDirectory() as temporary: + source = Path(temporary) + subprocess.run(("git", "init", "--bare", "--quiet", str(source)), check=True) + with self.assertRaisesRegex(RuntimeError, "working checkout"): + _verify_source(repository, source) + + def test_capture_limits_both_streams_without_unbounded_disk_files(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + for stream in ("stdout", "stderr"): + with self.subTest(stream=stream): + with patch("benchmarks.agent_query.runner.MAX_OUTPUT_BYTES", 4096): + result = run_bounded( + (sys.executable, "-c", f"import sys; sys.{stream}.write('x' * 100000)"), + cwd=root, timeout_seconds=5, + stdout_path=root / "stdout", stderr_path=root / "stderr", + ) + self.assertTrue(result.output_limited) + self.assertLessEqual((root / "stdout").stat().st_size, 4096) + self.assertLessEqual((root / "stderr").stat().st_size, 4096) + + def test_capture_preserves_success_and_reports_timeout(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + result = run_bounded( + (sys.executable, "-c", "import sys; print('answer'); print('notice', file=sys.stderr)"), + cwd=root, timeout_seconds=5, + stdout_path=root / "stdout", stderr_path=root / "stderr", + ) + self.assertEqual(result.stdout, "answer\n") + self.assertEqual(result.stderr, "notice\n") + self.assertEqual(result.exit_code, 0) + self.assertFalse(result.timed_out or result.output_limited) + result = run_bounded( + (sys.executable, "-c", "import time; time.sleep(10)"), + cwd=root, timeout_seconds=0.05, + stdout_path=root / "stdout", stderr_path=root / "stderr", + ) + self.assertTrue(result.timed_out) + self.assertFalse(result.output_limited) + self.assertNotEqual(result.exit_code, 0) + + def test_graphify_ambiguity_exit_one_is_a_valid_pick_list_only(self) -> None: + repository = load_suite(ROOT / "suite.toml").repositories[0] + output = "Ambiguous: 'sample' matches 2 nodes in different files.\n sample.go\n id: a\n other.go\n id: b\n" + oracle = question( + kind="ambiguity", expect="pick_list", required_one_of=("sample.go",), + min_one_of=1, min_candidates=2, + ) + result = CommandResult((), 1, False, 1, len(output), 0, output, "") + with patch("benchmarks.agent_query.runner.run_bounded", return_value=result): + observation = run_question( + repository, oracle, tool="graphify", binary=Path("tool"), + graph=Path("graph.json"), cwd=ROOT, raw_dir=ROOT, timeout_seconds=1, + ) + self.assertTrue(observation.passed) + self.assertEqual(observation.exit_code, 1) + + def test_graphify_exit_one_exception_does_not_accept_other_outcomes(self) -> None: + repository = load_suite(ROOT / "suite.toml").repositories[0] + output = "Ambiguous: 'sample' matches 2 nodes in different files.\n sample.go\n id: a\n other.go\n id: b\n" + base = dict(kind="ambiguity", expect="pick_list", required_one_of=("sample.go",), min_one_of=1, min_candidates=2) + cases = ( + (question(**base), output.replace("Ambiguous:", "Error:")), + (question(**base), output.replace(" id: b", "")), + (question(**base, graphify=("query", "sample")), output), + (question(), output), + (question(**{**base, "required_one_of": ("missing.go",)}), output), + ) + for oracle, stdout in cases: + with self.subTest(oracle=oracle, stdout=stdout): + result = CommandResult((), 1, False, 1, len(stdout), 0, stdout, "") + with patch("benchmarks.agent_query.runner.run_bounded", return_value=result): + observation = run_question( + repository, oracle, tool="graphify", binary=Path("tool"), + graph=Path("graph.json"), cwd=ROOT, raw_dir=ROOT, timeout_seconds=1, + ) + self.assertFalse(observation.passed) + + def test_failed_or_timed_out_output_cannot_pass(self) -> None: + repository = load_suite(ROOT / "suite.toml").repositories[0] + for tool in ("compass", "graphify"): + for exit_code, timed_out, output_limited in ((1, False, False), (0, True, False), (0, False, True)): + with self.subTest(tool=tool, exit_code=exit_code, timed_out=timed_out): + result = CommandResult((), exit_code, timed_out, 1, 9, 0, "sample.go", "", output_limited) + with patch("benchmarks.agent_query.runner.run_bounded", return_value=result): + observation = run_question( + repository, question(), tool=tool, binary=Path("tool"), + graph=Path("graph.json"), cwd=ROOT, raw_dir=ROOT, + timeout_seconds=1, + ) + self.assertFalse(observation.passed) + self.assertFalse(observation.first_page_pass) + self.assertTrue(observation.failures) + + def test_compass_continuation_requires_one_real_footer_cursor(self) -> None: + repository = load_suite(ROOT / "suite.toml").repositories[0] + outputs = ( + "Pagination: range=1-1 of 1 next=none\n", + "Source excerpt: next=source_text\n", + "Bound: next= continues the response\n", + "Pagination: page=1 range=1-2 of 4 next=first\nPagination: page=2 range=3-4 of 4 next=second\n", + ) + for output in outputs: + with self.subTest(output=output): + result = CommandResult((), 0, False, 1, len(output), 0, output, "") + with patch("benchmarks.agent_query.runner.run_bounded", return_value=result) as run: + observation = run_question( + repository, question(kind="broad", compass=("query", "sample"), max_follow_ups=2), tool="compass", + binary=Path("tool"), graph=Path("graph.json"), cwd=ROOT, + raw_dir=ROOT, timeout_seconds=1, + ) + self.assertEqual(run.call_count, 1) + self.assertEqual(observation.follow_ups, 0) + self.assertFalse(observation.passed) + self.assertEqual(observation.exit_code, 0) + + def test_compass_follows_footer_token_and_stops_on_repeated_cursor(self) -> None: + repository = load_suite(ROOT / "suite.toml").repositories[0] + for footer in ( + "Pagination: range=1-1 of 2 next=opaque-token", + "Pagination: page=1 range=1-1 of 2 next=opaque-token", + "Pagination: page=1/2 items=1-1/2 next=opaque-token", + "Pagination: range=1-1 of 2 next=opaque-token\r", + ): + for final in ("sample.go\n", footer + "\n"): + with self.subTest(footer=footer, final=final): + first = "source next=unrelated\n" + footer + "\n" + replies = [CommandResult((), 0, False, 1, len(s), 0, s, "") + for s in (first, final)] + with patch("benchmarks.agent_query.runner.run_bounded", side_effect=replies) as run: + observation = run_question( + repository, question(kind="broad", compass=("query", "sample"), max_follow_ups=3), tool="compass", + binary=Path("tool"), graph=Path("graph.json"), cwd=ROOT, + raw_dir=ROOT, timeout_seconds=1, + ) + self.assertEqual(run.call_count, 2) + argv = run.call_args_list[1].args[0] + self.assertEqual(argv[argv.index("--cursor") + 1], "opaque-token") + self.assertEqual(observation.follow_ups, 1) + self.assertEqual(observation.passed, final == "sample.go\n") + + def test_snapshot_pointer_cannot_fall_back_to_an_unpublished_graph(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + snapshot = root / "compass-out" / "snapshots" / "snapshot-other" + snapshot.mkdir(parents=True) + (snapshot / "graph.json").write_text("{}") + (root / "compass-out" / "current-snapshot").write_text("snapshot-missing") + with self.assertRaisesRegex(RuntimeError, "published Compass snapshot"): + _compass_graph(root) + + def test_each_new_run_builds_both_graphs_and_retains_build_arguments(self) -> None: + repository = load_suite(ROOT / "suite.toml").repositories[0] + def build(argv, **kwargs): + output = Path(argv[-1]) + if argv[0] == "compass": + snapshot = output / "compass-out" / "snapshots" / "snapshot-current" + snapshot.mkdir(parents=True) + (snapshot / "graph.json").write_text("{}") + (output / "compass-out" / "current-snapshot").write_text("snapshot-current") + else: + (output / "graphify-out").mkdir(parents=True) + (output / "graphify-out" / "graph.json").write_text("{}") + return CommandResult(argv, 0, False, 1, 0, 0, "", "") + with tempfile.TemporaryDirectory() as temporary: + with patch("benchmarks.agent_query.runner.run_bounded", side_effect=build) as run: + for name in ("first", "second"): + record = prepare_repository( + repository, ROOT, Path(temporary) / name, + compass_binary=Path("compass"), graphify_binary=Path("graphify"), + timeout_seconds=1, + ) + self.assertEqual(record["commit"], repository.commit) + for tool in ("compass", "graphify"): + self.assertEqual(record[f"{tool}BuildArgv"][:2], [tool, "extract"]) + self.assertEqual(len(record[f"{tool}GraphSha256"]), 64) + self.assertEqual(run.call_count, 4) + + def test_existing_artifacts_are_never_silently_reused_or_removed(self) -> None: + repository = load_suite(ROOT / "suite.toml").repositories[0] + with tempfile.TemporaryDirectory() as temporary: + artifacts = Path(temporary) + root = artifacts / repository.name + root.mkdir() + marker = root / "prior-graph.json" + marker.write_text("prior evidence") + with patch("benchmarks.agent_query.runner.run_bounded") as run: + with self.assertRaises(FileExistsError): + prepare_repository( + repository, ROOT, artifacts, + compass_binary=Path("compass"), graphify_binary=Path("graphify"), + timeout_seconds=1, + ) + run.assert_not_called() + self.assertEqual(marker.read_text(), "prior evidence") + + class EstimateTests(unittest.TestCase): def test_tokens_round_up_by_four_bytes(self) -> None: self.assertEqual(estimate_tokens(0), 0) @@ -278,6 +544,61 @@ def test_pick_list_counts_graphify_ambiguity_candidates(self) -> None: class GraphMetricTests(unittest.TestCase): + def metric_for_node(self, tool: str, node: dict, symbol: str = "parse") -> dict: + repository = Repository( + name="sample", + language="TypeScript", + url="https://example.invalid/sample.git", + commit="0" * 40, + questions=(), + anchors=(Anchor(file="sample.ts", line=42, symbol=symbol, judgment="reviewed"),), + ) + with tempfile.TemporaryDirectory() as directory: + graph = Path(directory) / "graph.json" + graph.write_text(json.dumps({"nodes": [node], "links": []}), encoding="utf-8") + return graph_metrics(repository, tool, graph) + + def test_enclosing_module_does_not_prove_a_declaration_anchor(self) -> None: + metrics = self.metric_for_node("compass", { + "id": "module", + "name": "sample", + "kind": "module", + "source": {"file": "sample.ts", "startLine": 1, "endLine": 100}, + }) + self.assertEqual(metrics["anchorHits"], 0) + + def test_anchor_requires_symbol_identity_for_both_tools(self) -> None: + for tool in ("compass", "graphify"): + for name in ("safeParse", "parseOther", "Parse", "", "unrelated"): + with self.subTest(tool=tool, name=name): + node = {"id": "wrong", "name": name, "label": name} + if tool == "compass": + node["source"] = {"file": "sample.ts", "startLine": 42, "endLine": 50} + else: + node.update(source_file="sample.ts", source_location="L42") + self.assertEqual(self.metric_for_node(tool, node)["anchorHits"], 0) + + def test_anchor_uses_exact_declaration_start_not_an_overlapping_span(self) -> None: + for start in (1, 41, 43, True): + with self.subTest(start=start): + metrics = self.metric_for_node("compass", { + "id": "wrong-overload", + "name": "parse", + "source": {"file": "sample.ts", "startLine": start, "endLine": 90}, + }) + self.assertEqual(metrics["anchorHits"], 0) + + def test_qualified_names_and_signature_labels_use_the_same_rule(self) -> None: + for tool in ("compass", "graphify"): + for name in ("parse", "Schema.parse", "Schema::parse", "parse(Input)"): + with self.subTest(tool=tool, name=name): + node = {"id": "declaration", "name": name, "label": name} + if tool == "compass": + node["source"] = {"file": "sample.ts", "startLine": 42, "endLine": 50} + else: + node.update(source_file="sample.ts", source_location="L42") + self.assertEqual(self.metric_for_node(tool, node, "Schema.parse(Input)")["anchorHits"], 1) + def test_compass_metrics_find_dangling_and_duplicate_records(self) -> None: repository = Repository( name="sample", @@ -294,10 +615,12 @@ def test_compass_metrics_find_dangling_and_duplicate_records(self) -> None: "nodes": [ { "id": "one", - "source": {"file": "a.go", "startLine": 1, "endLine": 5}, + "name": "A", + "source": {"file": "a.go", "startLine": 3, "endLine": 5}, }, { "id": "one", + "name": "B", "source": {"file": "b.go", "startLine": 9, "endLine": 12}, }, ], @@ -324,8 +647,8 @@ def test_graphify_metrics_match_declaration_lines(self) -> None: ) document = { "nodes": [ - {"id": "one", "source_file": "a.go", "source_location": "L42"}, - {"id": "two", "source_file": "a.go", "source_location": "L7"}, + {"id": "one", "label": "A", "source_file": "a.go", "source_location": "L42"}, + {"id": "two", "label": "A", "source_file": "a.go", "source_location": "L7"}, ], "links": [], } diff --git a/benchmarks/agent_query/tests/test_source_windows.py b/benchmarks/agent_query/tests/test_source_windows.py new file mode 100644 index 000000000..6b8303ef1 --- /dev/null +++ b/benchmarks/agent_query/tests/test_source_windows.py @@ -0,0 +1,140 @@ +import copy +from pathlib import Path +import tempfile +import unittest + +from benchmarks.agent_query.source_windows import score_windows, sha, source_windows + + +class SourceWindowTests(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory() + self.addCleanup(self.temp.cleanup) + self.root = Path(self.temp.name) + self.data = b'first\nsecond\nthird\nfourth\n' + (self.root / 'x').write_bytes(self.data) + self.rows = [dict(file='x', line=1), dict(file='x', line=3)] + + def case(self, text='second', first=2, last=2): + return dict(file='x', sourceFileSha256=sha(self.data), facts=[dict( + id='test', witnesses=[dict(startLine=first, endLine=last, text=text)])]) + + def test_order_grouping_and_shared_raw_byte_budget(self): + rows = [self.rows[1], self.rows[0], dict(self.rows[0], label='duplicate')] + r = source_windows(self.root, rows, 16) + self.assertEqual(r['sourceBytes'], 16) + self.assertEqual([(w['startByte'], w['endByte']) for w in r['windows']], [(0, 13), (13, 16)]) + self.assertEqual(len(r['windows'][0]['members']), 2) + self.assertTrue(r['windows'][1]['partial']) + self.assertEqual(r['sourceReadBytes'], len(self.data)) + + def test_quota_exhaustion_retains_omissions(self): + r = source_windows(self.root, self.rows, 6) + self.assertEqual(r['omittedGroups'], [dict(file='x', line=3)]) + self.assertFalse(score_windows(self.root, self.case(), r)[0]['sufficientSourceEvidence']) + + def test_reranking_keeps_original_interval_ends(self): + rows = [dict(file='x', line=i) for i in [1, 2, 3, 4]] + order = [('x', 3), ('x', 1), ('x', 4), ('x', 2)] + control = source_windows(self.root, rows, 8, ordered_groups=order) + self.assertEqual([(w['startByte'], w['endByte'], w['requestedEndByte']) + for w in control['windows']], [(13, 19, 19), (0, 2, 6)]) + self.assertEqual(control['omittedGroups'], [dict(file='x', line=4), dict(file='x', line=2)]) + self.assertTrue(score_windows(self.root, self.case('third', 3, 3), control)[0]['sufficientSourceEvidence']) + + def test_reranking_retains_last_anchor_cap_and_other_file_boundaries(self): + (self.root / 'y').write_bytes(b'y' * 5000) + rows = self.rows + [dict(file='y', line=1)] + control = source_windows(self.root, rows, 32000, + ordered_groups=[('y', 1), ('x', 3), ('x', 1)]) + self.assertEqual(control['windows'][0]['endByte'], 4096) + self.assertEqual(control['windows'][1]['endByte'], len(self.data)) + self.assertEqual(control['windows'][2]['endByte'], 13) + + def test_reordered_groups_must_be_an_exact_permutation(self): + for order in [[], [('x', 1), ('x', 1)], [('x', 1), ('other', 3)], + [('x', True), ('x', 3)], [('x', 1), ['x']], 'bad']: + with self.subTest(order=order), self.assertRaises(ValueError): + source_windows(self.root, self.rows, 10, ordered_groups=order) + + def test_explicit_source_order_is_identical_to_default(self): + self.assertEqual(source_windows(self.root, self.rows, 16), + source_windows(self.root, self.rows, 16, + ordered_groups=[('x', 1), ('x', 3)])) + + def test_last_window_has_4096_byte_cap(self): + (self.root / 'x').write_bytes(b'a' * 5000) + r = source_windows(self.root, [self.rows[0]], 32000) + self.assertEqual(r['sourceBytes'], 4096) + self.assertFalse(r['windows'][0]['partial']) + + def test_missing_and_invalid_anchors_fail_even_after_budget(self): + for bad in [dict(file='x', line=100), dict(file='x', line=True), + dict(file='x'), dict(file='../x', line=1), dict(file='/x', line=1)]: + with self.subTest(bad=bad), self.assertRaises(ValueError): + source_windows(self.root, self.rows + [bad], 1) + for budget in [True, 0, -1, 1048577]: + with self.assertRaises(ValueError): + source_windows(self.root, self.rows, budget) + + def test_symlink_escape_fails(self): + with tempfile.TemporaryDirectory() as other: + target = Path(other) / 'outside' + target.write_bytes(b'outside') + (self.root / 'link').symlink_to(target) + with self.assertRaises(ValueError): + source_windows(self.root, [dict(file='link', line=1)], 10) + + def test_fact_requires_all_witness_lines(self): + for budget, expected in [(11, False), (13, True)]: + r = source_windows(self.root, self.rows, budget) + judgment = score_windows(self.root, self.case(), r)[0] + self.assertEqual(judgment['sufficientSourceEvidence'], expected) + + def test_utf8_cut_is_retained_without_inventing_complete_character(self): + self.data = '🧭\n'.encode() + (self.root / 'x').write_bytes(self.data) + r = source_windows(self.root, [self.rows[0]], 2) + j = score_windows(self.root, self.case('🧭', 1, 1), r)[0] + self.assertFalse(j['sufficientSourceEvidence']) + self.assertEqual(j['missingAfterIndentNormalization'][0]['returned'], '�') + self.assertEqual(r['sourceBytes'], 2) + + def test_source_drift_and_witness_drift_fail(self): + r = source_windows(self.root, self.rows, 100) + with self.assertRaises(ValueError): + score_windows(self.root, self.case('wrong'), r) + (self.root / 'x').write_bytes(b'changed') + with self.assertRaises(ValueError): + score_windows(self.root, self.case(), r) + + def test_interval_hash_counts_and_line_tampering_fail(self): + original = source_windows(self.root, self.rows, 100) + for change in [dict(endByte=999), dict(startByte=True), dict(sourceSha256='0'), + dict(sourceBytes=0), dict(startLine=2)]: + r = copy.deepcopy(original) + r['windows'][0].update(change) + with self.subTest(change=change), self.assertRaises(ValueError): + score_windows(self.root, self.case(), r) + + def test_header_allowance_needs_identity_and_all_other_lines(self): + self.data = b'\n' * 454 + b'class _AtomicFile:\n def name(self): pass\n' + (self.root / 'x').write_bytes(self.data) + case = self.case('class _AtomicFile:\n def name(self): pass', 455, 456) + case['facts'][0]['id'] = 'click-1' + r = source_windows(self.root, [dict(file='x', line=456)], 100) + self.assertFalse(score_windows(self.root, case, r)[0]['sufficientSourceEvidence']) + self.assertTrue(score_windows(self.root, case, r, identity_verified=True)[0]['sufficientSourceEvidence']) + r = source_windows(self.root, [dict(file='x', line=456)], 1) + self.assertFalse(score_windows(self.root, case, r, identity_verified=True)[0]['sufficientSourceEvidence']) + + def test_file_and_row_bounds(self): + with self.assertRaises(ValueError): + source_windows(self.root, [self.rows[0]] * 10001, 10) + (self.root / 'x').write_bytes(b'a' * 4194305) + with self.assertRaises(ValueError): + source_windows(self.root, self.rows, 10) + + +if __name__ == '__main__': + unittest.main() diff --git a/benchmarks/agent_query/tests/test_state_access.py b/benchmarks/agent_query/tests/test_state_access.py new file mode 100644 index 000000000..bd6716ff9 --- /dev/null +++ b/benchmarks/agent_query/tests/test_state_access.py @@ -0,0 +1,111 @@ +import copy +from pathlib import Path +import tempfile +import unittest + +from benchmarks.agent_query.state_access_audit import anchor, assess, candidates, read + + +class StateAccessTests(unittest.TestCase): + def setUp(self): + self.case = dict(repository='fixture', file='state.py') + self.group = dict(owner='Box', state='value', declarationLine=2) + self.access = dict(method='get', methodLine=3, line=4) + self.graph = dict(directed=True, nodes=[ + dict(id='m', name='.get()', kind='method', source=dict(file='state.py', startLine=3)), + dict(id='s', name='value', kind='field', source=dict(file='state.py', startLine=2))], links=[ + dict(id='e', source='m', target='s', kind='references', + relationshipSite=dict(file='state.py', startLine=4))]) + + def score(self, graph=None, tool='compass'): + return assess(graph or self.graph, tool, self.case, self.group, self.access) + + def test_contact_and_selected_occurrence_are_separate(self): + row = self.score() + self.assertTrue(row['contactSupported']) + self.assertTrue(row['selectedLineSupported']) + self.graph['links'][0]['relationshipSite']['startLine'] = 5 + row = self.score() + self.assertTrue(row['contactSupported']) + self.assertFalse(row['selectedLineSupported']) + + def test_calls_containment_and_reverse_edges_are_not_contacts(self): + for kind in ('calls', 'contains', 'returns', 'instantiates'): + with self.subTest(kind=kind): + self.graph['links'][0]['kind'] = kind + self.assertFalse(self.score()['contactSupported']) + self.graph['links'][0].update(kind='references', source='s', target='m') + row = self.score() + self.assertEqual(len(row['connectingRecords']), 1) + self.assertFalse(row['contactSupported']) + + def test_missing_state_is_distinct_from_missing_edge(self): + self.graph['links'].clear() + self.assertEqual(self.score()['status'], 'no_contact_edge') + self.graph['nodes'].pop() + self.assertEqual(self.score()['status'], 'missing_state') + + def test_duplicate_candidates_are_never_silently_selected(self): + for index, status in [(0, 'ambiguous_callable'), (1, 'ambiguous_state')]: + graph = copy.deepcopy(self.graph) + node = dict(graph['nodes'][index], id='duplicate') + graph['nodes'].append(node) + row = self.score(graph) + self.assertEqual(row['status'], status) + self.assertFalse(row['contactSupported']) + + def test_shadow_parameter_and_other_file_do_not_replace_field(self): + self.graph['nodes'][1].update(kind='parameter', source=dict(file='state.py', startLine=3)) + self.assertEqual(self.score()['status'], 'missing_state') + self.graph['nodes'][1]['source'] = dict(file='other.py', startLine=2) + self.assertEqual(self.score()['status'], 'missing_state') + + def test_constructor_uses_exact_source_identity(self): + node = dict(id='ctor', kind='constructor', name='', source=dict(file='Box.java', startLine=8)) + self.assertEqual(candidates([node], 'compass', 'Box.java', 8, 'Box', constructor=True), [node]) + self.assertEqual(candidates([node], 'compass', 'Box.java', 9, 'Box', constructor=True), []) + self.assertEqual(candidates([node], 'compass', 'Box.java', 8, 'Box'), []) + + def test_parallel_occurrences_retained_and_order_stable(self): + self.graph['links'].append(dict(self.graph['links'][0], id='other')) + row = self.score() + self.assertEqual(len(row['connectingRecords']), 2) + self.graph['links'].reverse() + self.graph['nodes'].reverse() + self.assertEqual(self.score(), row) + + def test_graphify_representation_and_undirected_flag_preserved(self): + graph = dict(directed=False, nodes=[ + dict(id='m', label='.get()', source_file='state.py', source_location='L3'), + dict(id='s', label='value', source_file='state.py', source_location='L2')], links=[ + dict(source='m', target='s', relation='references', source_file='state.py', source_location='L4')]) + row = self.score(graph, 'graphify') + self.assertTrue(row['selectedLineSupported']) + self.assertFalse(row['graphDirected']) + # Contact here is stored endpoint order, not a directed graph path. + graph['links'][0]['source_location'] = 'unknown' + self.assertFalse(self.score(graph, 'graphify')['selectedLineSupported']) + + def test_missing_edge_occurrence_cannot_use_declaration_evidence(self): + edge = self.graph['links'][0] + del edge['relationshipSite'] + edge['evidence'] = [dict(anchors=[dict(file='state.py', startLine=4)])] + self.assertTrue(self.score()['contactSupported']) + self.assertFalse(self.score()['selectedLineSupported']) + + def test_bounded_reader_fails_instead_of_truncating(self): + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / 'input' + path.write_bytes(b'1234') + self.assertEqual(read(path, 4), b'1234') + with self.assertRaises(ValueError): + read(path, 3) + + def test_graphify_anchor_parser_does_not_guess(self): + self.assertEqual(anchor(dict(source_file='a', source_location='L42-L50'), 'graphify'), ('a', 42)) + for location in ('line 42', 'L0', 'L42 trailing', ''): + self.assertEqual(anchor(dict(source_file='a', source_location=location), 'graphify'), ('a', None)) + + +if __name__ == '__main__': + unittest.main() diff --git a/crates/compass-cli/src/code_query_commands.rs b/crates/compass-cli/src/code_query_commands.rs index ac264272a..d995a1ec0 100644 --- a/crates/compass-cli/src/code_query_commands.rs +++ b/crates/compass-cli/src/code_query_commands.rs @@ -11,8 +11,8 @@ use compass_output::{ render_code_query_text_page, }; use compass_query::{ - EngineSelection, NaturalQueryRequest, QueryError, QueryErrorKind, open_with_engine, - open_with_verified_document, + EngineSelection, ExactSearchFilter, NaturalQueryIntent, NaturalQueryRequest, QueryError, + QueryErrorKind, open_with_engine, open_with_verified_document, plan_natural_query, }; use crate::{Outcome, SharedOutputFormat, parse_shared_output_format}; @@ -133,7 +133,10 @@ fn execute_paged( let mut scale = 1_u32; loop { let execution = execute(operation, args, scale, deadline)?; - if !execution.response.truncated || scale >= MAX_PAGE_WIDENING_SCALE { + if !execution.response.truncated + || scale >= MAX_PAGE_WIDENING_SCALE + || args.iter().any(|arg| arg == "--exact") + { return Ok(execution); } scale = scale.saturating_mul(4); @@ -146,7 +149,53 @@ fn execute( page_scale: u32, deadline: Instant, ) -> Result { + let calls_only = args.iter().any(|arg| arg == "--calls-only"); + if args.iter().any(|arg| arg.starts_with("--calls-only=")) { + return Err("--calls-only is a flag and does not accept a value".to_owned()); + } + if calls_only && operation != "node" { + return Err("--calls-only requires node".to_owned()); + } + if args.iter().filter(|arg| *arg == "--calls-only").count() > 1 { + return Err("--calls-only may be supplied only once".to_owned()); + } + let exact = args.iter().any(|arg| arg == "--exact"); + let mut exact_filter = ExactSearchFilter::default(); + for name in ["--file", "--line", "--kind"] { + let present = args + .iter() + .any(|arg| arg == name || arg.starts_with(&format!("{name}="))); + if present && (!exact || operation != "search") { + return Err(format!("{name} requires search --exact")); + } + if present { + let value = option(args, name) + .filter(|value| !value.starts_with("--")) + .ok_or_else(|| format!("{name} requires a value"))?; + match name { + "--file" => exact_filter.source_file = Some(value.to_owned()), + "--line" => { + exact_filter.start_line = Some( + value + .parse() + .map_err(|_| "--line requires a positive integer")?, + ) + } + "--kind" => exact_filter.kind = + Some(serde_json::from_value(serde_json::json!(value)).map_err( + |_| "--kind requires a stored node kind such as function, class, or struct", + )?), + _ => {} + } + } + } + if exact && operation != "search" { + return Err("--exact requires search".to_owned()); + } let positional = positional(args); + if calls_only && positional.len() != 2 { + return Err("node --calls-only requires exactly SOURCE and TARGET".to_owned()); + } let graph_option = option(args, "--graph"); let revision = option(args, "--at"); if graph_option.is_some() && revision.is_some() { @@ -222,6 +271,30 @@ fn execute( let (response, question, operands) = match operation { "ask" => { let question = required(&positional, 0, "ask ")?.to_owned(); + let plan = plan_natural_query(&question).map_err(query_error)?; + // The renderer needs the same operands the query engine executes. + // The full question is retained separately as request metadata. + let operands = if plan.routes_to_typed_query() { + plan.operands() + .iter() + .enumerate() + .map(|(index, value)| { + let role = match plan.intent() { + NaturalQueryIntent::Callers + | NaturalQueryIntent::Callees + | NaturalQueryIntent::Impact => AgentOperandRole::Symbol, + NaturalQueryIntent::NodeTrail if index == 0 => AgentOperandRole::Source, + NaturalQueryIntent::NodeTrail => AgentOperandRole::Target, + NaturalQueryIntent::Search | NaturalQueryIntent::Fallback => { + AgentOperandRole::Query + } + }; + (role, value.clone()) + }) + .collect() + } else { + vec![(AgentOperandRole::Query, question.clone())] + }; let response = engine .query_natural(NaturalQueryRequest { question: question.clone(), @@ -229,20 +302,20 @@ fn execute( limits, }) .map_err(query_error)?; - ( - response, - Some(question.clone()), - vec![(AgentOperandRole::Query, question)], - ) + (response, Some(question), operands) } "search" => { let query = required(&positional, 0, "search ")?.to_owned(); - let response = engine - .search(SearchRequest { - query: query.clone(), - limits, - }) - .map_err(query_error)?; + let request = SearchRequest { + query: query.clone(), + limits, + }; + let response = if exact { + engine.search_exact(request, exact_filter) + } else { + engine.search(request) + } + .map_err(query_error)?; (response, None, vec![(AgentOperandRole::Query, query)]) } "callers" | "callees" | "impact" => { @@ -292,6 +365,7 @@ fn execute( let target = required(&positional, 1, "node ")?.to_owned(); let response = engine .node_trail(NodeTrailRequest { + calls_only, source: source.clone(), target: target.clone(), include_heuristic, @@ -300,7 +374,7 @@ fn execute( .map_err(query_error)?; ( response, - None, + calls_only.then(|| format!("call path from {source} to {target}")), vec![ (AgentOperandRole::Source, source), (AgentOperandRole::Target, target), @@ -410,6 +484,9 @@ fn positional(args: &[String]) -> Vec { "--text-budget", "--cursor", "--timeout-ms", + "--file", + "--line", + "--kind", ]; let mut values = Vec::new(); let mut skip = false; diff --git a/crates/compass-cli/src/help.rs b/crates/compass-cli/src/help.rs index 5684cf711..b6c475622 100644 --- a/crates/compass-cli/src/help.rs +++ b/crates/compass-cli/src/help.rs @@ -320,7 +320,7 @@ const PAGES: &[Page] = &[ "search", "Search typed code symbols by name", ["compass search [OPTIONS]"], - "Arguments:\n Symbol name or qualified name\n\nOptions:\n --graph Typed graph [default: compass-out/graph.json]\n --program Optional Program IR enrichment\n --cache Query-index cache directory\n --engine Graph storage engine [default: default]\n --max-candidates Candidate bound [default: 64]\n --format Output format [default: text]\n --text-budget Approximate tokens per text page [default: 2000]\n --cursor Continue the same text result (text only)\n --timeout-ms Query deadline in milliseconds [default: 60000; max: 600000]\n --brief Emit compass.query.agent-view.brief/1 (agent-json only)\n\nExamples:\n compass search PaymentService\n compass search checkout --format json\n compass search PaymentService --text-budget 800\n\nNotes:\n Search uses the versioned compass.query/1 response contract in all formats. Text output is paged: the footer carries a cursor that continues the same deterministic result at the same page budget." + "Arguments:\n Symbol name or qualified name\n\nOptions:\n --exact Exact ID or normalized name only; no lexical fallback\n --file Exact stored source path (requires --exact)\n --line Declaration start line (requires --exact and --file)\n --kind Stored node kind, e.g. function (requires --exact)\n --graph Typed graph [default: compass-out/graph.json]\n --program Optional Program IR enrichment\n --cache Query-index cache directory\n --engine Graph storage engine [default: default]\n --max-candidates Candidate bound [default: 64]\n --format Output format [default: text]\n --text-budget Approximate tokens per text page [default: 2000]\n --cursor Continue the same text result (text only)\n --timeout-ms Query deadline in milliseconds [default: 60000; max: 600000]\n --brief Emit compass.query.agent-view.brief/1 (agent-json only)\n\nExamples:\n compass search PaymentService\n compass search checkout --format json\n compass search PaymentService --text-budget 800\n\nNotes:\n Exact mode retains all matches. Candidate bounds apply before filters; truncation never proves uniqueness or absence. Exact text results do not automatically widen bounds.\n Search uses the versioned compass.query/1 response contract in all formats. Text output is paged: the footer carries a cursor that continues the same deterministic result at the same page budget." ), page!( "callers", @@ -350,7 +350,7 @@ const PAGES: &[Page] = &[ "node", "Show a bounded evidence trail between two symbols", ["compass node [OPTIONS]"], - "Arguments:\n Trail origin symbol\n Trail destination symbol\n\nOptions:\n --text-budget Approximate tokens per text page [default: 2000]\n --cursor Continue the same text result (text only)\n --timeout-ms Query deadline in milliseconds [default: 60000; max: 600000]\n --brief Emit compass.query.agent-view.brief/1 (agent-json only)\n --graph Typed graph [default: compass-out/graph.json]\n --program Optional Program IR enrichment\n --cache Query-index cache directory\n --engine Graph storage engine [default: default]\n --max-depth Traversal radius\n --max-paths Path bound\n --include-heuristic Include heuristic evidence\n --format Output format [default: text]\n\nExamples:\n compass node route:/checkout CheckoutController.create\n compass node sym:a sym:b --include-heuristic --format json" + "Arguments:\n Trail origin symbol\n Trail destination symbol\n\nOptions:\n --text-budget Approximate tokens per text page [default: 2000]\n --cursor Continue the same text result (text only)\n --timeout-ms Query deadline in milliseconds [default: 60000; max: 600000]\n --brief Emit compass.query.agent-view.brief/1 (agent-json only)\n --graph Typed graph [default: compass-out/graph.json]\n --program Optional Program IR enrichment\n --cache Query-index cache directory\n --engine Graph storage engine [default: default]\n --max-depth Traversal radius\n --max-paths Path bound\n --calls-only Follow only directed calls edges\n --include-heuristic Include heuristic evidence\n --format Output format [default: text]\n\nExamples:\n compass node route:/checkout CheckoutController.create\n compass node sym:a sym:b --include-heuristic --format json\n compass node Caller Target --calls-only" ), page!( "query", @@ -431,7 +431,7 @@ const PAGES: &[Page] = &[ "explain", "Explain a node and its important relationships", ["compass explain [OPTIONS]"], - "Arguments:\n Node ID, name, label, or qualified name\n\nOptions:\n --budget Approximate tokens per page [default: 2000]\n --page Connection or ambiguity page, starting at 1 [default: 1]\n --source Include digest-verified declaration source [default]\n --no-source Omit declaration source\n --root Repository root used to read source [default: current directory]\n --max-source-bytes Source-byte bound [default: 4096]\n --format Shared output contract [default: text]\n --graph Read a graph JSON file\n --at Use an immutable Git revision; conflicts with --graph\n\nExamples:\n compass explain PaymentService\n compass explain PaymentService --no-source\n compass explain PaymentService --budget 8000\n compass explain PaymentService --page 2\n compass explain auth --at HEAD~5 --format agent-json\n\nNotes:\n Source is read only for one source-backed node and verified against its recorded symbol digest. A changed file reports SOURCE unavailable; ambiguous or unsourced targets keep the candidate list instead of guessing." + "Arguments:\n Node ID, name, label, or qualified name\n\nOptions:\n --budget Approximate tokens per page [default: 2000]\n --page Connection or ambiguity page, starting at 1 [default: 1]\n --source Include declaration source with verification status [default]\n --source-members Show recorded callable members instead of the declaration\n --member-focus Prioritize matching member names; requires --source-members\n --no-source Omit declaration source\n --root Repository root used to read source [default: current directory]\n --max-source-bytes Source-byte bound, shared by members [default: 4096]\n --format Shared output contract [default: text]\n --graph Read a graph JSON file\n --at Use an immutable Git revision; conflicts with --graph\n\nExamples:\n compass explain PaymentService\n compass explain PaymentService --no-source\n compass explain PaymentService --budget 8000\n compass explain PaymentService --page 2\n compass explain auth --at HEAD~5 --format agent-json\n\nNotes:\n Source is read only for one source-backed node. A stored symbol digest must match; missing digests produce an explicitly unverified excerpt. A mismatch or malformed digest reports SOURCE unavailable; ambiguous or unsourced targets keep the candidate list instead of guessing.\n --source-members follows directed recorded containment through nested types, in source order.\n --member-focus ranks distinct normalized name matches first, then source order; it does not filter members.\n It shares one source-byte budget (maximum 1 MiB); omissions and unavailable members remain explicit." ), page!( "architecture", @@ -1113,12 +1113,12 @@ fn render_page(page: &Page, style: HelpStyle) -> String { "--format Discovery output", ) .replace( - "default/hard maximum: 500", - "default: 64; hard maximum: 500", + "default/hard maximum: 500]", + "default: 64; hard maximum: 500]", ) .replace( - "default/hard maximum: 1000", - "default: 128; hard maximum: 1000", + "default/hard maximum: 1000]", + "default: 128; hard maximum: 1000]", ) } else if matches!( page.path, diff --git a/crates/compass-cli/src/lib.rs b/crates/compass-cli/src/lib.rs index 50ff79d22..fb74cbabc 100644 --- a/crates/compass-cli/src/lib.rs +++ b/crates/compass-cli/src/lib.rs @@ -85,11 +85,11 @@ use compass_output::{ use compass_prs::{ProcessRunner, SystemRunner}; use compass_query::{ DEFAULT_AFFECTED_RELATIONS, DEFAULT_DISCOVERY_TEXT_TOKEN_BUDGET, DEFAULT_PATH_DEPTH_LIMIT, - DEFAULT_TEXT_TOKEN_BUDGET, DiscoveryTextPageOptions, TextPageOptions, TraversalMode, - discovery_request_digest, explanation_source, format_affected, format_benchmark, - open as open_code_query, open_with_verified_document, query_graph_text_page, - render_discovery_text_page_with_prefix, render_explanation_page, - render_shortest_path_with_limit, run_benchmark, + DEFAULT_TEXT_TOKEN_BUDGET, DiscoveryTextPageOptions, ExplanationMemberFocus, TextPageOptions, + TraversalMode, discovery_request_digest, explanation_member_sources_with_focus, + explanation_source, format_affected, format_benchmark, open as open_code_query, + open_with_verified_document, query_graph_text_page, render_discovery_text_page_with_prefix, + render_explanation_page, render_shortest_path_with_limit, run_benchmark, }; use compass_semantic::{ CachedCorpusExtractionOptions, CorpusExtractionOptions, PreparedDocumentInputs, @@ -6651,11 +6651,37 @@ fn command_explain(frontend: Frontend, args: &[String]) -> Outcome { let mut budget_given = false; let mut page = 1_usize; let mut with_source = true; + let mut with_member_source = false; + let mut member_focus = None; let mut source_root = std::path::PathBuf::from("."); let mut max_source_bytes = DEFAULT_EXPLAIN_SOURCE_BYTES; let mut index = 1; while index < args.len() { match args[index].as_str() { + "--source-members" => { + with_member_source = true; + index += 1; + } + value if value == "--member-focus" || value.starts_with("--member-focus=") => { + if member_focus.is_some() { + return Outcome::failure( + "error: --member-focus may be supplied only once".to_owned(), + ); + } + let (text, consumed) = if value == "--member-focus" { + let Some(text) = args.get(index + 1) else { + return Outcome::failure("error: --member-focus requires text".to_owned()); + }; + (text.as_str(), 2) + } else { + (&value[15..], 1) + }; + member_focus = match ExplanationMemberFocus::new(text) { + Ok(focus) => Some(focus), + Err(error) => return Outcome::failure(format!("error: {error}")), + }; + index += consumed; + } "--source" => { with_source = true; index += 1; @@ -6749,6 +6775,18 @@ fn command_explain(frontend: Frontend, args: &[String]) -> Outcome { } } } + if with_member_source && !with_source { + return Outcome::failure("error: --source-members conflicts with --no-source".to_owned()); + } + if member_focus.is_some() && !with_member_source { + return Outcome::failure("error: --member-focus requires --source-members".to_owned()); + } + if with_member_source && (max_source_bytes > 1_048_576 || label.len() > 4096) { + return Outcome::failure( + "error: member source accepts at most 1048576 source bytes and a 4096-byte selector" + .to_owned(), + ); + } if let Err(error) = validate_text_pagination(budget, page) { return Outcome::failure(format!("error: {error}")); } @@ -6774,7 +6812,16 @@ fn command_explain(frontend: Frontend, args: &[String]) -> Outcome { Ok(output) => output, Err(error) => return Outcome::failure(format!("error: {error}")), }; - let output = if with_source { + let output = if with_member_source { + append_explanation_member_sources( + output, + &loaded.graph, + label, + &source_root, + max_source_bytes, + member_focus.as_ref(), + ) + } else if with_source { append_explanation_source(output, &loaded.graph, label, &source_root, max_source_bytes) } else { output @@ -6803,28 +6850,94 @@ fn append_explanation_source( ) -> String { match explanation_source(graph, label, root, max_source_bytes) { Ok(excerpt) => { - output.push_str("\n\nSOURCE "); - output.push_str(&excerpt.file); + append_explained_source(&mut output, &excerpt, max_source_bytes); + output.trim_end().to_owned() + } + Err(error) => { + output.push_str(&format!("\n\nSOURCE unavailable: {error}")); + output + } + } +} + +fn append_explained_source( + output: &mut String, + excerpt: &compass_query::ExplainedSource, + max_source_bytes: u64, +) { + output.push_str("\n\nSOURCE "); + output.push_str(&excerpt.file); + let verification = if excerpt.digest_verified { + "digest-verified" + } else { + "unverified: no recorded source digest" + }; + output.push_str(&format!( + " L{}-L{} ({verification})\n", + excerpt.start_line, excerpt.end_line + )); + for (offset, line) in excerpt.source.lines().enumerate() { + let number = excerpt.start_line as usize + offset; + output.push_str(&format!(" {number:>6}: {line}\n")); + } + if excerpt.truncated { + output.push_str(&format!( + " [truncated: excerpt limited to {max_source_bytes} bytes; pass --max-source-bytes for more]\n" + )); + } +} + +fn append_explanation_member_sources( + mut output: String, + graph: &compass_model::Graph, + label: &str, + root: &std::path::Path, + max_source_bytes: u64, + focus: Option<&ExplanationMemberFocus>, +) -> String { + match explanation_member_sources_with_focus(graph, label, root, max_source_bytes, focus) { + Ok(report) => { + let unavailable = report.members.iter().filter(|m| m.source.is_err()).count(); + let order = if focus.is_some() { + "member-name focus, then source order" + } else { + "source order" + }; output.push_str(&format!( - " L{}-L{} (digest-verified)\n", - excerpt.start_line, excerpt.end_line + "\n\nMEMBER SOURCES owner={} retained={} omitted={} unavailable={} source_bytes={} truncated={}\nRecorded containment; {order}; shared {}-byte source budget.", + serde_json::json!(report.root.id), report.members.len(), report.omitted_members, + unavailable, report.source_bytes, report.truncated, max_source_bytes, )); - for (offset, line) in excerpt.source.lines().enumerate() { - let number = excerpt.start_line as usize + offset; - output.push_str(&format!(" {number:>6}: {line}\n")); + if focus.is_some() { + output.push_str(&format!( + "\nFocus terms: {} (lexical name matches; not behavioral evidence).", + serde_json::json!(report.focus_terms) + )); } - if excerpt.truncated { + for member in report.members { output.push_str(&format!( - " [truncated: excerpt limited to {max_source_bytes} bytes; pass --max-source-bytes for more]\n" + "\n\nMEMBER {} {}", + serde_json::json!(member.node.id), + serde_json::json!(member.node.label()) )); + if focus.is_some() { + output.push_str(&format!( + "\nMatched focus terms: {}", + serde_json::json!(member.matched_focus_terms) + )); + } + match member.source { + Ok(excerpt) => { + let retained_bytes = excerpt.source.len() as u64; + append_explained_source(&mut output, &excerpt, retained_bytes); + } + Err(error) => output.push_str(&format!("\nSOURCE unavailable: {error}")), + } } - output.trim_end().to_owned() - } - Err(error) => { - output.push_str(&format!("\n\nSOURCE unavailable: {error}")); - output } + Err(error) => output.push_str(&format!("\n\nMEMBER SOURCES unavailable: {error}")), } + output.trim_end().to_owned() } fn validate_text_pagination(token_budget: usize, page: usize) -> Result<(), String> { diff --git a/crates/compass-cli/tests/code_query_cli.rs b/crates/compass-cli/tests/code_query_cli.rs index 2ba3db581..8b67e7ebd 100644 --- a/crates/compass-cli/tests/code_query_cli.rs +++ b/crates/compass-cli/tests/code_query_cli.rs @@ -11,6 +11,144 @@ use compass_output::{AgentOperation, AgentQueryView}; use compass_store::{STORE_FILE_NAME, STORE_REF_FILE_NAME, SqliteStore}; use serde_json::Value; +#[test] +fn ask_preserves_typed_operands_in_agent_and_text_answers() -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let graph = support::write_typed_graph(directory.path())?; + for (question, command, operands) in [ + ("who calls Target?", "callers", vec!["Target"]), + ("who calls Missing?", "callers", vec!["Missing"]), + ("what does Caller call?", "callees", vec!["Caller"]), + ("what is impacted by Target?", "impact", vec!["Target"]), + ( + "path from Caller to Target", + "node", + vec!["Caller", "Target"], + ), + ("where is Target defined?", "search", vec!["Target"]), + ] { + for format in ["agent-json", "text"] { + let execute = |command: &str, operands: &[&str]| { + let mut args = vec![OsString::from(command)]; + args.extend(operands.iter().map(OsString::from)); + args.extend([ + OsString::from("--graph"), + graph.as_os_str().to_owned(), + OsString::from("--format"), + OsString::from(format), + ]); + run(Frontend::Compass, args) + }; + let asked = execute("ask", &[question]); + let direct = execute(command, &operands); + assert_eq!(asked.code, 0, "{question}: {}", asked.stderr); + assert_eq!(direct.code, 0, "{}", direct.stderr); + if format == "agent-json" { + let asked = AgentQueryView::from_json(asked.stdout.as_bytes())?; + let direct = AgentQueryView::from_json(direct.stdout.as_bytes())?; + assert_eq!(asked.answer, direct.answer, "{question}"); + assert_eq!( + asked.request.operands, direct.request.operands, + "{question}" + ); + assert_eq!(asked.primary_results, direct.primary_results, "{question}"); + assert_eq!(asked.paths, direct.paths, "{question}"); + assert_eq!(asked.next_actions, direct.next_actions, "{question}"); + assert_eq!(asked.request.question.as_deref(), Some(question)); + } else { + // Compare the answer separately from pagination metadata. + let headline = direct + .stdout + .lines() + .skip_while(|line| *line != "ANSWER") + .nth(1) + .ok_or("missing direct answer")?; + assert!( + asked.stdout.contains(headline), + "{question}: {}", + asked.stdout + ); + } + } + } + Ok(()) +} + +#[test] +fn ask_resolves_a_unique_owner_suffix_without_guessing_a_short_name() -> Result<(), Box> +{ + let directory = tempfile::tempdir()?; + let graph_path = support::write_typed_graph(directory.path())?; + let mut graph = GraphDocument::load(&graph_path)?; + let caller = graph + .nodes + .iter_mut() + .find(|node| node.id == "n:caller") + .ok_or("caller fixture node missing")?; + caller.qualified_name = "pkg.Controller::Caller".to_owned(); + let mut other = caller.clone(); + other.id = "n:other-caller".to_owned(); + other.qualified_name = "pkg.Other::Caller".to_owned(); + graph.nodes.push(other); + std::fs::write(&graph_path, serde_json::to_vec(&graph)?)?; + + for (question, expected_code, expected_edges) in [ + ("what does Controller.Caller call?", None, 1), + ("what does Controller::Caller call?", None, 1), + ("what does Caller call?", Some("ambiguous_match"), 0), + ("what does Missing.Caller call?", Some("no_match"), 0), + ("what does Missing::Caller call?", Some("no_match"), 0), + ] { + let output = support::compass_command() + .args(["ask", question, "--graph"]) + .arg(&graph_path) + .args(["--format", "json"]) + .current_dir(directory.path()) + .output()?; + assert!( + output.status.success(), + "{question}: {}", + String::from_utf8_lossy(&output.stderr) + ); + let response: Value = serde_json::from_slice(&output.stdout)?; + assert_eq!(response["operation"], "callees", "{question}"); + assert_eq!( + response["edges"].as_array().ok_or("edges missing")?.len(), + expected_edges, + "{question}" + ); + if expected_edges == 1 { + assert_eq!(response["edges"][0]["source"], "n:caller"); + assert_eq!(response["edges"][0]["target"], "n:target"); + } + if let Some(code) = expected_code { + assert!( + response["diagnostics"] + .as_array() + .ok_or("diagnostics missing")? + .iter() + .any(|diagnostic| diagnostic["code"] == code) + ); + } + } + let explained = support::compass_command() + .args(["explain", "Controller.Caller", "--graph"]) + .arg(&graph_path) + .current_dir(directory.path()) + .output()?; + assert!(explained.status.success()); + assert!(String::from_utf8_lossy(&explained.stdout).contains("ID: n:caller")); + + let path = support::compass_command() + .args(["path", "Controller.Caller", "Target", "--graph"]) + .arg(&graph_path) + .current_dir(directory.path()) + .output()?; + assert!(path.status.success()); + assert!(String::from_utf8_lossy(&path.stdout).contains("Caller --calls [EXTRACTED]--> Target")); + Ok(()) +} + #[test] fn typed_query_commands_share_the_versioned_json_contract() -> Result<(), Box> { let directory = tempfile::tempdir()?; @@ -101,6 +239,148 @@ fn typed_query_commands_share_the_versioned_json_contract() -> Result<(), Box Result<(), Box> { + let directory = tempfile::tempdir()?; + let graph_path = support::write_typed_graph(directory.path())?; + let mut graph = GraphDocument::load(&graph_path)?; + let node = graph + .nodes + .first() + .cloned() + .ok_or("missing node template")?; + let edge = graph + .links + .first() + .cloned() + .ok_or("missing edge template")?; + graph.nodes = ["s", "a", "b", "t"] + .into_iter() + .map(|name| { + let mut record = node.clone(); + record.id = format!("n:{name}"); + record.name = name.to_owned(); + record.qualified_name = name.to_owned(); + record + }) + .collect(); + graph.links = [ + ("n:s", EdgeKind::Calls, "n:a"), + ("n:a", EdgeKind::Calls, "n:b"), + ("n:s", EdgeKind::References, "n:b"), + ("n:b", EdgeKind::Calls, "n:t"), + ] + .into_iter() + .map(|(source, kind, target)| { + let mut record = edge.clone(); + record.source = source.to_owned(); + record.target = target.to_owned(); + record.kind = kind; + record.id = compass_model::identity::edge_id( + source, + kind, + target, + record.relationship_site.as_ref(), + None, + ); + record.key.clone_from(&record.id); + record + }) + .collect(); + std::fs::write(&graph_path, serde_json::to_vec(&graph)?)?; + let outcome = run( + Frontend::Compass, + [ + OsString::from("node"), + OsString::from("n:s"), + OsString::from("n:t"), + OsString::from("--graph"), + graph_path.clone().into_os_string(), + OsString::from("--cache"), + directory.path().join("cache").into_os_string(), + OsString::from("--max-depth"), + OsString::from("2"), + OsString::from("--format"), + OsString::from("json"), + ], + ); + assert_eq!(outcome.code, 0, "{}", outcome.stderr); + let response: compass_model::query_contract::CodeQueryResponse = + serde_json::from_str(&outcome.stdout)?; + assert_eq!(response.paths.len(), 1); + assert_eq!(response.paths[0].node_ids, ["n:s", "n:b", "n:t"]); + let legacy = run( + Frontend::Compass, + [ + OsString::from("path"), + OsString::from("n:s"), + OsString::from("n:t"), + OsString::from("--graph"), + graph_path.into_os_string(), + OsString::from("--max-depth"), + OsString::from("2"), + ], + ); + assert_eq!(legacy.code, 0, "{}", legacy.stderr); + assert!( + legacy + .stdout + .contains("Best path (weighted, 2 hops, weight 5)"), + "{}", + legacy.stdout + ); + assert!(!legacy.stdout.contains("NO PATH FOUND")); + Ok(()) +} + +#[test] +fn path_work_limit_is_a_failed_command_not_a_no_path_answer() -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let graph_path = directory.path().join("graph.json"); + let ids = (0..96) + .map(|index| format!("node-{index}-{}", "x".repeat(4096))) + .collect::>(); + let nodes = ids + .iter() + .enumerate() + .map(|(index, id)| { + serde_json::json!({ + "id": id, "label": format!("Node{index}") + }) + }) + .collect::>(); + let links = ids.windows(2).enumerate().map(|(index, pair)| serde_json::json!({ + "id": format!("edge-{index}"), "source": pair[0], "target": pair[1], "relation": "calls" + })).collect::>(); + std::fs::write( + &graph_path, + serde_json::to_vec(&serde_json::json!({ + "directed":true, "nodes": nodes, "links": links + }))?, + )?; + let outcome = run( + Frontend::Compass, + [ + OsString::from("path"), + OsString::from("Node0"), + OsString::from("Node95"), + OsString::from("--graph"), + graph_path.into_os_string(), + OsString::from("--max-depth"), + OsString::from("95"), + ], + ); + assert_ne!(outcome.code, 0); + assert!( + outcome.stderr.contains("path search work limit exceeded"), + "{}", + outcome.stderr + ); + assert!(outcome.stdout.is_empty(), "{}", outcome.stdout); + Ok(()) +} + #[test] fn affected_typed_graph_uses_shared_relationship_output_contract() -> Result<(), Box> { let directory = tempfile::tempdir()?; @@ -427,6 +707,61 @@ fn discovery_cursor_survives_budget_alias_and_scope_order_but_rejects_graph_chan Ok(()) } +#[test] +fn natural_discovery_preserves_literal_subjects_in_prose() -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let graph = support::write_typed_graph(directory.path())?; + let mut document = GraphDocument::load(&graph)?; + let subject = document + .nodes + .iter_mut() + .find(|node| node.id == "n:target") + .ok_or("missing target fixture")?; + subject.name = "_BufferedSink".to_owned(); + subject.qualified_name = "Fixture._BufferedSink".to_owned(); + let mut duplicate = subject.clone(); + duplicate.id = "n:duplicate".to_owned(); + duplicate.qualified_name = "Other._BufferedSink".to_owned(); + duplicate.kind = NodeKind::Struct; + for ambiguous in [false, true] { + if ambiguous { + document.nodes.push(duplicate.clone()); + } + std::fs::write(&graph, serde_json::to_vec_pretty(&document)?)?; + let output = std::process::Command::new(env!("CARGO_BIN_EXE_compass")) + .args([ + "query", + "Explain _BufferedSink ownership and close behavior", + "--format=json", + "--graph", + ]) + .arg(&graph) + .output()?; + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + assert!(output.stderr.is_empty()); + let response: compass_model::query_contract::DiscoveryQueryResponse = + serde_json::from_slice(&output.stdout)?; + let seed = response.seeds.first().ok_or("missing subject seed")?; + assert_eq!( + seed.candidate_source, + compass_model::query_contract::DiscoverySeedSource::ExactName + ); + assert_eq!(seed.ambiguous, ambiguous); + assert!(["n:target", "n:duplicate"].contains(&seed.node_id.as_str())); + if ambiguous { + assert!(seed.alternatives.iter().any(|other| { + ["n:target", "n:duplicate"].contains(&other.node_id.as_str()) + && other.node_id != seed.node_id + })); + } + } + Ok(()) +} + #[test] fn natural_discovery_exposes_the_public_json_contract_and_repeatable_or_scopes() -> Result<(), Box> { @@ -1434,6 +1769,13 @@ fn ambiguous_typed_lookup_returns_a_pick_list_instead_of_an_empty_result() let view: Value = serde_json::from_str(&outcome.stdout)?; assert_eq!(view["status"]["resultState"], "needs_resolution"); assert_eq!(view["status"]["matchState"], "ambiguous"); + assert!( + view["answer"]["headline"] + .as_str() + .is_some_and(|headline| headline.contains("multiple candidates") + && headline.contains("exact node ID")) + ); + assert_eq!(view["answer"]["basis"][0]["kind"], "operation"); let results = view["primaryResults"] .as_array() .ok_or("primaryResults must be an array")?; @@ -1450,6 +1792,29 @@ fn ambiguous_typed_lookup_returns_a_pick_list_instead_of_an_empty_result() "{}", outcome.stdout ); + for argv in [ + vec!["callers", "run"], + vec!["callees", "run"], + vec!["ask", "who calls run"], + ] { + let mut args = argv.into_iter().map(OsString::from).collect::>(); + args.extend([OsString::from("--graph"), graph.as_os_str().to_owned()]); + let text = run(Frontend::Compass, args); + assert_eq!(text.code, 0, "{}", text.stderr); + assert!( + text.stdout.contains("multiple candidates"), + "{}", + text.stdout + ); + assert!(text.stdout.contains("id: n:alpha-run"), "{}", text.stdout); + assert!(text.stdout.contains("id: n:beta-run"), "{}", text.stdout); + assert!( + !text.stdout.contains("fallback candidate"), + "{}", + text.stdout + ); + assert!(!text.stdout.contains("No exact match"), "{}", text.stdout); + } Ok(()) } @@ -1870,3 +2235,482 @@ fn natural_query_and_explain_accept_agent_controlled_budgets_and_pages() assert!(out_of_range.stderr.contains("last available page")); Ok(()) } + +#[test] +fn node_command_reports_depth_exhaustion_without_claiming_wrong_direction() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = support::write_typed_graph(directory.path())?; + let mut graph = GraphDocument::load(&path)?; + let template = graph.nodes.first().cloned().ok_or("node template")?; + graph.nodes = ["n:s", "n:a", "n:b", "n:t"] + .into_iter() + .map(|id| { + let mut node = template.clone(); + node.id = id.into(); + node.name = id.into(); + node.qualified_name = id.into(); + node.kind = NodeKind::Function; + node + }) + .collect(); + let template = graph + .links + .iter() + .find(|edge| edge.kind == EdgeKind::Calls) + .cloned() + .ok_or("edge template")?; + graph.links = [ + ("n:s", "n:a"), + ("n:a", "n:b"), + ("n:b", "n:t"), + ("n:t", "n:s"), + ] + .into_iter() + .map(|(source, target)| { + let mut edge = template.clone(); + edge.source = source.into(); + edge.target = target.into(); + edge.occurrence_rule = None; + edge.id = compass_model::identity::edge_id( + source, + EdgeKind::Calls, + target, + edge.relationship_site.as_ref(), + None, + ); + edge.key.clone_from(&edge.id); + edge + }) + .collect(); + std::fs::write(&path, serde_json::to_vec(&graph)?)?; + for depth in ["2", "3"] { + let output = std::process::Command::new(env!("CARGO_BIN_EXE_compass")) + .args([ + "node", + "n:s", + "n:t", + "--max-depth", + depth, + "--format", + "json", + "--graph", + ]) + .arg(&path) + .output()?; + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let result: Value = serde_json::from_slice(&output.stdout)?; + assert_eq!(result["schema"], "compass.query/1"); + if depth == "2" { + assert_eq!(result["truncated"], true); + assert_eq!(result["paths"], serde_json::json!([])); + let diagnostics = result["diagnostics"].as_array().ok_or("diagnostics")?; + assert!( + diagnostics + .iter() + .any(|d| d["code"] == "bounded_truncation") + ); + assert!( + !diagnostics + .iter() + .any(|d| d["code"] == "direction_mismatch" || d["code"] == "no_match") + ); + } else { + assert_eq!(result["truncated"], false); + assert_eq!( + result["paths"][0]["nodeIds"], + serde_json::json!(["n:s", "n:a", "n:b", "n:t"]) + ); + } + } + Ok(()) +} + +#[test] +fn explain_without_a_stored_digest_never_claims_source_verification() -> Result<(), Box> +{ + let directory = tempfile::tempdir()?; + let source = "fn run() {\n body();\n}\n"; + let source_path = directory.path().join("lib.rs"); + let graph_path = directory.path().join("graph.json"); + std::fs::write( + &graph_path, + serde_json::json!({ + "directed": true, + "multigraph": true, + "nodes": [{ + "id": "n:run", + "kind": "function", + "name": "run", + "source": { + "file": "lib.rs", "startByte": 0, "endByte": source.len(), + "startLine": 1, "endLine": 3, "startColumn": 0, "endColumn": 1 + }, + "details": {"type": "symbol", "data": {"signature": "fn run()"}} + }], + "links": [] + }) + .to_string(), + )?; + // A same-length edit cannot be detected from an anchor alone. + for body in [source.to_owned(), source.replace("body", "next")] { + std::fs::write(&source_path, &body)?; + for format in ["text", "agent-json", "json"] { + let result = run( + Frontend::Compass, + [ + OsString::from("explain"), + OsString::from("n:run"), + OsString::from("--root"), + directory.path().as_os_str().to_owned(), + OsString::from("--graph"), + graph_path.as_os_str().to_owned(), + OsString::from("--format"), + OsString::from(format), + ], + ); + assert_eq!(result.code, 0, "{}", result.stderr); + assert!( + !result.stdout.contains("(digest-verified)"), + "a missing digest cannot verify even a plausible source range: {}", + result.stdout + ); + assert!( + result + .stdout + .contains("unverified: no recorded source digest"), + "{}", + result.stdout + ); + assert!( + result.stdout.contains(if body.contains("next") { + "next();" + } else { + "body();" + }), + "{}", + result.stdout + ); + } + } + Ok(()) +} + +#[test] +fn explain_member_source_reaches_implementations_outside_type_declarations() +-> Result<(), Box> { + use sha2::{Digest, Sha256}; + let directory = tempfile::tempdir()?; + let owner = "struct Owner {}\n"; + let method = "fn work() {\n perform();\n}\n"; + std::fs::write(directory.path().join("lib.rs"), format!("{owner}{method}"))?; + let graph = directory.path().join("graph.json"); + let nodes = [("owner", "Owner", "struct", owner, 0, 1, 1), ("method", "work", "method", method, owner.len(), 2, 4)] + .into_iter().map(|(id, name, kind, text, start, first, last)| serde_json::json!({ + "id": id, "name": name, "kind": kind, + "source": {"file": "lib.rs", "startByte": start, "endByte": start + text.len(), "startLine": first, "endLine": last, "startColumn": 0, "endColumn": 1}, + "details": {"type": "symbol", "data": {"sourceDigest": format!("{:x}", Sha256::digest(text.as_bytes()))}} + })).collect::>(); + std::fs::write(&graph, serde_json::json!({"directed":true,"multigraph":true,"nodes":nodes,"links":[{"source":"owner","target":"method","relation":"contains","confidence":"EXTRACTED"}]}).to_string())?; + let run_command = |extra: &[&str]| { + let mut args = vec![ + OsString::from("explain"), + OsString::from("owner"), + OsString::from("--root"), + directory.path().as_os_str().to_owned(), + OsString::from("--graph"), + graph.as_os_str().to_owned(), + ]; + args.extend(extra.iter().map(OsString::from)); + run(Frontend::Compass, args) + }; + let declaration = run_command(&[]); + assert_eq!(declaration.code, 0, "{}", declaration.stderr); + assert!(!declaration.stdout.contains("perform();")); + for format in ["text", "agent-json", "json"] { + let members = run_command(&["--source-members", "--format", format]); + assert_eq!(members.code, 0, "{}", members.stderr); + assert!(members.stdout.contains("MEMBER SOURCES")); + assert!(members.stdout.contains("perform();")); + assert!(members.stdout.contains("L2-L4 (digest-verified)")); + assert!(!members.stdout.contains("L1-L1 (digest-verified)")); + } + let bounded = run_command(&["--source-members", "--max-source-bytes", "5"]); + assert_eq!(bounded.code, 0, "{}", bounded.stderr); + assert!(bounded.stdout.contains("source_bytes=5 truncated=true")); + assert!(!bounded.stdout.contains("perform();")); + assert_ne!(run_command(&["--source-members", "--no-source"]).code, 0); + assert_ne!( + run_command(&["--source-members", "--max-source-bytes", "1048577"]).code, + 0 + ); + Ok(()) +} + +#[test] +fn explain_member_focus_prioritizes_names_and_validates_its_options() -> Result<(), Box> +{ + use sha2::{Digest, Sha256}; + let directory = tempfile::tempdir()?; + let parts = [ + "struct Owner {}\n", + "fn early() { first(); }\n", + "fn check_loop() { later(); }\n", + ]; + std::fs::write(directory.path().join("lib.rs"), parts.concat())?; + let mut offset = 0; + let nodes = [("owner", "Owner", "struct"), ("early", "early", "method"), ("loop", "check_loop", "method")] + .into_iter().enumerate().map(|(index, (id, name, kind))| { + let text = parts[index]; + let start = offset; + offset += text.len(); + serde_json::json!({"id": id, "name": name, "kind": kind, + "source": {"file": "lib.rs", "startByte": start, "endByte": offset, "startLine": index+1, "endLine": index+1, "startColumn": 0, "endColumn": text.len()-1}, + "details": {"type": "symbol", "data": {"sourceDigest": format!("{:x}", Sha256::digest(text.as_bytes()))}} + }) + }).collect::>(); + let graph = directory.path().join("graph.json"); + std::fs::write( + &graph, + serde_json::json!({"directed":true,"multigraph":true,"nodes":nodes,"links":[ + {"source":"owner","target":"early","relation":"contains","confidence":"EXTRACTED"}, + {"source":"owner","target":"loop","relation":"contains","confidence":"EXTRACTED"} + ]}) + .to_string(), + )?; + let invoke = |extra: &[&str]| { + let mut args = vec![ + OsString::from("explain"), + OsString::from("owner"), + OsString::from("--root"), + directory.path().as_os_str().to_owned(), + OsString::from("--graph"), + graph.as_os_str().to_owned(), + ]; + args.extend(extra.iter().map(OsString::from)); + run(Frontend::Compass, args) + }; + let budget = parts[2].len().to_string(); + let baseline = invoke(&["--source-members", "--max-source-bytes", &budget]); + assert_eq!(baseline.code, 0, "{}", baseline.stderr); + assert!(baseline.stdout.contains("first();")); + assert!(!baseline.stdout.contains("later();")); + for format in ["text", "json", "agent-json"] { + let focused = invoke(&[ + "--source-members", + "--member-focus", + "loops", + "--max-source-bytes", + &budget, + "--format", + format, + ]); + assert_eq!(focused.code, 0, "{}", focused.stderr); + assert!(focused.stdout.contains("later();")); + assert!(!focused.stdout.contains("first();")); + assert!( + focused + .stdout + .contains("member-name focus, then source order") + ); + assert!(focused.stdout.contains("Matched focus terms:")); + assert!( + focused + .stdout + .contains("retained=1 omitted=1 unavailable=0") + ); + } + let equals = invoke(&["--source-members", "--member-focus=loops"]); + let spaced = invoke(&["--source-members", "--member-focus", "loops"]); + assert_eq!(equals.stdout, spaced.stdout); + for args in [ + vec!["--member-focus", "loops"], + vec!["--source-members", "--member-focus"], + vec!["--source-members", "--member-focus="], + vec!["--source-members", "--member-focus", "!!!"], + vec!["--source-members", "--no-source", "--member-focus", "loops"], + vec![ + "--source-members", + "--member-focus=loops", + "--member-focus=early", + ], + ] { + assert_ne!(invoke(&args).code, 0, "{args:?}"); + } + assert_ne!( + invoke(&["--source-members", "--member-focus", &"x".repeat(4097)]).code, + 0 + ); + Ok(()) +} + +#[test] +fn exact_search_cli_filters_explicitly_and_preserves_bounded_ambiguity() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let graph_path = support::write_typed_graph(directory.path())?; + let mut graph = GraphDocument::load(&graph_path)?; + let target = graph + .nodes + .iter() + .find(|n| n.name == "Target") + .ok_or("target")? + .clone(); + let source = target.source.as_ref().ok_or("target source")?; + let mut export = target.clone(); + export.id = "duplicate:export".to_owned(); + export.kind = NodeKind::Export; + graph.nodes.push(export); + std::fs::write(&graph_path, serde_json::to_vec(&graph)?)?; + let execute = |extra: &[&str]| { + let mut args = vec![ + OsString::from("search"), + OsString::from("Target"), + OsString::from("--graph"), + graph_path.as_os_str().to_owned(), + ]; + args.extend(extra.iter().map(OsString::from)); + run(Frontend::Compass, args) + }; + let line = source.start_line.to_string(); + let result = execute(&[ + "--exact", + "--file", + &source.file, + "--line", + &line, + "--kind", + "function", + "--format", + "json", + ]); + assert_eq!(result.code, 0, "{}", result.stderr); + let body: Value = serde_json::from_str(&result.stdout)?; + assert_eq!(body["truncated"], false); + assert_eq!(body["results"].as_array().ok_or("results")?.len(), 1); + assert_eq!(body["results"][0]["nodeId"], target.id); + let ambiguous = execute(&["--exact", "--format", "json"]); + let body: Value = serde_json::from_str(&ambiguous.stdout)?; + assert_eq!(body["results"].as_array().ok_or("results")?.len(), 2); + for format in ["text", "agent-json"] { + let bounded = execute(&["--exact", "--max-candidates", "1", "--format", format]); + assert_eq!(bounded.code, 0, "{}", bounded.stderr); + assert!( + bounded.stdout.contains("bounded_truncation"), + "{}", + bounded.stdout + ); + } + for args in [ + vec!["--file", &source.file], + vec!["--exact", "--file"], + vec!["--exact", "--kind", "unknown"], + vec!["--exact", "--line", "0"], + vec!["--exact", "--line", "1"], + vec!["--exact", "--file", "--kind", "function"], + ] { + assert_ne!(execute(&args).code, 0, "{args:?}"); + } + Ok(()) +} + +#[test] +fn calls_only_cli_and_ask_reject_structural_routes_and_invalid_flags() -> Result<(), Box> +{ + let directory = tempfile::tempdir()?; + let path = support::write_typed_graph(directory.path())?; + let invoke = |args: &[&str]| -> Result> { + Ok(support::compass_command() + .args(args) + .arg("--graph") + .arg(&path) + .output()?) + }; + for args in [ + vec!["node", "Caller", "Target", "--calls-only", "--format=json"], + vec!["ask", "call path from Caller to Target", "--format=json"], + ] { + let output = invoke(&args)?; + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let body: Value = serde_json::from_slice(&output.stdout)?; + assert_eq!(body["paths"].as_array().ok_or("paths")?.len(), 1); + assert_eq!(body["edges"][0]["kind"], "calls"); + } + let mut graph = GraphDocument::load(&path)?; + let edge = graph.links.first_mut().ok_or("edge")?; + edge.kind = EdgeKind::Contains; + edge.id = compass_model::identity::edge_id( + &edge.source, + edge.kind, + &edge.target, + edge.relationship_site.as_ref(), + None, + ); + edge.key.clone_from(&edge.id); + std::fs::write(&path, serde_json::to_vec(&graph)?)?; + let default = invoke(&["node", "Caller", "Target", "--format=json"])?; + assert!(default.status.success()); + let body: Value = serde_json::from_slice(&default.stdout)?; + assert_eq!(body["paths"].as_array().ok_or("paths")?.len(), 1); + for format in ["json", "agent-json", "text"] { + for args in [ + vec![ + "node", + "Caller", + "Target", + "--calls-only", + "--format", + format, + ], + vec![ + "ask", + "call chain from Caller to Target", + "--format", + format, + ], + ] { + let output = invoke(&args)?; + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + if format == "json" { + let body: Value = serde_json::from_slice(&output.stdout)?; + assert_eq!(body["paths"], serde_json::json!([])); + assert!( + body["diagnostics"] + .to_string() + .contains("No bounded directed call trail") + ); + } else { + assert!(String::from_utf8(output.stdout)?.contains("call ")); + } + } + } + for args in [ + vec!["node", "Caller", "Target", "--calls-only=true"], + vec!["node", "Caller", "Target", "--calls-only", "--calls-only"], + vec!["node", "Caller", "Target", "--calls-only", "true"], + vec!["search", "Caller", "--calls-only"], + ] { + let mut args = args; + args.push("--format=json"); + let output = invoke(&args)?; + assert!(!output.status.success()); + assert!(output.stdout.is_empty()); + assert!(String::from_utf8(output.stderr)?.contains("calls-only")); + } + let help = support::compass_command().args(["help", "node"]).output()?; + assert!(help.status.success()); + assert!(String::from_utf8(help.stdout)?.contains("--calls-only")); + Ok(()) +} diff --git a/crates/compass-cli/tests/help_cli.rs b/crates/compass-cli/tests/help_cli.rs index 6fc124129..a586fc490 100644 --- a/crates/compass-cli/tests/help_cli.rs +++ b/crates/compass-cli/tests/help_cli.rs @@ -108,6 +108,38 @@ fn command_and_nested_help_explain_options_and_examples() { } } +#[test] +fn discovery_help_keeps_returned_edges_and_examined_relationship_limits_distinct() { + let limits = compass_model::query_contract::DiscoveryLimits::default(); + for arguments in [["query", "--help"], ["help", "query"]] { + let outcome = invoke(&arguments); + assert_eq!(outcome.code, 0, "{}", outcome.stderr); + let text = outcome + .stdout + .split_whitespace() + .collect::>() + .join(" "); + assert!( + text.contains(&format!( + "--max-nodes Returned node count [default: {}; hard maximum: 500]", + limits.max_nodes + )), + "{text}" + ); + assert!( + text.contains(&format!( + "--max-edges Returned edge count [default: {}; hard maximum: 1000]", + limits.max_edges + )), + "{text}" + ); + assert!(text.contains(&format!( + "--max-expanded-relationships Examined relationships [default/hard maximum: {}]", + limits.max_expanded_relationships + )), "{text}"); + } +} + #[test] fn every_public_nested_command_has_a_dedicated_page() { for (parent, children) in [ diff --git a/crates/compass-core/src/build_state.rs b/crates/compass-core/src/build_state.rs index b8c036eee..837c1c2dd 100644 --- a/crates/compass-core/src/build_state.rs +++ b/crates/compass-core/src/build_state.rs @@ -20,6 +20,7 @@ fn current_build_fingerprint() -> String { compass_model::code_graph::CODE_GRAPH_SCHEMA_V1, compass_graph::V1_PUBLICATION_SEMANTICS_VERSION, compass_languages::EXTRACTION_SEMANTICS_VERSION, + compass_languages::FRAMEWORK_PACK_SEMANTICS_VERSION, compass_files::AST_CACHE_VERSION, ] { digest.update(component.as_bytes()); diff --git a/crates/compass-core/src/lib.rs b/crates/compass-core/src/lib.rs index 29dbf3b50..d536264fa 100644 --- a/crates/compass-core/src/lib.rs +++ b/crates/compass-core/src/lib.rs @@ -193,6 +193,19 @@ impl LoadedGraph { Ok(Self { graph, overlay }) } + /// Build a directed traversal view from an already captured graph artifact. + /// Adjacent learning data retains the existing application-sidecar policy. + pub fn from_artifact_directed( + artifact: &compass_model::GraphArtifact, + ) -> Result { + let mut document = artifact.traversal_document()?; + document.directed = true; + Ok(Self { + graph: Graph::from_traversal_document(document)?, + overlay: load_learning_overlay(artifact.path()), + }) + } + pub fn load_directed(path: &Path) -> Result { let graph = Graph::load_traversal_directed(path)?; let overlay = load_learning_overlay(path); diff --git a/crates/compass-core/tests/loading_coverage.rs b/crates/compass-core/tests/loading_coverage.rs index b6c35fad0..0e24557e8 100644 --- a/crates/compass-core/tests/loading_coverage.rs +++ b/crates/compass-core/tests/loading_coverage.rs @@ -4,8 +4,8 @@ use std::fs; use std::path::Path; use compass_core::{ - BuildOptions, BuildPurpose, CoreError, ExportInputs, LoadedGraph, SemanticLayer, - build_graph_with_layers, + BuildOptions, BuildPurpose, CoreError, ExportInputs, InferenceLevel, LoadedGraph, + SemanticLayer, build_graph_with_layers, }; use compass_files::BuildGuard; use compass_languages::{Engine, Extraction, RawEdgeRecord, RawNodeRecord}; @@ -204,6 +204,10 @@ fn loaded_graph_learning_overlay_marks_current_missing_and_unfingerprinted_sourc let directed = LoadedGraph::load_directed(&graph)?; assert_eq!(directed.graph.node_count(), 1); + let artifact = compass_model::GraphArtifact::load(&graph)?; + let captured = LoadedGraph::from_artifact_directed(&artifact)?; + assert_eq!(captured.overlay, directed.overlay); + assert_eq!(captured.graph.node_count(), directed.graph.node_count()); fs::write(output.join("learning.json"), "not json")?; assert!(LoadedGraph::load(&graph)?.overlay.is_empty()); fs::remove_file(output.join("learning.json"))?; @@ -472,6 +476,7 @@ fn incremental_mixed_origin_edges_use_fresh_ast_relationship_sites() -> Result<( )?; let mut options = BuildOptions::new(root.to_path_buf()); + options.inference_level = InferenceLevel::Max; options.no_cluster = true; options.no_viz = true; let initial = build_graph_with_layers(&options, None, &[])?; @@ -541,6 +546,7 @@ fn incremental_deleted_mixed_occurrence_keeps_only_revalidated_semantic_evidence semantic_owned_edge_extraction(Path::new("main.rs"), initial_source, "calls")?; let mut options = BuildOptions::new(root.to_path_buf()); + options.inference_level = InferenceLevel::Max; options.no_cluster = true; options.no_viz = true; let initial_layer = semantic_layer(initial_semantic)?; @@ -613,6 +619,7 @@ fn incremental_deleted_mixed_occurrence_keeps_only_revalidated_semantic_evidence evidence.origin == compass_model::provenance::EvidenceOrigin::Heuristic })); let mut clean_options = BuildOptions::new(root.to_path_buf()); + clean_options.inference_level = InferenceLevel::Max; clean_options.output_root = Some(root.join("clean-deletion-out")); clean_options.no_cluster = true; clean_options.no_viz = true; @@ -641,6 +648,7 @@ fn incremental_deleted_remapped_mixed_occurrence_rebinds_trusted_semantic_residu semantic_owned_edge_extraction(Path::new("main.rs"), initial_source, "calls")?; let mut options = BuildOptions::new(root.to_path_buf()); + options.inference_level = InferenceLevel::Max; options.no_cluster = true; options.no_viz = true; let initial_layer = semantic_layer(initial_semantic)?; @@ -752,6 +760,7 @@ fn incremental_deleted_remapped_mixed_occurrence_rebinds_trusted_semantic_residu assert_eq!(trusted.target, canonical_target); let mut clean_options = BuildOptions::new(root.to_path_buf()); + clean_options.inference_level = InferenceLevel::Max; clean_options.output_root = Some(root.join("clean-deletion-remap-out")); clean_options.no_cluster = true; clean_options.no_viz = true; @@ -785,6 +794,7 @@ fn incremental_mixed_occurrence_cardinality_matches_exact_sites_and_preserves_re assert_eq!(initial_semantic.edges.len(), 3); let mut options = BuildOptions::new(root.to_path_buf()); + options.inference_level = InferenceLevel::Max; options.no_cluster = true; options.no_viz = true; let initial_layer = semantic_layer(initial_semantic)?; @@ -955,6 +965,7 @@ fn incremental_mixed_occurrence_cardinality_matches_exact_sites_and_preserves_re ); let mut clean_options = BuildOptions::new(root.to_path_buf()); + clean_options.inference_level = InferenceLevel::Max; clean_options.output_root = Some(root.join("clean-cardinality-out")); clean_options.no_cluster = true; clean_options.no_viz = true; @@ -983,6 +994,7 @@ fn incremental_mixed_origin_alias_edges_use_canonical_fresh_relationship_sites() assert_eq!(initial_semantic.edges.len(), 1); let mut options = BuildOptions::new(root.to_path_buf()); + options.inference_level = InferenceLevel::Max; options.no_cluster = true; options.no_viz = true; let initial_layer = semantic_layer(initial_semantic)?; @@ -1029,6 +1041,7 @@ fn incremental_mixed_origin_alias_edges_use_canonical_fresh_relationship_sites() let final_semantic = semantic_method_alias_extraction(Path::new("main.rs"), final_source)?; assert_eq!(final_semantic.edges.len(), 1); let mut clean_options = BuildOptions::new(root.to_path_buf()); + clean_options.inference_level = InferenceLevel::Max; clean_options.output_root = Some(root.join("clean-out")); clean_options.no_cluster = true; clean_options.no_viz = true; @@ -1054,6 +1067,7 @@ fn refreshed_mixed_edge_drops_stale_incremental_endpoint_remap_evidence() assert_eq!(initial_semantic.edges.len(), 1); let mut options = BuildOptions::new(root.to_path_buf()); + options.inference_level = InferenceLevel::Max; options.no_cluster = true; options.no_viz = true; let initial_layer = semantic_layer(initial_semantic)?; @@ -1123,6 +1137,7 @@ fn refreshed_mixed_edge_drops_stale_incremental_endpoint_remap_evidence() let final_semantic = semantic_edge_extraction(Path::new("main.rs"), final_source, "calls")?; let mut clean_options = BuildOptions::new(root.to_path_buf()); + clean_options.inference_level = InferenceLevel::Max; clean_options.output_root = Some(root.join("clean-remap-out")); clean_options.no_cluster = true; clean_options.no_viz = true; @@ -1216,6 +1231,7 @@ fn incremental_ast_endpoint_remap_retains_exact_typed_rewrite_evidence() ..Extraction::default() }; let mut options = BuildOptions::new(root.to_path_buf()); + options.inference_level = InferenceLevel::Max; options.no_cluster = true; options.no_viz = true; diff --git a/crates/compass-files/src/cache.rs b/crates/compass-files/src/cache.rs index 0cc444222..6e77f636a 100644 --- a/crates/compass-files/src/cache.rs +++ b/crates/compass-files/src/cache.rs @@ -13,7 +13,7 @@ use sha2::{Digest, Sha256}; use crate::{FileError, StatHashIndex, file_hash, io_error, write_bytes_atomic, write_json_atomic}; /// Changes whenever cached extraction semantics change, even if the wire encoding does not. -pub const AST_CACHE_VERSION: &str = "2"; +pub const AST_CACHE_VERSION: &str = "13"; /// Portable cache encoding version used in the on-disk namespace. pub const CACHE_ENCODING_VERSION: u32 = 1; const MESSAGEPACK_EXTENSION: &str = "msgpack"; diff --git a/crates/compass-files/tests/contracts.rs b/crates/compass-files/tests/contracts.rs index 8a58dc5eb..192db6231 100644 --- a/crates/compass-files/tests/contracts.rs +++ b/crates/compass-files/tests/contracts.rs @@ -821,7 +821,7 @@ fn build_guard_publishes_one_complete_snapshot_at_a_time() -> Result<(), Box Result<(), Box> { let directory = tempfile::tempdir()?; let guard = BuildGuard::begin(directory.path())?; - write_text_atomic(&guard.staging_directory().join("graph.json"), "graph")?; + write_text_atomic(guard.staging_directory().join("graph.json"), "graph")?; guard.commit_with_presealed_artifacts(&["graph.json"])?; assert_eq!( fs::read_to_string(BuildGuard::resolve_artifact( @@ -985,6 +985,43 @@ fn cache_versions_legacy_fingerprints_pruning_and_cleanup_are_total() -> Result< cache_root.join("compass-out/cache/ast/v0.9.21/stale.json"), "{}", )?; + // Version 2 can contain calls attributed to a shadowed outer Rust + // receiver. Those facts must not survive the semantics correction. + fs::create_dir_all(cache_root.join("compass-out/cache/ast/v2/e1"))?; + fs::create_dir_all(cache_root.join("compass-out/cache/ast/v3/e1"))?; + fs::create_dir_all(cache_root.join("compass-out/cache/ast/v5/e1"))?; + fs::create_dir_all(cache_root.join("compass-out/cache/ast/v7/e1"))?; + fs::create_dir_all(cache_root.join("compass-out/cache/ast/v8/e1"))?; + fs::create_dir_all(cache_root.join("compass-out/cache/ast/v9/e1"))?; + fs::create_dir_all(cache_root.join("compass-out/cache/ast/v10/e1"))?; + fs::write( + cache_root.join("compass-out/cache/ast/v10/e1/stale.msgpack"), + "Rust facts without source-proven Result vector receiver flow", + )?; + fs::write( + cache_root.join("compass-out/cache/ast/v9/e1/stale.msgpack"), + "Java facts without enum contacts and constant-body ownership", + )?; + fs::write( + cache_root.join("compass-out/cache/ast/v8/e1/stale.msgpack"), + "Java facts without lexical field-access occurrences", + )?; + fs::write( + cache_root.join("compass-out/cache/ast/v7/e1/stale.msgpack"), + "Rust facts without field-access occurrences", + )?; + fs::write( + cache_root.join("compass-out/cache/ast/v5/e1/stale.msgpack"), + "stale Java spread parameter and array argument facts", + )?; + fs::write( + cache_root.join("compass-out/cache/ast/v3/e1/stale.msgpack"), + "stale Go receiver facts", + )?; + fs::write( + cache_root.join("compass-out/cache/ast/v2/e1/stale.msgpack"), + "stale", + )?; fs::create_dir_all(cache_root.join("compass-out/cache/ast/vold"))?; fs::write( cache_root.join("compass-out/cache/ast/vold/stale.json"), @@ -1012,6 +1049,15 @@ fn cache_versions_legacy_fingerprints_pruning_and_cleanup_are_total() -> Result< )) ); assert!(!cache_root.join("compass-out/cache/ast/v0.9.21").exists()); + assert!(!cache_root.join("compass-out/cache/ast/v2").exists()); + assert!(!cache_root.join("compass-out/cache/ast/v3").exists()); + assert!(!cache_root.join("compass-out/cache/ast/v5").exists()); + assert!(!cache_root.join("compass-out/cache/ast/v7").exists()); + assert!(!cache_root.join("compass-out/cache/ast/v8").exists()); + assert!(!cache_root.join("compass-out/cache/ast/v9").exists()); + assert!(!cache_root.join("compass-out/cache/ast/v10").exists()); + assert!(!cache_root.join("compass-out/cache/ast/v11").exists()); + assert!(!cache_root.join("compass-out/cache/ast/v12").exists()); let mut cache = Cache::open(&root, CacheOptions::output_directory(Some(&cache_root)))?; assert!( diff --git a/crates/compass-graph/src/analyze.rs b/crates/compass-graph/src/analyze.rs index cb0aba675..64987d78f 100644 --- a/crates/compass-graph/src/analyze.rs +++ b/crates/compass-graph/src/analyze.rs @@ -3,60 +3,13 @@ use std::collections::{BTreeMap, BTreeSet, VecDeque}; use ahash::{AHashMap as HashMap, AHashSet as HashSet}; use std::path::Path; -use compass_model::{EdgeRecord, GraphDocument, NodeRecord}; +use compass_model::{EdgeRecord, GraphDocument, NodeRecord, code_graph::NodeKind}; use rayon::prelude::*; use serde::Serialize; use sha2::{Digest, Sha256}; use crate::cluster::{Communities, PythonRandom, score_communities}; -const BUILTIN_NOISE_LABELS: &[&str] = &[ - "str", - "int", - "float", - "bool", - "bytes", - "bytearray", - "complex", - "object", - "True", - "False", - "MagicMock", - "Mock", - "AsyncMock", - "NonCallableMock", - "NonCallableMagicMock", - "PropertyMock", - "patch", - "sentinel", - "Path", - "Any", - "Optional", - "List", - "Dict", - "Set", - "Tuple", - "Union", - "Callable", - "Type", - "ClassVar", - "Final", - "Literal", - "Protocol", - "Counter", - "defaultdict", - "OrderedDict", - "datetime", - "Enum", - "os", - "sys", - "re", - "json", - "io", - "abc", - "typing", -]; - const JSON_NOISE_LABELS: &[&str] = &[ "start", "end", @@ -107,6 +60,57 @@ pub struct GodNode { pub degree: usize, } +/// Stored incident records, separate from the distinct-pair hub ranking. +#[derive(Clone, Debug, PartialEq, Eq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct HubRelation { + pub relation: String, + pub edge_records: usize, + pub incoming_records: usize, + pub outgoing_records: usize, + pub undirected_records: usize, +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct HubConnectivity { + pub schema: &'static str, + pub directed: bool, + pub edge_records: usize, + pub self_loop_records: usize, + pub relations: Vec, + pub omitted_relation_kinds: usize, + pub omitted_relation_records: usize, +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct HubEvidence { + pub hub: GodNode, + pub connectivity: HubConnectivity, + /// Stored direct-member evidence for a directed, typed class or struct. + pub members: Option, +} + +pub const MAX_HUB_RELATIONS: usize = 16; +pub const HUB_CONNECTIVITY_SCHEMA: &str = "compass.hub-connectivity/1"; +pub const HUB_MEMBERS_SCHEMA: &str = "compass.hub-members/1"; + +/// Counts of uniquely owned stored members and their own-field references. +/// Missing or unresolved source facts must not be interpreted as absent work. +#[derive(Clone, Debug, PartialEq, Eq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct HubMembers { + pub schema: &'static str, + pub source_coverage: &'static str, + pub direct_methods: usize, + pub direct_fields: usize, + pub ambiguous_direct_members: usize, + pub own_field_reference_records: usize, + pub distinct_own_field_pairs: usize, + pub methods_touching_own_fields: usize, +} + #[derive(Clone, Debug, PartialEq, Eq, Serialize)] pub struct SurpriseConnection { pub source: String, @@ -255,11 +259,226 @@ pub struct ImportCycle { } #[must_use] +/// Return connected, source-located hub candidates, ordered by degree then ID. +/// +/// This is a topology ranking, not proof of a god-object design problem. A +/// project's declaration must not be discarded just because its name is also +/// used by a standard library or test framework. pub fn god_nodes(document: &GraphDocument, top_n: usize) -> Vec { let graph = AnalysisGraph::new(document); god_nodes_in(&graph, top_n) } +/// Explain the unchanged hub ranking using all valid incident edge records. +/// +/// Parallel records are retained. A directed self-loop contributes once to +/// `edge_records` and once to each direction; undirected records have no +/// inferred direction. Relation rows are bounded, with explicit omissions. +/// These graph observations do not establish source precision or design defects. +pub fn god_nodes_with_evidence(document: &GraphDocument, top_n: usize) -> Vec { + let graph = AnalysisGraph::new(document); + let ranked = god_nodes_in(&graph, top_n); + let members = hub_members_in(&graph, &ranked); + let selected = ranked + .iter() + .enumerate() + .map(|(index, hub)| (hub.id.as_str(), index)) + .collect::>(); + let mut relations = vec![BTreeMap::::new(); ranked.len()]; + let mut loops = vec![0; ranked.len()]; + for edge in &graph.relation_edges { + let record = edge.record; + for (endpoint, id) in [&record.source, &record.target].into_iter().enumerate() { + // Each self-loop is one incident record, not two records. + if endpoint == 1 && record.source == record.target { + continue; + } + if let Some(&index) = selected.get(id.as_str()) { + add_hub_relation(&mut relations[index], record, id, document.directed); + loops[index] += usize::from(record.source == record.target); + } + } + } + ranked + .into_iter() + .zip(relations) + .zip(loops) + .zip(members) + .map(|(((hub, relations), self_loop_records), members)| { + let mut relations = relations.into_values().collect::>(); + relations.sort_by(|left, right| { + right + .edge_records + .cmp(&left.edge_records) + .then_with(|| left.relation.cmp(&right.relation)) + }); + let edge_records = relations.iter().map(|row| row.edge_records).sum(); + let omitted_relation_kinds = relations.len().saturating_sub(MAX_HUB_RELATIONS); + let omitted_relation_records = relations + .iter() + .skip(MAX_HUB_RELATIONS) + .map(|row| row.edge_records) + .sum(); + relations.truncate(MAX_HUB_RELATIONS); + HubEvidence { + hub, + members, + connectivity: HubConnectivity { + schema: HUB_CONNECTIVITY_SCHEMA, + directed: document.directed, + edge_records, + self_loop_records, + relations, + omitted_relation_kinds, + omitted_relation_records, + }, + } + }) + .collect() +} + +fn hub_members_in(graph: &AnalysisGraph<'_>, ranked: &[GodNode]) -> Vec> { + let mut result = vec![None; ranked.len()]; + if !graph.directed || ranked.is_empty() { + return result; + } + let selected = ranked + .iter() + .enumerate() + .filter_map(|(rank, hub)| { + let position = *graph.positions.get(hub.id.as_str())?; + is_member_container(graph.nodes[position]).then_some((position, rank)) + }) + .collect::>(); + if selected.is_empty() { + return result; + } + let mut direct = vec![BTreeSet::::new(); ranked.len()]; + for edge in &graph.relation_edges { + if edge_string(edge.record, "relation") == "contains" + && let Some(&rank) = selected.get(&edge.left) + && is_hub_member(graph.nodes[edge.right]) + { + direct[rank].insert(edge.right); + } + } + let selected_members = direct + .iter() + .flat_map(|members| members.iter().copied()) + .collect::>(); + let mut first_owner = HashMap::::new(); + let mut ambiguous = HashSet::::new(); + for edge in &graph.relation_edges { + if edge_string(edge.record, "relation") == "contains" + && selected_members.contains(&edge.right) + && is_member_container(graph.nodes[edge.left]) + { + match first_owner.entry(edge.right) { + std::collections::hash_map::Entry::Vacant(entry) => { + entry.insert(edge.left); + } + std::collections::hash_map::Entry::Occupied(entry) if *entry.get() != edge.left => { + ambiguous.insert(edge.right); + } + std::collections::hash_map::Entry::Occupied(_) => {} + } + } + } + let mut method_owner = HashMap::::new(); + let mut field_owner = HashMap::::new(); + for (position, &rank) in &selected { + let mut counts = HubMembers { + schema: HUB_MEMBERS_SCHEMA, + source_coverage: "unverified", + direct_methods: 0, + direct_fields: 0, + ambiguous_direct_members: 0, + own_field_reference_records: 0, + distinct_own_field_pairs: 0, + methods_touching_own_fields: 0, + }; + for &member in &direct[rank] { + if ambiguous.contains(&member) || first_owner.get(&member) != Some(position) { + counts.ambiguous_direct_members += 1; + continue; + } + match explicit_node_kind(graph.nodes[member]) { + Some(NodeKind::Method | NodeKind::Constructor) => { + counts.direct_methods += 1; + method_owner.insert(member, rank); + } + Some(NodeKind::Field | NodeKind::Property) => { + counts.direct_fields += 1; + field_owner.insert(member, rank); + } + _ => {} + } + } + result[rank] = Some(counts); + } + let mut pairs = vec![BTreeSet::<(usize, usize)>::new(); ranked.len()]; + let mut touching = vec![BTreeSet::::new(); ranked.len()]; + for edge in &graph.relation_edges { + if edge_string(edge.record, "relation") == "references" + && let (Some(&method_rank), Some(&field_rank)) = + (method_owner.get(&edge.left), field_owner.get(&edge.right)) + && method_rank == field_rank + { + if let Some(counts) = &mut result[method_rank] { + counts.own_field_reference_records += 1; + } + pairs[method_rank].insert((edge.left, edge.right)); + touching[method_rank].insert(edge.left); + } + } + for (rank, counts) in result.iter_mut().enumerate() { + if let Some(counts) = counts { + counts.distinct_own_field_pairs = pairs[rank].len(); + counts.methods_touching_own_fields = touching[rank].len(); + } + } + result +} + +fn is_member_container(node: &NodeRecord) -> bool { + matches!( + explicit_node_kind(node), + Some(NodeKind::Class | NodeKind::Struct) + ) +} + +fn is_hub_member(node: &NodeRecord) -> bool { + matches!( + explicit_node_kind(node), + Some(NodeKind::Method | NodeKind::Constructor | NodeKind::Field | NodeKind::Property) + ) +} + +fn add_hub_relation( + relations: &mut BTreeMap, + record: &EdgeRecord, + id: &str, + directed: bool, +) { + let relation = record.string("relation"); + let row = relations + .entry(relation.clone()) + .or_insert_with(|| HubRelation { + relation, + edge_records: 0, + incoming_records: 0, + outgoing_records: 0, + undirected_records: 0, + }); + row.edge_records += 1; + if directed { + row.incoming_records += usize::from(record.target == id); + row.outgoing_records += usize::from(record.source == id); + } else { + row.undirected_records += 1; + } +} + fn god_nodes_in(graph: &AnalysisGraph<'_>, top_n: usize) -> Vec { let mut ranked = graph .nodes @@ -267,14 +486,19 @@ fn god_nodes_in(graph: &AnalysisGraph<'_>, top_n: usize) -> Vec { .enumerate() .map(|(position, node)| (position, node, graph.degree(position))) .collect::>(); - ranked.sort_by(|left, right| right.2.cmp(&left.2).then_with(|| left.0.cmp(&right.0))); + ranked.sort_by(|left, right| { + right + .2 + .cmp(&left.2) + .then_with(|| left.1.id.cmp(&right.1.id)) + }); ranked .into_iter() - .filter(|(position, node, _)| { - !graph.is_file_node(*position) + .filter(|(position, node, degree)| { + *degree > 0 + && !graph.is_file_node(*position) && !is_concept_node(node) && !is_json_key_node(node) - && !BUILTIN_NOISE_LABELS.contains(&node.label()) }) .take(top_n) .map(|(_, node, degree)| GodNode { @@ -1773,6 +1997,11 @@ impl<'a> AnalysisGraph<'a> { } fn is_file_node(&self, node: usize) -> bool { let record = self.nodes[node]; + // Canonical kinds are stronger evidence than display labels. In + // particular, `.method()` is a callable label, not a file identity. + if let Some(kind) = explicit_node_kind(record) { + return kind == NodeKind::File; + } let label = record.label(); if label.is_empty() { return false; @@ -1827,9 +2056,21 @@ fn invert_communities(communities: &Communities) -> HashMap { .collect() } +fn explicit_node_kind(node: &NodeRecord) -> Option { + serde::Deserialize::deserialize( + serde::de::value::StrDeserializer::::new(node.kind_name()), + ) + .ok() +} + fn is_concept_node(node: &NodeRecord) -> bool { let source = attribute(node, "source_file").unwrap_or_default(); - source.is_empty() || !source.rsplit('/').next().unwrap_or_default().contains('.') + // Canonical structural records can come from extensionless scripts or + // configuration files. Retain the filename heuristic for legacy records + // without a recognized kind, and still exclude nodes lacking a source. + source.is_empty() + || (explicit_node_kind(node).is_none() + && !source.rsplit('/').next().unwrap_or_default().contains('.')) } fn is_json_key_node(node: &NodeRecord) -> bool { attribute(node, "source_file").is_some_and(|source| source.to_lowercase().ends_with(".json")) diff --git a/crates/compass-graph/src/lib.rs b/crates/compass-graph/src/lib.rs index ebcde1a76..ef6490e76 100644 --- a/crates/compass-graph/src/lib.rs +++ b/crates/compass-graph/src/lib.rs @@ -12,9 +12,11 @@ mod v1; pub use analyze::{ BlindSpotEdge, BlindSpotLimits, BlindSpotNode, BlindSpotOmissions, BlindSpotReport, CommunityGap, DiffEdge, DiffNode, DisconnectedComponent, GRAPH_INSIGHTS_SCHEMA, GodNode, - GraphDiff, GraphInsights, ImportCycle, SuggestedQuestion, SurpriseConnection, - blind_spot_report, find_import_cycles, god_nodes, graph_diff, graph_insights, - graph_insights_with_blind_spots, suggest_questions, surprising_connections, + GraphDiff, GraphInsights, HUB_CONNECTIVITY_SCHEMA, HUB_MEMBERS_SCHEMA, HubConnectivity, + HubEvidence, HubMembers, HubRelation, ImportCycle, MAX_HUB_RELATIONS, SuggestedQuestion, + SurpriseConnection, blind_spot_report, find_import_cycles, god_nodes, god_nodes_with_evidence, + graph_diff, graph_insights, graph_insights_with_blind_spots, suggest_questions, + surprising_connections, }; pub use cluster::{ ClusterOptions, Communities, IncrementalClusterLimits, IncrementalClusterResult, cluster, diff --git a/crates/compass-graph/tests/analyze_coverage.rs b/crates/compass-graph/tests/analyze_coverage.rs index 943358cb6..96919d4ef 100644 --- a/crates/compass-graph/tests/analyze_coverage.rs +++ b/crates/compass-graph/tests/analyze_coverage.rs @@ -42,6 +42,133 @@ fn edge(source: &str, target: &str, relation: &str, confidence: &str) -> Value { }) } +#[test] +fn god_nodes_preserve_project_declarations_named_like_builtins() { + let graph = document( + vec![ + node("path", "Path", "src/path.rs"), + node("counter", "Counter", "src/counter.py"), + node("service", "Service", "src/service.rs"), + node("external", "Path", ""), + ], + vec![ + edge("path", "counter", "uses", "EXTRACTED"), + edge("path", "service", "calls", "EXTRACTED"), + edge("path", "external", "references", "EXTRACTED"), + ], + true, + ); + let ranked = god_nodes(&graph, 10); + assert_eq!( + ranked + .iter() + .map(|node| node.id.as_str()) + .collect::>(), + ["path", "counter", "service"] + ); + assert_eq!(ranked[0].degree, 3); + assert!(god_nodes(&graph, 0).is_empty()); +} + +#[test] +fn god_nodes_use_explicit_kinds_instead_of_method_label_heuristics() { + let graph = document( + vec![ + json!({"id":"method", "kind":"method", "name":".dispatch()", + "source":{"file":"src/service.rs", "startLine":5}}), + json!({"id":"function", "kind":"function", "name":"helper()", + "source":{"file":"src/service.rs", "startLine":20}}), + json!({"id":"file", "kind":"file", "name":"Service implementation", + "source":{"file":"src/service.rs", "startLine":1}}), + json!({"id":"caller", "kind":"class", "name":"Caller", + "source":{"file":"src/caller.rs", "startLine":1}}), + ], + vec![ + edge("method", "function", "calls", "EXTRACTED"), + edge("method", "caller", "references", "EXTRACTED"), + edge("file", "method", "contains", "EXTRACTED"), + edge("file", "caller", "references", "EXTRACTED"), + ], + true, + ); + let ranked = god_nodes(&graph, 10); + assert_eq!( + ranked + .iter() + .map(|node| node.id.as_str()) + .collect::>(), + ["method", "caller", "function"] + ); + assert_eq!(ranked[0].degree, 3); +} + +#[test] +fn god_nodes_preserve_typed_declarations_in_extensionless_sources() { + let graph = document( + vec![ + json!({"id":"prepare", "kind":"function", "name":"prepare()", + "source":{"file":"bin/launch", "startLine":2}}), + json!({"id":"helper", "kind":"function", "name":"helper()", + "source":{"file":"src/support.sh", "startLine":1}}), + json!({"id":"external", "kind":"function", "name":"external()"}), + json!({"id":"concept", "label":"Idea", "source_file":"conversation"}), + ], + vec![ + edge("prepare", "helper", "calls", "EXTRACTED"), + edge("prepare", "external", "calls", "EXTRACTED"), + edge("prepare", "concept", "references", "EXTRACTED"), + ], + true, + ); + let ranked = god_nodes(&graph, 10); + assert_eq!( + ranked + .iter() + .map(|node| node.id.as_str()) + .collect::>(), + ["prepare", "helper"] + ); + assert_eq!(ranked[0].degree, 3); +} + +#[test] +fn god_nodes_do_not_label_isolated_declarations_as_hubs() { + let graph = document( + vec![node("isolated", "Service", "src/service.rs")], + Vec::new(), + true, + ); + assert!(god_nodes(&graph, 10).is_empty()); +} + +#[test] +fn god_nodes_ties_are_stable_under_graph_record_permutations() { + let mut graph = document( + vec![ + node("z", "Zulu", "src/z.rs"), + node("a", "Alpha", "src/a.rs"), + node("b", "Beta", "src/b.rs"), + ], + vec![ + edge("z", "a", "calls", "EXTRACTED"), + edge("a", "b", "calls", "EXTRACTED"), + edge("b", "z", "calls", "EXTRACTED"), + ], + true, + ); + let first = god_nodes(&graph, 2); + graph.nodes.reverse(); + graph.links.reverse(); + assert_eq!(first, god_nodes(&graph, 2)); + assert_eq!( + first + .iter() + .map(|node| node.id.as_str()) + .collect::>(), + ["a", "b"] + ); +} + #[test] fn questions_cover_no_signal_isolation_inference_ambiguity_bridge_and_low_cohesion() -> Result<(), Box> { @@ -473,3 +600,154 @@ fn diff_and_cycle_analysis_cover_add_remove_direction_deferred_and_rotation() { assert!(find_import_cycles(&cycle_graph, 2, 10).is_empty()); assert!(find_import_cycles(&document(Vec::new(), Vec::new(), true), 5, 10).is_empty()); } + +#[test] +fn hub_evidence_preserves_parallel_records_directions_and_self_loops() { + for directed in [true, false] { + let mut graph = document_with_multigraph( + vec![ + node("hub", "Hub", "src/hub.rs"), + node("peer", "Peer", "src/peer.rs"), + ], + vec![ + edge("hub", "peer", "calls", "EXTRACTED"), + edge("hub", "peer", "calls", "EXTRACTED"), + edge("peer", "hub", "references", "EXTRACTED"), + edge("hub", "hub", "calls", "EXTRACTED"), + edge("hub", "missing", "calls", "EXTRACTED"), + ], + directed, + true, + ); + let evidence = compass_graph::god_nodes_with_evidence(&graph, 10); + assert_eq!( + evidence.iter().map(|e| &e.hub).collect::>(), + god_nodes(&graph, 10).iter().collect::>() + ); + let hub = &evidence[0]; + assert_eq!(hub.hub.id, "hub"); + assert_eq!(hub.hub.degree, if directed { 4 } else { 3 }); + let c = &hub.connectivity; + assert_eq!(c.edge_records, 4); + assert_eq!(c.self_loop_records, 1); + assert_eq!(c.omitted_relation_records, 0); + assert_eq!(c.relations[0].relation, "calls"); + assert_eq!(c.relations[0].edge_records, 3); + assert_eq!(c.relations[0].incoming_records, usize::from(directed)); + assert_eq!( + c.relations[0].outgoing_records, + if directed { 3 } else { 0 } + ); + assert_eq!( + c.relations[0].undirected_records, + if directed { 0 } else { 3 } + ); + graph.links.reverse(); + graph.nodes.reverse(); + assert_eq!(evidence, compass_graph::god_nodes_with_evidence(&graph, 10)); + assert!(compass_graph::god_nodes_with_evidence(&graph, 0).is_empty()); + } +} + +#[test] +fn hub_evidence_bounds_relation_rows_without_hiding_omitted_records() { + let mut graph = document_with_multigraph( + vec![ + node("hub", "Hub", "src/hub.rs"), + node("peer", "Peer", "src/peer.rs"), + ], + (0..20) + .map(|i| edge("hub", "peer", &format!("r{i:02}"), "EXTRACTED")) + .collect(), + true, + true, + ); + graph.links.push(graph.links[19].clone()); + let evidence = compass_graph::god_nodes_with_evidence(&graph, 1); + let c = &evidence[0].connectivity; + assert_eq!(c.edge_records, 21); + assert_eq!(c.relations.len(), compass_graph::MAX_HUB_RELATIONS); + assert_eq!(c.relations[0].relation, "r19"); + assert_eq!(c.relations[1].relation, "r00"); + assert_eq!(c.omitted_relation_kinds, 4); + assert_eq!(c.omitted_relation_records, 4); + assert_eq!( + c.relations.iter().map(|r| r.edge_records).sum::() + c.omitted_relation_records, + c.edge_records + ); +} + +#[test] +fn hub_members_require_unique_direct_ownership_and_preserve_parallel_contacts() +-> Result<(), Box> { + let mut graph = document_with_multigraph( + vec![ + json!({"id":"a","kind":"class","name":"A","source":{"file":"a.rs","startLine":1}}), + json!({"id":"b","kind":"class","name":"B","source":{"file":"b.rs","startLine":1}}), + json!({"id":"m","kind":"method","name":".run()","source":{"file":"a.rs","startLine":2}}), + json!({"id":"shared","kind":"method","name":".shared()","source":{"file":"a.rs","startLine":3}}), + json!({"id":"f","kind":"field","name":"value","source":{"file":"a.rs","startLine":4}}), + json!({"id":"ambiguous","kind":"field","name":"other","source":{"file":"a.rs","startLine":5}}), + json!({"id":"helper","kind":"method","name":".help()","source":{"file":"a.rs","startLine":6}}), + ], + vec![ + edge("a", "m", "contains", "EXTRACTED"), + edge("a", "shared", "contains", "EXTRACTED"), + edge("b", "shared", "contains", "EXTRACTED"), + edge("a", "f", "contains", "EXTRACTED"), + edge("a", "ambiguous", "contains", "EXTRACTED"), + edge("b", "ambiguous", "contains", "EXTRACTED"), + edge("m", "f", "references", "EXTRACTED"), + edge("m", "f", "references", "EXTRACTED"), + edge("m", "ambiguous", "references", "EXTRACTED"), + edge("shared", "f", "references", "EXTRACTED"), + edge("helper", "f", "references", "EXTRACTED"), + ], + true, + true, + ); + let first = compass_graph::god_nodes_with_evidence(&graph, 10); + let a = first + .iter() + .find(|row| row.hub.id == "a") + .and_then(|row| row.members.as_ref()); + let a = a.ok_or("class member evidence missing")?; + assert_eq!(a.schema, compass_graph::HUB_MEMBERS_SCHEMA); + assert_eq!( + ( + a.direct_methods, + a.direct_fields, + a.ambiguous_direct_members + ), + (1, 1, 2) + ); + assert_eq!( + ( + a.own_field_reference_records, + a.distinct_own_field_pairs, + a.methods_touching_own_fields + ), + (2, 1, 1) + ); + let b = first + .iter() + .find(|row| row.hub.id == "b") + .and_then(|row| row.members.as_ref()); + assert_eq!(b.map(|row| row.ambiguous_direct_members), Some(2)); + assert!( + first + .iter() + .find(|row| row.hub.id == "m") + .is_some_and(|row| row.members.is_none()) + ); + graph.nodes.reverse(); + graph.links.reverse(); + assert_eq!(first, compass_graph::god_nodes_with_evidence(&graph, 10)); + graph.directed = false; + assert!( + compass_graph::god_nodes_with_evidence(&graph, 10) + .iter() + .all(|row| row.members.is_none()) + ); + Ok(()) +} diff --git a/crates/compass-languages/src/evidence/build.rs b/crates/compass-languages/src/evidence/build.rs index 8094ba4e5..6e5a2fedb 100644 --- a/crates/compass-languages/src/evidence/build.rs +++ b/crates/compass-languages/src/evidence/build.rs @@ -15,6 +15,8 @@ use super::model::{ }; use super::validate::{EvidenceError, EvidenceErrorCode, EvidenceLimits, validate_evidence}; +mod java_fields; + // Go selector attribution can cross a closure, a multi-return call, and a // range expression before reaching the receiver type. Keep that traversal // bounded, but allow the real-world chain without falling back to an @@ -972,7 +974,17 @@ struct RustImplContext { #[derive(Clone)] struct RustValueTypeVersion { raw: Option, - active_from: usize, + active_range: std::ops::Range, + shadows_alias: bool, +} + +// Preserve the declaration context when a receiver crosses a field boundary. +// A field's element type is resolved in its defining module, not the caller's. +#[derive(Clone)] +struct RustSourceType { + raw: String, + owner: DeclarationContext, + source_start: usize, } #[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] @@ -1021,9 +1033,12 @@ struct DirectEvidenceState<'source> { rust_imported_typed_receivers: HashSet<(String, String)>, rust_platform_reexport_bindings: HashMap, rust_platform_fallbacks: HashSet<(String, String)>, - rust_field_types: HashMap>, + rust_field_types: HashMap>, + rust_standard_prelude_enabled: bool, + rust_ambiguous_field_types: HashSet<(String, String)>, rust_value_types: HashMap>>, rust_callable_return_types: HashMap>, + rust_result_self_methods: HashSet, rust_call_result_bindings: HashMap<(String, String, usize), String>, rust_import_nodes: HashSet, rust_test_declarations: HashSet, @@ -1033,11 +1048,11 @@ struct DirectEvidenceState<'source> { go_return_types: HashMap>>, go_member_types: HashMap<(String, String), String>, go_collection_element_types: HashMap, - go_collection_binding_element_types: HashMap>, go_range_return_types: HashMap>>, go_range_member_types: HashMap<(String, String), String>, java_containers: HashMap, java_value_types: HashMap>, + java_fields: java_fields::JavaFieldIndex, graph_ids: HashSet, parser_error_ranges: Vec<(usize, usize)>, builder: EvidenceBuilder, @@ -1114,8 +1129,12 @@ impl<'source> DirectEvidenceState<'source> { rust_platform_reexport_bindings: HashMap::new(), rust_platform_fallbacks: HashSet::new(), rust_field_types: HashMap::new(), + rust_ambiguous_field_types: HashSet::new(), + rust_standard_prelude_enabled: pipeline.producer.language == "rust" + && rust_standard_prelude_enabled(root, source), rust_value_types: HashMap::new(), rust_callable_return_types: HashMap::new(), + rust_result_self_methods: HashSet::new(), rust_call_result_bindings: HashMap::new(), rust_import_nodes: HashSet::new(), rust_test_declarations: HashSet::new(), @@ -1125,11 +1144,11 @@ impl<'source> DirectEvidenceState<'source> { go_return_types: HashMap::new(), go_member_types: HashMap::new(), go_collection_element_types: HashMap::new(), - go_collection_binding_element_types: HashMap::new(), go_range_return_types: HashMap::new(), go_range_member_types: HashMap::new(), java_containers: HashMap::new(), java_value_types: HashMap::new(), + java_fields: java_fields::JavaFieldIndex::default(), graph_ids: HashSet::new(), parser_error_ranges: Vec::new(), builder: EvidenceBuilder::new( @@ -2851,6 +2870,7 @@ impl<'source> DirectEvidenceState<'source> { self.collect_java_imports(root, &file)?; self.collect_java_declarations(root, &file)?; self.collect_java_value_types(root, &file)?; + self.index_java_field_values(root, &file)?; self.walk_java_evidence(root, &file, true) } @@ -3350,18 +3370,18 @@ impl<'source> DirectEvidenceState<'source> { if !matches!(parameter.kind(), "formal_parameter" | "spread_parameter") { continue; } - let Some(name) = parameter + let Some(name) = java_parameter_declarator(parameter) .child_by_field_name("name") .map(|node| self.text(node)) else { continue; }; - let Some(target) = parameter - .child_by_field_name("type") - .map(|node| java_normalize_type(&self.text(node))) - else { + let Some(mut target) = java_parameter_type_name(parameter, self.source) else { continue; }; + if parameter.kind() == "spread_parameter" { + target.push_str("[]"); + } self.java_value_types .entry(owner.scope_id.clone()) .or_default() @@ -3428,6 +3448,7 @@ impl<'source> DirectEvidenceState<'source> { match node.kind() { "import_declaration" => return Ok(()), "method_invocation" => self.add_java_method_call(node, &active)?, + "field_access" | "identifier" => self.add_java_field_access(node, &active)?, "object_creation_expression" => self.add_java_construction(node, &active)?, _ => {} } @@ -3566,10 +3587,10 @@ impl<'source> DirectEvidenceState<'source> { } let type_root = match node.kind() { "method_declaration" => node.child_by_field_name("type"), - "field_declaration" - | "constant_declaration" - | "formal_parameter" - | "spread_parameter" => node.child_by_field_name("type"), + "field_declaration" | "constant_declaration" | "formal_parameter" => { + node.child_by_field_name("type") + } + "spread_parameter" => java_parameter_type_node(node), _ => None, }; if let Some(type_root) = type_root { @@ -3670,12 +3691,10 @@ impl<'source> DirectEvidenceState<'source> { if spelling.is_empty() { return Ok(()); } - let receiver = node - .child_by_field_name("object") - .map(|object| self.text(object)); - let receiver_type = receiver - .as_deref() - .and_then(|receiver| self.java_receiver_type(owner, receiver, node.start_byte())); + let receiver_node = node.child_by_field_name("object"); + let receiver = receiver_node.map(|object| self.text(object)); + let receiver_type = + receiver_node.and_then(|object| self.java_method_receiver_type(owner, object, 0)); let qualified_name = receiver_type .as_ref() .map(|receiver| format!("{receiver}::{spelling}")); @@ -3732,18 +3751,35 @@ impl<'source> DirectEvidenceState<'source> { if spelling.is_empty() { return Ok(()); } - let qualified_name = self.java_qualified_type(owner, &normalized, type_node.start_byte()); + let mut cursor = node.walk(); + let enclosing_receiver = node + .children(&mut cursor) + .find(|child| !child.is_extra()) + .filter(|child| child.kind() != "new") + .map(|receiver| self.text(receiver)); + // A qualified instance creation looks up the member class through + // its enclosing receiver. An import with the same terminal name + // cannot establish that ownership. Retain an unresolved occurrence + // until the enclosing type can be proven. + let qualified_name = if enclosing_receiver.is_some() { + None + } else { + self.java_qualified_type(owner, &normalized, type_node.start_byte()) + }; let lookup = qualifier.map(qualified_binding_head).unwrap_or(spelling); - let binding = self - .binding_for_occurrence(owner, lookup, type_node.start_byte(), true) - .cloned(); + let binding = if enclosing_receiver.is_some() { + None + } else { + self.binding_for_occurrence(owner, lookup, type_node.start_byte(), true) + .cloned() + }; let argument_count = java_argument_count(node); let argument_types = self.java_argument_types(node, owner); let occurrence_id = self.builder.occur_with_context( SemanticRole::Construction, &owner.fact_id, spelling, - qualifier, + enclosing_receiver.as_deref().or(qualifier), Some(&owner.scope_id), Some(&format!("arity:{argument_count}")), range_for_node(self.source_file, type_node), @@ -3764,7 +3800,7 @@ impl<'source> DirectEvidenceState<'source> { argument_types, allowed_target_kinds: vec!["class".to_owned(), "record".to_owned()], hierarchy: None, - allow_external: true, + allow_external: enclosing_receiver.is_none(), }, )?; Ok(()) @@ -3873,11 +3909,24 @@ impl<'source> DirectEvidenceState<'source> { } .to_owned(), ), - "object_creation_expression" | "array_creation_expression" => { + "object_creation_expression" => { expression.child_by_field_name("type").and_then(|target| { self.java_canonical_type(owner, &self.text(target), target.start_byte()) }) } + "array_creation_expression" => { + let target = expression.child_by_field_name("type")?; + let mut raw = self.text(target); + let mut cursor = expression.walk(); + for dimension in expression.named_children(&mut cursor) { + match dimension.kind() { + "dimensions_expr" => raw.push_str("[]"), + "dimensions" => raw.push_str(&java_dimensions_suffix(dimension)), + _ => {} + } + } + self.java_canonical_type(owner, &raw, target.start_byte()) + } "cast_expression" => expression.child_by_field_name("type").and_then(|target| { self.java_canonical_type(owner, &self.text(target), target.start_byte()) }), @@ -3889,6 +3938,51 @@ impl<'source> DirectEvidenceState<'source> { } } + fn java_method_receiver_type( + &self, + owner: &DeclarationContext, + expression: Node<'_>, + depth: usize, + ) -> Option { + if depth >= 8 || expression.has_error() { + return None; + } + match expression.kind() { + "parenthesized_expression" => { + let mut cursor = expression.walk(); + expression + .named_children(&mut cursor) + .find(|child| !child.is_extra()) + .and_then(|inner| self.java_method_receiver_type(owner, inner, depth + 1)) + } + "object_creation_expression" => { + let mut cursor = expression.walk(); + // An enclosing-instance creation (`outer.new Inner()`) needs + // its own owner resolution. Anonymous classes may override + // methods on the named base; neither proves a base call. + if expression + .children(&mut cursor) + .find(|child| !child.is_extra()) + .is_none_or(|child| child.kind() != "new") + || expression + .named_children(&mut cursor) + .any(|child| child.kind() == "class_body") + { + return None; + } + let target = expression.child_by_field_name("type")?; + self.java_qualified_type(owner, &self.text(target), target.start_byte()) + } + "identifier" | "this" | "super" | "field_access" => { + self.java_receiver_type(owner, &self.text(expression), expression.start_byte()) + } + // Do not normalize arbitrary receiver expressions as type text: + // it invents targets such as `newlib.Cleaner::check`. Arrays, + // casts, and chained results need separate type/dispatch proof. + _ => None, + } + } + fn java_receiver_type( &self, owner: &DeclarationContext, @@ -3899,6 +3993,10 @@ impl<'source> DirectEvidenceState<'source> { return owner.enclosing_type_qualified_name.clone(); } if let Some(target) = self.local_java_value_type(owner, receiver) { + // An array receiver is not an instance of its element class. + if target.ends_with("[]") { + return None; + } return self.java_qualified_type(owner, target, use_start); } if receiver @@ -3943,6 +4041,7 @@ impl<'source> DirectEvidenceState<'source> { self.collect_rust_declarations(root, &file, None)?; self.collect_rust_imports(root, &file)?; self.collect_rust_callable_return_types(root); + self.collect_rust_callable_value_types(root); self.collect_rust_parameter_bindings(root, &file)?; self.walk_rust_evidence(root, &file, true) } @@ -3953,6 +4052,14 @@ impl<'source> DirectEvidenceState<'source> { && let Some(return_type) = node.child_by_field_name("return_type") { let raw = self.text(return_type); + if rust_single_generic_type_argument(&raw) == Some("Self") + && let Some(result) = rust_nominal_type_path(&raw) + && self.rust_standard_result_type(&owner, &result, return_type.start_byte()) + && self.rust_concrete_callable_receiver(&owner).is_some() + { + self.rust_result_self_methods + .insert(owner.qualified_name.clone()); + } let qualified = if raw.trim() == "Self" { self.rust_concrete_callable_receiver(&owner) } else { @@ -3973,6 +4080,18 @@ impl<'source> DirectEvidenceState<'source> { } } + fn collect_rust_callable_value_types(&mut self, node: Node<'_>) { + if let Some(owner) = self.declarations.get(&node.id()).cloned() + && matches!(owner.kind.as_str(), "function" | "method") + { + self.collect_rust_value_types(node, &owner); + } + let mut cursor = node.walk(); + for child in node.children(&mut cursor).filter(|child| child.is_named()) { + self.collect_rust_callable_value_types(child); + } + } + fn collect_rust_module_imports( &mut self, node: Node<'_>, @@ -4313,7 +4432,6 @@ impl<'source> DirectEvidenceState<'source> { .map(|implementation| implementation.type_qualified_name.clone()) .or_else(|| owner.enclosing_type_qualified_name.clone()), }; - self.collect_rust_value_types(node, &context); self.collect_rust_generic_bounds(node, &context); if owner.kind == "trait" { self.rust_trait_methods @@ -4847,7 +4965,8 @@ impl<'source> DirectEvidenceState<'source> { scope_id: &str, name: &str, raw: Option, - active_from: usize, + active_range: std::ops::Range, + shadows_alias: bool, ) { if name.is_empty() || name == "_" || name == "self" { return; @@ -4857,7 +4976,11 @@ impl<'source> DirectEvidenceState<'source> { .or_default() .entry(name.to_owned()) .or_default() - .push(RustValueTypeVersion { raw, active_from }); + .push(RustValueTypeVersion { + raw, + active_range, + shadows_alias, + }); } fn rust_value_type_for<'a>( @@ -4867,12 +4990,23 @@ impl<'source> DirectEvidenceState<'source> { use_start: usize, use_node: Option>, ) -> Option<&'a str> { + self.rust_value_binding_for(owner, name, use_start, use_node) + .and_then(|version| version.raw.as_deref()) + } + + fn rust_value_binding_for<'a>( + &'a self, + owner: &DeclarationContext, + name: &str, + use_start: usize, + use_node: Option>, + ) -> Option<&'a RustValueTypeVersion> { let mut node = use_node; while let Some(current) = node { if rust_is_lexical_scope_node(current.kind()) { let scope_id = format!("rust-lexical:{}", current.id()); - if let Some(raw) = self.rust_value_type_in_scope(&scope_id, name, use_start) { - return Some(raw); + if let Some(version) = self.rust_value_type_in_scope(&scope_id, name, use_start) { + return Some(version); } } node = current.parent(); @@ -4880,8 +5014,8 @@ impl<'source> DirectEvidenceState<'source> { let mut scope_id = Some(owner.scope_id.as_str()); for _ in 0..64 { let current = scope_id?; - if let Some(raw) = self.rust_value_type_in_scope(current, name, use_start) { - return Some(raw); + if let Some(version) = self.rust_value_type_in_scope(current, name, use_start) { + return Some(version); } scope_id = self.scope_parents.get(current).map(String::as_str); } @@ -4893,17 +5027,16 @@ impl<'source> DirectEvidenceState<'source> { scope_id: &str, name: &str, use_start: usize, - ) -> Option<&'a str> { + ) -> Option<&'a RustValueTypeVersion> { self.rust_value_types .get(scope_id) .and_then(|values| values.get(name)) .and_then(|versions| { versions .iter() - .filter(|version| version.active_from <= use_start) - .max_by_key(|version| version.active_from) + .filter(|version| version.active_range.contains(&use_start)) + .max_by_key(|version| version.active_range.start) }) - .and_then(|version| version.raw.as_deref()) } fn ensure_rust_lexical_scope(&mut self, node: Node<'_>, parent: &str) -> String { @@ -4914,6 +5047,160 @@ impl<'source> DirectEvidenceState<'source> { scope_id } + fn rust_indexed_type_name(&self, receiver: &RustSourceType) -> Option { + let nominal = rust_nominal_type_path(rust_indexable_type(&receiver.raw)?)?; + if self + .visible_import_binding_is_ambiguous(&receiver.owner, qualified_binding_head(&nominal)) + { + return None; + } + rust_qualify_evidence_path(self, &receiver.owner, &nominal, receiver.source_start) + } + + // Bounded source types for indexed method receivers and field accesses. + // Unsupported forms stay unresolved instead of falling back to a name. + fn rust_indexed_receiver_type( + &self, + owner: &DeclarationContext, + node: Node<'_>, + budget: usize, + ) -> Option { + let budget = budget.checked_sub(1)?; + if self.overlaps_parser_error(node) { + return None; + } + match node.kind() { + "self" => Some(RustSourceType { + raw: rust_callable_owner(owner)?.to_owned(), + owner: owner.clone(), + source_start: node.start_byte(), + }), + "identifier" => Some(RustSourceType { + raw: self + .rust_value_type_for(owner, &self.text(node), node.start_byte(), Some(node))? + .to_owned(), + owner: owner.clone(), + source_start: node.start_byte(), + }), + "parenthesized_expression" => { + self.rust_indexed_receiver_type(owner, node.named_child(0)?, budget) + } + "reference_expression" => { + let value = node.child_by_field_name("value")?; + let mut receiver = self.rust_indexed_receiver_type(owner, value, budget)?; + // Method/field receivers may auto-dereference this reference, + // but an index operand such as &n is not a scalar usize. + receiver.raw = format!("&{}", receiver.raw); + Some(receiver) + } + "field_expression" => { + let mut receiver = self.rust_indexed_receiver_type( + owner, + node.child_by_field_name("value")?, + budget, + )?; + let field = self.text(node.child_by_field_name("field")?); + for _ in 0..16 { + let raw = rust_indexable_type(&receiver.raw)?; + let qualified = self.rust_indexed_type_name(&receiver)?; + if self + .rust_ambiguous_field_types + .contains(&(qualified.clone(), field.clone())) + { + return None; + } + if let Some(field_type) = self + .rust_field_types + .get(&qualified) + .and_then(|fields| fields.get(&field)) + { + return Some(field_type.clone()); + } + if !rust_source_proven_deref_wrapper(&qualified) { + return None; + } + receiver.raw = rust_single_generic_type_argument(raw)?.to_owned(); + } + None + } + "index_expression" => { + let container = node.named_child(0)?; + let index = node.named_child(1)?; + if !self.rust_scalar_index(owner, index, budget) { + return None; + } + let mut receiver = self.rust_indexed_receiver_type(owner, container, budget)?; + for _ in 0..16 { + let raw = rust_indexable_type(&receiver.raw)?; + if let Some(element) = rust_array_or_slice_element(raw) { + receiver.raw = element.to_owned(); + return Some(receiver); + } + let nominal = rust_nominal_type_path(raw)?; + let context = &receiver.owner; + let position = receiver.source_start; + let qualified = self.rust_indexed_type_name(&receiver)?; + let standard_vec = + matches!(qualified.as_str(), "std::vec::Vec" | "alloc::vec::Vec") + || (nominal == "Vec" + && self.rust_standard_prelude_enabled + && self.local_target_for(context, "Vec").is_none() + && self + .imported_target_for_occurrence(context, "Vec", position, true) + .is_none() + && self + .import_binding_version_at(context, "*", position, true) + .is_none() + && !self.visible_import_binding_is_ambiguous(context, "*")); + if standard_vec { + receiver.raw = rust_single_generic_type_argument(raw)?.to_owned(); + return Some(receiver); + } + if !rust_source_proven_deref_wrapper(&qualified) { + return None; + } + receiver.raw = rust_single_generic_type_argument(raw)?.to_owned(); + } + None + } + _ => None, + } + } + + fn rust_scalar_index(&self, owner: &DeclarationContext, node: Node<'_>, budget: usize) -> bool { + if budget == 0 { + return false; + } + if node.kind() == "integer_literal" { + // Unsuffixed literals acquire usize from built-in sequence indexing. + // Keep suffixed non-usize integers and arbitrary index expressions unresolved. + let raw = self.text(node); + let raw = raw.strip_suffix("usize").unwrap_or(&raw); + return !raw.is_empty() + && raw + .bytes() + .all(|byte| byte.is_ascii_digit() || byte == b'_'); + } + self.rust_indexed_receiver_type(owner, node, budget) + .is_some_and(|index| { + index.raw.trim() == "usize" + && self.local_target_for(&index.owner, "usize").is_none() + && self + .imported_target_for_occurrence( + &index.owner, + "usize", + index.source_start, + true, + ) + .is_none() + && self + .import_binding_version_at(&index.owner, "*", index.source_start, true) + .is_none() + && !self.visible_import_binding_is_ambiguous(&index.owner, "usize") + && !self.visible_import_binding_is_ambiguous(&index.owner, "*") + }) + } + fn rust_field_receiver_type( &self, owner: &DeclarationContext, @@ -4981,7 +5268,7 @@ impl<'source> DirectEvidenceState<'source> { .get(&qualified) .and_then(|fields| fields.get(field)) { - return Some(field_type.clone()); + return Some(field_type.raw.clone()); } if !rust_source_proven_deref_wrapper(&qualified) { return None; @@ -4991,22 +5278,34 @@ impl<'source> DirectEvidenceState<'source> { None } - fn collect_rust_parameter_value_types(&mut self, parameters: Node<'_>, scope_id: &str) { + fn collect_rust_parameter_value_types( + &mut self, + parameters: Node<'_>, + scope_id: &str, + shadows_alias: bool, + ) { let mut cursor = parameters.walk(); for parameter in parameters .children(&mut cursor) .filter(|child| child.is_named()) { - let Some(pattern) = parameter.child_by_field_name("pattern") else { - continue; - }; + let pattern = parameter + .child_by_field_name("pattern") + .unwrap_or(parameter); let raw = parameter .child_by_field_name("type") + .filter(|_| rust_pattern_binds_whole_value(pattern)) .map(|type_node| self.text(type_node)); let mut names = Vec::new(); collect_rust_pattern_names(pattern, &mut names, self.source); for name in names { - self.record_rust_value_type(scope_id, &name, raw.clone(), parameter.start_byte()); + self.record_rust_value_type( + scope_id, + &name, + raw.clone(), + parameter.start_byte()..usize::MAX, + shadows_alias, + ); } } } @@ -5014,7 +5313,7 @@ impl<'source> DirectEvidenceState<'source> { fn collect_rust_value_types(&mut self, callable: Node<'_>, owner: &DeclarationContext) { let scope_id = owner.scope_id.clone(); if let Some(parameters) = callable.child_by_field_name("parameters") { - self.collect_rust_parameter_value_types(parameters, &scope_id); + self.collect_rust_parameter_value_types(parameters, &scope_id, false); } let Some(body) = callable.child_by_field_name("body") else { return; @@ -5040,22 +5339,117 @@ impl<'source> DirectEvidenceState<'source> { if node.kind() == "closure_expression" && let Some(parameters) = node.child_by_field_name("parameters") { - self.collect_rust_parameter_value_types(parameters, &scope_id); + if let Some(raw) = self.rust_map_closure_element_type(node, owner) + && parameters.named_child_count() == 1 + && let Some(pattern) = parameters.named_child(0) + && rust_pattern_binds_whole_value(pattern) + { + let mut names = Vec::new(); + collect_rust_pattern_names(pattern, &mut names, self.source); + for name in names { + self.record_rust_value_type( + &scope_id, + &name, + Some(raw.clone()), + pattern.end_byte()..node.end_byte(), + true, + ); + } + } else { + self.collect_rust_parameter_value_types(parameters, &scope_id, true); + } } if node.kind() == "let_declaration" && let Some(pattern) = node.child_by_field_name("pattern") { - let raw = node - .child_by_field_name("type") - .map(|type_node| self.text(type_node)) - .or_else(|| { - node.child_by_field_name("value") - .and_then(|value| self.rust_inferred_value_type(value, owner)) - }); + let raw = rust_pattern_binds_whole_value(pattern) + .then(|| { + node.child_by_field_name("type") + .map(|type_node| { + let declared = self.text(type_node); + node.child_by_field_name("value") + .and_then(|value| { + self.rust_collected_result_vec_type(owner, type_node, value) + }) + .unwrap_or(declared) + }) + .or_else(|| { + node.child_by_field_name("value") + .and_then(|value| self.rust_inferred_value_type(value, owner)) + }) + }) + .flatten(); let mut names = Vec::new(); collect_rust_pattern_names(pattern, &mut names, self.source); for name in names { - self.record_rust_value_type(&scope_id, &name, raw.clone(), pattern.start_byte()); + // A let binding starts after its initializer; the previous + // binding remains visible while the initializer is evaluated. + self.record_rust_value_type( + &scope_id, + &name, + raw.clone(), + node.end_byte()..usize::MAX, + true, + ); + } + } + if matches!(node.kind(), "for_expression" | "match_arm") + && let Some(pattern) = node.child_by_field_name("pattern") + { + let inferred = if node.kind() == "for_expression" { + self.rust_for_element_type(node, owner, pattern) + } else { + self.rust_ok_arm_type(node, owner, pattern) + }; + let active_from = if node.kind() == "for_expression" { + node.child_by_field_name("body") + .map(|body| body.start_byte()) + } else { + pattern.named_child(0).map(|pattern| pattern.end_byte()) + }; + if let Some(active_from) = active_from { + let mut names = Vec::new(); + collect_rust_pattern_names(pattern, &mut names, self.source); + for name in names { + // An unknown inner receiver still shadows an outer alias. + // Do not invent an element type from a method's spelling. + self.record_rust_value_type( + &scope_id, + &name, + inferred.clone(), + active_from..node.end_byte(), + true, + ); + } + } + } + if node.kind() == "let_condition" + && let Some(pattern) = node.child_by_field_name("pattern") + { + let mut enclosing = node.parent(); + while let Some(conditional) = enclosing { + if matches!(conditional.kind(), "if_expression" | "while_expression") { + let body = conditional + .child_by_field_name("consequence") + .or_else(|| conditional.child_by_field_name("body")); + if let Some(body) = body { + let mut names = Vec::new(); + collect_rust_pattern_names(pattern, &mut names, self.source); + for name in names { + // Let-chain guards and the success body see this + // binding; its initializer and else branch do not. + self.record_rust_value_type( + &scope_id, + &name, + None, + node.end_byte()..body.end_byte(), + true, + ); + } + } + break; + } + enclosing = conditional.parent(); } } let mut cursor = node.walk(); @@ -5064,89 +5458,325 @@ impl<'source> DirectEvidenceState<'source> { } } - fn rust_inferred_value_type( + fn rust_standard_result_type( &self, - value: Node<'_>, owner: &DeclarationContext, - ) -> Option { - match value.kind() { - "call_expression" => { - let function = value.child_by_field_name("function")?; - let function = if function.kind() == "generic_function" { - function.child_by_field_name("function").unwrap_or(function) - } else { - function - }; - let raw = self.text(function); - split_qualified(&raw).0.map(str::to_owned) - } - "struct_expression" => value - .child_by_field_name("name") - .map(|name| self.text(name)), - "identifier" => self - .rust_value_type_for(owner, &self.text(value), value.start_byte(), Some(value)) - .map(str::to_owned), - _ => None, + nominal: &str, + position: usize, + ) -> bool { + if self.visible_import_binding_is_ambiguous(owner, qualified_binding_head(nominal)) { + return false; } + let qualified = rust_qualify_evidence_path(self, owner, nominal, position); + matches!( + qualified.as_deref(), + Some("std::io::Result" | "std::result::Result") + ) && (nominal != "Result" + || (self.rust_standard_prelude_enabled + && self.local_target_for(owner, "Result").is_none() + && self + .imported_target_for_occurrence(owner, "Result", position, true) + .is_none() + && self + .import_binding_version_at(owner, "*", position, true) + .is_none())) } - fn rust_enclosing_module(&self, owner: &DeclarationContext) -> String { - if matches!(owner.kind.as_str(), "file" | "module") { - return owner.qualified_name.clone(); - } - let mut scope_id = Some(owner.scope_id.as_str()); - for _ in 0..64 { - let Some(current) = scope_id else { - break; - }; - if let Some(context) = self - .rust_containers - .values() - .find(|context| context.kind == "module" && context.scope_id == current) - { - return context.qualified_name.clone(); - } - scope_id = self.scope_parents.get(current).map(String::as_str); + fn rust_standard_vec_element<'b>( + &self, + owner: &DeclarationContext, + raw: &'b str, + position: usize, + ) -> Option<&'b str> { + let nominal = rust_nominal_type_path(raw)?; + if self.visible_import_binding_is_ambiguous(owner, qualified_binding_head(&nominal)) { + return None; } - self.module_or_package.clone() - } - - fn rust_canonical_import_target(&self, module: &str, raw: &str) -> String { - let canonical = rust_canonical_import_target(module, raw); - let first = canonical.split("::").next().unwrap_or_default(); - let Some(mapped) = self.rust_namespace_aliases.get(first) else { - return canonical; - }; - canonical.replacen(first, mapped, 1) + let qualified = rust_qualify_evidence_path(self, owner, &nominal, position)?; + let standard = matches!(qualified.as_str(), "std::vec::Vec" | "alloc::vec::Vec") + || (nominal == "Vec" + && self.rust_standard_prelude_enabled + && self.local_target_for(owner, "Vec").is_none() + && self + .imported_target_for_occurrence(owner, "Vec", position, true) + .is_none() + && self + .import_binding_version_at(owner, "*", position, true) + .is_none()); + standard + .then(|| rust_single_generic_type_argument(raw)) + .flatten() } - /// Resolve a path rooted at a local module before treating it as an - /// external crate path. Rust 2018 permits `pub use api::Thing` at the - /// crate root; the parser gives us no `crate::` prefix, but the container - /// inventory already proves that `api` is local. - fn rust_import_target(&self, owner: &DeclarationContext, raw: &str) -> String { - let (qualifier, spelling) = split_qualified(raw); - if let Some(qualifier) = qualifier - && let Some(target) = self.local_target_for(owner, qualified_binding_head(qualifier)) + fn rust_collected_result_vec_type( + &self, + owner: &DeclarationContext, + declared: Node<'_>, + collect: Node<'_>, + ) -> Option { + let raw = self.text(declared); + let result = rust_nominal_type_path(&raw)?; + if !self.rust_standard_result_type(owner, &result, declared.start_byte()) { + return None; + } + let vector = rust_single_generic_type_argument(&raw)?; + if self.rust_standard_vec_element(owner, vector, declared.start_byte())? != "_" { + return None; + } + let collect_function = collect.child_by_field_name("function")?; + if collect.kind() != "call_expression" + || collect_function.kind() != "field_expression" + || self.text(collect_function.child_by_field_name("field")?) != "collect" + || collect + .child_by_field_name("arguments")? + .named_child_count() + != 0 { - return rust_join_qualified(target, spelling); + return None; } - self.rust_canonical_import_target(&self.rust_enclosing_module(owner), raw) - } - - fn add_rust_struct_fields( - &mut self, - node: Node<'_>, - owner: &DeclarationContext, - ) -> Result<(), EvidenceError> { - let Some(body) = node.child_by_field_name("body") else { - return Ok(()); - }; - let mut cursor = body.walk(); - let mut tuple_index = 0usize; - for field in body.children(&mut cursor).filter(|child| child.is_named()) { - if field.kind() == "field_declaration" { - self.record_rust_field_type(field, owner, None); + let map = collect_function.child_by_field_name("value")?; + let map_function = map.child_by_field_name("function")?; + if map.kind() != "call_expression" + || map_function.kind() != "field_expression" + || self.text(map_function.child_by_field_name("field")?) != "map" + { + return None; + } + let iterator = map_function.child_by_field_name("value")?; + let iterator_function = iterator.child_by_field_name("function")?; + if iterator.kind() != "call_expression" + || iterator_function.kind() != "field_expression" + || self.text(iterator_function.child_by_field_name("field")?) != "iter" + || iterator + .child_by_field_name("arguments")? + .named_child_count() + != 0 + { + return None; + } + let source = self.rust_indexed_receiver_type( + owner, + iterator_function.child_by_field_name("value")?, + 16, + )?; + self.rust_standard_vec_element(&source.owner, &source.raw, source.source_start)?; + let arguments = map.child_by_field_name("arguments")?; + if arguments.named_child_count() != 1 { + return None; + } + let closure = arguments.named_child(0)?; + if closure.kind() != "closure_expression" { + return None; + } + let body = closure.child_by_field_name("body")?; + if body.kind() != "call_expression" { + return None; + } + let function = body.child_by_field_name("function")?; + let raw_function = self.text(function); + let (receiver, method) = split_qualified(&raw_function); + let receiver = rust_qualify_evidence_path(self, owner, receiver?, function.start_byte())?; + let target = self.rust_receiver_method_target(&receiver, method)?; + if !self.rust_result_self_methods.contains(&target) { + return None; + } + Some(format!("{result}>")) + } + + fn rust_ok_arm_type( + &self, + arm: Node<'_>, + owner: &DeclarationContext, + pattern: Node<'_>, + ) -> Option { + let match_expression = arm.parent()?.parent()?; + if match_expression.kind() != "match_expression" { + return None; + } + let scrutinee = match_expression.child_by_field_name("value")?; + if scrutinee.kind() != "identifier" { + return None; + } + let raw = self.rust_value_type_for( + owner, + &self.text(scrutinee), + scrutinee.start_byte(), + Some(scrutinee), + )?; + let result = rust_nominal_type_path(raw)?; + if !self.rust_standard_result_type(owner, &result, scrutinee.start_byte()) { + return None; + } + let inner = rust_single_generic_type_argument(raw)?; + let wrapper = pattern.named_child(0)?; + if wrapper.kind() != "tuple_struct_pattern" + || self.text(wrapper.child_by_field_name("type")?) != "Ok" + || wrapper.named_child_count() != 2 + || !rust_pattern_binds_whole_value(wrapper.named_child(1)?) + || self.local_target_for(owner, "Ok").is_some() + || self + .imported_target_for_occurrence(owner, "Ok", pattern.start_byte(), true) + .is_some() + || self + .import_binding_version_at(owner, "*", pattern.start_byte(), true) + .is_some() + || !self.rust_standard_prelude_enabled + { + return None; + } + self.rust_standard_vec_element(owner, inner, scrutinee.start_byte())?; + Some(inner.to_owned()) + } + + fn rust_for_element_type( + &self, + loop_node: Node<'_>, + owner: &DeclarationContext, + pattern: Node<'_>, + ) -> Option { + if !rust_pattern_binds_whole_value(pattern) { + return None; + } + let iterable = loop_node.child_by_field_name("value")?; + if iterable.kind() != "reference_expression" { + return None; + } + let binding = iterable.child_by_field_name("value")?; + if binding.kind() != "identifier" { + return None; + } + let raw = self.rust_value_type_for( + owner, + &self.text(binding), + binding.start_byte(), + Some(binding), + )?; + let element = self.rust_standard_vec_element(owner, raw, binding.start_byte())?; + (element != "_").then(|| element.to_owned()) + } + + fn rust_map_closure_element_type( + &self, + closure: Node<'_>, + owner: &DeclarationContext, + ) -> Option { + let arguments = closure.parent()?; + if arguments.kind() != "arguments" || arguments.named_child_count() != 1 { + return None; + } + let map = arguments.parent()?; + let function = map.child_by_field_name("function")?; + if map.kind() != "call_expression" + || function.kind() != "field_expression" + || self.text(function.child_by_field_name("field")?) != "map" + { + return None; + } + let iterator = function.child_by_field_name("value")?; + let iterator_function = iterator.child_by_field_name("function")?; + if iterator.kind() != "call_expression" + || iterator_function.kind() != "field_expression" + || self.text(iterator_function.child_by_field_name("field")?) != "iter" + || iterator + .child_by_field_name("arguments")? + .named_child_count() + != 0 + { + return None; + } + let source = self.rust_indexed_receiver_type( + owner, + iterator_function.child_by_field_name("value")?, + 16, + )?; + let element = + self.rust_standard_vec_element(&source.owner, &source.raw, source.source_start)?; + (element != "_").then(|| element.to_owned()) + } + + fn rust_inferred_value_type( + &self, + value: Node<'_>, + owner: &DeclarationContext, + ) -> Option { + match value.kind() { + "call_expression" => { + let function = value.child_by_field_name("function")?; + let function = if function.kind() == "generic_function" { + function.child_by_field_name("function").unwrap_or(function) + } else { + function + }; + let raw = self.text(function); + split_qualified(&raw).0.map(str::to_owned) + } + "struct_expression" => value + .child_by_field_name("name") + .map(|name| self.text(name)), + "identifier" => self + .rust_value_type_for(owner, &self.text(value), value.start_byte(), Some(value)) + .map(str::to_owned), + _ => None, + } + } + + fn rust_enclosing_module(&self, owner: &DeclarationContext) -> String { + if matches!(owner.kind.as_str(), "file" | "module") { + return owner.qualified_name.clone(); + } + let mut scope_id = Some(owner.scope_id.as_str()); + for _ in 0..64 { + let Some(current) = scope_id else { + break; + }; + if let Some(context) = self + .rust_containers + .values() + .find(|context| context.kind == "module" && context.scope_id == current) + { + return context.qualified_name.clone(); + } + scope_id = self.scope_parents.get(current).map(String::as_str); + } + self.module_or_package.clone() + } + + fn rust_canonical_import_target(&self, module: &str, raw: &str) -> String { + let canonical = rust_canonical_import_target(module, raw); + let first = canonical.split("::").next().unwrap_or_default(); + let Some(mapped) = self.rust_namespace_aliases.get(first) else { + return canonical; + }; + canonical.replacen(first, mapped, 1) + } + + /// Resolve a path rooted at a local module before treating it as an + /// external crate path. Rust 2018 permits `pub use api::Thing` at the + /// crate root; the parser gives us no `crate::` prefix, but the container + /// inventory already proves that `api` is local. + fn rust_import_target(&self, owner: &DeclarationContext, raw: &str) -> String { + let (qualifier, spelling) = split_qualified(raw); + if let Some(qualifier) = qualifier + && let Some(target) = self.local_target_for(owner, qualified_binding_head(qualifier)) + { + return rust_join_qualified(target, spelling); + } + self.rust_canonical_import_target(&self.rust_enclosing_module(owner), raw) + } + + fn add_rust_struct_fields( + &mut self, + node: Node<'_>, + owner: &DeclarationContext, + ) -> Result<(), EvidenceError> { + let Some(body) = node.child_by_field_name("body") else { + return Ok(()); + }; + let mut cursor = body.walk(); + let mut tuple_index = 0usize; + for field in body.children(&mut cursor).filter(|child| child.is_named()) { + if field.kind() == "field_declaration" { + self.record_rust_field_type(field, owner, None); self.add_rust_field(field, owner, None)?; } else if rust_is_type_node(field.kind()) { self.record_rust_field_type(field, owner, Some(tuple_index)); @@ -5177,10 +5807,25 @@ impl<'source> DirectEvidenceState<'source> { if name.is_empty() || raw.is_empty() { return; } - self.rust_field_types + let fields = self + .rust_field_types .entry(owner.qualified_name.clone()) - .or_default() - .insert(name, raw); + .or_default(); + if fields + .get(&name) + .is_some_and(|previous| previous.source_start != type_node.start_byte()) + { + self.rust_ambiguous_field_types + .insert((owner.qualified_name.clone(), name.clone())); + } + fields.insert( + name, + RustSourceType { + raw, + owner: owner.clone(), + source_start: type_node.start_byte(), + }, + ); } fn add_rust_enum_members( @@ -5421,6 +6066,7 @@ impl<'source> DirectEvidenceState<'source> { match node.kind() { "use_declaration" => return Ok(()), "call_expression" => self.add_rust_call(node, &active)?, + "field_expression" => self.add_rust_field_access(node, &active)?, "macro_invocation" => self.add_rust_macro_invocation(node, &active)?, _ => {} } @@ -5550,6 +6196,73 @@ impl<'source> DirectEvidenceState<'source> { Ok(()) } + fn add_rust_field_access( + &mut self, + node: Node<'_>, + owner: &DeclarationContext, + ) -> Result<(), EvidenceError> { + if self.overlaps_parser_error(node) { + return Ok(()); + } + // In `receiver.method()` the outer selector names a method. Its + // nested receiver fields still receive their own traversal visits. + let selector = node + .parent() + .filter(|parent| parent.kind() == "generic_function") + .unwrap_or(node); + if selector.parent().is_some_and(|parent| { + parent.kind() == "call_expression" + && parent + .child_by_field_name("function") + .is_some_and(|function| function.id() == selector.id()) + }) { + return Ok(()); + } + let (Some(receiver), Some(field)) = ( + node.child_by_field_name("value"), + node.child_by_field_name("field"), + ) else { + return Ok(()); + }; + let spelling = self.text(field); + let qualifier = self.text(receiver); + if spelling.is_empty() || qualifier.is_empty() { + return Ok(()); + } + let qualified_name = self + .rust_indexed_receiver_type(owner, receiver, 32) + .and_then(|source_type| self.rust_indexed_type_name(&source_type)) + .map(|receiver_type| rust_join_qualified(&receiver_type, &spelling)); + let occurrence_id = self.builder.occur_with_context( + SemanticRole::MemberAccess, + &owner.fact_id, + &spelling, + Some(&qualifier), + Some(&owner.scope_id), + Some("member"), + range_for_node(self.source_file, field), + )?; + self.builder.relate( + CandidateRelation::AccessesMember, + &owner.fact_id, + Some(&occurrence_id), + None, + &spelling, + ResolutionConstraint { + exact_language: Some(self.language.to_owned()), + scope_id: Some(owner.scope_id.clone()), + qualified_name, + allowed_target_kinds: vec!["field".to_owned()], + // An unknown receiver stays qualified but unresolved. No + // terminal-name fallback, method target, or external field + // invention can establish a state-sharing relationship. + allow_external: false, + ..ResolutionConstraint::default() + }, + )?; + Ok(()) + } + fn add_rust_call( &mut self, call: Node<'_>, @@ -5600,8 +6313,19 @@ impl<'source> DirectEvidenceState<'source> { if import_binding_is_ambiguous && platform_reexport_bindings.is_none() { return Ok(()); } - let direct_binding = platform_reexport_bindings - .is_none() + let shadows_alias = function.kind() == "field_expression" + && self + .rust_value_binding_for(owner, binding_name, function.start_byte(), Some(function)) + .is_some_and(|version| version.shadows_alias); + let indexed_receiver = function.kind() == "field_expression" + && function + .child_by_field_name("value") + .is_some_and(rust_receiver_contains_index); + // A binding for the container/root object cannot select the indexed + // element's method, including when element-type inference fails. + let direct_binding = (platform_reexport_bindings.is_none() + && !shadows_alias + && !indexed_receiver) .then(|| { if uses_type_namespace { self.import_binding_version_at(owner, binding_name, function.start_byte(), true) @@ -5620,10 +6344,11 @@ impl<'source> DirectEvidenceState<'source> { .next() .is_some_and(char::is_uppercase) }); - let wildcard_binding = (direct_binding.is_none() && wildcard_lookup_eligible) - .then(|| self.rust_wildcard_binding(owner, function.start_byte())) - .flatten() - .cloned(); + let wildcard_binding = + (direct_binding.is_none() && wildcard_lookup_eligible && !indexed_receiver) + .then(|| self.rust_wildcard_binding(owner, function.start_byte())) + .flatten() + .cloned(); let fallback_binding = direct_binding.clone().or_else(|| wildcard_binding.clone()); let call_result_binding = if platform_reexport_bindings.is_none() { self.rust_call_result_binding_for_occurrence( @@ -5774,6 +6499,16 @@ impl<'source> DirectEvidenceState<'source> { .imported_target_for_occurrence(owner, spelling, 0, true) .cloned(); }; + if use_node.kind() == "field_expression" + && let Some(receiver) = use_node.child_by_field_name("value") + && rust_receiver_contains_index(receiver) + { + let receiver = self.rust_indexed_receiver_type(owner, receiver, 32)?; + let qualified = self.rust_indexed_type_name(&receiver)?; + return self + .rust_receiver_method_target(&qualified, spelling) + .or_else(|| Some(rust_join_qualified(&qualified, spelling))); + } let normalized_qualifier = rust_normalize_path(raw_qualifier); if let Some(inner) = normalized_qualifier .strip_prefix('<') @@ -5832,6 +6567,20 @@ impl<'source> DirectEvidenceState<'source> { { return Some(rust_join_qualified(&receiver_type, spelling)); } + if use_node.kind() == "field_expression" + && self + .rust_value_binding_for( + owner, + qualified_binding_head(qualifier), + use_start, + Some(use_node), + ) + .is_some_and(|version| version.shadows_alias) + { + // A local with no proven receiver type must not fall back to a + // same-named parameter/import binding from the enclosing scope. + return None; + } if let Some(target) = self.local_target_for(owner, qualifier) { if let Some(method) = self.rust_receiver_method_target(target, spelling) { return Some(method); @@ -6683,6 +7432,9 @@ impl<'source> DirectEvidenceState<'source> { }; self.add_ownership(file, &context)?; self.declarations.insert(node.id(), context.clone()); + if kind == "struct" { + self.add_go_struct_fields(node, &context)?; + } if kind == "interface" { let mut interfaces = Vec::new(); collect_nodes(node, "interface_type", &mut interfaces); @@ -6761,6 +7513,71 @@ impl<'source> DirectEvidenceState<'source> { Ok(()) } + fn add_go_struct_fields( + &mut self, + declaration: Node<'_>, + owner: &DeclarationContext, + ) -> Result<(), EvidenceError> { + let Some(structure) = declaration + .child_by_field_name("type") + .filter(|node| node.kind() == "struct_type") + else { + return Ok(()); + }; + let mut cursor = structure.walk(); + let Some(fields) = structure + .children(&mut cursor) + .find(|child| child.kind() == "field_declaration_list") + else { + return Ok(()); + }; + let mut cursor = fields.walk(); + for field in fields + .children(&mut cursor) + .filter(|child| child.kind() == "field_declaration") + { + let mut field_cursor = field.walk(); + for name_node in field + .children(&mut field_cursor) + .filter(|child| child.kind() == "field_identifier") + { + let name = self.text(name_node); + if name.is_empty() || name == "_" { + continue; + } + let qualified_name = format!("{}::{name}", owner.qualified_name); + let base = make_id(&[&owner.graph_node_id, &name, "field"]); + let graph_node_id = if self.graph_ids.insert(base.clone()) { + base + } else { + let duplicate = make_id(&[&base, &name_node.start_byte().to_string()]); + self.graph_ids.insert(duplicate.clone()); + duplicate + }; + let fact_id = self.builder.declare( + "field", + &graph_node_id, + &name, + &qualified_name, + Some(&self.module_or_package), + Some(&owner.scope_id), + range_for_node(self.source_file, name_node), + )?; + let member = DeclarationContext { + fact_id, + scope_id: owner.scope_id.clone(), + graph_node_id, + name, + qualified_name, + kind: "field".to_owned(), + enclosing_type_qualified_name: Some(owner.qualified_name.clone()), + }; + self.add_ownership(owner, &member)?; + } + } + Ok(()) + } + fn record_go_return_types( &mut self, declaration: &DeclarationContext, @@ -6889,6 +7706,7 @@ impl<'source> DirectEvidenceState<'source> { return Ok(()); } "call_expression" => self.add_call(node, &active, "call_expression")?, + "selector_expression" => self.add_go_field_access(node, &active)?, "method_declaration" => self.add_go_receiver(node, &active)?, "field_declaration" => self.add_go_field_types(node, &active)?, "type_elem" => self.add_go_embedded_types(node, &active)?, @@ -6919,6 +7737,69 @@ impl<'source> DirectEvidenceState<'source> { Ok(()) } + fn add_go_field_access( + &mut self, + selector: Node<'_>, + owner: &DeclarationContext, + ) -> Result<(), EvidenceError> { + if self.overlaps_parser_error(selector) + || selector.parent().is_some_and(|parent| { + parent.kind() == "call_expression" + && parent + .child_by_field_name("function") + .is_some_and(|function| function.id() == selector.id()) + }) + { + return Ok(()); + } + let (Some(receiver), Some(field)) = ( + selector.child_by_field_name("operand"), + selector.child_by_field_name("field"), + ) else { + return Ok(()); + }; + let spelling = self.text(field); + let qualifier = self.text(receiver); + if spelling.is_empty() || qualifier.is_empty() { + return Ok(()); + } + let qualified_name = self + .go_expression_type(owner, receiver, 0, &mut HashSet::new()) + .map(|receiver_type| format!("{receiver_type}::{spelling}")); + let occurrence_id = self.builder.occur_with_context( + SemanticRole::MemberAccess, + &owner.fact_id, + &spelling, + Some(&qualifier), + Some(&owner.scope_id), + Some("member"), + range_for_node(self.source_file, field), + )?; + let Some(qualified_name) = qualified_name else { + // Preserve the exact use site without allowing an unrelated + // import or terminal name to invent a field target. + return Ok(()); + }; + self.builder.relate( + CandidateRelation::AccessesMember, + &owner.fact_id, + Some(&occurrence_id), + None, + &spelling, + ResolutionConstraint { + exact_language: Some(self.language.to_owned()), + scope_id: Some(owner.scope_id.clone()), + qualified_name: Some(qualified_name), + allowed_target_kinds: vec!["field".to_owned()], + // Unknown receiver types, package selectors and promoted + // members stay unresolved. Never choose by terminal name. + allow_external: false, + ..ResolutionConstraint::default() + }, + )?; + Ok(()) + } + fn add_go_typed_bindings( &mut self, declaration: Node<'_>, @@ -6959,21 +7840,8 @@ impl<'source> DirectEvidenceState<'source> { continue; }; if parameter.kind() == "variadic_parameter_declaration" { - let Some(element_target) = go_direct_type_target(type_node) else { - continue; - }; - let Some(element_type) = self.go_qualified_type_target(owner, element_target) - else { - continue; - }; - self.go_collection_binding_element_types - .entry(owner.scope_id.clone()) - .or_default() - .extend( - names - .into_iter() - .map(|(name, _)| (name, element_type.clone())), - ); + // Its element type is read from this exact parameter AST + // when resolving a range; the slice itself is not a receiver. continue; } let mut targets = Vec::new(); @@ -7364,6 +8232,12 @@ impl<'source> DirectEvidenceState<'source> { let Some(function) = function else { return Ok(()); }; + if self.language == "go" && function.kind() == "call_expression" { + // factory()() invokes an unnamed returned callback. Its receiver + // binding cannot identify the callback or a type conversion. The + // walker visits the inner factory call separately. + return Ok(()); + } let raw = self.text(function); let (qualifier, spelling) = split_qualified(&raw); if spelling.is_empty() { @@ -7493,6 +8367,18 @@ impl<'source> DirectEvidenceState<'source> { None }; let binding = call_result_binding.or_else(|| { + if self.language == "go" + && qualifier.is_some() + && let Some((value, _)) = + go_local_initializer_with_index_before(function, binding_name, self.source) + && !value + .parent() + .is_some_and(|parent| parent.kind() == "parameter_declaration") + { + // Parameter aliases and package imports carry useful project + // evidence. A nearer local/range binding must not reuse them. + return None; + } self.binding_for_occurrence( owner, binding_name, @@ -7509,7 +8395,9 @@ impl<'source> DirectEvidenceState<'source> { } else { qualifier .and_then(|qualifier| { - self.local_target_for(owner, qualifier) + (self.language != "go") + .then(|| self.local_target_for(owner, qualifier)) + .flatten() .map(|target| format!("{target}::{spelling}")) }) .or_else(|| { @@ -7520,6 +8408,9 @@ impl<'source> DirectEvidenceState<'source> { }) .or_else(|| { qualifier + .filter(|qualifier| { + self.language != "go" || !self.go_name_is_locally_bound(call, qualifier) + }) .and_then(|qualifier| { self.imported_qualified_target_for( owner, @@ -8069,6 +8960,11 @@ impl<'source> DirectEvidenceState<'source> { match function.kind() { "identifier" => { let spelling = self.text(function); + if go_local_initializer_with_index_before(function, &spelling, self.source) + .is_some() + { + return None; + } self.imported_target_for_occurrence(owner, &spelling, function.start_byte(), true) .cloned() .or_else(|| Some(format!("{}.{}", self.module_or_package, spelling))) @@ -8083,6 +8979,15 @@ impl<'source> DirectEvidenceState<'source> { (operand.kind() == "identifier") .then(|| self.text(operand)) .and_then(|package| { + if go_local_initializer_with_index_before( + operand, + &package, + self.source, + ) + .is_some() + { + return None; + } self.imported_target_for_occurrence( owner, &package, @@ -8147,12 +9052,10 @@ impl<'source> DirectEvidenceState<'source> { if depth >= GO_TYPE_INFERENCE_DEPTH_LIMIT || !visited.insert(name.to_owned()) { return None; } - let result = go_enclosing_range_value(use_node, name, self.source) - .and_then(|range| self.go_range_expression_type(owner, range, depth + 1, visited)) - .or_else(|| self.local_target_for(owner, name).cloned()) - .or_else(|| { - let (initializer, output_index) = - go_local_initializer_with_index_before(use_node, name, self.source)?; + // The nearest lexical binding owns the receiver, including an unknown + // type. Never fall through to an outer parameter after a local shadow. + let result = go_local_initializer_with_index_before(use_node, name, self.source).and_then( + |(initializer, output_index)| { self.go_expression_type_at_output( owner, initializer, @@ -8160,7 +9063,8 @@ impl<'source> DirectEvidenceState<'source> { visited, output_index, ) - }); + }, + ); visited.remove(name); result } @@ -8190,6 +9094,11 @@ impl<'source> DirectEvidenceState<'source> { "type_identifier" | "qualified_type" | "pointer_type" | "slice_type" | "array_type" | "map_type" | "channel_type" => go_direct_type_target(expression) .and_then(|target| self.go_qualified_type_target(owner, target)), + "range_clause" if output_index == Some(1) => expression + .child_by_field_name("right") + .and_then(|collection| { + self.go_range_expression_type(owner, collection, depth + 1, visited) + }), "identifier" => self.go_local_value_type_inner( owner, expression, @@ -8222,19 +9131,8 @@ impl<'source> DirectEvidenceState<'source> { } "call_expression" => { let function = expression.child_by_field_name("function")?; - let qualified_callable = match function.kind() { - "identifier" => { - format!("{}.{}", self.module_or_package, self.text(function)) - } - "selector_expression" => { - let operand = function.child_by_field_name("operand")?; - let field = function.child_by_field_name("field")?; - let receiver = - self.go_expression_type(owner, operand, depth + 1, visited)?; - format!("{receiver}::{}", self.text(field)) - } - _ => return None, - }; + let qualified_callable = + self.go_callable_qualified_name(owner, function, depth + 1, visited)?; self.go_return_types .get(&qualified_callable) .and_then(|types| go_output_type(types, output_index)) @@ -8274,33 +9172,25 @@ impl<'source> DirectEvidenceState<'source> { if !visited.insert(name.clone()) { return None; } - let result = self - .local_target_for(owner, &name) - .and_then(|collection| self.go_collection_element_types.get(collection)) - .cloned() - .or_else(|| { - self.local_value_for( - &self.go_collection_binding_element_types, + let result = go_local_initializer_with_index_before(expression, &name, self.source) + .and_then(|(initializer, output_index)| { + self.go_range_expression_type_at_output( owner, - &name, + initializer, + depth + 1, + visited, + output_index, ) - .cloned() - }) - .or_else(|| { - go_local_initializer_with_index_before(expression, &name, self.source) - .and_then(|(initializer, output_index)| { - self.go_range_expression_type_at_output( - owner, - initializer, - depth + 1, - visited, - output_index, - ) - }) }); visited.remove(&name); result } + "type_identifier" | "qualified_type" | "pointer_type" | "slice_type" | "array_type" + | "map_type" | "channel_type" => self.go_collection_element_type(owner, expression), + "variadic_parameter_declaration" => expression + .child_by_field_name("type") + .and_then(go_direct_type_target) + .and_then(|target| self.go_qualified_type_target(owner, target)), "call_expression" => { let function = expression.child_by_field_name("function")?; if function.kind() == "identifier" && self.text(function) == "make" { @@ -8308,19 +9198,8 @@ impl<'source> DirectEvidenceState<'source> { let collection_type = arguments.named_child(0)?; return self.go_collection_element_type(owner, collection_type); } - let qualified_callable = match function.kind() { - "identifier" => { - format!("{}.{}", self.module_or_package, self.text(function)) - } - "selector_expression" => { - let operand = function.child_by_field_name("operand")?; - let field = function.child_by_field_name("field")?; - let receiver = - self.go_expression_type(owner, operand, depth + 1, visited)?; - format!("{receiver}::{}", self.text(field)) - } - _ => return None, - }; + let qualified_callable = + self.go_callable_qualified_name(owner, function, depth + 1, visited)?; self.go_range_return_types .get(&qualified_callable) .and_then(|types| go_output_type(types, output_index)) @@ -8960,6 +9839,63 @@ fn last_java_import_name(node: Node<'_>) -> Option> { .last() } +fn java_parameter_type_node(parameter: Node<'_>) -> Option> { + parameter.child_by_field_name("type").or_else(|| { + if parameter.kind() != "spread_parameter" { + return None; + } + // The pinned Java grammar leaves spread types unnamed, unlike formal + // parameters. Inspect only direct type children, never annotations or + // the nested variable declarator. + let mut cursor = parameter.walk(); + parameter.named_children(&mut cursor).find(|child| { + matches!( + child.kind(), + "type_identifier" + | "scoped_type_identifier" + | "generic_type" + | "array_type" + | "annotated_type" + | "integral_type" + | "floating_point_type" + | "boolean_type" + ) + }) + }) +} + +fn java_parameter_declarator(parameter: Node<'_>) -> Node<'_> { + if parameter.kind() == "spread_parameter" { + let mut cursor = parameter.walk(); + if let Some(declarator) = parameter + .named_children(&mut cursor) + .find(|child| child.kind() == "variable_declarator") + { + return declarator; + } + } + parameter +} + +fn java_dimensions_suffix(dimensions: Node<'_>) -> String { + let mut cursor = dimensions.walk(); + dimensions + .children(&mut cursor) + .filter(|child| child.kind() == "[") + .map(|_| "[]") + .collect() +} + +fn java_parameter_type_name(parameter: Node<'_>, source: &[u8]) -> Option { + let type_node = java_parameter_type_node(parameter)?; + let mut normalized = java_normalize_type(type_node.utf8_text(source).ok()?); + if let Some(dimensions) = java_parameter_declarator(parameter).child_by_field_name("dimensions") + { + normalized.push_str(&java_dimensions_suffix(dimensions)); + } + Some(normalized) +} + fn java_parameter_signature(node: Node<'_>, source: &[u8]) -> (String, u32, bool, Vec) { let Some(parameters) = node.child_by_field_name("parameters") else { return (String::new(), 0, false, Vec::new()); @@ -8972,31 +9908,18 @@ fn java_parameter_signature(node: Node<'_>, source: &[u8]) -> (String, u32, bool .children(&mut cursor) .filter(|child| child.is_named()) { - if !matches!( - parameter.kind(), - "formal_parameter" | "spread_parameter" | "receiver_parameter" - ) { + if !matches!(parameter.kind(), "formal_parameter" | "spread_parameter") { continue; } variadic |= parameter.kind() == "spread_parameter"; - let Some(type_node) = parameter.child_by_field_name("type") else { + let Some(mut normalized) = java_parameter_type_name(parameter, source) else { continue; }; - let raw = type_node.utf8_text(source).unwrap_or_default(); - let mut normalized = java_normalize_type(raw); - canonical_inputs.push(normalized.clone()); if parameter.kind() == "spread_parameter" { + canonical_inputs.push(format!("{normalized}[]")); normalized.push_str("..."); - } - if let Some(dimensions) = parameter.child_by_field_name("dimensions") { - normalized.push_str( - &dimensions - .utf8_text(source) - .unwrap_or_default() - .chars() - .filter(|character| !character.is_whitespace()) - .collect::(), - ); + } else { + canonical_inputs.push(normalized.clone()); } types.push(normalized); } @@ -9120,7 +10043,7 @@ fn collect_java_parameter_type_nodes<'tree>( .filter(|child| child.is_named()) { if matches!(parameter.kind(), "formal_parameter" | "spread_parameter") - && let Some(type_node) = parameter.child_by_field_name("type") + && let Some(type_node) = java_parameter_type_node(parameter) { collect_java_type_nodes(type_node, output); } @@ -9276,6 +10199,92 @@ fn rust_normalize_path(raw: &str) -> String { rust_strip_generic_arguments(raw) } +fn rust_receiver_contains_index(mut node: Node<'_>) -> bool { + for _ in 0..32 { + match node.kind() { + "index_expression" => return true, + "field_expression" => { + let Some(value) = node.child_by_field_name("value") else { + return false; + }; + node = value; + } + "parenthesized_expression" | "reference_expression" | "unary_expression" => { + let Some(value) = node + .child_by_field_name("value") + .or_else(|| node.named_child(0)) + else { + return false; + }; + node = value; + } + _ => return false, + } + } + // Don't fall back to textual receiver inference when the bound is reached. + true +} + +fn rust_standard_prelude_enabled(root: Node<'_>, source: &[u8]) -> bool { + let mut cursor = root.walk(); + loop { + let node = cursor.node(); + if matches!(node.kind(), "attribute_item" | "inner_attribute_item") { + let text = source.get(node.byte_range()).unwrap_or_default(); + // Conservatively reject conditional or nested prelude changes too. + if [b"no_implicit_prelude".as_slice(), b"no_std", b"no_core"] + .iter() + .any(|name| text.windows(name.len()).any(|part| part == *name)) + { + return false; + } + } + if cursor.goto_first_child() { + continue; + } + loop { + if cursor.goto_next_sibling() { + break; + } + if !cursor.goto_parent() { + return true; + } + } + } +} + +// Built-in indexing auto-dereferences references, never raw pointers. +fn rust_indexable_type(mut raw: &str) -> Option<&str> { + for _ in 0..16 { + raw = raw.trim(); + if let Some(rest) = raw.strip_prefix('&') { + raw = rest.trim_start(); + if let Some(lifetime) = raw.strip_prefix('\'') { + let end = lifetime.find(char::is_whitespace)?; + raw = lifetime[end..].trim_start(); + } + raw = raw.strip_prefix("mut ").unwrap_or(raw); + } else { + return (!raw.is_empty() && !raw.starts_with('*')).then_some(raw); + } + } + None +} + +fn rust_array_or_slice_element(raw: &str) -> Option<&str> { + let inner = raw.strip_prefix('[')?.strip_suffix(']')?.trim(); + let mut depth = 0_u16; + for (offset, character) in inner.char_indices() { + match character { + '[' | '(' | '<' => depth = depth.checked_add(1)?, + ']' | ')' | '>' => depth = depth.checked_sub(1)?, + ';' if depth == 0 => return Some(inner.get(..offset)?.trim()), + _ => {} + } + } + (!inner.is_empty() && depth == 0).then_some(inner) +} + fn rust_nominal_type_path(raw: &str) -> Option { let mut raw = raw.trim(); loop { @@ -9800,18 +10809,20 @@ fn rust_qualify_evidence_path( .rust_associated_type_for(owner, spelling) .map(|associated_type| associated_type.qualified_name.clone()); } - let binding_name = qualifier.map(qualified_binding_head).unwrap_or(spelling); + // Keep the entire suffix when expanding a module/type alias. Taking only + // the terminal spelling would turn api::nested::Entry into api::Entry. + let (binding_name, suffix) = split_qualified_head(&raw); if let Some(target) = state.imported_target_for_occurrence(owner, binding_name, use_start, true) { - return Some(if qualifier.is_some() { - rust_join_qualified(target, spelling) + return Some(if let Some(suffix) = suffix { + rust_join_qualified(target, suffix) } else { target.clone() }); } if let Some(target) = state.local_target_for(owner, binding_name) { - return Some(if qualifier.is_some() { - rust_join_qualified(target, spelling) + return Some(if let Some(suffix) = suffix { + rust_join_qualified(target, suffix) } else { target.clone() }); @@ -11084,51 +12095,6 @@ fn go_range_value_type_target(node: Node<'_>) -> Option> { } } -fn go_enclosing_range_value<'tree>( - use_node: Node<'tree>, - name: &str, - source: &[u8], -) -> Option> { - fn named_children(node: Node<'_>) -> Vec> { - let mut cursor = node.walk(); - node.children(&mut cursor) - .filter(|child| child.is_named()) - .collect() - } - - let mut ancestor = use_node.parent(); - while let Some(node) = ancestor { - if node.kind() == "for_statement" - && let Some(range) = named_children(node) - .into_iter() - .find(|child| child.kind() == "range_clause") - && let Some(left) = range.child_by_field_name("left") - { - let variables = if left.kind() == "expression_list" { - named_children(left) - } else { - vec![left] - }; - let matching_variable = variables.iter().position(|variable| { - variable.kind() == "identifier" && variable.utf8_text(source).ok() == Some(name) - }); - if let Some(index) = matching_variable { - return (variables.len() == 2 && index == 1) - .then(|| range.child_by_field_name("right")) - .flatten(); - } - } - if matches!( - node.kind(), - "function_declaration" | "method_declaration" | "func_literal" - ) { - break; - } - ancestor = node.parent(); - } - None -} - fn has_descendant(node: Node<'_>, kind: &str) -> bool { if node.kind() == kind { return true; @@ -11201,7 +12167,9 @@ fn go_local_initializer_with_index_before<'tree>( if names.len() > 1 && values.len() == 1 && values[0].kind() == "call_expression" { return Some((values[0], u32::try_from(index).ok())); } - values.get(index).copied().map(|value| (value, None)) + // A declared name with an unsupported initializer still shadows an + // outer binding. Return an uninterpreted node rather than falling out. + Some((values.get(index).copied().unwrap_or(names[index]), None)) } fn in_statement<'tree>( @@ -11227,7 +12195,9 @@ fn go_local_initializer_with_index_before<'tree>( if let Some(type_node) = statement.child_by_field_name("type") { return Some((type_node, None)); } - let values = statement.child_by_field_name("value")?; + let Some(values) = statement.child_by_field_name("value") else { + return Some((statement, None)); + }; let values = if values.kind() == "expression_list" { named_children(values) } else { @@ -11236,9 +12206,9 @@ fn go_local_initializer_with_index_before<'tree>( if names.len() > 1 && values.len() == 1 && values[0].kind() == "call_expression" { return Some((values[0], u32::try_from(index).ok())); } - values.get(index).copied().map(|value| (value, None)) + Some((values.get(index).copied().unwrap_or(statement), None)) } - "var_declaration" => named_children(statement) + "var_declaration" | "var_spec_list" => named_children(statement) .into_iter() .rev() .find_map(|child| in_statement(child, name, source)), @@ -11249,7 +12219,24 @@ fn go_local_initializer_with_index_before<'tree>( let use_start = use_node.start_byte(); let mut ancestor = use_node.parent(); while let Some(scope) = ancestor { - let for_initializer = if scope.kind() == "for_clause" { + if scope.kind() == "type_switch_statement" + && let Some(alias) = scope.child_by_field_name("alias") + && scope + .child_by_field_name("value") + .is_some_and(|value| value.end_byte() <= use_start) + && (alias.utf8_text(source).ok() == Some(name) + || named_children(alias) + .iter() + .any(|node| node.utf8_text(source).ok() == Some(name))) + { + // Case-specific narrowing is not inferred here. The case binding + // still shadows the outer name and cannot borrow its type. + return Some((alias, None)); + } + let control_initializer = if matches!( + scope.kind(), + "for_clause" | "if_statement" | "expression_switch_statement" | "type_switch_statement" + ) { scope.child_by_field_name("initializer") } else if scope.kind() == "for_statement" { let mut cursor = scope.walk(); @@ -11260,12 +12247,37 @@ fn go_local_initializer_with_index_before<'tree>( } else { None }; - if let Some(initializer) = for_initializer + if let Some(initializer) = control_initializer && initializer.end_byte() <= use_start && let Some(found) = in_statement(initializer, name, source) { return Some(found); } + if scope.kind() == "for_statement" { + let range = named_children(scope) + .into_iter() + .find(|child| child.kind() == "range_clause"); + if let Some(range) = range + && range.end_byte() <= use_start + && let Some(left) = range.child_by_field_name("left") + { + let mut cursor = range.walk(); + let declares = range + .children(&mut cursor) + .any(|child| child.kind() == ":="); + let names = named_children(left); + if declares + && let Some(index) = names + .iter() + .position(|n| n.utf8_text(source).ok() == Some(name)) + { + // Only the second variable of a two-value range has the + // existing element-type proof. Keys and other forms stay + // unknown, but still block outer receiver types. + return Some((range, (names.len() == 2 && index == 1).then_some(1))); + } + } + } if matches!(scope.kind(), "block" | "statement_list") { let mut statements = named_children(scope); statements.reverse(); @@ -11277,8 +12289,31 @@ fn go_local_initializer_with_index_before<'tree>( return Some(initializer); } } - if matches!(scope.kind(), "function_declaration" | "method_declaration") { - break; + if matches!( + scope.kind(), + "function_declaration" | "method_declaration" | "func_literal" + ) { + for field in ["receiver", "parameters", "result"] { + if let Some(parameters) = scope.child_by_field_name(field) { + for parameter in named_children(parameters) { + let mut cursor = parameter.walk(); + if parameter + .children_by_field_name("name", &mut cursor) + .any(|n| n.utf8_text(source).ok() == Some(name)) + { + let value = if parameter.kind() == "variadic_parameter_declaration" { + parameter + } else { + parameter.child_by_field_name("type").unwrap_or(parameter) + }; + return Some((value, None)); + } + } + } + } + if scope.kind() != "func_literal" { + break; + } } ancestor = scope.parent(); } @@ -11518,7 +12553,7 @@ fn qualified_binding_head(qualifier: &str) -> &str { } fn collect_rust_pattern_names(node: Node<'_>, names: &mut Vec, source: &[u8]) { - if node.kind() == "identifier" { + if matches!(node.kind(), "identifier" | "shorthand_field_identifier") { let name = source .get(node.start_byte()..node.end_byte()) .map_or_else(String::new, |bytes| { @@ -11530,15 +12565,49 @@ fn collect_rust_pattern_names(node: Node<'_>, names: &mut Vec, source: & return; } let mut cursor = node.walk(); - for child in node.children(&mut cursor).filter(|child| child.is_named()) { + for (index, child) in node + .children(&mut cursor) + .enumerate() + .filter(|(_, child)| child.is_named()) + { + if matches!( + node.field_name_for_child(index as u32), + Some("type" | "condition") + ) { + continue; + } collect_rust_pattern_names(child, names, source); } } +fn rust_pattern_binds_whole_value(mut node: Node<'_>) -> bool { + for _ in 0..16 { + match node.kind() { + "identifier" => return true, + "mut_pattern" | "ref_pattern" | "reference_pattern" => { + let mut cursor = node.walk(); + let Some(child) = node.named_children(&mut cursor).last() else { + return false; + }; + node = child; + } + _ => return false, + } + } + false +} + fn rust_is_lexical_scope_node(kind: &str) -> bool { matches!( kind, - "block" | "match_block" | "unsafe_block" | "closure_expression" + "block" + | "match_block" + | "unsafe_block" + | "closure_expression" + | "for_expression" + | "match_arm" + | "if_expression" + | "while_expression" ) } diff --git a/crates/compass-languages/src/evidence/build/java_fields.rs b/crates/compass-languages/src/evidence/build/java_fields.rs new file mode 100644 index 000000000..49960a28e --- /dev/null +++ b/crates/compass-languages/src/evidence/build/java_fields.rs @@ -0,0 +1,932 @@ +//! Java field evidence uses AST lexical ranges, not the method-wide call type map. +use super::*; + +const DEPTH: usize = 64; +const RECEIVER_DEPTH: usize = 16; + +#[derive(Clone)] +struct Local { + start: usize, + end: usize, + nominal: Option, +} + +#[derive(Clone)] +struct Field { + qualified: String, + nominal: Option, + is_static: bool, + kind: &'static str, +} + +#[derive(Default)] +pub(super) struct JavaFieldIndex { + locals: HashMap>>, + local_types: HashMap>, + fields: HashMap>>, + named_types: HashSet, + bindings: usize, + static_scopes: HashSet, +} + +enum Value<'a> { + Local(Option<&'a str>), + Field(&'a Field), + Unknown, + Absent, +} + +fn ancestors(node: Node<'_>) -> impl Iterator> { + std::iter::successors(Some(node), |node| node.parent()).take(DEPTH) +} + +fn is_static(node: Node<'_>, source: &[u8]) -> bool { + if !matches!( + node.kind(), + "static_initializer" + | "field_declaration" + | "constant_declaration" + | "method_declaration" + | "constructor_declaration" + ) && java_container_kind(node.kind()).is_none() + { + return false; + } + node.kind() == "static_initializer" || { + let mut cursor = node.walk(); + node.named_children(&mut cursor) + .find(|child| child.kind() == "modifiers") + .is_some_and(|modifiers| { + let mut cursor = modifiers.walk(); + modifiers.children(&mut cursor).any(|child| { + child.kind() == "static" && child.utf8_text(source).ok() == Some("static") + }) + }) + } +} + +fn anonymous_body(node: Node<'_>) -> bool { + node.kind() == "class_body" + && node.parent().is_some_and(|parent| { + matches!( + parent.kind(), + "object_creation_expression" | "enum_constant" + ) + }) +} + +fn first_named(node: Node<'_>) -> Option> { + let mut cursor = node.walk(); + node.named_children(&mut cursor) + .find(|child| !child.is_extra()) +} + +impl DirectEvidenceState<'_> { + pub(super) fn index_java_field_values( + &mut self, + node: Node<'_>, + owner: &DeclarationContext, + ) -> Result<(), EvidenceError> { + if node.parent().is_none() { + self.java_fields.named_types = self + .java_containers + .values() + .map(|context| context.qualified_name.clone()) + .collect(); + } + if is_static(node, self.source) { + ensure_capacity( + "Java field lexical bindings", + self.java_fields.bindings, + self.builder.limits.bindings, + )?; + self.java_fields.bindings += 1; + self.java_fields.static_scopes.insert(node.id()); + } + let active = self + .declarations + .get(&node.id()) + .cloned() + .unwrap_or_else(|| owner.clone()); + if java_container_kind(node.kind()).is_some() + && !self.java_containers.contains_key(&node.id()) + && let (Some(parent), Some(name)) = (node.parent(), node.child_by_field_name("name")) + && matches!(parent.kind(), "block" | "constructor_body" | "switch_block") + { + ensure_capacity( + "Java field lexical bindings", + self.java_fields.bindings, + self.builder.limits.bindings, + )?; + self.java_fields.bindings += 1; + let spelling = self.text(name); + self.java_fields + .local_types + .entry(parent.id()) + .or_default() + .entry(spelling) + .and_modify(|start| *start = (*start).min(node.start_byte())) + .or_insert(node.start_byte()); + } + match node.kind() { + "enum_constant" => { + if let Some(context) = self.declarations.get(&node.id()) + && let Some(enclosing) = &context.enclosing_type_qualified_name + { + // Constants are values of the enum type, even when their + // declaration owns a constant-specific anonymous body. + // Storage is bounded by the existing declaration limit. + self.java_fields + .fields + .entry(enclosing.clone()) + .or_default() + .entry(context.name.clone()) + .or_default() + .push(Field { + qualified: context.qualified_name.clone(), + nominal: Some(enclosing.clone()), + is_static: true, + kind: "enum_member", + }); + } + } + "variable_declarator" => { + if let (Some(parent), Some(name)) = + (node.parent(), node.child_by_field_name("name")) + { + if matches!(parent.kind(), "field_declaration" | "constant_declaration") { + if let Some(context) = self.declarations.get(&node.id()) { + let nominal = parent + .child_by_field_name("type") + .and_then(|ty| self.java_field_type(&active, ty, node, 0)); + let spelling = self.text(name); + self.java_fields + .fields + .entry( + context + .enclosing_type_qualified_name + .clone() + .unwrap_or_default(), + ) + .or_default() + .entry(spelling) + .or_default() + .push(Field { + qualified: context.qualified_name.clone(), + nominal, + is_static: parent.kind() == "constant_declaration" + || self.java_fields.static_scopes.contains(&parent.id()), + kind: "field", + }); + } + } else if parent.kind() == "local_variable_declaration" + && let Some(scope) = ancestors(parent).skip(1).find(|ancestor| { + matches!( + ancestor.kind(), + "block" | "constructor_body" | "for_statement" | "switch_block" + ) + }) + { + let nominal = parent + .child_by_field_name("type") + .and_then(|ty| self.java_field_type(&active, ty, node, 0)); + self.java_field_local( + scope, + name, + name.start_byte(), + scope.end_byte(), + nominal, + )?; + } + } + } + "formal_parameter" | "spread_parameter" | "catch_formal_parameter" => { + if let Some(name) = java_parameter_declarator(node).child_by_field_name("name") + && let Some(scope) = ancestors(node).skip(1).find(|ancestor| { + matches!( + ancestor.kind(), + "method_declaration" + | "constructor_declaration" + | "lambda_expression" + | "catch_clause" + ) + }) + { + let nominal = java_parameter_type_node(node) + .or_else(|| first_named(node).filter(|child| child.kind() == "catch_type")) + .and_then(|ty| self.java_field_type(&active, ty, node, 0)); + let body = scope.child_by_field_name("body").unwrap_or(scope); + self.java_field_local( + scope, + name, + body.start_byte(), + body.end_byte(), + nominal, + )?; + } + } + "enhanced_for_statement" | "resource" => { + if let Some(name) = node.child_by_field_name("name") { + let scope = if node.kind() == "resource" { + ancestors(node) + .find(|ancestor| ancestor.kind() == "try_with_resources_statement") + } else { + Some(node) + }; + if let Some(scope) = scope + && let Some(body) = scope.child_by_field_name("body") + { + let nominal = node + .child_by_field_name("type") + .and_then(|ty| self.java_field_type(&active, ty, node, 0)); + let start = if node.kind() == "resource" { + name.start_byte() + } else { + body.start_byte() + }; + self.java_field_local(scope, name, start, body.end_byte(), nominal)?; + } + } + } + "lambda_expression" => { + if let (Some(parameters), Some(body)) = ( + node.child_by_field_name("parameters"), + node.child_by_field_name("body"), + ) { + if parameters.kind() == "identifier" { + self.java_field_local( + node, + parameters, + body.start_byte(), + body.end_byte(), + None, + )?; + } else if parameters.kind() == "inferred_parameters" { + let mut cursor = parameters.walk(); + for name in parameters + .named_children(&mut cursor) + .filter(|n| n.kind() == "identifier") + { + self.java_field_local( + node, + name, + body.start_byte(), + body.end_byte(), + None, + )?; + } + } + } + } + "instanceof_expression" => self.index_java_field_pattern(node, &active)?, + kind if kind.ends_with("_pattern") => { + let mut names = Vec::new(); + collect_nodes(node, "identifier", &mut names); + for name in names { + self.java_field_unknown_pattern(node, name)?; + } + } + _ => {} + } + let mut cursor = node.walk(); + for child in node.named_children(&mut cursor) { + self.index_java_field_values(child, &active)?; + } + Ok(()) + } + + fn java_field_local( + &mut self, + scope: Node<'_>, + name: Node<'_>, + start: usize, + end: usize, + nominal: Option, + ) -> Result<(), EvidenceError> { + ensure_capacity( + "Java field lexical bindings", + self.java_fields.bindings, + self.builder.limits.bindings, + )?; + self.java_fields.bindings += 1; + let spelling = self.text(name); + let bindings = self + .java_fields + .locals + .entry(scope.id()) + .or_default() + .entry(spelling) + .or_default(); + // Valid ordinary Java scopes have one binding per name. A crowded + // malformed/flow-sensitive scope becomes one unknown shadow barrier, + // so lookup never scans an unbounded version list or selects a winner. + if bindings.len() >= 2 { + bindings.clear(); + bindings.push(Local { + start: 0, + end: usize::MAX, + nominal: None, + }); + } + bindings.push(Local { + start, + end, + nominal, + }); + Ok(()) + } + + fn java_field_type( + &self, + owner: &DeclarationContext, + ty: Node<'_>, + declarator: Node<'_>, + depth: usize, + ) -> Option { + if depth >= RECEIVER_DEPTH || self.overlaps_parser_error(ty) { + return None; + } + let text = self.text(ty); + if text.contains('|') { + return None; + } + let mut raw = java_normalize_type(&text); + if raw.is_empty() || raw == "var" || raw.contains('|') { + return None; + } + if let Some(dimensions) = declarator.child_by_field_name("dimensions") { + raw.push_str(&java_dimensions_suffix(dimensions)); + } + if declarator.kind() == "spread_parameter" { + raw.push_str("[]"); + } + let base = raw.trim_end_matches("[]"); + let suffix = &raw[base.len()..]; + let head = base.split('.').next()?; + if java_primitive_type(base) { + return None; + } + // Type parameters shadow same-named classes. A single explicit bound + // can prove field ownership; intersections and recursive bounds cannot. + for scope in ancestors(ty) { + if let Some(parameters) = scope.child_by_field_name("type_parameters") { + let mut cursor = parameters.walk(); + let parameters = parameters + .named_children(&mut cursor) + .take(DEPTH + 1) + .collect::>(); + if parameters.len() > DEPTH { + return None; + } + for parameter in parameters { + if first_named(parameter).is_some_and(|name| self.text(name) == head) { + if head != base { + return None; + } + let mut cursor = parameter.walk(); + let bound = parameter + .named_children(&mut cursor) + .find(|n| n.kind() == "type_bound")?; + let mut cursor = bound.walk(); + let mut bounds = + bound.named_children(&mut cursor).filter(|n| !n.is_extra()); + let first = bounds.next()?; + if bounds.next().is_some() { + return None; + } + return self + .java_field_type(owner, first, first, depth + 1) + .map(|target| format!("{target}{suffix}")); + } + } + } + } + if ancestors(ty) + .last() + .is_some_and(|node| node.parent().is_some()) + || self.java_field_local_type(ty, head) + { + return None; + } + // A visible source type shadows imports and package prefixes. Once + // selected, a missing nested type cannot fall back to that package. + if let Some(local) = self.local_target_for(owner, head) { + let target = format!("{local}{}", base[head.len()..].replace('.', "::")); + return self + .java_fields + .named_types + .contains(&target) + .then(|| format!("{target}{suffix}")); + } + if self.visible_import_binding_is_ambiguous(owner, head) { + return None; + } + self.java_qualified_type(owner, base, ty.start_byte()) + .map(|target| format!("{target}{suffix}")) + } + + fn java_field_local_type(&self, node: Node<'_>, name: &str) -> bool { + ancestors(node).any(|scope| { + self.java_fields + .local_types + .get(&scope.id()) + .and_then(|names| names.get(name)) + .is_some_and(|start| *start <= node.start_byte()) + }) + } + + fn java_field_value(&self, node: Node<'_>, name: &str) -> Value<'_> { + let mut instance = true; + for scope in ancestors(node) { + if let Some(bindings) = self + .java_fields + .locals + .get(&scope.id()) + .and_then(|names| names.get(name)) + { + let mut matching = bindings.iter().filter(|binding| { + binding.start <= node.start_byte() && node.start_byte() < binding.end + }); + if let Some(binding) = matching.next() { + return if matching.next().is_some() { + Value::Unknown + } else { + Value::Local(binding.nominal.as_deref()) + }; + } + } + if java_container_kind(scope.kind()).is_none() + && self.java_fields.static_scopes.contains(&scope.id()) + { + instance = false; + } + if anonymous_body(scope) { + let Some(context) = self.java_enum_body_owner(scope) else { + return Value::Unknown; + }; + if let Some(fields) = self + .java_fields + .fields + .get(&context.qualified_name) + .and_then(|fields| fields.get(name)) + { + return match fields.as_slice() { + [field] if instance || field.is_static => Value::Field(field), + _ => Value::Unknown, + }; + } + } + if java_container_kind(scope.kind()).is_some() { + let Some(context) = self.java_containers.get(&scope.id()) else { + return Value::Unknown; + }; + if let Some(fields) = self + .java_fields + .fields + .get(&context.qualified_name) + .and_then(|fields| fields.get(name)) + { + return match fields.as_slice() { + [field] if instance || field.is_static => Value::Field(field), + _ => Value::Unknown, + }; + } + if self.java_fields.static_scopes.contains(&scope.id()) { + instance = false; + } + // The enum's own type name is visible from its registered + // constant bodies unless a value or interface can hide it. + if scope.kind() == "enum_declaration" + && context.name == name + && scope.child_by_field_name("interfaces").is_none() + { + return Value::Absent; + } + // An inherited member can hide an enclosing field. Cross-file + // hierarchy selection belongs to the resolver, never this map. + if scope.child_by_field_name("superclass").is_some() + || scope.child_by_field_name("interfaces").is_some() + || scope.kind() == "enum_declaration" + || scope.kind() == "record_declaration" + { + return Value::Unknown; + } + } + } + if ancestors(node) + .last() + .is_some_and(|node| node.parent().is_none()) + { + Value::Absent + } else { + Value::Unknown + } + } + + fn java_field_this(&self, node: Node<'_>, named: Option<&str>) -> Option { + for scope in ancestors(node) { + if java_container_kind(scope.kind()).is_none() + && self.java_fields.static_scopes.contains(&scope.id()) + { + return None; + } + if named.is_none() && anonymous_body(scope) { + return self + .java_enum_body_owner(scope) + .map(|context| context.qualified_name.clone()); + } + if java_container_kind(scope.kind()).is_some() { + let context = self.java_containers.get(&scope.id())?; + if named.is_none_or(|name| context.name == name) { + return Some(context.qualified_name.clone()); + } + if self.java_fields.static_scopes.contains(&scope.id()) { + return None; + } + } + } + None + } + + fn java_enum_body_owner(&self, body: Node<'_>) -> Option<&DeclarationContext> { + let constant = body + .parent() + .filter(|node| node.kind() == "enum_constant")?; + self.declarations.get(&constant.id()) + } + + fn java_field_type_parameter(&self, node: Node<'_>, name: &str) -> bool { + for scope in ancestors(node) { + if let Some(parameters) = scope.child_by_field_name("type_parameters") { + let mut cursor = parameters.walk(); + for (index, parameter) in parameters.named_children(&mut cursor).enumerate() { + if index >= DEPTH + || first_named(parameter).is_some_and(|head| self.text(head) == name) + { + return true; + } + } + } + } + ancestors(node) + .last() + .is_some_and(|scope| scope.parent().is_some()) + } + + fn java_field_receiver( + &self, + owner: &DeclarationContext, + node: Node<'_>, + depth: usize, + ) -> Option { + if depth >= RECEIVER_DEPTH || self.overlaps_parser_error(node) { + return None; + } + match node.kind() { + "this" => self.java_field_this(node, None), + "identifier" => match self.java_field_value(node, &self.text(node)) { + Value::Local(target) => target.map(str::to_owned), + Value::Field(field) => field.nominal.clone(), + Value::Unknown => None, + Value::Absent => { + let name = self.text(node); + if self.java_field_local_type(node, &name) + || self.java_field_type_parameter(node, &name) + { + return None; + } + if let Some(local) = self.local_target_for(owner, &name) { + return Some(local.clone()); + } + if self.visible_import_binding_is_ambiguous(owner, &name) { + return None; + } + self.java_qualified_type(owner, &name, node.start_byte()) + } + }, + "parenthesized_expression" => { + self.java_field_receiver(owner, first_named(node)?, depth + 1) + } + "cast_expression" => { + self.java_field_type(owner, node.child_by_field_name("type")?, node, 0) + } + "array_access" => self + .java_field_receiver(owner, node.child_by_field_name("array")?, depth + 1)? + .strip_suffix("[]") + .map(str::to_owned), + "object_creation_expression" => { + let mut cursor = node.walk(); + if node + .named_children(&mut cursor) + .any(|n| n.kind() == "class_body") + { + return None; + } + let mut cursor = node.walk(); + if node + .children(&mut cursor) + .find(|n| !n.is_extra()) + .is_none_or(|n| n.kind() != "new") + { + return None; + } + self.java_field_type(owner, node.child_by_field_name("type")?, node, 0) + } + "field_access" => { + let object = node.child_by_field_name("object")?; + let field = node.child_by_field_name("field")?; + if field.kind() == "this" { + return self.java_field_this(node, Some(&self.text(object))); + } + let receiver = self.java_field_receiver(owner, object, depth + 1)?; + let fields = self + .java_fields + .fields + .get(&receiver)? + .get(&self.text(field))?; + match fields.as_slice() { + [field] => field.nominal.clone(), + _ => None, + } + } + _ => None, + } + } + + pub(super) fn add_java_field_access( + &mut self, + node: Node<'_>, + owner: &DeclarationContext, + ) -> Result<(), EvidenceError> { + if self.overlaps_parser_error(node) { + return Ok(()); + } + let owner_known = ancestors(node) + .find(|scope| { + matches!( + scope.kind(), + "method_declaration" | "constructor_declaration" + ) || java_container_kind(scope.kind()).is_some() + || anonymous_body(*scope) + }) + .is_some_and(|scope| { + if java_container_kind(scope.kind()).is_some() { + self.java_containers + .get(&scope.id()) + .is_some_and(|context| { + owner.enclosing_type_qualified_name.as_deref() + == Some(context.qualified_name.as_str()) + }) + } else if anonymous_body(scope) { + self.java_enum_body_owner(scope).is_some_and(|context| { + owner.enclosing_type_qualified_name.as_deref() + == Some(context.qualified_name.as_str()) + }) + } else { + self.declarations + .get(&scope.id()) + .is_some_and(|context| context.fact_id == owner.fact_id) + } + }); + let switch_label = node.kind() == "identifier" + && node + .parent() + .is_some_and(|parent| parent.kind() == "switch_label"); + let (field, qualifier, qualified_name, kinds) = if switch_label { + if !owner_known { + return Ok(()); + } + // Enum labels are scoped by the selector, not lexical fields of + // the caller. Unknown selectors retain an unresolved occurrence. + let selector = ancestors(node) + .find(|scope| matches!(scope.kind(), "switch_expression" | "switch_statement")) + .and_then(|scope| scope.child_by_field_name("condition")); + let receiver = + selector.and_then(|selector| self.java_field_receiver(owner, selector, 0)); + let target = receiver + .filter(|target| !target.ends_with("[]")) + .map(|target| format!("{target}::{}", self.text(node))); + ( + node, + selector + .map(|selector| self.text(selector)) + .unwrap_or_default(), + target, + vec!["enum_member".to_owned()], + ) + } else if node.kind() == "field_access" { + let (Some(object), Some(field)) = ( + node.child_by_field_name("object"), + node.child_by_field_name("field"), + ) else { + return Ok(()); + }; + if field.kind() != "identifier" { + return Ok(()); + } + let target = owner_known + .then(|| self.java_field_receiver(owner, object, 0)) + .flatten() + .filter(|target| !target.ends_with("[]")) + .map(|target| format!("{target}::{}", self.text(field))); + ( + field, + self.text(object), + target, + vec!["field".to_owned(), "enum_member".to_owned()], + ) + } else { + if !owner_known || !java_value_identifier(node) { + return Ok(()); + } + let Value::Field(field) = self.java_field_value(node, &self.text(node)) else { + return Ok(()); + }; + let qualifier = if field.is_static { + field + .qualified + .rsplit_once("::") + .map(|(owner, _)| owner) + .unwrap_or_default() + .to_owned() + } else { + "this".to_owned() + }; + ( + node, + qualifier, + Some(field.qualified.clone()), + vec![field.kind.to_owned()], + ) + }; + let spelling = self.text(field); + let occurrence = self.builder.occur_with_context( + SemanticRole::MemberAccess, + &owner.fact_id, + &spelling, + Some(&qualifier), + Some(&owner.scope_id), + Some("member"), + range_for_node(self.source_file, field), + )?; + self.builder.relate( + CandidateRelation::AccessesMember, + &owner.fact_id, + Some(&occurrence), + None, + &spelling, + ResolutionConstraint { + exact_language: Some(self.language.to_owned()), + module_or_package: Some(self.module_or_package.clone()), + scope_id: Some(owner.scope_id.clone()), + qualified_name, + allowed_target_kinds: kinds, + allow_external: false, + ..ResolutionConstraint::default() + }, + )?; + Ok(()) + } + + fn index_java_field_pattern( + &mut self, + node: Node<'_>, + owner: &DeclarationContext, + ) -> Result<(), EvidenceError> { + let Some(name) = node.child_by_field_name("name") else { + return Ok(()); + }; + let mut condition = node; + let mut negative = false; + for _ in 0..DEPTH { + let Some(parent) = condition.parent() else { + break; + }; + if parent.kind() == "parenthesized_expression" { + condition = parent; + } else if parent.kind() == "unary_expression" + && self.text(parent).trim_start().starts_with('!') + { + negative = !negative; + condition = parent; + } else { + break; + } + } + if let Some(statement) = condition + .parent() + .filter(|parent| parent.kind() == "if_statement") + && statement + .child_by_field_name("condition") + .is_some_and(|n| n.id() == condition.id()) + { + let nominal = node + .child_by_field_name("right") + .and_then(|ty| self.java_field_type(owner, ty, ty, 0)); + let selected = if negative { + "alternative" + } else { + "consequence" + }; + if let Some(branch) = statement.child_by_field_name(selected) { + self.java_field_local( + branch, + name, + branch.start_byte(), + branch.end_byte(), + nominal.clone(), + )?; + } + // A simple abrupt negative guard proves the pattern on the + // remainder of its enclosing block. Complex flow stays unknown. + let rejected = if negative { + "consequence" + } else { + "alternative" + }; + if let Some(rejected) = statement.child_by_field_name(rejected) + && let Some(block) = statement.parent().filter(|n| n.kind() == "block") + { + let after_type = java_abrupt_statement(rejected).then_some(nominal).flatten(); + self.java_field_local( + block, + name, + statement.end_byte(), + block.end_byte(), + after_type, + )?; + } + return Ok(()); + } + // Unsupported flow must not turn a pattern-bound value into an outer + // field. Conservatively mask the name for its entire callable. + self.java_field_unknown_pattern(node, name) + } + + fn java_field_unknown_pattern( + &mut self, + node: Node<'_>, + name: Node<'_>, + ) -> Result<(), EvidenceError> { + let scope = ancestors(node) + .find(|n| { + matches!( + n.kind(), + "method_declaration" | "constructor_declaration" | "lambda_expression" + ) + }) + .or_else(|| ancestors(node).find(|n| java_container_kind(n.kind()).is_some())); + if let Some(scope) = scope { + self.java_field_local(scope, name, scope.start_byte(), scope.end_byte(), None)?; + } + Ok(()) + } +} + +fn java_abrupt_statement(node: Node<'_>) -> bool { + if matches!(node.kind(), "return_statement" | "throw_statement") { + return true; + } + if node.kind() != "block" { + return false; + } + let mut cursor = node.walk(); + let mut statements = node.named_children(&mut cursor).filter(|n| !n.is_extra()); + let first = statements.next(); + statements.next().is_none() + && first.is_some_and(|n| matches!(n.kind(), "return_statement" | "throw_statement")) +} + +fn java_value_identifier(node: Node<'_>) -> bool { + let Some(parent) = node.parent() else { + return false; + }; + let in_field = |name| { + parent + .child_by_field_name(name) + .is_some_and(|n| n.id() == node.id()) + }; + match parent.kind() { + "method_invocation" | "field_access" => in_field("object"), + "variable_declarator" | "resource" => in_field("value"), + "lambda_expression" => in_field("body"), + "enhanced_for_statement" => in_field("value"), + "cast_expression" => in_field("value"), + "instanceof_expression" => in_field("left"), + "argument_list" + | "return_statement" + | "throw_statement" + | "yield_statement" + | "expression_statement" + | "binary_expression" + | "unary_expression" + | "update_expression" + | "assignment_expression" + | "parenthesized_expression" + | "ternary_expression" + | "array_access" + | "array_initializer" + | "assert_statement" => true, + _ => false, + } +} diff --git a/crates/compass-languages/src/evidence/typescript.rs b/crates/compass-languages/src/evidence/typescript.rs index cbce21fd2..29386bc07 100644 --- a/crates/compass-languages/src/evidence/typescript.rs +++ b/crates/compass-languages/src/evidence/typescript.rs @@ -9182,16 +9182,6 @@ impl<'source, 'tree> CandidateState<'source, 'tree> { let function = call .child_by_field_name("function") .or_else(|| first_named_child(call))?; - let callee_receiver = if matches!( - function.kind(), - "member_expression" | "optional_member_expression" | "subscript_expression" - ) { - function - .child_by_field_name("object") - .and_then(|object| self.receiver_target(scope_id, object)) - } else { - None - }; let resolution = if matches!( function.kind(), "member_expression" | "optional_member_expression" | "subscript_expression" @@ -9273,6 +9263,16 @@ impl<'source, 'tree> CandidateState<'source, 'tree> { .or_else(|| self.variable_alias_return_type(&declaration, scope_id))?; let return_type = return_type.trim(); if return_type == "this" { + let callee_receiver = if matches!( + function.kind(), + "member_expression" | "optional_member_expression" | "subscript_expression" + ) { + function + .child_by_field_name("object") + .and_then(|object| self.receiver_target(scope_id, object)) + } else { + None + }; return callee_receiver.or_else(|| self.this_receiver_target(scope_id)); } self.resolve_declared_type_receiver(scope_id, return_type) diff --git a/crates/compass-languages/src/frameworks/mod.rs b/crates/compass-languages/src/frameworks/mod.rs index c9ff947d4..db5a77b2b 100644 --- a/crates/compass-languages/src/frameworks/mod.rs +++ b/crates/compass-languages/src/frameworks/mod.rs @@ -80,9 +80,9 @@ type TemplateDetector = /// Cache identity for the framework-pack registry. The value is deliberately /// separate from the language producer version: changing framework activation, -/// descriptor capabilities, or resource limits must invalidate framework facts -/// without pretending that the parser/evidence producer changed. -pub const FRAMEWORK_PACK_SEMANTICS_VERSION: &str = "compass.framework-packs/6"; +/// descriptor capabilities, resolution/publication, or resource limits must +/// invalidate framework facts without changing the parser/evidence producer. +pub const FRAMEWORK_PACK_SEMANTICS_VERSION: &str = "compass.framework-packs/8"; /// The concrete implementation stored behind one framework-pack seam. /// diff --git a/crates/compass-languages/src/sql.rs b/crates/compass-languages/src/sql.rs index 4241c75d3..a5bfa368d 100644 --- a/crates/compass-languages/src/sql.rs +++ b/crates/compass-languages/src/sql.rs @@ -736,10 +736,10 @@ impl<'a> State<'a> { aliases: scoped_alias_bindings(&body, &ctes), ctes, }; - let read_patterns = sql_read_access_patterns(); - let write_patterns = sql_write_access_patterns(); - self.add_access_matches(source, start, &body, &read_patterns, "reads", &bindings); - self.add_access_matches(source, start, &body, &write_patterns, "writes", &bindings); + let read_patterns = sql_read_access_regexes(); + let write_patterns = sql_write_access_regexes(); + self.add_access_matches(source, start, &body, read_patterns, "reads", &bindings); + self.add_access_matches(source, start, &body, write_patterns, "writes", &bindings); } fn add_access_matches( @@ -747,15 +747,12 @@ impl<'a> State<'a> { source: &str, start: usize, body: &str, - patterns: &[String], + patterns: &[Regex], relation: &str, bindings: &AccessBindings, ) { let mut emitted = HashSet::new(); - for pattern in patterns { - let Ok(regex) = Regex::new(pattern) else { - continue; - }; + for regex in patterns { for capture in regex.captures_iter(body) { let Some(name_match) = capture.get(1) else { continue; @@ -1118,6 +1115,26 @@ fn sql_write_access_patterns() -> Vec { ] } +fn sql_read_access_regexes() -> &'static [Regex] { + static PATTERNS: OnceLock> = OnceLock::new(); + PATTERNS.get_or_init(|| { + sql_read_access_patterns() + .into_iter() + .filter_map(|pattern| Regex::new(&pattern).ok()) + .collect() + }) +} + +fn sql_write_access_regexes() -> &'static [Regex] { + static PATTERNS: OnceLock> = OnceLock::new(); + PATTERNS.get_or_init(|| { + sql_write_access_patterns() + .into_iter() + .filter_map(|pattern| Regex::new(&pattern).ok()) + .collect() + }) +} + fn sql_alias_target_patterns() -> Vec { sql_read_access_patterns() .into_iter() @@ -1784,6 +1801,10 @@ fn first_line_end(source: &str, start: usize) -> usize { } fn dollar_quote_delimiter_at(source: &str, start: usize) -> Option<&str> { + // Callers probe individual bytes. Reject impossible delimiter syntax before + // scanning the preceding source to distinguish a quote from an identifier. + // Otherwise ordinary SQL pays repeated prefix scans without any `$` marker. + dollar_delimiter_syntax_at(source, start)?; let statement_start = statement_start_before(source, start); dollar_quote_delimiter_in_statement(source, start, statement_start) } @@ -2980,6 +3001,29 @@ fn sha256_prefixed(bytes: &[u8]) -> String { mod tests { use super::*; + #[test] + fn access_regexes_preserve_every_pattern_in_order_and_reuse_storage() { + for (compiled, patterns) in [ + (sql_read_access_regexes(), sql_read_access_patterns()), + (sql_write_access_regexes(), sql_write_access_patterns()), + ] { + assert!( + compiled + .iter() + .map(Regex::as_str) + .eq(patterns.iter().map(String::as_str)) + ); + } + assert!(std::ptr::eq( + sql_read_access_regexes(), + sql_read_access_regexes() + )); + assert!(std::ptr::eq( + sql_write_access_regexes(), + sql_write_access_regexes() + )); + } + #[test] fn extracts_typed_database_domain_without_dangling_edges() { let source = br#" @@ -3037,6 +3081,48 @@ INSERT INTO app.users(id) SELECT id FROM app.accounts; } } + #[test] + fn delimiter_fast_rejection_preserves_statement_sensitive_results() { + let sources = [ + "SELECT id FROM app.items; SELECT $$body$$;", + "CREATE PROCEDURE app.run() AS $body$ SELECT 1; $body$ LANGUAGE plpgsql;", + "CREATE TABLE $tag$ (id INT); SELECT * FROM app.$tag$;", + "WITH $tag$ AS (SELECT 1) SELECT * FROM $tag$;", + "SELECT name$tag$, $tag$tail, $1, $unfinished, $_ok_2$body$_ok_2$;", + "SELECT \"semi;colon\", `semi;colon`, [semi;colon]; SELECT $tag$body$tag$;", + "SELECT \"unterminated; $tag$; SELECT 2;", + "SELECT 'single;quote', 名称, $tag$é$tag$;", + "", + ]; + for source in sources { + for start in 0..=source.len() + 1 { + let previous = dollar_quote_delimiter_in_statement( + source, + start, + statement_start_before(source, start), + ); + assert_eq!( + dollar_quote_delimiter_at(source, start), + previous, + "delimiter changed at byte {start} in {source:?}" + ); + } + } + assert_eq!(dollar_quote_delimiter_at("SELECT $$body$$", 7), Some("$$")); + assert_eq!( + dollar_quote_delimiter_at("CREATE TABLE $tag$ (id INT)", 13), + None + ); + } + + #[test] + fn ordinary_sql_byte_probes_reject_delimiters() { + let source = "SELECT id FROM app.items;\n".repeat(2_048); + for start in 0..=source.len() { + assert_eq!(dollar_quote_delimiter_at(&source, start), None); + } + } + #[test] fn split_members_ignores_commas_inside_types_and_constraints() { let value = "id decimal(10, 2), pair text CHECK (pair IN ('a,b', 'c')), name text"; diff --git a/crates/compass-languages/tests/java_enum_access.rs b/crates/compass-languages/tests/java_enum_access.rs new file mode 100644 index 000000000..80502844c --- /dev/null +++ b/crates/compass-languages/tests/java_enum_access.rs @@ -0,0 +1,218 @@ +use std::error::Error; +use std::path::Path; + +use compass_languages::{ + CandidateRelation, Engine, EvidenceLimits, SemanticRole, validate_evidence, +}; + +#[derive(Debug)] +struct Contact { + owner: String, + target: Option, + kinds: Vec, + start: usize, +} + +fn contacts(source: &str) -> Result, Box> { + let evidence = Engine::default() + .extract_source(Path::new("State.java"), source.as_bytes())? + .semantic_evidence + .ok_or("missing Java evidence")?; + validate_evidence(&evidence, EvidenceLimits::default())?; + let mut contacts = Vec::new(); + for candidate in &evidence.candidates { + if candidate.relation != CandidateRelation::AccessesMember { + continue; + } + let occurrence = evidence + .occurrences + .iter() + .find(|site| Some(&site.id) == candidate.occurrence_id.as_ref()) + .ok_or("missing member occurrence")?; + let owner = evidence + .declarations + .iter() + .find(|declaration| declaration.id == candidate.source_declaration_id) + .ok_or("missing source declaration")?; + assert_eq!(occurrence.role, SemanticRole::MemberAccess); + assert_eq!(occurrence.owner_declaration_id, owner.id); + assert!(!candidate.constraints.allow_external); + assert!(candidate.binding_id.is_none()); + let start = usize::try_from(occurrence.range.start_byte)?; + let end = usize::try_from(occurrence.range.end_byte)?; + assert_eq!( + source.get(start..end), + Some(candidate.target_spelling.as_str()) + ); + contacts.push(Contact { + owner: owner.qualified_name.clone(), + target: candidate.constraints.qualified_name.clone(), + kinds: candidate.constraints.allowed_target_kinds.clone(), + start, + }); + } + contacts.sort_by_key(|contact| contact.start); + Ok(contacts) +} + +fn pairs(contacts: &[Contact]) -> Vec<(&str, Option<&str>)> { + contacts + .iter() + .map(|contact| (contact.owner.as_str(), contact.target.as_deref())) + .collect() +} + +#[test] +fn qualified_enum_access_allows_enum_members_and_preserves_the_member_token() +-> Result<(), Box> { + let source = + "package p; // λ\nenum State { A, B } class Box { State run() { return State.A; } }"; + let actual = contacts(source)?; + assert_eq!(pairs(&actual), [("p.Box::run", Some("p.State::A"))]); + assert!(actual[0].kinds.iter().any(|kind| kind == "enum_member")); + assert_eq!(actual[0].start, source.find("State.A").ok_or("access")? + 6); + Ok(()) +} + +#[test] +fn unqualified_enum_values_are_static_and_parameters_shadow_them() -> Result<(), Box> { + let source = "package p; enum State { A, B; State next() { return B; } State shadow(State B) { return B; } static State first() { return A; } }"; + let actual = contacts(source)?; + assert_eq!( + pairs(&actual), + [ + ("p.State::next", Some("p.State::B")), + ("p.State::first", Some("p.State::A")), + ] + ); + assert!( + actual + .iter() + .all(|c| c.kinds.iter().any(|k| k == "enum_member")) + ); + Ok(()) +} + +#[test] +fn registered_enum_constant_bodies_keep_their_method_owners() -> Result<(), Box> { + let source = + "package p; enum State { A { State next() { return B; } }, B; State next() { return A; } }"; + assert_eq!( + pairs(&contacts(source)?), + [ + ("p.State::A::next", Some("p.State::B")), + ("p.State::next", Some("p.State::A")), + ] + ); + Ok(()) +} + +#[test] +fn constant_body_fields_shadow_enum_values_and_this_keeps_the_body_owner() +-> Result<(), Box> { + let source = "package p; enum State { A { int B = 1; int size() { return B + this.B; } }, B; State next() { return B; } }"; + assert_eq!( + pairs(&contacts(source)?), + [ + ("p.State::A::size", Some("p.State::A::B")), + ("p.State::A::size", Some("p.State::A::B")), + ("p.State::next", Some("p.State::B")), + ] + ); + Ok(()) +} + +#[test] +fn enum_switch_labels_follow_the_selector_instead_of_a_same_named_field() +-> Result<(), Box> { + let source = "package p; enum State { A, B } class Box { static final int A = 1; int run(State value) { switch (value) { case A: return 1; case B: return 2; default: return 0; } } }"; + let actual = contacts(source)?; + assert_eq!( + pairs(&actual), + [ + ("p.Box::run", Some("p.State::A")), + ("p.Box::run", Some("p.State::B")), + ] + ); + assert!( + actual + .iter() + .all(|contact| contact.kinds == ["enum_member"]) + ); + Ok(()) +} + +#[test] +fn unknown_switch_expressions_do_not_supply_a_convenient_enum_owner() -> Result<(), Box> +{ + let source = "package p; enum State { A } class Box { int A; int run() { switch (unknown()) { case A: return 1; default: return 0; } } }"; + let actual = contacts(source)?; + assert_eq!(pairs(&actual), [("p.Box::run", None)]); + assert_eq!(actual[0].kinds, ["enum_member"]); + Ok(()) +} + +#[test] +fn value_local_type_and_type_parameter_shadowing_do_not_select_the_enum() +-> Result<(), Box> { + for source in [ + "package p; enum State { A } class Box { Object run(Object State) { return State.A; } }", + "package p; enum State { A } class Box { void run() { class State {} sink(State.A); } }", + "package p; enum State { A } class Box { Object run() { return State.A; } }", + ] { + let actual = contacts(source)?; + assert!( + actual + .iter() + .all(|contact| contact.target.as_deref() != Some("p.State::A")), + "{source}: {actual:#?}" + ); + } + Ok(()) +} + +#[test] +fn unregistered_anonymous_and_local_classes_do_not_borrow_an_enum_owner() +-> Result<(), Box> { + for source in [ + "package p; enum State { A; void run() { Object value = new Object() { State get() { return A; } }; } }", + "package p; enum State { A; void run() { class Local { State get() { return A; } } } }", + ] { + assert!(contacts(source)?.is_empty(), "{source}"); + } + Ok(()) +} + +#[test] +fn enum_body_field_initializers_keep_the_field_as_source() -> Result<(), Box> { + let source = "package p; enum State { A { int B = 1; int next = B; }, B; }"; + assert_eq!( + pairs(&contacts(source)?), + [("p.State::A::next", Some("p.State::A::B"))] + ); + Ok(()) +} + +#[test] +fn duplicate_enum_values_and_interface_hiding_remain_unknown() -> Result<(), Box> { + for source in [ + "package p; enum State { A, A; State next() { return A; } }", + "package p; enum State implements Mask { A; Object next() { return State.A; } } interface Mask { Object State = null; }", + ] { + assert!( + contacts(source)?.iter().all(|c| c.target.is_none()), + "{source}" + ); + } + Ok(()) +} + +#[test] +fn nested_enum_receiver_precedes_a_same_named_import() -> Result<(), Box> { + let source = "package p; import remote.State; class Box { enum State { A } State run() { return State.A; } }"; + assert_eq!( + pairs(&contacts(source)?), + [("p.Box::run", Some("p.Box::State::A"))] + ); + Ok(()) +} diff --git a/crates/compass-languages/tests/java_field_access.rs b/crates/compass-languages/tests/java_field_access.rs new file mode 100644 index 000000000..91d9fa548 --- /dev/null +++ b/crates/compass-languages/tests/java_field_access.rs @@ -0,0 +1,261 @@ +use std::error::Error; +use std::path::Path; + +use compass_languages::{ + CandidateRelation, Engine, EvidenceLimits, SemanticRole, validate_evidence, +}; + +type Target = (String, Option); +fn targets(source: &str) -> Result, Box> { + let evidence = Engine::default() + .extract_source(Path::new("Box.java"), source.as_bytes())? + .semantic_evidence + .ok_or("missing Java evidence")?; + validate_evidence(&evidence, EvidenceLimits::default())?; + let mut result = Vec::new(); + for candidate in &evidence.candidates { + if candidate.relation != CandidateRelation::AccessesMember { + continue; + } + assert!( + candidate + .constraints + .allowed_target_kinds + .iter() + .any(|kind| kind == "field") + ); + assert!( + candidate + .constraints + .allowed_target_kinds + .iter() + .all(|kind| matches!(kind.as_str(), "field" | "enum_member")) + ); + assert!(!candidate.constraints.allow_external); + assert!(candidate.binding_id.is_none()); + let occurrence = evidence + .occurrences + .iter() + .find(|o| Some(&o.id) == candidate.occurrence_id.as_ref()) + .ok_or("missing occurrence")?; + assert_eq!(occurrence.role, SemanticRole::MemberAccess); + assert!(occurrence.qualifier.is_some()); + let start = usize::try_from(occurrence.range.start_byte)?; + let end = usize::try_from(occurrence.range.end_byte)?; + assert_eq!( + source.get(start..end), + Some(candidate.target_spelling.as_str()) + ); + result.push(( + candidate.target_spelling.clone(), + candidate.constraints.qualified_name.clone(), + )); + } + result.sort(); + Ok(result) +} +fn field(name: &str, owner: &str) -> Target { + (name.into(), Some(format!("p.{owner}::{name}"))) +} + +#[test] +fn own_fields_preserve_occurrences_and_parameter_shadowing() -> Result<(), Box> { + let source = "package p; class Box { int value; Box(int value) { this.value = value; } int get() { return value + this.value; } int argument(int value) { return value; } }"; + assert_eq!(targets(source)?, vec![field("value", "Box"); 3]); + Ok(()) +} +#[test] +fn local_scope_exit_restores_field_binding() -> Result<(), Box> { + let source = "package p; class Box { int value; void run() { sink(value); { int value = 1; sink(value); } sink(value); for (int value = 0; value < 1; value++) { sink(value); } sink(value); } void sink(int x) {} }"; + assert_eq!(targets(source)?, vec![field("value", "Box"); 3]); + Ok(()) +} +#[test] +fn lexical_receivers_do_not_use_shadowed_or_out_of_scope_types() -> Result<(), Box> { + let source = "package p; class Cell { int value; } class Box { Cell item; void run(Cell param) { sink(param.value); sink(item.value); { var item = unknown(); sink(item.value); } sink(item.value); } }"; + let mut expected = vec![ + field("item", "Box"), + field("item", "Box"), + field("value", "Cell"), + field("value", "Cell"), + field("value", "Cell"), + ("value".into(), None), + ]; + expected.sort(); + assert_eq!(targets(source)?, expected); + Ok(()) +} +#[test] +fn lambdas_keep_this_but_parameters_catch_and_resources_shadow_fields() -> Result<(), Box> +{ + let source = "package p; class Box { int value; Object failure; Token resource; void run() { F f = value -> value; G g = () -> this.value; try {} catch (Exception failure) { sink(failure); } sink(failure); try (Token resource = new Token()) { sink(resource.value); } catch (Exception e) { sink(resource.value); } } } class Token { int value; }"; + let mut expected = vec![ + field("value", "Box"), + field("failure", "Box"), + field("resource", "Box"), + field("value", "Token"), + field("value", "Token"), + ]; + expected.sort(); + assert_eq!(targets(source)?, expected); + Ok(()) +} +#[test] +fn declaration_type_label_and_method_names_are_not_field_occurrences() -> Result<(), Box> +{ + let source = "package p; class Box { int value; int value() { return 1; } void run() { value(); value: while (true) { break value; } } }"; + assert!(targets(source)?.is_empty()); + Ok(()) +} +#[test] +fn nested_this_and_unknown_class_boundaries_are_distinct() -> Result<(), Box> { + let source = "package p; class Box { int value; class Inner { int value; int run() { return value + Box.this.value; } } void run() { class Local { int value; int get() { return this.value; } } F f = new F() { int value; int get() { return this.value; } }; } }"; + let mut expected = vec![ + field("value", "Box"), + field("value", "Box::Inner"), + ("value".into(), None), + ("value".into(), None), + ]; + expected.sort(); + assert_eq!(targets(source)?, expected); + Ok(()) +} +#[test] +fn typed_cast_array_and_generic_bound_receivers_retain_nominal_fields() -> Result<(), Box> +{ + let source = "package p; class Cell { int value; } class Box { Cell[] items; int run(Object unknown, Cell item) { return items[0].value + ((Cell) unknown).value + item.value; } int generic(T item) { return item.value; } }"; + let mut expected = vec![field("items", "Box")]; + expected.extend(vec![field("value", "Cell"); 4]); + expected.sort(); + assert_eq!(targets(source)?, expected); + Ok(()) +} +#[test] +fn ambiguous_imports_and_unknown_receivers_do_not_invent_field_targets() +-> Result<(), Box> { + for source in [ + "package p; import a.Cell; import b.Cell; class Box { int run(Cell item) { return item.value; } }", + "package p; class Box { int run() { return unknown().value; } }", + ] { + assert_eq!(targets(source)?, vec![("value".into(), None)], "{source}"); + } + Ok(()) +} + +#[test] +fn simple_pattern_branches_and_abrupt_guards_keep_flow_scope() -> Result<(), Box> { + let source = "package p; class Cell { int value; } class Box { Cell item; int positive(Object obj) { if (obj instanceof Cell item) { return item.value; } return item.value; } int negative(Object obj) { if (!(obj instanceof Cell item)) return 0; return item.value; } }"; + let mut expected = vec![field("item", "Box")]; + expected.extend(vec![field("value", "Cell"); 3]); + expected.sort(); + assert_eq!(targets(source)?, expected); + Ok(()) +} +#[test] +fn complex_pattern_flow_blocks_outer_field_fallback() -> Result<(), Box> { + for source in [ + "package p; class Cell { int value; } class Box { Cell item; int run(Object obj) { if (!(obj instanceof Cell item)) { log(); return 0; } return item.value; } }", + "package p; class Cell { int value; } class Box { Cell item; int run(Object obj) { if (obj instanceof Cell item && item.value > 0) return 1; return 0; } }", + ] { + assert_eq!(targets(source)?, vec![("value".into(), None)]); + } + Ok(()) +} +#[test] +fn static_nested_instances_are_distinct_from_static_callable_contexts() -> Result<(), Box> +{ + let source = "package p; class Box { int value; static class Inner { int value; int own() { return this.value + value; } static int invalid() { return value; } } }"; + assert_eq!(targets(source)?, vec![field("value", "Box::Inner"); 2]); + Ok(()) +} +#[test] +fn unregistered_local_callable_does_not_attribute_typed_access_to_outer_method() +-> Result<(), Box> { + let source = "package p; class Cell { int value; } class Box { void run() { class Local { int get(Cell item) { return item.value; } } } }"; + assert_eq!(targets(source)?, vec![("value".into(), None)]); + Ok(()) +} +#[test] +fn inherited_members_never_fall_back_to_an_enclosing_field() -> Result<(), Box> { + let source = "package p; class Box { int value; class Inner extends Unknown { int get() { return value; } } }"; + assert!(targets(source)?.is_empty()); + Ok(()) +} +#[test] +fn receiver_depth_exhaustion_is_unresolved() -> Result<(), Box> { + let source = format!( + "package p; class Cell {{ int value; }} class Box {{ int get(Cell item) {{ return {}item{}.value; }} }}", + "(".repeat(30), + ")".repeat(30) + ); + assert_eq!(targets(&source)?, vec![("value".into(), None)]); + Ok(()) +} + +#[test] +fn local_type_declaration_shadows_a_same_named_top_level_type() -> Result<(), Box> { + let source = "package p; class Cell { int value; } class Box { int run() { class Cell { int value; } Cell item = new Cell(); return item.value; } }"; + assert_eq!(targets(source)?, vec![("value".into(), None)]); + Ok(()) +} +#[test] +fn multi_catch_and_intersection_bounds_remain_unknown() -> Result<(), Box> { + for source in [ + "package p; class Box { int run() { try {} catch (First | Second item) { return item.value; } } }", + "package p; class Box { int run(T item) { return item.value; } }", + ] { + assert_eq!(targets(source)?, vec![("value".into(), None)]); + } + Ok(()) +} + +#[test] +fn enhanced_loop_binding_starts_after_the_iterable_expression() -> Result<(), Box> { + let source = "package p; // λ\nclass Cell { int value; } class Box { Cell[] items; void run() { for (Cell items : items) { sink(items.value); } } }"; + assert_eq!( + targets(source)?, + vec![field("items", "Box"), field("value", "Cell")] + ); + Ok(()) +} +#[test] +fn declared_field_types_keep_their_declaration_scope() -> Result<(), Box> { + let source = "package p; class Cell { int value; } class Box { Cell item; class Inner { class Cell { int value; } int run() { return item.value; } } }"; + assert_eq!( + targets(source)?, + vec![field("item", "Box"), field("value", "Cell")] + ); + Ok(()) +} + +#[test] +fn unregistered_class_initializer_never_uses_enclosing_callable_ownership() +-> Result<(), Box> { + let source = "package p; class Cell { int value; } class Box { void run() { class Local { int value = new Cell().value; } } }"; + assert_eq!(targets(source)?, vec![("value".into(), None)]); + Ok(()) +} + +#[test] +fn member_type_shadows_same_named_import_for_field_receivers() -> Result<(), Box> { + let source = "package p; import remote.Cell; class Box { class Cell { int value; } int run(Cell item) { return item.value; } }"; + assert_eq!(targets(source)?, vec![field("value", "Box::Cell")]); + Ok(()) +} +#[test] +fn local_type_prefix_shadows_a_package_in_qualified_type_syntax() -> Result<(), Box> { + let source = "package p; class Box { class remote { class Cell { int value; } } int run(remote.Cell item) { return item.value; } }"; + assert_eq!(targets(source)?, vec![field("value", "Box::remote::Cell")]); + Ok(()) +} + +#[test] +fn shadowed_package_prefix_cannot_supply_missing_nested_types() -> Result<(), Box> { + for source in [ + "package p; class Box { class remote {} int run(remote.Cell item) { return item.value; } }", + "package p; class Box { int run(remote.Cell item) { return item.value; } }", + ] { + assert_eq!(targets(source)?, vec![("value".into(), None)]); + } + Ok(()) +} diff --git a/crates/compass-languages/tests/java_varargs.rs b/crates/compass-languages/tests/java_varargs.rs new file mode 100644 index 000000000..3926a3545 --- /dev/null +++ b/crates/compass-languages/tests/java_varargs.rs @@ -0,0 +1,161 @@ +use std::error::Error; +use std::path::Path; + +use compass_languages::{CandidateRelation, Engine, EvidenceLimits, validate_evidence}; + +const SOURCE: &str = + include_str!("../../../benchmarks/agent_query/fixtures/java_varargs/VarargsDemo.java"); + +#[test] +fn java_array_parameter_receivers_remain_unresolved_instead_of_naming_element_types() +-> Result<(), Box> { + let source = br#"package audit; +class Item { public Item clone() { return this; } } +class Use { + void spread(Item... values) { values.clone(); } + void fixed(Item[] values) { values.clone(); } + void suffix(Item values[]) { values.clone(); } +} +"#; + let extraction = Engine::default().extract_source(Path::new("Use.java"), source)?; + let evidence = extraction.semantic_evidence.ok_or("missing evidence")?; + validate_evidence(&evidence, EvidenceLimits::default())?; + let calls = evidence + .candidates + .iter() + .filter(|c| c.relation == CandidateRelation::Calls && c.target_spelling == "clone") + .collect::>(); + assert_eq!(calls.len(), 3); + for call in calls { + assert!(call.constraints.qualified_name.is_none()); + assert!(!call.constraints.allow_external); + let occurrence = evidence + .occurrences + .iter() + .find(|o| Some(&o.id) == call.occurrence_id.as_ref()) + .ok_or("missing clone occurrence")?; + assert_eq!(occurrence.qualifier.as_deref(), Some("values")); + assert_eq!( + source.get( + usize::try_from(occurrence.range.start_byte)? + ..usize::try_from(occurrence.range.end_byte)? + ), + Some(b"clone".as_slice()) + ); + } + Ok(()) +} + +#[test] +fn java_spread_parameter_ast_and_signatures() -> Result<(), Box> { + let mut parser = tree_sitter::Parser::new(); + parser.set_language(&tree_sitter_language_pack::get_language("java")?)?; + let tree = parser + .parse(SOURCE, None) + .ok_or("missing Java syntax tree")?; + assert!(!tree.root_node().has_error()); + assert!( + tree.root_node().to_sexp().contains( + "(spread_parameter (type_identifier) (variable_declarator name: (identifier)))" + ) + ); + let extraction = + Engine::default().extract_source(Path::new("VarargsDemo.java"), SOURCE.as_bytes())?; + let evidence = extraction + .semantic_evidence + .ok_or("missing Java evidence")?; + validate_evidence(&evidence, EvidenceLimits::default())?; + for (line, signature, types, count, variadic) in [ + (4, "join(String...)", vec!["java.lang.String[]"], 1, true), + (5, "join(int...)", vec!["int[]"], 1, true), + (6, "join(boolean)", vec!["boolean"], 1, false), + ( + 7, + "prefixed(String,String...)", + vec!["java.lang.String", "java.lang.String[]"], + 2, + true, + ), + ( + 8, + "arrays(String[],int[])", + vec!["java.lang.String[]", "int[]"], + 2, + false, + ), + ] { + let declaration = evidence + .declarations + .iter() + .find(|d| d.kind == "method" && d.range.start_line == line) + .ok_or("missing method")?; + assert_eq!(declaration.signature.as_deref(), Some(signature)); + assert_eq!(declaration.parameter_types, types); + assert_eq!(declaration.parameter_count, Some(count)); + assert_eq!(declaration.variadic, variadic); + } + Ok(()) +} + +#[test] +fn java_varargs_preserves_dimensions_receivers_and_parameter_value_types() +-> Result<(), Box> { + let source = + include_str!("../../../benchmarks/agent_query/fixtures/java_varargs/ExtendedVarargs.java"); + let extraction = + Engine::default().extract_source(Path::new("ExtendedVarargs.java"), source.as_bytes())?; + let evidence = extraction.semantic_evidence.ok_or("missing evidence")?; + validate_evidence(&evidence, EvidenceLimits::default())?; + for (name, signature, parameter_type) in [ + ( + "spreadForward", + "spreadForward(String...)", + "java.lang.String[]", + ), + ( + "trailingDimensions", + "trailingDimensions(String[])", + "java.lang.String[]", + ), + ("receiver", "receiver(String...)", "java.lang.String[]"), + ("modified", "modified(String...)", "java.lang.String[]"), + ("arrays", "arrays(String[]...)", "java.lang.String[][]"), + ("generic", "generic(java.util.List...)", "java.util.List[]"), + ] { + let declaration = evidence + .declarations + .iter() + .find(|d| d.name == name) + .ok_or("missing declaration")?; + assert_eq!(declaration.signature.as_deref(), Some(signature)); + assert_eq!(declaration.parameter_types, [parameter_type]); + assert_eq!(declaration.parameter_count, Some(1)); + } + for (name, argument_type) in [ + ("arrayArgument", "java.lang.String[]"), + ("matrixArgument", "java.lang.String[][]"), + ("matrixInitializer", "java.lang.String[][]"), + ("spreadForward", "java.lang.String[]"), + ("trailingDimensions", "java.lang.String[]"), + ("receiver", "java.lang.String[]"), + ("modified", "java.lang.String[]"), + ("arrays", "java.lang.String[][]"), + ] { + let declaration = evidence + .declarations + .iter() + .find(|d| d.name == name) + .ok_or("missing caller")?; + let call = evidence + .candidates + .iter() + .find(|c| c.source_declaration_id == declaration.id && c.target_spelling == "shape") + .ok_or("missing shape call")?; + assert_eq!( + call.constraints.argument_types, + [Some(argument_type.to_owned())], + "{name}" + ); + } + Ok(()) +} diff --git a/crates/compass-languages/tests/rust_field_access.rs b/crates/compass-languages/tests/rust_field_access.rs new file mode 100644 index 000000000..817161938 --- /dev/null +++ b/crates/compass-languages/tests/rust_field_access.rs @@ -0,0 +1,128 @@ +use std::error::Error; +use std::path::Path; + +use compass_languages::{ + CandidateRelation, Engine, EvidenceLimits, SemanticRole, validate_evidence, +}; + +type FieldTarget = (String, Option); + +fn targets(source: &str) -> Result, Box> { + let evidence = Engine::default() + .extract_source(Path::new("src/lib.rs"), source.as_bytes())? + .semantic_evidence + .ok_or("missing Rust evidence")?; + validate_evidence(&evidence, EvidenceLimits::default())?; + let mut result = Vec::new(); + for candidate in &evidence.candidates { + if candidate.relation != CandidateRelation::AccessesMember { + continue; + } + assert_eq!(candidate.constraints.allowed_target_kinds, ["field"]); + assert!(!candidate.constraints.allow_external); + assert!(candidate.binding_id.is_none()); + let occurrence = evidence + .occurrences + .iter() + .find(|o| Some(&o.id) == candidate.occurrence_id.as_ref()) + .ok_or("missing member occurrence")?; + assert_eq!(occurrence.role, SemanticRole::MemberAccess); + assert!(occurrence.qualifier.is_some()); + let start = usize::try_from(occurrence.range.start_byte)?; + let end = usize::try_from(occurrence.range.end_byte)?; + let spelling = source + .get(start..end) + .ok_or("invalid member source range")?; + assert_eq!(spelling, candidate.target_spelling); + result.push(( + spelling.to_owned(), + candidate.constraints.qualified_name.clone(), + )); + } + result.sort(); + Ok(result) +} + +#[test] +fn self_field_uses_keep_each_occurrence_and_skip_method_selectors() -> Result<(), Box> { + let source = "// λ\nstruct State { value: usize } impl State { fn get(&self) -> usize { self.value } fn bump(&mut self) { self.value = self.value + 1; self.get(); } }"; + assert_eq!( + targets(source)?, + vec![("value".into(), Some("crate::State::value".into())); 3] + ); + Ok(()) +} + +#[test] +fn typed_parameters_nested_fields_and_indexes_keep_nominal_owners() -> Result<(), Box> { + let source = "struct Item { value: usize } struct State { items: Vec } fn run(state: &State, item: &Item) { let _ = item.value; let _ = state.items[0].value; }"; + assert_eq!( + targets(source)?, + vec![ + ("items".into(), Some("crate::State::items".into())), + ("value".into(), Some("crate::Item::value".into())), + ("value".into(), Some("crate::Item::value".into())), + ] + ); + Ok(()) +} + +#[test] +fn unknown_and_shadowed_receivers_do_not_inherit_outer_types() -> Result<(), Box> { + let source = "struct Item { value: usize } fn run(item: &Item) { { let item = unknown(); let _ = item.value; } let _ = item.value; for item in unknown() { let _ = item.value; } let _ = (|item| item.value)(unknown()); }"; + assert_eq!( + targets(source)?, + vec![ + ("value".into(), None), + ("value".into(), None), + ("value".into(), None), + ("value".into(), Some("crate::Item::value".into())), + ] + ); + Ok(()) +} + +#[test] +fn ambiguous_imports_unknown_index_and_raw_pointers_remain_unresolved() -> Result<(), Box> +{ + for source in [ + "use crate::a::Item; use crate::b::Item; fn run(item: &Item) { let _ = item.value; }", + "struct Item { value: usize } fn run(items: Vec, index: Unknown) { let _ = items[index].value; }", + "struct Item { value: usize } fn run(item: *const Item) { let _ = item.value; }", + ] { + assert_eq!(targets(source)?, vec![("value".into(), None)], "{source}"); + } + Ok(()) +} + +#[test] +fn receiver_wrappers_and_trait_impl_self_keep_field_identity() -> Result<(), Box> { + let source = "struct Item { value: usize } trait Read { fn read(&self) -> usize; } impl Read for Item { fn read(&self) -> usize { (&self).value } }"; + assert_eq!( + targets(source)?, + vec![("value".into(), Some("crate::Item::value".into()))] + ); + Ok(()) +} + +#[test] +fn bounded_receiver_syntax_never_falls_back_to_a_field_name() -> Result<(), Box> { + let source = format!( + "struct Item {{ value: usize }} fn run(item: Item) {{ let _ = {}item{}.value; }}", + "(".repeat(40), + ")".repeat(40) + ); + assert_eq!(targets(&source)?, vec![("value".into(), None)]); + Ok(()) +} + +#[test] +fn generic_method_selectors_are_not_fields_but_callable_fields_are_contacts() +-> Result<(), Box> { + let source = "struct Item { callback: fn() } impl Item { fn method(&self) {} fn run(&self) { self.method::(); (self.callback)(); } }"; + assert_eq!( + targets(source)?, + vec![("callback".into(), Some("crate::Item::callback".into()))] + ); + Ok(()) +} diff --git a/crates/compass-languages/tests/rust_index_receivers.rs b/crates/compass-languages/tests/rust_index_receivers.rs new file mode 100644 index 000000000..fa4eed659 --- /dev/null +++ b/crates/compass-languages/tests/rust_index_receivers.rs @@ -0,0 +1,225 @@ +use std::error::Error; +use std::path::Path; + +use compass_languages::{CandidateRelation, Engine, SemanticRole}; + +#[test] +fn indexed_field_calls_preserve_element_owner_and_each_occurrence() -> Result<(), Box> { + let source = b"struct Entry;\nimpl Entry { fn close(&mut self) {} }\nstruct Walker { entries: Vec, cursor: usize }\nimpl Walker { fn close(&mut self) {} fn advance(&mut self) {\n self.entries[self.cursor].close();\n self.entries[0].close();\n} }\n"; + let extraction = Engine::default().extract_source(Path::new("src/lib.rs"), source)?; + let evidence = extraction + .semantic_evidence + .ok_or("missing Rust evidence")?; + let calls = evidence + .candidates + .iter() + .filter(|candidate| { + candidate.relation == CandidateRelation::Calls && candidate.target_spelling == "close" + }) + .collect::>(); + assert_eq!(calls.len(), 2); + for call in calls { + assert_eq!( + call.constraints.qualified_name.as_deref(), + Some("crate::Entry::close"), + "{call:#?}" + ); + assert!(!call.constraints.allow_external); + let occurrence = evidence + .occurrences + .iter() + .find(|o| Some(&o.id) == call.occurrence_id.as_ref()) + .ok_or("missing occurrence")?; + assert_eq!(occurrence.role, SemanticRole::Call); + let raw = std::str::from_utf8( + &source[usize::try_from(occurrence.range.start_byte)? + ..usize::try_from(occurrence.range.end_byte)?], + )?; + assert!( + matches!( + raw, + "self.entries[self.cursor].close" | "self.entries[0].close" + ), + "{raw}" + ); + } + Ok(()) +} + +fn close_targets(source: &str) -> Result>, Box> { + let evidence = Engine::default() + .extract_source(Path::new("src/lib.rs"), source.as_bytes())? + .semantic_evidence + .ok_or("missing Rust evidence")?; + Ok(evidence + .candidates + .iter() + .filter(|call| call.relation == CandidateRelation::Calls && call.target_spelling == "close") + .map(|call| call.constraints.qualified_name.clone()) + .collect()) +} + +#[test] +fn standard_sequences_and_nested_field_indexes_retain_the_element_type() +-> Result<(), Box> { + for (ty, expression) in [ + ("Vec", "entries[0]"), + ("std::vec::Vec", "entries[0usize]"), + ("alloc::vec::Vec", "entries[0]"), + ("&[Entry]", "entries[0]"), + ("&mut [Entry; 4]", "entries[0]"), + ("[[Entry; 2]; 4]", "entries[0][1]"), + ("Vec>", "entries[0][1]"), + ("Box<[Entry]>", "entries[0]"), + ("std::sync::Arc>", "entries[0]"), + ("Vec", "(entries[0])"), + ("Vec", "(&entries[0])"), + ("Vec", "(&mut entries[0])"), + ] { + let source = format!( + "struct Entry; impl Entry {{ fn close(&self) {{}} }} fn run(mut entries: {ty}) {{ {expression}.close(); }}" + ); + assert_eq!( + close_targets(&source)?, + vec![Some("crate::Entry::close".to_owned())], + "{source}" + ); + } + let source = "struct Entry; impl Entry { fn close(&self) {} } struct Slot { entry: Entry } struct Store { slots: Vec } fn run(store: &Store, n: usize) { store.slots[n].entry.close(); }"; + assert_eq!( + close_targets(source)?, + vec![Some("crate::Entry::close".to_owned())] + ); + Ok(()) +} + +#[test] +fn indexed_field_type_names_use_the_field_declaration_scope() -> Result<(), Box> { + let source = "mod model { pub struct Entry; impl Entry { pub fn close(&self) {} } pub struct Store { pub entries: Vec } } struct Entry; impl Entry { fn close(&self) {} } fn run(store: &model::Store) { store.entries[0].close(); }"; + assert_eq!( + close_targets(source)?, + vec![Some("crate::model::Entry::close".to_owned())] + ); + Ok(()) +} + +#[test] +fn custom_containers_and_shadowed_vec_never_imply_the_generic_argument() +-> Result<(), Box> { + for prefix in [ + "struct Vec(T);", + "use crate::custom::Vec;", + "use crate::custom::*;", + "use crate::one::*; use crate::two::*;", + "#![no_implicit_prelude]", + "#![no_std]", + "#[cfg_attr(feature = \"bare\", no_implicit_prelude)] mod other {}", + ] { + let source = format!( + "{prefix} struct Entry; impl Entry {{ fn close(&self) {{}} }} fn run(entries: Vec) {{ entries[0].close(); }}" + ); + assert_eq!(close_targets(&source)?, vec![None], "{source}"); + } + for source in [ + "struct Entry; impl Entry { fn close(&self) {} } struct Other; struct Custom(T); impl std::ops::Index for Custom { type Output = Other; fn index(&self, _: usize) -> &Other { todo!() } } fn run(entries: Custom) { entries[0].close(); }", + "fn run(entries: Vec) { entries[0].close(); }", + "struct Holder { entries: Vec } impl Holder { fn run(&self) { self.entries[0].close(); } }", + ] { + assert_eq!(close_targets(source)?, vec![None], "{source}"); + } + Ok(()) +} + +#[test] +fn ranges_unknown_indexes_and_raw_pointers_do_not_claim_element_methods() +-> Result<(), Box> { + for (ty, index_ty, index) in [ + ("Vec", "usize", ".."), + ("Vec", "usize", "0..1"), + ("Vec", "std::ops::Range", "n"), + ("Vec", "Unknown", "n"), + ("Vec", "u32", "n"), + ("Vec", "usize", "&n"), + ("Vec", "usize", "(&n)"), + ("Vec", "&usize", "n"), + ("Vec", "usize", "0u32"), + ("*const Vec", "usize", "n"), + ("*mut [Entry; 4]", "usize", "n"), + ] { + let source = format!( + "struct Entry; impl Entry {{ fn close(&self) {{}} }} fn run(entries: {ty}, n: {index_ty}) {{ entries[{index}].close(); }}" + ); + assert_eq!(close_targets(&source)?, vec![None], "{source}"); + } + Ok(()) +} + +#[test] +fn indexed_local_receivers_and_indexes_respect_lexical_shadowing() -> Result<(), Box> { + let source = "struct Entry; impl Entry { fn close(&self) {} } fn run(entries: Vec, n: usize) { { let entries = unknown(); entries[n].close(); } { let n = unknown(); entries[n].close(); } entries[n].close(); }"; + let targets = close_targets(source)?; + assert_eq!(targets.iter().filter(|t| t.is_none()).count(), 2); + assert_eq!( + targets + .iter() + .filter(|t| t.as_deref() == Some("crate::Entry::close")) + .count(), + 1 + ); + Ok(()) +} + +#[test] +fn explicit_vec_alias_and_element_alias_are_resolved() -> Result<(), Box> { + let source = "use std::vec::Vec as Sequence; use crate::api::Entry as Item; fn run(entries: Sequence) { entries[0].close(); }"; + assert_eq!( + close_targets(source)?, + vec![Some("crate::api::Entry::close".to_owned())] + ); + Ok(()) +} + +#[test] +fn excessive_receiver_depth_remains_unresolved() -> Result<(), Box> { + let expression = format!("{}entries[0]{}", "(".repeat(40), ")".repeat(40)); + let source = format!("struct Entry; fn run(entries: Vec) {{ {expression}.close(); }}"); + assert_eq!(close_targets(&source)?, vec![None]); + Ok(()) +} + +#[test] +fn ambiguous_element_imports_do_not_select_a_target() -> Result<(), Box> { + let source = "use crate::a::Entry; use crate::b::Entry; fn run(entries: Vec) { entries[0].close(); }"; + assert_eq!(close_targets(source)?, vec![None]); + Ok(()) +} + +#[test] +fn nested_element_paths_preserve_every_module_segment() -> Result<(), Box> { + for (import, ty) in [ + ("", "api::nested::Entry"), + ("use crate::api as a;", "a::nested::Entry"), + ] { + let source = format!( + "mod api {{ pub struct Entry; impl Entry {{ pub fn close(&self) {{}} }} pub mod nested {{ pub struct Entry; impl Entry {{ pub fn close(&self) {{}} }} }} }} {import} fn run(entries: Vec<{ty}>, entry: &{ty}) {{ entries[0].close(); entry.close(); }}" + ); + assert_eq!( + close_targets(&source)?, + vec![Some("crate::api::nested::Entry::close".to_owned()); 2], + "{source}" + ); + } + let source = "use std as standard; struct Entry; impl Entry { fn close(&self) {} } fn run(entries: standard::vec::Vec) { entries[0].close(); }"; + assert_eq!( + close_targets(source)?, + vec![Some("crate::Entry::close".to_owned())] + ); + Ok(()) +} + +#[test] +fn conditional_field_layouts_do_not_choose_one_element_type() -> Result<(), Box> { + let source = "struct A; impl A { fn close(&self) {} } struct B; impl B { fn close(&self) {} } #[cfg(feature = \"a\")] struct Store { entries: Vec } #[cfg(not(feature = \"a\"))] struct Store { entries: Vec } impl Store { fn run(&self) { self.entries[0].close(); } }"; + assert_eq!(close_targets(source)?, vec![None]); + Ok(()) +} diff --git a/crates/compass-languages/tests/typescript_universal_evidence.rs b/crates/compass-languages/tests/typescript_universal_evidence.rs index 88b7676a4..215258fe2 100644 --- a/crates/compass-languages/tests/typescript_universal_evidence.rs +++ b/crates/compass-languages/tests/typescript_universal_evidence.rs @@ -1635,6 +1635,32 @@ class Box { })); } +#[test] +fn typescript_repeated_nominal_call_returns_keep_the_final_member_target() { + let batch = universal_evidence( + "src/repeated_returns.ts", + br#"class Link { + next(): Link { return this; } + value!: string; +} +function read(link: Link) { + return link.next().next().next().next().next().next().next().next().value; +} +"#, + ); + let value = batch + .declarations + .iter() + .find(|declaration| declaration.qualified_name.ends_with(".Link.value")) + .expect("Link.value declaration"); + assert!(batch.candidates.iter().any(|candidate| { + candidate.relation == compass_languages::CandidateRelation::AccessesMember + && candidate.target_spelling == "value" + && candidate.constraints.exact_target_declaration_id.as_deref() + == Some(value.id.as_str()) + })); +} + #[test] fn typescript_member_call_return_types_resolve_inherited_methods() { let batch = universal_evidence( diff --git a/crates/compass-languages/tests/universal_evidence.rs b/crates/compass-languages/tests/universal_evidence.rs index bb4a8fff2..8031d3e86 100644 --- a/crates/compass-languages/tests/universal_evidence.rs +++ b/crates/compass-languages/tests/universal_evidence.rs @@ -1593,6 +1593,126 @@ func (d *Derived) Handle(value alias.Input) alias.Output { })); } +#[test] +fn go_struct_named_fields_have_distinct_exact_declarations_and_owners() +-> Result<(), Box> { + let source = br#"package sample + +type Embedded struct{} +type Store struct { + First, Second int + Embedded + Nested struct { Inner int } + _ string +} +"#; + let mut engine = Engine::default(); + let extraction = engine.extract_source_combined( + std::path::Path::new("/repo/sample/example.go"), + "sample/example.go", + source, + )?; + let evidence = extraction + .graph + .semantic_evidence + .ok_or("missing Go evidence")?; + validate_evidence(&evidence, EvidenceLimits::default())?; + let store = evidence + .declarations + .iter() + .find(|declaration| declaration.kind == "struct" && declaration.name == "Store") + .ok_or("missing Store")?; + let mut fields = evidence + .declarations + .iter() + .filter(|declaration| declaration.kind == "field") + .collect::>(); + fields.sort_by(|left, right| left.name.cmp(&right.name)); + assert_eq!( + fields + .iter() + .map(|field| (field.name.as_str(), field.range.start_line)) + .collect::>(), + [("First", 5), ("Nested", 7), ("Second", 5)] + ); + assert_eq!( + fields + .iter() + .map(|field| field.graph_node_id.as_str()) + .collect::>() + .len(), + 3 + ); + for field in fields { + assert_eq!( + field.qualified_name, + format!("sample.Store::{}", field.name) + ); + assert!(evidence.candidates.iter().any(|candidate| { + candidate.relation == CandidateRelation::Contains + && candidate.source_declaration_id == store.id + && candidate.constraints.exact_target_declaration_id.as_deref() + == Some(field.id.as_str()) + })); + } + Ok(()) +} + +#[test] +fn go_field_contacts_keep_receiver_type_source_site_and_shadowing() +-> Result<(), Box> { + let source = br#"package sample +type Store struct { Count int; Run func() } +type Other struct { Count int } +func (s *Store) Read(other *Store) { + s.Count++ + _ = other.Count + s.Run() + { s := &Other{}; _ = s.Count } +} +"#; + let mut engine = Engine::default(); + let extraction = engine.extract_source_combined( + std::path::Path::new("/repo/sample/access.go"), + "sample/access.go", + source, + )?; + let evidence = extraction + .graph + .semantic_evidence + .ok_or("missing Go evidence")?; + validate_evidence(&evidence, EvidenceLimits::default())?; + let occurrences = evidence + .occurrences + .iter() + .filter(|occurrence| occurrence.role == SemanticRole::MemberAccess) + .collect::>(); + let mut sites = occurrences + .iter() + .map(|occurrence| (occurrence.spelling.as_str(), occurrence.range.start_line)) + .collect::>(); + sites.sort(); + assert_eq!(sites, [("Count", 5), ("Count", 6), ("Count", 8)]); + for (line, expected) in [ + (5, "sample.Store::Count"), + (6, "sample.Store::Count"), + (8, "sample.Other::Count"), + ] { + let occurrence = occurrences + .iter() + .find(|occurrence| occurrence.range.start_line == line) + .ok_or("missing field occurrence")?; + assert!(evidence.candidates.iter().any(|candidate| { + candidate.relation == CandidateRelation::AccessesMember + && candidate.occurrence_id.as_deref() == Some(occurrence.id.as_str()) + && candidate.constraints.qualified_name.as_deref() == Some(expected) + && candidate.constraints.allowed_target_kinds == ["field"] + && !candidate.constraints.allow_external + })); + } + Ok(()) +} + #[test] fn go_emits_direct_and_grouped_aliases_with_closure_signature_references() { let source = br#"package sample @@ -1914,3 +2034,85 @@ fn direct_evidence_ids_and_partial_diagnostics_are_deterministic() { .any(|diagnostic| diagnostic.code == "partial_parser_recovery") ); } + +#[test] +fn go_control_receiver_evidence_uses_the_nearest_binding_and_factory_identity() { + let source = br#"package sample +type Good struct{} +func (*Good) Run() {} +type Bad struct{} +func (*Bad) Run() {} +func Factory() *Good { return nil } +func caller(current *Bad, Factory func() *Bad, value any) { + if current := Factory(); current != nil { current.Run() } // unknown + { var current any; current.Run() } // unknown + switch current := value.(type) { case *Good: current.Run() } // unknown + current.Run() // sample.Bad::Run +} +func direct(current *Bad, values []*Good) { + if current := Factory(); current != nil { current.Run() } // sample.Good::Run + switch current := Factory(); { default: current.Run() } // sample.Good::Run + for _, current := range values { + current.Run() // sample.Good::Run + { var current *Bad; current.Run() } // sample.Bad::Run + current.Run() // sample.Good::Run + } + current.Run() // sample.Bad::Run +} +"#; + let evidence = Engine::default() + .extract_source_combined( + std::path::Path::new("/repo/sample/receiver.go"), + "sample/receiver.go", + source, + ) + .expect("extract Go receiver evidence") + .graph + .semantic_evidence + .expect("Go evidence"); + validate_evidence(&evidence, EvidenceLimits::default()).expect("valid evidence"); + for occurrence in evidence + .occurrences + .iter() + .filter(|o| o.spelling == "Run" && o.role == SemanticRole::Call) + { + let line = std::str::from_utf8(source) + .expect("source") + .lines() + .nth(usize::try_from(occurrence.range.start_line - 1).expect("line index")) + .expect("source line"); + let expected = line.rsplit_once("// ").expect("reviewed call").1; + let candidate = evidence + .candidates + .iter() + .find(|c| c.occurrence_id.as_deref() == Some(&occurrence.id)) + .expect("candidate"); + if expected == "unknown" { + assert!( + candidate.constraints.qualified_name.is_none(), + "{line}: {candidate:?}" + ); + assert!( + candidate.binding_id.is_none(), + "{line}: must not reuse outer receiver or factory" + ); + } else { + assert_eq!( + candidate.constraints.qualified_name.as_deref(), + Some(expected), + "{line}" + ); + } + let start = usize::try_from(occurrence.range.start_byte).expect("start"); + let end = usize::try_from(occurrence.range.end_byte).expect("end"); + assert_eq!(&source[start..end], b"current.Run"); + } + assert_eq!( + evidence + .occurrences + .iter() + .filter(|o| o.spelling == "Run" && o.role == SemanticRole::Call) + .count(), + 10 + ); +} diff --git a/crates/compass-mcp/src/code_query.rs b/crates/compass-mcp/src/code_query.rs index c984dac0b..4e091c060 100644 --- a/crates/compass-mcp/src/code_query.rs +++ b/crates/compass-mcp/src/code_query.rs @@ -3,7 +3,7 @@ use compass_model::query_contract::{ DiscoveryQueryRequest, DiscoveryQueryResponse, DiscoveryScope, DiscoveryScopeKind, DiscoveryTraversal, ExploreRequest, ImpactRequest, NodeTrailRequest, SearchRequest, }; -use compass_query::{CodeQueryEngine, NaturalQueryRequest, QueryErrorKind}; +use compass_query::{CodeQueryEngine, ExactSearchFilter, NaturalQueryRequest, QueryErrorKind}; use serde_json::{Map, Value, json}; pub(super) fn schema(required: &[&str]) -> Value { @@ -45,11 +45,40 @@ pub(super) fn schema(required: &[&str]) -> Value { }) } +pub(super) fn search_schema() -> Value { + let mut result = schema(&["query"]); + result["properties"]["exact"] = json!({"type":"boolean","default":false,"description":"Only exact ID or normalized name matches; no lexical fallback."}); + result["properties"]["source_file"] = json!({"type":"string","minLength":1,"maxLength":4096,"description":"Exact stored source path; requires exact=true."}); + result["properties"]["start_line"] = json!({"type":"integer","minimum":1,"maximum":u32::MAX,"description":"Declaration start line; requires exact=true and source_file."}); + result["properties"]["kind"] = json!({"type":"string","description":"Stored node kind (for example function, class, struct); requires exact=true."}); + result +} + +pub(super) fn trail_schema() -> Value { + let mut result = schema(&["source", "target"]); + result["properties"]["calls_only"] = json!({"type":"boolean","default":false,"description":"Only directed calls edges; excludes structural shortcuts and applies to direction diagnostics too."}); + result +} + pub(super) fn invoke_with_engine( name: &str, arguments: &Map, engine: &CodeQueryEngine, ) -> Result { + if name != "get_node" && arguments.contains_key("calls_only") { + return Err(super::InvocationError::InvalidParams( + "calls_only requires get_node".to_owned(), + )); + } + if name != "search_symbols" + && ["exact", "source_file", "start_line", "kind"] + .iter() + .any(|key| arguments.contains_key(*key)) + { + return Err(super::InvocationError::InvalidParams( + "exact symbol filters require search_symbols".to_owned(), + )); + } let limits = limits(arguments)?; match name { "query_graph" => engine.query_natural(NaturalQueryRequest { @@ -57,10 +86,51 @@ pub(super) fn invoke_with_engine( include_heuristic: false, limits, }), - "search_symbols" => engine.search(SearchRequest { - query: required_string(arguments, "query")?, - limits, - }), + "search_symbols" => { + let request = SearchRequest { + query: required_string(arguments, "query")?, + limits, + }; + let exact = boolean(arguments, "exact")?; + if !exact + && ["source_file", "start_line", "kind"] + .iter() + .any(|key| arguments.contains_key(*key)) + { + return Err(super::InvocationError::InvalidParams( + "source_file, start_line and kind require exact=true".to_owned(), + )); + } + if exact { + let source_file = arguments + .get("source_file") + .map(|_| required_string(arguments, "source_file")) + .transpose()?; + let start_line = arguments + .get("start_line") + .map(|_| u32_value(arguments, "start_line", 0)) + .transpose()?; + let kind = arguments + .get("kind") + .map(|value| { + serde_json::from_value(value.clone()).map_err(|_| { + "kind must be a stored node kind such as function, class, or struct" + .to_owned() + }) + }) + .transpose()?; + engine.search_exact( + request, + ExactSearchFilter { + source_file, + start_line, + kind, + }, + ) + } else { + engine.search(request) + } + } "get_callers" => engine.callers(CallRequest { symbol: required_string(arguments, "symbol")?, include_heuristic: boolean(arguments, "include_heuristic")?, @@ -98,6 +168,7 @@ pub(super) fn invoke_with_engine( limits, }), "get_node" => engine.node_trail(NodeTrailRequest { + calls_only: boolean(arguments, "calls_only")?, source: required_string(arguments, "source")?, target: required_string(arguments, "target")?, include_heuristic: boolean(arguments, "include_heuristic")?, diff --git a/crates/compass-mcp/src/lib.rs b/crates/compass-mcp/src/lib.rs index dc58419bc..33c8fedda 100644 --- a/crates/compass-mcp/src/lib.rs +++ b/crates/compass-mcp/src/lib.rs @@ -5,7 +5,7 @@ mod transport; pub use transport::{HttpOptions, serve_http, serve_stdio, serve_stdio_configured}; -use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque}; +use std::collections::{BTreeMap, BTreeSet, HashMap}; use std::fs; use std::fs::OpenOptions; use std::io::{Read as _, Write as _}; @@ -21,7 +21,8 @@ use compass_agent_graph::{ }; use compass_core::{AgentGraphContext, LoadedGraph}; use compass_graph::{ - Communities, blind_spot_report, god_nodes, suggest_questions, surprising_connections, + Communities, blind_spot_report, god_nodes_with_evidence, suggest_questions, + surprising_connections, }; use compass_model::code_graph::GraphDocument as CodeGraphDocument; use compass_model::query_contract::{ @@ -30,7 +31,7 @@ use compass_model::query_contract::{ MAX_DISCOVERY_NODES, MAX_DISCOVERY_QUESTION_BYTES, MAX_DISCOVERY_RESPONSE_BYTES, MAX_DISCOVERY_SEEDS, MAX_DISCOVERY_TIMEOUT_MS, }; -use compass_model::{Graph, GraphDocument, NodeIndex}; +use compass_model::{Graph, GraphArtifact, GraphDocument, GraphError, NodeIndex}; use compass_output::{ AgentOperandRole, AgentOperation, AgentOrientation, AgentQueryContext, ORIENTATION_JSON_MAX_BYTES, build_code_query_view, build_discovery_query_view, @@ -43,7 +44,8 @@ use compass_prs::{ fetch_prs, fetch_worktrees, format_prs_text, parse_ci, }; use compass_query::{ - TraversalMode, find_node, pick_scored_endpoint, query_graph_text, sanitize_label, score_nodes, + HopPathResult, NeighborDirection, TraversalMode, direct_neighbors, find_exact_nodes, find_node, + query_graph_text, sanitize_label, shortest_hop_path, }; use rmcp::model::{ CallToolRequestParams, CallToolResult, ContentBlock, ErrorData, Implementation, @@ -121,15 +123,10 @@ impl From for InvocationError { } } -#[derive(Clone, Debug, Eq, PartialEq)] -struct FileKey { - modified: Option, - size: u64, -} - #[derive(Debug)] struct GraphContext { path: PathBuf, + document: GraphDocument, graph: Graph, overlay: HashMap>, communities: BTreeMap>, @@ -139,13 +136,15 @@ struct GraphContext { } impl GraphContext { - fn load(path: &Path) -> Result { - let loaded = LoadedGraph::load_directed(path).map_err(|error| error.to_string())?; - let (typed_document, typed_graph_identity) = - match CodeGraphDocument::load_with_artifact_digest(path) { - Ok((document, identity)) => (Some(document), Some(identity)), - Err(_) => (None, None), - }; + fn load(artifact: &GraphArtifact) -> Result { + let loaded = + LoadedGraph::from_artifact_directed(artifact).map_err(|error| error.to_string())?; + let document = artifact.document().map_err(|error| error.to_string())?; + let (typed_document, typed_graph_identity) = match artifact.typed_document() { + Ok(document) => (Some(document), Some(artifact.artifact_digest())), + Err(GraphError::UnsupportedGraphSchema { found: None }) => (None, None), + Err(error) => return Err(error.to_string()), + }; let typed_query_supported = typed_document.is_some(); let mut communities = BTreeMap::>::new(); for (index, node) in loaded.graph.nodes() { @@ -158,7 +157,8 @@ impl GraphContext { } } Ok(Self { - path: path.to_path_buf(), + path: artifact.path().to_path_buf(), + document, graph: loaded.graph, overlay: loaded.overlay, communities, @@ -168,8 +168,8 @@ impl GraphContext { }) } - fn document(&self) -> Result { - GraphDocument::load(&self.path).map_err(|error| error.to_string()) + fn document(&self) -> &GraphDocument { + &self.document } fn community_ids(&self) -> Communities { @@ -190,7 +190,7 @@ impl GraphContext { #[derive(Debug)] struct CacheEntry { - key: FileKey, + key: String, context: Arc, } @@ -254,12 +254,11 @@ impl GraphStore { fn load(&self, project_path: Option<&str>) -> Result, String> { let path = self.resolve(project_path)?; - let metadata = - fs::metadata(&path).map_err(|_| format!("graph.json not found: {}", path.display()))?; - let key = FileKey { - modified: metadata.modified().ok(), - size: metadata.len(), - }; + let artifact = GraphArtifact::load(&path).map_err(|error| match error { + GraphError::NotFound(_) => format!("graph.json not found: {}", path.display()), + other => other.to_string(), + })?; + let key = artifact.artifact_digest(); if let Some(context) = self .inner .cache @@ -271,7 +270,7 @@ impl GraphStore { { return Ok(context); } - let context = Arc::new(GraphContext::load(&path)?); + let context = Arc::new(GraphContext::load(&artifact)?); self.inner .cache .lock() @@ -369,6 +368,10 @@ impl CompassMcp { pub fn invoke(&self, name: &str, mut arguments: Map) -> String { self.invoke_result(name, &mut arguments) .map(|result| { + // Keep this legacy text helper stable; MCP carries both projections. + if matches!(name, "god_nodes" | "shortest_path" | "get_neighbors") { + return result.text; + } result .structured_content .map_or(result.text, |value| value.to_string()) @@ -581,6 +584,15 @@ impl CompassMcp { if typed_query { return invoke_typed_tool(&self.store, name, arguments, &context.path, Some(&context)); } + if name == "get_neighbors" { + return invoke_neighbor_tool(arguments, &context); + } + if name == "god_nodes" { + return invoke_hub_tool(arguments, &context); + } + if name == "shortest_path" { + return invoke_path_tool(arguments, &context); + } Ok(ToolInvocation { text: invoke_tool(name, arguments, &context).map_err(InvocationError::InvalidParams)?, structured_content: None, @@ -1098,7 +1110,22 @@ fn typed_agent_query_context( } "get_node" => { let context = operand(AgentOperandRole::Source, "source", context); - operand(AgentOperandRole::Target, "target", context) + let context = operand(AgentOperandRole::Target, "target", context); + if arguments.get("calls_only").and_then(Value::as_bool) == Some(true) { + context.with_question(format!( + "call path from {} to {}", + arguments + .get("source") + .and_then(Value::as_str) + .unwrap_or_default(), + arguments + .get("target") + .and_then(Value::as_str) + .unwrap_or_default(), + )) + } else { + context + } } "explore_code" => { let mut context = context; @@ -1296,8 +1323,8 @@ fn tool_specs() -> Vec { let mut specs = vec![ tool( "search_symbols", - "Search Compass code symbols with the trusted FTS5 index.", - code_query::schema(&["query"]), + "Search Compass code symbols. Set exact=true for bounded exact ID/name candidates with optional source_file, start_line and kind filters; all matching records and truncation remain visible.", + code_query::search_schema(), ), tool( "get_callers", @@ -1322,7 +1349,7 @@ fn tool_specs() -> Vec { tool( "get_node", "Return the trusted evidence trail between two code-graph nodes.", - code_query::schema(&["source", "target"]), + code_query::trail_schema(), ), tool( "query_graph", @@ -1350,7 +1377,7 @@ fn tool_specs() -> Vec { ), tool( "get_neighbors", - "Get all direct neighbors of a node with edge details.", + "Get bounded direct neighbors with exact destination IDs, definition anchors and all matching relationship records. Directions describe stored endpoints; limit exhaustion fails explicitly.", json!({"type":"object","properties":{"label":{"type":"string"},"relation_filter":{"type":"string","description":"Optional: filter by relation type"}},"required":["label"]}), ), tool( @@ -1360,7 +1387,7 @@ fn tool_specs() -> Vec { ), tool( "god_nodes", - "Return the most connected nodes - the core abstractions of the knowledge graph.", + "Return connected hub candidates with exact IDs, source anchors, degree, node kind, and bounded incoming/outgoing relation-record counts. Connectivity is a topology observation, not proof of excessive responsibility.", json!({"type":"object","properties":{"top_n":{"type":"integer","default":10}}}), ), tool( @@ -1370,8 +1397,8 @@ fn tool_specs() -> Vec { ), tool( "shortest_path", - "Find the shortest path between two concepts in the knowledge graph.", - json!({"type":"object","properties":{"source":{"type":"string","description":"Source concept label or keyword"},"target":{"type":"string","description":"Target concept label or keyword"},"max_hops":{"type":"integer","default":8,"description":"Maximum hops to consider"}},"required":["source","target"]}), + "Find a bounded minimum-hop undirected navigation path between exact node identities. Ambiguous names require disambiguation. Structured results retain node and edge identities; equal-hop routes prefer structural relations.", + json!({"type":"object","properties":{"source":{"type":"string","description":"Source exact node ID, symbol, or qualified name"},"target":{"type":"string","description":"Target exact node ID, symbol, or qualified name"},"max_hops":{"type":"integer","minimum":0,"maximum":64,"default":8,"description":"Maximum hops explored"}},"required":["source","target"]}), ), tool( "list_prs", @@ -2209,58 +2236,105 @@ fn tool_get_neighbors( arguments: &Map, context: &GraphContext, ) -> Result { - let query = string_argument(arguments, "label")?.to_lowercase(); + invoke_neighbor_tool(arguments, context) + .map(|result| result.text) + .map_err(|error| error.to_string()) +} + +fn invoke_neighbor_tool( + arguments: &Map, + context: &GraphContext, +) -> Result { + // The compact traversal cache omits identities, occurrence anchors and + // provenance. Resolve and project against one full snapshot instead. + let mut document = context.document().clone(); + // Retain every persisted record even for legacy non-multigraph metadata. + document.multigraph = true; + let graph = Graph::from_traversal_document(document) + .map_err(|error| InvocationError::Internal(error.to_string()))?; + let query = string_argument(arguments, "label")?; let filter = optional_string(arguments, "relation_filter") .unwrap_or_default() .to_lowercase(); - let Some(&index) = find_node(&context.graph, &query).first() else { - return Ok(format!("No node matching '{query}' found.")); + let exact = find_exact_nodes(&graph, query); + let matches = if exact.is_empty() { + find_node(&graph, query) + } else { + exact + }; + let Some(&index) = matches.first() else { + return Ok(ToolInvocation { + text: format!("No node matching '{}' found.", sanitize_label(query)), + structured_content: None, + }); }; + if matches.len() > 1 { + const MAX_CANDIDATES: usize = 20; + let mut candidates = matches + .iter() + .map(|index| graph.node(*index)) + .collect::>(); + candidates.sort_by(|left, right| left.id.cmp(&right.id)); + let mut lines = vec![format!( + "Ambiguous: '{}' matches {} nodes. Retry with an exact node ID.", + sanitize_label(query), + candidates.len() + )]; + lines.extend(candidates.iter().take(MAX_CANDIDATES).map(|node| { + format!( + " {} [{}] id: {}", + sanitize_label(node.label()), + sanitize_label(&node.string("source_file")), + sanitize_label(&node.id) + ) + })); + if candidates.len() > MAX_CANDIDATES { + lines.push(format!( + "{} additional candidates omitted; narrow the symbol or source path.", + candidates.len() - MAX_CANDIDATES + )); + } + return Ok(ToolInvocation { + text: lines.join("\n"), + structured_content: None, + }); + } + let report = direct_neighbors(&graph, index, &filter) + .map_err(|error| InvocationError::InvalidParams(error.to_string()))?; let mut lines = vec![format!( "Neighbors of {}:", - sanitize_label(context.graph.node(index).label()) + sanitize_label(report.seed.label()) )]; - let mut outgoing = HashSet::new(); - for edge_index in context.graph.outgoing_edges(index) { - let edge = context.graph.edge(edge_index); - let Some(neighbor) = context.graph.node_index(&edge.target) else { + lines.push(format!(" seed id: {}", json!(report.seed.id))); + for group in &report.neighbors { + let Some(edge) = group.edges.first() else { continue; }; - if !outgoing.insert(neighbor) { - continue; - } - let relation = edge.string("relation"); - if !filter.is_empty() && !relation.to_lowercase().contains(&filter) { - continue; - } + let arrow = match group.direction { + NeighborDirection::Outgoing => "-->", + NeighborDirection::Incoming => "<--", + }; lines.push(format!( - " --> {} [{}] [{}]", - sanitize_label(context.graph.node(neighbor).label()), - sanitize_label(&relation), + " {arrow} {} [{}] [{}]", + sanitize_label(group.node.label()), + sanitize_label(&edge.string("relation")), sanitize_label(&edge.string("confidence")) )); - } - let mut incoming = HashSet::new(); - for edge_index in context.graph.incoming_edges(index) { - let edge = context.graph.edge(edge_index); - let Some(neighbor) = context.graph.node_index(&edge.source) else { - continue; - }; - if !incoming.insert(neighbor) { - continue; - } - let relation = edge.string("relation"); - if !filter.is_empty() && !relation.to_lowercase().contains(&filter) { - continue; - } lines.push(format!( - " <-- {} [{}] [{}]", - sanitize_label(context.graph.node(neighbor).label()), - sanitize_label(&relation), - sanitize_label(&edge.string("confidence")) + " id: {} | source: {} | location: {} | records: {}", + json!(group.node.id), + json!(group.node.source_file()), + json!(group.node.string("source_location")), + group.edges.len() )); } - Ok(lines.join("\n")) + let mut value = serde_json::to_value(&report) + .map_err(|error| InvocationError::Internal(error.to_string()))?; + value.sort_all_objects(); + Ok(ToolInvocation { + text: lines.join("\n"), + structured_content: Some(transport_envelope(value)?), + }) } fn tool_get_community( @@ -2302,16 +2376,103 @@ fn tool_god_nodes( arguments: &Map, context: &GraphContext, ) -> Result { + invoke_hub_tool(arguments, context) + .map(|result| result.text) + .map_err(|error| error.to_string()) +} + +fn invoke_hub_tool( + arguments: &Map, + context: &GraphContext, +) -> Result { let top_n = usize::try_from(integer_argument(arguments, "top_n", 10).max(0)).unwrap_or_default(); - let nodes = god_nodes(&context.document()?, top_n); + let document = context.document(); + let nodes = god_nodes_with_evidence(document, top_n); + let records = document + .nodes + .iter() + .map(|node| (node.id.as_str(), node)) + .collect::>(); let mut lines = vec!["God nodes (most connected):".to_owned()]; - lines.extend( - nodes.iter().enumerate().map(|(index, node)| { - format!(" {}. {} - {} edges", index + 1, node.label, node.degree) - }), - ); - Ok(lines.join("\n")) + let mut identities = Vec::with_capacity(nodes.len()); + for (index, evidence) in nodes.iter().enumerate() { + let node = &evidence.hub; + let connectivity = &evidence.connectivity; + let record = records.get(node.id.as_str()).ok_or_else(|| { + InvocationError::Internal("hub identity is absent from the selected graph".to_owned()) + })?; + let location = record.string("source_location"); + let source_location = (!location.is_empty()).then_some(location.as_str()); + lines.push(format!( + " {}. {} - {} edges", + index + 1, + sanitize_label(&node.label), + node.degree + )); + lines.push(format!( + " id: {} | source: {} | location: {}", + json!(node.id), + json!(record.source_file()), + json!(source_location) + )); + let kind = record.kind_name(); + lines.push(format!( + " kind: {} | incident records: {} | self-loops: {}", + if kind.is_empty() { + "unknown".to_owned() + } else { + sanitize_label(kind) + }, + connectivity.edge_records, + connectivity.self_loop_records + )); + for relation in &connectivity.relations { + lines.push(format!( + " relation {}: incoming {}, outgoing {}, undirected {}", + json!(relation.relation), + relation.incoming_records, + relation.outgoing_records, + relation.undirected_records + )); + } + if connectivity.omitted_relation_kinds > 0 { + lines.push(format!( + " {} additional relation kinds ({} records) omitted", + connectivity.omitted_relation_kinds, connectivity.omitted_relation_records + )); + } + if let Some(members) = &evidence.members { + lines.push(format!( + " stored members (source coverage unverified): {} methods, {} fields, {} ambiguous | own-field references: {} records, {} method-field pairs, {} methods", + members.direct_methods, + members.direct_fields, + members.ambiguous_direct_members, + members.own_field_reference_records, + members.distinct_own_field_pairs, + members.methods_touching_own_fields + )); + } + identities.push(json!({ + "rank":index + 1, "id":node.id, "label":node.label, "degree":node.degree, + "kind":record.kind_name(), "sourceFile":record.source_file(), + "sourceLocation":source_location, "startLine":record.unsigned("line_start"), + "endLine":record.unsigned("line_end"), "connectivity": connectivity, + "memberEvidence":evidence.members + })); + } + let structured = transport_envelope(json!({ + "schema":"compass.mcp.hubs/1", "ranking":if document.directed { + "distinct-directed-endpoint-degree" + } else { + "distinct-undirected-endpoint-degree" + }, + "interpretation":"topology-candidates", "requested":top_n, "nodes":identities + }))?; + Ok(ToolInvocation { + text: lines.join("\n"), + structured_content: Some(structured), + }) } fn tool_graph_stats(context: &GraphContext) -> String { @@ -2349,159 +2510,173 @@ fn python_percent(count: usize, total: usize) -> usize { } } +fn resolve_mcp_path_endpoint(graph: &Graph, query: &str, role: &str) -> Result { + let matches = find_exact_nodes(graph, query); + match matches.as_slice() { + [index] => Ok(*index), + [] => Err(format!( + "No node matching {role} '{}' found.", + sanitize_label(query) + )), + _ => { + let mut candidates = matches + .iter() + .map(|index| graph.node(*index)) + .collect::>(); + candidates.sort_by(|left, right| left.id.cmp(&right.id)); + let mut lines = vec![format!( + "Ambiguous {role}: {} matches {} nodes. Retry with an exact node ID.", + json!(query), + candidates.len() + )]; + lines.extend(candidates.iter().take(20).map(|node| { + format!( + " {} [{}] id: {}", + sanitize_label(node.label()), + sanitize_label(&node.string("source_file")), + json!(node.id) + ) + })); + if candidates.len() > 20 { + lines.push(format!( + "{} additional candidates omitted.", + candidates.len() - 20 + )); + } + Err(lines.join("\n")) + } + } +} + fn tool_shortest_path( arguments: &Map, context: &GraphContext, ) -> Result { + invoke_path_tool(arguments, context) + .map(|result| result.text) + .map_err(|error| error.to_string()) +} + +fn invoke_path_tool( + arguments: &Map, + context: &GraphContext, +) -> Result { let source_query = string_argument(arguments, "source")?; let target_query = string_argument(arguments, "target")?; - let source_scores = score_nodes( - &context.graph, - &source_query - .split_whitespace() - .map(str::to_lowercase) - .collect::>(), - false, - ); - let target_scores = score_nodes( - &context.graph, - &target_query - .split_whitespace() - .map(str::to_lowercase) - .collect::>(), - false, - ); - if source_scores.ranked.is_empty() { - return Ok(format!("No node matching source '{source_query}' found.")); - } - if target_scores.ranked.is_empty() { - return Ok(format!("No node matching target '{target_query}' found.")); - } - let source = pick_scored_endpoint(&context.graph, &source_scores.ranked, source_query); - let target = pick_scored_endpoint(&context.graph, &target_scores.ranked, target_query); - if source == target { - return Ok(format!( - "'{source_query}' and '{target_query}' both resolved to the same node '{}'. Use a more specific label or the exact node ID.", - context.graph.node(source).id - )); - } - let Some(path) = shortest_path(&context.graph, source, target) else { - return Ok(format!( - "No path found between '{}' and '{}'.", - context.graph.node(source).label(), - context.graph.node(target).label() - )); + let max_hops = match arguments.get("max_hops") { + None => 8, + Some(value) => value + .as_u64() + .or_else(|| value.as_str()?.parse().ok()) + .filter(|value| *value <= 64) + .ok_or_else(|| "max_hops must be between 0 and 64".to_owned())?, }; - let hops = path.len().saturating_sub(1); - let max_hops = - usize::try_from(integer_argument(arguments, "max_hops", 8).max(0)).unwrap_or_default(); - if hops > max_hops { - return Ok(format!( - "Path exceeds max_hops={max_hops} ({hops} hops found)." - )); - } - let mut warnings = Vec::new(); - ambiguity_warning("source", &source_scores.ranked, source, &mut warnings); - ambiguity_warning("target", &target_scores.ranked, target, &mut warnings); - let mut segments = vec![context.graph.node(path[0]).label().to_owned()]; - for pair in path.windows(2) { - let left = pair[0]; - let right = pair[1]; - if let Some(edge_index) = context.graph.edge_between(left, right) { - let edge = context.graph.edge(edge_index); - let confidence = edge.string("confidence"); - let suffix = if confidence.is_empty() { - String::new() - } else { - format!(" [{confidence}]") - }; - segments.push(format!( - "--{}{suffix}--> {}", - edge.string("relation"), - context.graph.node(right).label() - )); - } else if let Some(edge_index) = context.graph.edge_between(right, left) { - let edge = context.graph.edge(edge_index); - let confidence = edge.string("confidence"); - let suffix = if confidence.is_empty() { - String::new() - } else { - format!(" [{confidence}]") - }; - segments.push(format!( - "<--{}{suffix}-- {}", - edge.string("relation"), - context.graph.node(right).label() - )); + let max_hops = usize::try_from(max_hops).map_err(|error| error.to_string())?; + // Select and project from one full snapshot: the compact traversal cache + // omits source lines and edge IDs, including parallel-edge identities. + let mut document = context.document().clone(); + document.directed = true; + let graph = Graph::from_traversal_document(document) + .map_err(|error| InvocationError::Internal(error.to_string()))?; + let source = match resolve_mcp_path_endpoint(&graph, source_query, "source") { + Ok(index) => index, + Err(text) => { + return Ok(ToolInvocation { + text, + structured_content: None, + }); } - } - let prefix = if warnings.is_empty() { - String::new() - } else { - format!("{}\n", warnings.join("\n")) }; - Ok(format!( - "{prefix}Shortest path ({hops} hops):\n {}", - segments.join(" ") - )) -} - -fn ambiguity_warning( - name: &str, - scores: &[compass_query::ScoredNode], - chosen: NodeIndex, - warnings: &mut Vec, -) { - if scores.len() < 2 || scores[0].node != chosen || scores[0].score <= 0.0 { - return; - } - let top = scores[0].score; - let runner = scores[1].score; - if (top - runner) / top < 0.10 { - warnings.push(format!( - "warning: {name} match was ambiguous (top score {}, runner-up {})", - format_score(top), - format_score(runner) - )); - } -} - -fn format_score(value: f64) -> String { - if value.fract() == 0.0 { - format!("{value:.0}") - } else { - format!("{value:.6}") - .trim_end_matches('0') - .trim_end_matches('.') - .to_owned() + let target = match resolve_mcp_path_endpoint(&graph, target_query, "target") { + Ok(index) => index, + Err(text) => { + return Ok(ToolInvocation { + text, + structured_content: None, + }); + } + }; + if source == target { + return Ok(ToolInvocation { + text: format!( + "'{}' and '{}' both resolved to the same node {}. Use a more specific label or the exact node ID.", + sanitize_label(source_query), + sanitize_label(target_query), + json!(graph.node(source).id) + ), + structured_content: None, + }); } -} - -fn shortest_path(graph: &Graph, source: NodeIndex, target: NodeIndex) -> Option> { - let mut queue = VecDeque::from([source]); - let mut parent = HashMap::::new(); - parent.insert(source, source); - while let Some(node) = queue.pop_front() { - if node == target { - break; + let mut result = json!({"schema":"compass.mcp.path/1", "direction":"undirected", + "ranking":"hops-then-structural-cost", "maxHops":max_hops, + "source":graph.node(source).id, "target":graph.node(target).id}); + let text = match shortest_hop_path(&graph, source, target, max_hops)? { + HopPathResult::NoPath { + visited_nodes, + depth_limited, + } => { + result["status"] = json!(if depth_limited { + "depth_limit" + } else { + "disconnected" + }); + result["visitedNodes"] = json!(visited_nodes); + if depth_limited { + format!( + "No path found within max_hops={max_hops}; search stopped at the hop bound." + ) + } else { + format!( + "No path found between '{}' and '{}'.", + sanitize_label(graph.node(source).label()), + sanitize_label(graph.node(target).label()) + ) + } } - for neighbor in graph.successors(node).chain(graph.predecessors(node)) { - if let std::collections::hash_map::Entry::Vacant(entry) = parent.entry(neighbor) { - entry.insert(node); - queue.push_back(neighbor); + HopPathResult::Found { nodes, edges } => { + let hops = edges.len(); + result["status"] = json!("found"); + result["hops"] = json!(hops); + result["nodes"] = json!(nodes.iter().map(|index| { + let node = graph.node(*index); + json!({"id":node.id,"label":node.label(),"sourceFile":node.source_file(), + "startLine":node.unsigned("line_start"),"sourceLocation":node.string("source_location")}) + }).collect::>()); + let mut steps = Vec::with_capacity(edges.len()); + let mut segments = vec![sanitize_label(graph.node(source).label())]; + for (pair, edge_index) in nodes.windows(2).zip(edges) { + let edge = graph.edge(edge_index); + let forward = edge.source == graph.node(pair[0]).id; + let relation = edge.string("relation"); + let relation = if relation.is_empty() { + "related" + } else { + &relation + }; + let confidence = edge.string("confidence"); + let suffix = if confidence.is_empty() { + String::new() + } else { + format!(" [{}]", sanitize_label(&confidence)) + }; + let next = sanitize_label(graph.node(pair[1]).label()); + segments.push(if forward { + format!("--{}{suffix}--> {next}", sanitize_label(relation)) + } else { + format!("<--{}{suffix}-- {next}", sanitize_label(relation)) + }); + steps.push(json!({"from":graph.node(pair[0]).id,"to":graph.node(pair[1]).id, + "source":edge.source,"target":edge.target,"edgeId":edge.attributes.get("id"), + "relation":relation,"confidence":confidence,"direction":if forward {"forward"} else {"reverse"}})); } + result["steps"] = json!(steps); + format!("Shortest path ({hops} hops):\n {}", segments.join(" ")) } - } - if !parent.contains_key(&target) { - return None; - } - let mut path = vec![target]; - while path.last().copied() != Some(source) { - let next = parent.get(path.last()?).copied()?; - path.push(next); - } - path.reverse(); - Some(path) + }; + Ok(ToolInvocation { + text, + structured_content: Some(transport_envelope(result)?), + }) } fn tool_list_prs(arguments: &Map) -> Result { @@ -2553,8 +2728,8 @@ fn tool_get_pr_impact( "PR #{number}: no changed files found (may require gh auth)." )); } - let document = context.document()?; - let (communities, nodes) = compute_pr_impact(&files, &document); + let document = context.document(); + let (communities, nodes) = compute_pr_impact(&files, document); let ci = parse_ci( data.get("statusCheckRollup") .and_then(Value::as_array) @@ -2620,11 +2795,11 @@ fn tool_triage_prs( if actionable.is_empty() { return Ok(format!("No actionable PRs targeting {base}.")); } - let document = context.document()?; + let document = context.document(); for pr in &mut actionable { let files = fetch_pr_files(&runner, pr.number, repo); if !files.is_empty() { - (pr.communities_touched, pr.nodes_affected) = compute_pr_impact(&files, &document); + (pr.communities_touched, pr.nodes_affected) = compute_pr_impact(&files, document); pr.files_changed = files; } } @@ -2695,8 +2870,8 @@ fn read_resource_text(uri: &str, context: &GraphContext) -> Result { - let document = context.document().map_err(InvocationError::InvalidParams)?; - let surprises = surprising_connections(&document, &context.community_ids(), 10); + let document = context.document(); + let surprises = surprising_connections(document, &context.community_ids(), 10); if surprises.is_empty() { return Ok("No surprising connections found.".to_owned()); } @@ -2728,7 +2903,7 @@ fn read_resource_text(uri: &str, context: &GraphContext) -> Result { - let document = context.document().map_err(InvocationError::InvalidParams)?; + let document = context.document(); let labels_path = context .path .parent() @@ -2744,7 +2919,7 @@ fn read_resource_text(uri: &str, context: &GraphContext) -> Result Result { - let document = context.document().map_err(InvocationError::InvalidParams)?; + let document = context.document(); let labels_path = context .path .parent() @@ -2775,7 +2950,7 @@ fn read_resource_text(uri: &str, context: &GraphContext) -> Result Result { mod tests { use super::*; + #[test] + fn mcp_paths_require_unique_exact_endpoints() -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let path = temp.path().join("graph.json"); + fs::write( + &path, + serde_json::to_vec(&json!({ + "directed":true,"multigraph":true, + "nodes":[ + {"id":"MiXeD","label":"run()","qualified_name":"First.run","source":{"file":"a.rs","startLine":9}}, + {"id":"b","label":"run()","qualified_name":"Second.run","source_file":"b.rs"}, + {"id":"target","label":"Finish","source_file":"target.rs"} + ], + "links":[ + {"id":"edge-b","source":"MiXeD","target":"target","relation":"calls"}, + {"id":"edge-a","source":"MiXeD","target":"target","relation":"calls"} + ] + }))?, + )?; + let server = CompassMcp::new(&path); + for (source, target, role) in [("run", "target", "source"), ("target", "run", "target")] { + let text = server.invoke( + "shortest_path", + Map::from_iter([ + ("source".into(), json!(source)), + ("target".into(), json!(target)), + ]), + ); + assert!(text.contains(&format!("Ambiguous {role}")), "{text}"); + assert!(text.contains("MiXeD") && text.contains("b.rs"), "{text}"); + assert!(!text.contains("Shortest path"), "{text}"); + } + for source in ["MiXeD", "First.run"] { + let text = server.invoke( + "shortest_path", + Map::from_iter([ + ("source".into(), json!(source)), + ("target".into(), json!("target")), + ]), + ); + assert!(text.contains("Shortest path (1 hops)"), "{text}"); + } + let missing = server.invoke( + "shortest_path", + Map::from_iter([ + ("source".into(), json!("ru")), + ("target".into(), json!("target")), + ]), + ); + assert!(missing.contains("No node matching source"), "{missing}"); + for (hops, status) in [(0, "depth_limit"), (1, "found")] { + let result = server + .invoke_result( + "shortest_path", + &mut Map::from_iter([ + ("source".into(), json!("MiXeD")), + ("target".into(), json!("target")), + ("max_hops".into(), json!(hops)), + ]), + ) + .map_err(|error| error.to_string())?; + let content = result.structured_content.ok_or("missing path identity")?; + assert_eq!(content["result"]["status"], status); + assert_eq!(content["result"]["source"], "MiXeD"); + if hops == 1 { + assert_eq!(content["result"]["nodes"][0]["id"], "MiXeD"); + assert_eq!(content["result"]["nodes"][0]["startLine"], 9); + assert_eq!(content["result"]["steps"][0]["target"], "target"); + assert_eq!(content["result"]["steps"][0]["edgeId"], "edge-a"); + } + } + let invalid = server.invoke_result( + "shortest_path", + &mut Map::from_iter([ + ("source".into(), json!("MiXeD")), + ("target".into(), json!("target")), + ("max_hops".into(), json!(65)), + ]), + ); + assert!(invalid.is_err()); + Ok(()) + } + + #[test] + fn hub_evidence_does_not_invent_direction_for_undirected_graphs() + -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let path = temp.path().join("graph.json"); + fs::write( + &path, + serde_json::to_vec(&json!({"directed":false, + "nodes":[{"id":"a","label":"A","source_file":"a.rs"}, + {"id":"b","label":"B","source_file":"b.rs"}], + "links":[{"source":"a","target":"b","relation":"calls"}]}))?, + )?; + let result = CompassMcp::new(path) + .invoke_result("god_nodes", &mut Map::new()) + .map_err(|error| error.to_string())?; + let content = result.structured_content.ok_or("missing hubs")?; + assert_eq!( + content["result"]["ranking"], + "distinct-undirected-endpoint-degree" + ); + let row = &content["result"]["nodes"][0]["connectivity"]["relations"][0]; + assert_eq!(row["incomingRecords"], 0); + assert_eq!(row["outgoingRecords"], 0); + assert_eq!(row["undirectedRecords"], 1); + Ok(()) + } + + #[test] + fn hub_results_preserve_exact_identity_and_source_anchors() + -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let path = temp.path().join("graph.json"); + let unusual_id = "A\"\\\n"; + fs::write( + &path, + serde_json::to_vec(&json!({ + "directed":true, + "nodes":[ + {"id":unusual_id,"name":"run()","kind":"function", + "source":{"file":"src/a.rs","startLine":7,"endLine":9}}, + {"id":"b","name":"run()","kind":"function", + "source":{"file":"src/b.rs","startLine":12}}, + {"id":"legacy","label":"Legacy","source_file":"legacy.rs", + "source_location":"L20"} + ], + "links":[{"source":unusual_id,"target":"b","kind":"calls"}, + {"source":"legacy","target":"b","relation":"calls"}] + }))?, + )?; + let server = CompassMcp::new(&path); + let output = server + .invoke_result("god_nodes", &mut Map::new()) + .map_err(|error| error.to_string())?; + let content = output + .structured_content + .ok_or("missing structured hub identities")?; + assert_eq!(content["schema"], MCP_TOOL_RESULT_SCHEMA); + assert_eq!(content["transportTruncation"]["truncated"], false); + assert_eq!(content["result"]["schema"], "compass.mcp.hubs/1"); + let nodes = content["result"]["nodes"] + .as_array() + .ok_or("missing hub nodes")?; + assert_eq!(nodes.len(), 3); + assert_eq!(nodes[0]["id"], "b"); + assert_eq!(nodes[0]["degree"], 2); + assert_eq!( + nodes[0]["connectivity"]["schema"], + "compass.hub-connectivity/1" + ); + assert_eq!(nodes[0]["connectivity"]["edgeRecords"], 2); + assert_eq!( + nodes[0]["connectivity"]["relations"][0]["incomingRecords"], + 2 + ); + assert_eq!( + nodes[0]["connectivity"]["relations"][0]["outgoingRecords"], + 0 + ); + let unusual = nodes + .iter() + .find(|node| node["id"] == unusual_id) + .ok_or("lost exact ID")?; + assert_eq!(unusual["sourceFile"], "src/a.rs"); + assert_eq!(unusual["startLine"], 7); + assert_eq!(unusual["endLine"], 9); + let legacy = nodes + .iter() + .find(|node| node["id"] == "legacy") + .ok_or("lost legacy hub")?; + assert_eq!(legacy["sourceLocation"], "L20"); + assert_eq!(legacy["startLine"], Value::Null); + assert!(output.text.contains(&format!("id: {}", json!(unusual_id)))); + assert!(!output.text.contains(unusual_id)); + for node in nodes { + let id = node["id"].as_str().ok_or("ID not a string")?; + let neighbors = server.invoke( + "get_neighbors", + Map::from_iter([("label".into(), json!(id))]), + ); + assert!(neighbors.starts_with("Neighbors of "), "{neighbors}"); + } + Ok(()) + } + + #[test] + fn hub_results_expose_stored_class_members_without_changing_ranks() + -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let path = temp.path().join("graph.json"); + fs::write( + &path, + serde_json::to_vec(&json!({ + "directed":true, + "nodes":[ + {"id":"class","kind":"class","name":"Service", + "source":{"file":"src/service.rs","startLine":1}}, + {"id":"method","kind":"method","name":".run()", + "source":{"file":"src/service.rs","startLine":2}}, + {"id":"field","kind":"field","name":"value", + "source":{"file":"src/service.rs","startLine":3}} + ], + "links":[ + {"source":"class","target":"method","kind":"contains"}, + {"source":"class","target":"field","kind":"contains"}, + {"source":"method","target":"field","kind":"references"} + ] + }))?, + )?; + let output = CompassMcp::new(path) + .invoke_result("god_nodes", &mut Map::new()) + .map_err(|error| error.to_string())?; + let content = output.structured_content.ok_or("missing hub result")?; + let rows = content["result"]["nodes"] + .as_array() + .ok_or("missing hub rows")?; + let class = rows + .iter() + .find(|row| row["id"] == "class") + .ok_or("missing class")?; + assert_eq!(class["rank"], 1); + assert_eq!(class["degree"], 2); + assert_eq!(class["memberEvidence"]["schema"], "compass.hub-members/1"); + assert_eq!(class["memberEvidence"]["sourceCoverage"], "unverified"); + assert_eq!(class["memberEvidence"]["directMethods"], 1); + assert_eq!(class["memberEvidence"]["directFields"], 1); + assert_eq!(class["memberEvidence"]["ownFieldReferenceRecords"], 1); + assert_eq!(class["memberEvidence"]["distinctOwnFieldPairs"], 1); + assert_eq!(class["memberEvidence"]["methodsTouchingOwnFields"], 1); + let method = rows + .iter() + .find(|row| row["id"] == "method") + .ok_or("missing method")?; + assert!(method["memberEvidence"].is_null()); + assert!( + output + .text + .contains("stored members (source coverage unverified): 1 methods, 1 fields") + ); + Ok(()) + } + + #[test] + fn mcp_neighbors_expose_exact_destinations_and_full_relationship_records() + -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let path = temp.path().join("neighbors.json"); + let unusual_id = "close\n\"second\""; + fs::write( + &path, + serde_json::to_vec(&json!({ + "directed":true, "multigraph":false, + "nodes":[ + {"id":"seed","label":"run()"}, + {"id":"first","label":"close()","source":{"file":"a.rs","startLine":10}}, + {"id":unusual_id,"label":"close()","source_file":"b.rs","source_location":"L20"} + ], + "links":[ + {"id":"call-1","source":"seed","target":"first","relation":"calls","relationshipSite":{"file":"caller.rs","startLine":3},"evidence":[{"origin":"ast","rule":"fixture"}]}, + {"id":"call-2","source":"seed","target":"first","relation":"calls","relationshipSite":{"file":"caller.rs","startLine":4}}, + {"source":"seed","target":unusual_id,"relation":"calls"}, + {"source":"seed","target":"first","relation":"contains"} + ] + }))?, + )?; + let server = CompassMcp::new(&path); + let result = server + .invoke_result( + "get_neighbors", + &mut json!({"label":"seed","relation_filter":"calls"}) + .as_object() + .ok_or("args")? + .clone(), + ) + .map_err(|e| e.to_string())?; + assert!(result.text.starts_with("Neighbors of run():\n")); + assert_eq!(result.text.matches("--> close() [calls]").count(), 2); + assert!(result.text.contains(&format!("id: {}", json!(unusual_id)))); + assert!(!result.text.contains(unusual_id)); + let body = result.structured_content.ok_or("missing identity")?["result"].clone(); + assert_eq!(body["schema"], "compass.query.neighbors/1"); + assert_eq!(body["seed"]["id"], "seed"); + assert_eq!(body["truncated"], false); + let rows = body["neighbors"].as_array().ok_or("neighbors")?; + assert_eq!(rows.len(), 2); + let first = rows + .iter() + .find(|r| r["node"]["id"] == "first") + .ok_or("first")?; + assert_eq!(first["direction"], "outgoing"); + assert_eq!(first["node"]["source"]["startLine"], 10); + assert_eq!(first["edges"].as_array().ok_or("edges")?.len(), 2); + assert_eq!(first["edges"][0]["evidence"][0]["rule"], "fixture"); + assert_eq!(first["edges"][1]["relationshipSite"]["startLine"], 4); + let other = rows + .iter() + .find(|r| r["node"]["id"] == unusual_id) + .ok_or("other")?; + assert!(other["edges"][0].get("id").is_none()); + Ok(()) + } + + #[test] + fn mcp_neighbor_limit_is_an_error_not_empty_success() -> Result<(), Box> + { + let temp = tempfile::tempdir()?; + let path = temp.path().join("bounded.json"); + fs::write( + &path, + serde_json::to_vec( + &json!({"nodes":[{"id":"a","label":"Alpha","extra":"x".repeat(compass_query::MAX_NEIGHBOR_RESPONSE_BYTES)}],"links":[]}), + )?, + )?; + let result = CompassMcp::new(&path).invoke_result( + "get_neighbors", + &mut json!({"label":"a"}).as_object().ok_or("args")?.clone(), + ); + assert!( + matches!(result,Err(InvocationError::InvalidParams(message)) if message.contains("byte limit")) + ); + Ok(()) + } + + #[test] + fn mcp_neighbor_filter_precedes_neighbor_grouping() -> Result<(), Box> { + let temp = tempfile::tempdir()?; + for reverse in [false, true] { + let path = temp.path().join(format!("graph-{reverse}.json")); + let mut links = vec![ + json!({"source":"a","target":"b","relation":"contains"}), + json!({"source":"a","target":"b","relation":"calls"}), + json!({"source":"a","target":"b","relation":"calls"}), + ]; + if reverse { + links.reverse(); + } + fs::write( + &path, + serde_json::to_vec(&json!({ + "directed":true,"multigraph":true, + "nodes":[{"id":"a","label":"Alpha"},{"id":"b","label":"Beta"}], + "links":links + }))?, + )?; + let server = CompassMcp::new(&path); + for (id, expected) in [("a", "--> Beta [calls]"), ("b", "<-- Alpha [calls]")] { + let output = server.invoke( + "get_neighbors", + json!({"label":id,"relation_filter":"calls"}) + .as_object() + .ok_or("args")? + .clone(), + ); + assert_eq!(output.matches(expected).count(), 1, "{output}"); + assert!(!output.contains("[contains]")); + } + } + Ok(()) + } + + #[test] + fn mcp_reports_stored_typed_communities() -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let path = temp.path().join("graph.json"); + fs::write( + &path, + r#"{"nodes":[ + {"id":"a","name":"Alpha","kind":"function","community":{"id":2,"label":"Core"},"source":{"file":"a.rs","startLine":1}}, + {"id":"b","name":"Beta","kind":"function","community":{"id":2,"label":"Core"},"source":{"file":"b.rs","startLine":1}}],"links":[]}"#, + )?; + let server = CompassMcp::new(&path); + assert!( + server + .invoke("graph_stats", Map::new()) + .contains("Communities: 1") + ); + let members = server.invoke( + "get_community", + json!({"community_id":2}).as_object().ok_or("args")?.clone(), + ); + assert!(members.contains("Core (2 nodes)"), "{members}"); + assert!(members.contains("Alpha [a.rs]")); + assert!(members.contains("Beta [b.rs]")); + Ok(()) + } + + #[test] + fn mcp_neighbors_prefer_exact_symbols_to_broader_names() + -> Result<(), Box> { + let temp = tempfile::tempdir()?; + for typed in [false, true] { + let path = temp.path().join(format!("exact-{typed}.json")); + let mut nodes = vec![ + json!({"id":"WidthID","label":"term_len()","qualifiedName":"Compat.term_len"}), + json!({"id":"width-test","label":"test_term_len()"}), + json!({"id":"request","label":"RequestID()"}), + json!({"id":"next-request","label":"NextRequestID()"}), + json!({"id":"follow","label":".follow()"}), + json!({"id":"follow-links","label":".follow_links()"}), + json!({"id":"callee","label":"Collaborator"}), + ]; + if typed { + for node in &mut nodes { + node["name"] = node["label"].clone(); + node.as_object_mut().ok_or("node")?.remove("label"); + node["kind"] = json!("function"); + node["source"] = json!({"file":"lib.rs","startLine":1}); + } + } + fs::write( + &path, + serde_json::to_vec(&json!({ + "directed":true,"nodes":nodes,"links":[ + {"source":"WidthID","target":"callee","relation":"calls"}, + {"source":"request","target":"callee","relation":"calls"}, + {"source":"follow","target":"callee","relation":"calls"} + ] + }))?, + )?; + let server = CompassMcp::new(&path); + for query in [ + "term_len()", + "term_len", + "Compat.term_len", + "WidthID", + " WidthID ", + "REQUESTID()", + ".follow()", + ] { + let output = server.invoke( + "get_neighbors", + json!({"label":query,"relation_filter":"calls"}) + .as_object() + .ok_or("args")? + .clone(), + ); + assert!( + output.starts_with("Neighbors of "), + "typed={typed} {query}: {output}" + ); + assert!(output.contains("--> Collaborator [calls]"), "{output}"); + } + } + Ok(()) + } + + #[test] + fn mcp_neighbors_preserve_all_exact_collisions_before_fuzzy_fallback() + -> Result<(), Box> { + let temp = tempfile::tempdir()?; + for reverse in [false, true] { + let path = temp.path().join(format!("collisions-{reverse}.json")); + let mut nodes = (0..22) + .map(|n| { + json!({"id":format!("exact-{n:02}"), + "label":"run()","source_file":format!("src/{n}.rs")}) + }) + .collect::>(); + nodes.push(json!({"id":"fuzzy","label":"runLater()"})); + if reverse { + nodes.reverse(); + } + fs::write( + &path, + serde_json::to_vec(&json!({"nodes":nodes,"links":[]}))?, + )?; + let server = CompassMcp::new(&path); + let output = server.invoke( + "get_neighbors", + json!({"label":"run"}).as_object().ok_or("args")?.clone(), + ); + assert!( + output.starts_with("Ambiguous: 'run' matches 22 nodes."), + "{output}" + ); + assert!( + output.contains("2 additional candidates omitted"), + "{output}" + ); + assert!(!output.contains("fuzzy") && !output.contains("Neighbors of")); + let candidates = output + .lines() + .filter(|line| line.starts_with(" ")) + .collect::>(); + assert_eq!(candidates.len(), 20); + for (n, line) in candidates.iter().enumerate() { + assert!(line.ends_with(&format!("id: exact-{n:02}")), "{line}"); + } + } + Ok(()) + } + + #[test] + fn mcp_neighbors_keep_unique_and_ambiguous_fuzzy_fallbacks() + -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let path = temp.path().join("fallback.json"); + fs::write( + &path, + serde_json::to_vec(&json!({"nodes":[ + {"id":"a","label":"UniqueHandle()"},{"id":"b","label":"SharedAlpha()"}, + {"id":"c","label":"SharedBeta()"}],"links":[]}))?, + )?; + let server = CompassMcp::new(&path); + for (query, expected) in [ + ("Unique", "Neighbors of UniqueHandle():"), + ("Shared", "Ambiguous: 'Shared' matches 2 nodes."), + ("Missing", "No node matching 'Missing' found."), + ] { + let output = server.invoke( + "get_neighbors", + json!({"label":query}).as_object().ok_or("args")?.clone(), + ); + assert!(output.starts_with(expected), "{output}"); + } + Ok(()) + } + + #[test] + fn mcp_neighbors_require_unique_identity() -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let path = temp.path().join("graph.json"); + fs::write( + &path, + r#"{"directed":true,"nodes":[ + {"id":"A","label":"run()","qualifiedName":"First.run","source_file":"first.rs"}, + {"id":"b","label":"run()","qualifiedName":"Second.run","source_file":"second.rs"}, + {"id":"c","label":"OnlyFirst"}],"links":[{"source":"A","target":"c","relation":"calls"}]}"#, + )?; + let server = CompassMcp::new(&path); + let ambiguous = server.invoke( + "get_neighbors", + json!({"label":"run"}).as_object().ok_or("args")?.clone(), + ); + assert!(ambiguous.contains("Ambiguous"), "{ambiguous}"); + assert!(!ambiguous.contains("-->")); + assert!(ambiguous.contains("first.rs") && ambiguous.contains("second.rs")); + for exact in ["A", "First.run"] { + let output = server.invoke( + "get_neighbors", + json!({"label":exact}).as_object().ok_or("args")?.clone(), + ); + assert!(output.contains("--> OnlyFirst"), "{exact}: {output}"); + } + Ok(()) + } + #[test] fn invocation_errors_preserve_json_rpc_taxonomy() { assert_eq!( @@ -3185,6 +3909,88 @@ mod tests { Ok(()) } + #[test] + fn god_nodes_tool_keeps_project_names_and_orders_equal_degrees_by_id() + -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let graph = temp.path().join("graph.json"); + fs::write( + &graph, + serde_json::to_vec(&json!({ + "directed": true, + "nodes": [ + {"id":"z", "label":"Path", "source_file":"src/path.rs"}, + {"id":"a", "label":"Counter", "source_file":"src/counter.rs"}, + {"id":"isolated", "label":"Unused", "source_file":"src/unused.rs"} + ], + "links": [{"source":"z", "target":"a", "relation":"uses"}] + }))?, + )?; + let server = CompassMcp::new(&graph); + assert_eq!( + server.invoke("god_nodes", Map::new()), + "God nodes (most connected):\n 1. Counter - 1 edges\n id: \"a\" | source: \"src/counter.rs\" | location: null\n kind: symbol | incident records: 1 | self-loops: 0\n relation \"uses\": incoming 1, outgoing 0, undirected 0\n 2. Path - 1 edges\n id: \"z\" | source: \"src/path.rs\" | location: null\n kind: symbol | incident records: 1 | self-loops: 0\n relation \"uses\": incoming 0, outgoing 1, undirected 0" + ); + let arguments = Map::from_iter([("top_n".to_owned(), json!(1))]); + assert_eq!( + server.invoke("god_nodes", arguments), + "God nodes (most connected):\n 1. Counter - 1 edges\n id: \"a\" | source: \"src/counter.rs\" | location: null\n kind: symbol | incident records: 1 | self-loops: 0\n relation \"uses\": incoming 1, outgoing 0, undirected 0" + ); + Ok(()) + } + + #[test] + fn god_nodes_tool_respects_explicit_method_and_file_kinds() + -> Result<(), Box> { + let temp = tempfile::tempdir()?; + let graph = temp.path().join("graph.json"); + fs::write( + &graph, + serde_json::to_vec(&json!({ + "directed": true, + "nodes": [ + {"id":"method", "kind":"method", "name":".dispatch()", + "source":{"file":"src/service.rs", "startLine":5}}, + {"id":"file", "kind":"file", "name":"Service implementation", + "source":{"file":"src/service.rs", "startLine":1}} + ], + "links": [{"source":"file", "target":"method", "relation":"contains"}] + }))?, + )?; + let server = CompassMcp::new(&graph); + assert_eq!( + server.invoke("god_nodes", Map::new()), + "God nodes (most connected):\n 1. .dispatch() - 1 edges\n id: \"method\" | source: \"src/service.rs\" | location: \"L5\"\n kind: method | incident records: 1 | self-loops: 0\n relation \"contains\": incoming 1, outgoing 0, undirected 0" + ); + Ok(()) + } + + #[test] + fn god_nodes_tool_retains_extensionless_typed_source() -> Result<(), Box> + { + let temp = tempfile::tempdir()?; + let graph = temp.path().join("graph.json"); + fs::write( + &graph, + serde_json::to_vec(&json!({ + "directed": true, + "nodes": [ + {"id":"prepare", "kind":"function", "name":"prepare()", + "source":{"file":"bin/launch", "startLine":2}}, + {"id":"helper", "kind":"function", "name":"helper()", + "source":{"file":"src/support.sh", "startLine":1}} + ], + "links": [{"source":"prepare", "target":"helper", "relation":"calls"}] + }))?, + )?; + let server = CompassMcp::new(&graph); + assert_eq!( + server.invoke("god_nodes", Map::new()), + "God nodes (most connected):\n 1. helper() - 1 edges\n id: \"helper\" | source: \"src/support.sh\" | location: \"L1\"\n kind: function | incident records: 1 | self-loops: 0\n relation \"calls\": incoming 1, outgoing 0, undirected 0\n 2. prepare() - 1 edges\n id: \"prepare\" | source: \"bin/launch\" | location: \"L2\"\n kind: function | incident records: 1 | self-loops: 0\n relation \"calls\": incoming 0, outgoing 1, undirected 0" + ); + Ok(()) + } + #[test] fn every_local_tool_and_resource_handles_success_missing_and_filter_shapes() -> Result<(), Box> { @@ -3252,7 +4058,7 @@ mod tests { "shortest_path", json!({"source":"Alpha","target":"Gamma","max_hops":0}) ) - .contains("exceeds max_hops") + .contains("within max_hops") ); assert!( invoke("shortest_path", json!({"source":"Delta","target":"Alpha"})) @@ -3277,6 +4083,62 @@ mod tests { Ok(()) } + #[test] + fn graph_store_reloads_preserved_metadata_and_keeps_each_context_coherent() + -> Result<(), Box> { + for disk_cache in [false, true] { + for atomic in [false, true] { + let temp = tempfile::tempdir()?; + let path = temp.path().join("graph.json"); + if disk_cache { + fs::create_dir(temp.path().join("cache"))?; + } + let before = r#"{"directed":true,"nodes":[{"id":"a","label":"Alpha","kind":"function","source_file":"a.rs","community":1},{"id":"b","label":"Beta","kind":"function","source_file":"b.rs","community":1}],"links":[{"source":"a","target":"b","relation":"calls"}]}"#; + let after = before.replace("Alpha", "Omega").replace("Beta", "Zeta"); + assert_eq!(before.len(), after.len()); + fs::write(&path, before)?; + let modified = path.metadata()?.modified()?; + let store = GraphStore::new(&path); + let first = store.load(None)?; + assert_eq!(first.document().nodes[0].label(), "Alpha"); + if atomic { + let mut replacement = tempfile::NamedTempFile::new_in(temp.path())?; + replacement.write_all(after.as_bytes())?; + replacement + .as_file() + .set_times(std::fs::FileTimes::new().set_modified(modified))?; + replacement.persist(&path)?; + } else { + fs::write(&path, &after)?; + fs::File::options() + .write(true) + .open(&path)? + .set_times(std::fs::FileTimes::new().set_modified(modified))?; + } + assert_eq!(path.metadata()?.modified()?, modified); + let changed = store.load(None)?; + assert!( + !Arc::ptr_eq(&first, &changed), + "disk_cache={disk_cache}, atomic={atomic}" + ); + assert_eq!(changed.document().nodes[0].label(), "Omega"); + assert_eq!(changed.graph.node(0).label(), "Omega"); + assert!(tool_god_nodes(&Map::new(), &changed)?.contains("Omega")); + let fresh = GraphStore::new(&path).load(None)?; + assert_eq!(fresh.graph.node(0).label(), "Omega"); + // A request already holding a context keeps one immutable graph view. + assert_eq!(first.document().nodes[0].label(), "Alpha"); + fs::write(&path, vec![b'!'; before.len()])?; + fs::File::options() + .write(true) + .open(&path)? + .set_times(std::fs::FileTimes::new().set_modified(modified))?; + assert!(store.load(None).is_err()); + } + } + Ok(()) + } + #[test] fn graph_store_cache_reload_missing_graph_and_pure_helpers_are_total() -> Result<(), Box> { @@ -3325,8 +4187,6 @@ mod tests { expand_home(Path::new("plain/path")), PathBuf::from("plain/path") ); - assert_eq!(format_score(2.0), "2"); - assert_eq!(format_score(1.234_567_89), "1.234568"); assert_eq!(python_percent(1, 3), 33); assert_eq!(python_percent(2, 3), 67); for (index, status) in [ @@ -3389,39 +4249,6 @@ mod tests { "Unknown tool: not-real" ); - let a = context.graph.node_index("a").ok_or("node a")?; - let b = context.graph.node_index("b").ok_or("node b")?; - let c = context.graph.node_index("c").ok_or("node c")?; - assert_eq!(shortest_path(&context.graph, a, a), Some(vec![a])); - assert_eq!(shortest_path(&context.graph, c, a), Some(vec![c, b, a])); - let mut warnings = Vec::new(); - ambiguity_warning( - "source", - &[ - compass_query::ScoredNode { - score: 10.0, - node: a, - }, - compass_query::ScoredNode { - score: 9.5, - node: b, - }, - ], - a, - &mut warnings, - ); - assert_eq!(warnings.len(), 1); - ambiguity_warning( - "source", - &[compass_query::ScoredNode { - score: 0.0, - node: a, - }], - a, - &mut warnings, - ); - assert_eq!(warnings.len(), 1); - let reverse = tool_shortest_path( json!({"source":"Tail","target":"Twin"}) .as_object() @@ -3429,12 +4256,13 @@ mod tests { &context, )?; assert!(reverse.contains("<--uses")); - assert!(reverse.contains("<----")); + assert!(reverse.contains("<--related--")); assert!(expand_home(Path::new("~/compass-cache")).ends_with("compass-cache")); fs::write(&graph_path, "not json")?; - assert!(context.document().is_err()); - assert!(tool_god_nodes(&Map::new(), &context).is_err()); + assert!(store.load(None).is_err()); + assert_eq!(context.document().nodes.len(), 3); + assert!(tool_god_nodes(&Map::new(), &context).is_ok()); Ok(()) } } diff --git a/crates/compass-mcp/tests/code_query_tools.rs b/crates/compass-mcp/tests/code_query_tools.rs index 0eea869a8..de644f5b1 100644 --- a/crates/compass-mcp/tests/code_query_tools.rs +++ b/crates/compass-mcp/tests/code_query_tools.rs @@ -175,7 +175,8 @@ fn invoke(server: &CompassMcp, name: &str, arguments: Value) -> Result(&output)?; + let envelope = serde_json::from_str::(&output) + .map_err(|error| format!("invalid {name} response: {error}: {output}"))?; assert_eq!(envelope["schema"], "compass.mcp.tool-result/1"); assert_eq!(envelope["transportTruncation"]["truncated"], false); Ok(envelope["result"].clone()) @@ -651,7 +652,7 @@ async fn mcp_code_queries_publish_structured_content_and_protocol_errors() .iter() .find_map(|content| content.as_text().map(|text| text.text.clone())) .ok_or("missing MCP text content")?; - assert!(text.starts_with("RESULT\n")); + assert!(text.starts_with("RESULT "), "{text}"); assert!(text.contains("ANSWER\n")); let structured = response .structured_content @@ -662,6 +663,9 @@ async fn mcp_code_queries_publish_structured_content_and_protocol_errors() "compass.query.agent-view/1" ); assert_eq!(structured["result"]["schema"], "compass.query/1"); + let agent_view: compass_output::AgentQueryView = + serde_json::from_value(structured["agentView"].clone())?; + assert_eq!(text, compass_output::render_agent_query_text(&agent_view)?); assert!( client .call_tool(CallToolRequestParams::new("search_symbols")) @@ -672,3 +676,255 @@ async fn mcp_code_queries_publish_structured_content_and_protocol_errors() server_task.await?.map_err(std::io::Error::other)?; Ok(()) } + +#[test] +fn exact_symbol_tool_preserves_filters_and_rejects_incomplete_requests() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = write_typed_graph(directory.path())?; + let mut graph = GraphDocument::load(&path)?; + let target = graph + .nodes + .iter() + .find(|n| n.name == "Target") + .ok_or("target")? + .clone(); + let source = target.source.as_ref().ok_or("source")?; + let mut export = target.clone(); + export.id = "export:target".to_owned(); + export.kind = NodeKind::Export; + graph.nodes.push(export); + fs::write(&path, serde_json::to_vec(&graph)?)?; + let server = CompassMcp::new(path); + let result = invoke( + &server, + "search_symbols", + json!({"query":"Target", "exact":true, "source_file":source.file, "start_line":source.start_line,"kind":"function"}), + )?; + assert_eq!(result["truncated"], false); + assert_eq!(result["results"].as_array().ok_or("results")?.len(), 1); + assert_eq!(result["results"][0]["nodeId"], target.id); + let ambiguity = invoke( + &server, + "search_symbols", + json!({"query":"Target", "exact":true}), + )?; + assert_eq!(ambiguity["results"].as_array().ok_or("results")?.len(), 2); + let bounded = invoke( + &server, + "search_symbols", + json!({"query":"Target", "exact":true,"max_candidates":1,"kind":"class"}), + )?; + assert_eq!(bounded["truncated"], true); + assert_eq!(bounded["results"], json!([])); + for args in [ + json!({"query":"Target","kind":"function"}), + json!({"query":"Target","exact":"true"}), + json!({"query":"Target","exact":true,"start_line":1}), + json!({"query":"Target","exact":true,"source_file":null}), + json!({"query":"Target","exact":true,"kind":"unknown"}), + json!({"query":"Target","exact":true,"source_file":"src/lib.rs","start_line":0}), + ] { + let output = server.invoke("search_symbols", args.as_object().ok_or("args")?.clone()); + assert!( + output.starts_with("Error executing search_symbols:"), + "{output}" + ); + assert!( + !output.contains("\"schema\":\"compass.query/1\""), + "{output}" + ); + } + Ok(()) +} + +#[test] +fn calls_only_mcp_policy_is_scoped_boolean_and_excludes_structural_routes() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = write_typed_graph(directory.path())?; + let server = CompassMcp::new(path.clone()); + let calls = invoke( + &server, + "get_node", + json!({"source":"Caller","target":"Target","calls_only":true}), + )?; + assert_eq!(calls["paths"].as_array().ok_or("paths")?.len(), 1); + assert_eq!(calls["edges"][0]["kind"], "calls"); + let mut graph = GraphDocument::load(&path)?; + let edge = graph.links.first_mut().ok_or("edge")?; + edge.kind = EdgeKind::Contains; + edge.id = edge_id( + &edge.source, + edge.kind, + &edge.target, + edge.relationship_site.as_ref(), + None, + ); + edge.key.clone_from(&edge.id); + fs::write(&path, serde_json::to_vec(&graph)?)?; + let server = CompassMcp::new(path); + let default = invoke( + &server, + "get_node", + json!({"source":"Caller","target":"Target"}), + )?; + let explicit = invoke( + &server, + "get_node", + json!({"source":"Caller","target":"Target","calls_only":false}), + )?; + assert_eq!(default, explicit); + assert_eq!(default["paths"].as_array().ok_or("paths")?.len(), 1); + let filtered = invoke( + &server, + "get_node", + json!({"source":"Caller","target":"Target","calls_only":true}), + )?; + assert_eq!(filtered["paths"], json!([])); + assert!( + filtered["diagnostics"] + .to_string() + .contains("No bounded directed call trail") + ); + for value in [json!("true"), json!(1), Value::Null] { + let output = server.invoke( + "get_node", + json!({"source":"Caller","target":"Target","calls_only":value}) + .as_object() + .cloned() + .ok_or("arguments")?, + ); + assert!(output.contains("must be a boolean"), "{output}"); + } + let rejected = server.invoke( + "get_callees", + json!({"symbol":"Caller","calls_only":true}) + .as_object() + .cloned() + .ok_or("arguments")?, + ); + assert!( + rejected.contains("calls_only requires get_node"), + "{rejected}" + ); + for tool in CompassMcp::tools() { + let property = tool + .input_schema + .get("properties") + .and_then(|p| p.get("calls_only")); + assert_eq!(property.is_some(), tool.name.as_ref() == "get_node"); + } + Ok(()) +} + +#[test] +fn typed_queries_and_legacy_views_reload_equal_metadata_together() -> Result<(), Box> { + for atomic in [false, true] { + for disk_cache in [false, true] { + let directory = tempfile::tempdir()?; + let path = write_typed_graph(directory.path())?; + let mut graph = GraphDocument::load(&path)?; + for node in &mut graph.nodes { + node.community = Some(compass_model::code_graph::CommunityMetadata { + id: 1, + label: None, + score: None, + color: None, + }); + } + fs::write(&path, serde_json::to_vec_pretty(&graph)?)?; + // The fixture loader creates a cache; remove only this test's disposable entries. + fs::remove_dir_all(directory.path().join("cache"))?; + if disk_cache { + fs::create_dir(directory.path().join("cache"))?; + } + let before = fs::read_to_string(&path)?; + let after = before + .replace("Caller", "Runner") + .replace("Target", "Callee"); + assert_eq!(before.len(), after.len()); + let modified = path.metadata()?.modified()?; + let server = CompassMcp::new(&path); + let check = |server: &CompassMcp, old: bool| -> Result> { + let present = if old { "Caller" } else { "Runner" }; + let absent = if old { "Runner" } else { "Caller" }; + let community = server.invoke( + "get_community", + Map::from_iter([("community_id".into(), json!(1))]), + ); + assert!( + community.contains(present) && !community.contains(absent), + "{community}" + ); + let hubs = server.invoke("god_nodes", Map::new()); + assert!(hubs.contains(present) && !hubs.contains(absent), "{hubs}"); + let response: Value = serde_json::from_str(&server.invoke( + "search_symbols", + Map::from_iter([ + ("query".into(), json!(present)), + ("exact".into(), json!(true)), + ]), + ))?; + assert_eq!( + response["result"]["nodes"] + .as_array() + .ok_or("search nodes")? + .len(), + 1 + ); + assert_eq!(response["result"]["nodes"][0]["id"], "n:caller"); + let missing = invoke( + server, + "search_symbols", + json!({"query":absent,"exact":true}), + )?; + assert!( + missing["nodes"] + .as_array() + .ok_or("missing nodes")? + .is_empty() + ); + Ok(response["agentView"]["identity"]["graphIdentity"] + .as_str() + .ok_or("graph identity")? + .to_owned()) + }; + let old_identity = check(&server, true)?; + if atomic { + use std::io::Write; + let mut replacement = tempfile::NamedTempFile::new_in(directory.path())?; + replacement.write_all(after.as_bytes())?; + replacement + .as_file() + .set_times(fs::FileTimes::new().set_modified(modified))?; + replacement.persist(&path)?; + } else { + fs::write(&path, &after)?; + fs::File::options() + .write(true) + .open(&path)? + .set_times(fs::FileTimes::new().set_modified(modified))?; + } + assert_eq!(path.metadata()?.modified()?, modified); + let new_identity = check(&server, false)?; + assert_ne!(old_identity, new_identity); + assert_eq!(new_identity, check(&CompassMcp::new(&path), false)?); + fs::write(&path, vec![b'!'; before.len()])?; + fs::File::options() + .write(true) + .open(&path)? + .set_times(fs::FileTimes::new().set_modified(modified))?; + assert!(server.invoke("god_nodes", Map::new()).starts_with("Error")); + assert!( + server + .invoke( + "search_symbols", + Map::from_iter([("query".into(), json!("Runner"))]) + ) + .starts_with("Error") + ); + } + } + Ok(()) +} diff --git a/crates/compass-mcp/tests/coverage_paths.rs b/crates/compass-mcp/tests/coverage_paths.rs index 2428049c1..7b1e4010d 100644 --- a/crates/compass-mcp/tests/coverage_paths.rs +++ b/crates/compass-mcp/tests/coverage_paths.rs @@ -174,7 +174,7 @@ fn tool_contract_and_all_local_tools_cover_success_and_validation_paths() ("max_hops", json!(0)) ]) ) - .contains("Path exceeds max_hops=0") + .contains("No path found within max_hops=0") ); assert!( server @@ -306,6 +306,46 @@ async fn in_memory_protocol_exercises_tool_and_resource_server_handlers() .call_tool(CallToolRequestParams::new("graph_stats")) .await?; assert!(!call.content.is_empty()); + let hubs = client + .call_tool(CallToolRequestParams::new("god_nodes")) + .await?; + assert!(!hubs.content.is_empty()); + let structured = hubs.structured_content.ok_or("missing structured hubs")?; + assert_eq!(structured["result"]["schema"], "compass.mcp.hubs/1"); + assert!(structured["result"]["nodes"].as_array().is_some()); + assert_eq!( + structured["result"]["nodes"][0]["connectivity"]["schema"], + "compass.hub-connectivity/1" + ); + assert!(structured["result"]["nodes"][0]["connectivity"]["edgeRecords"].is_u64()); + let neighbors = client + .call_tool( + CallToolRequestParams::new("get_neighbors").with_arguments(args(&[ + ("label", json!("a")), + ("relation_filter", json!("calls")), + ])), + ) + .await?; + let neighbors = neighbors + .structured_content + .ok_or("missing neighbor identities")?; + assert_eq!(neighbors["result"]["schema"], "compass.query.neighbors/1"); + assert_eq!(neighbors["result"]["neighbors"][0]["node"]["id"], "b"); + assert_eq!( + neighbors["result"]["neighbors"][0]["edges"][0]["source"], + "a" + ); + assert_eq!(neighbors["transportTruncation"]["truncated"], false); + let path = client + .call_tool( + CallToolRequestParams::new("shortest_path") + .with_arguments(args(&[("source", json!("a")), ("target", json!("b"))])), + ) + .await?; + let path_result = path.structured_content.ok_or("missing structured path")?; + assert_eq!(path_result["result"]["schema"], "compass.mcp.path/1"); + assert_eq!(path_result["result"]["nodes"][0]["id"], "a"); + assert_eq!(path_result["result"]["steps"][0]["target"], "b"); assert!( client .read_resource(ReadResourceRequestParams::new("compass://report")) diff --git a/crates/compass-model/src/artifact.rs b/crates/compass-model/src/artifact.rs new file mode 100644 index 000000000..f5a5078f4 --- /dev/null +++ b/crates/compass-model/src/artifact.rs @@ -0,0 +1,156 @@ +//! One bounded read of a graph artifact, shared by all derived query views. + +use std::fs::File; +use std::io::Read; +use std::path::{Path, PathBuf}; + +use sha2::{Digest, Sha256}; + +use crate::GraphError; + +/// Bytes and content identity from one bounded read of an opened graph file. +/// +/// Derive related projections from this value to keep them bound to the same +/// bytes even when the path is replaced. This read does not lock an external +/// writer; publishers should continue to use atomic replacement. Decoding and +/// validation are performed by the document/projection methods. +#[derive(Debug)] +pub struct GraphArtifact { + path: PathBuf, + pub(crate) bytes: Vec, + pub(crate) signature: GraphSignature, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub(crate) struct GraphSignature { + pub(crate) len: u64, + pub(crate) digest: [u8; 32], +} + +impl GraphArtifact { + /// Read a `.json` artifact using the configured graph-size limit. + pub fn load(path: &Path) -> Result { + if path.extension().and_then(|part| part.to_str()) != Some("json") { + return Err(GraphError::InvalidExtension(path.to_path_buf())); + } + Self::load_for_recluster(path) + } + + pub(crate) fn load_for_recluster(path: &Path) -> Result { + let file = File::open(path).map_err(|source| { + if source.kind() == std::io::ErrorKind::NotFound { + GraphError::NotFound(crate::graph::absolute_path(path)) + } else { + GraphError::Read { + path: crate::graph::absolute_path(path), + source, + } + } + })?; + Self::read_opened(path, file, crate::graph::graph_size_cap()) + } + + fn read_opened(path: &Path, file: File, cap: u64) -> Result { + let size = file + .metadata() + .map_err(|source| GraphError::Read { + path: crate::graph::absolute_path(path), + source, + })? + .len(); + if size > cap { + return Err(GraphError::TooLarge { + path: crate::graph::absolute_path(path), + size, + cap, + }); + } + Self::read_bounded(path, file, cap) + } + + fn read_bounded(path: &Path, reader: impl Read, cap: u64) -> Result { + let mut bytes = Vec::new(); + reader + .take(cap.saturating_add(1)) + .read_to_end(&mut bytes) + .map_err(|source| GraphError::Read { + path: crate::graph::absolute_path(path), + source, + })?; + let len = bytes.len() as u64; + if len > cap { + return Err(GraphError::TooLarge { + path: crate::graph::absolute_path(path), + size: len, + cap, + }); + } + let digest = Sha256::digest(&bytes).into(); + Ok(Self { + path: path.to_path_buf(), + bytes, + signature: GraphSignature { len, digest }, + }) + } + + /// Original path used for disposable caches and adjacent sidecars. + #[must_use] + pub fn path(&self) -> &Path { + &self.path + } + + /// SHA-256 of the exact bytes used to derive every view of this artifact. + #[must_use] + pub fn artifact_digest(&self) -> String { + self.signature + .digest + .iter() + .map(|byte| format!("{byte:02x}")) + .collect() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn opened_artifact_and_all_views_keep_the_original_bytes_after_replacement() + -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + let before = br#"{"nodes":[{"id":"a","label":"Alpha"}],"links":[]}"#; + std::fs::write(&path, before)?; + let opened = File::open(&path)?; + std::fs::rename(&path, directory.path().join("original.json"))?; + std::fs::write( + &path, + br#"{"nodes":[{"id":"b","label":"Omega"}],"links":[]}"#, + )?; + let snapshot = GraphArtifact::read_opened(&path, opened, 1024)?; + assert_eq!( + snapshot.artifact_digest(), + format!("{:x}", Sha256::digest(before)) + ); + assert_eq!(snapshot.document()?.nodes[0].label(), "Alpha"); + assert_eq!(snapshot.traversal_document()?.nodes[0].label(), "Alpha"); + assert_eq!( + GraphArtifact::load(&path)?.document()?.nodes[0].label(), + "Omega" + ); + Ok(()) + } + + #[test] + fn artifact_read_is_bounded_even_without_a_metadata_size_hint() { + assert!(matches!( + GraphArtifact::read_bounded(Path::new("graph.json"), &b"123456789"[..], 8), + Err(GraphError::TooLarge { + size: 9, + cap: 8, + .. + }) + )); + assert!(GraphArtifact::read_bounded(Path::new("graph.json"), &b"12345678"[..], 8).is_ok()); + } +} diff --git a/crates/compass-model/src/code_graph.rs b/crates/compass-model/src/code_graph.rs index dd6ced666..29cea6a2c 100644 --- a/crates/compass-model/src/code_graph.rs +++ b/crates/compass-model/src/code_graph.rs @@ -1571,57 +1571,7 @@ impl GraphDocument { } fn load_strict(path: &Path) -> Result { - if !path.exists() { - return Err(GraphError::NotFound(crate::graph::absolute_path(path))); - } - if let Some((size, cap)) = Self::size_cap_exceeded(path) { - return Err(GraphError::TooLarge { - path: crate::graph::absolute_path(path), - size, - cap, - }); - } - let digest = file_digest(path)?; - if let Some(document) = load_content_cache(path, &digest) { - validate_code_graph(&document)?; - return Ok(document); - } - - #[derive(Deserialize)] - struct SchemaEnvelope { - #[serde(default)] - graph: Option, - } - - #[derive(Deserialize)] - struct SchemaHeader { - #[serde(default)] - schema: Option, - } - - // Inspect the version without first allocating a complete generic JSON - // tree. Serde skips the large node and edge arrays while retaining the - // explicit unsupported-schema diagnostic. - let schema_file = File::open(path).map_err(|source| GraphError::Read { - path: crate::graph::absolute_path(path), - source, - })?; - let found = serde_json::from_reader::<_, SchemaEnvelope>(BufReader::new(schema_file)) - .map_err(GraphError::Corrupt)? - .graph - .and_then(|graph| graph.schema); - if found.as_deref() != Some(CODE_GRAPH_SCHEMA_V1) { - return Err(GraphError::UnsupportedGraphSchema { found }); - } - let document_file = File::open(path).map_err(|source| GraphError::Read { - path: crate::graph::absolute_path(path), - source, - })?; - let document = - serde_json::from_reader(BufReader::new(document_file)).map_err(GraphError::Corrupt)?; - validate_code_graph(&document)?; - let _ = write_content_cache(path, &digest, &document); - Ok(document) + crate::GraphArtifact::load_for_recluster(path)?.typed_document() } } @@ -1988,30 +1938,39 @@ fn corrupt_projection(message: &str) -> GraphError { ))) } -fn file_digest(path: &Path) -> Result { - let file = File::open(path).map_err(|source| GraphError::Read { - path: crate::graph::absolute_path(path), - source, - })?; - let mut reader = BufReader::new(file); - let mut hasher = Sha256::new(); - let mut buffer = [0_u8; 64 * 1024]; - loop { - let read = reader - .read(&mut buffer) - .map_err(|source| GraphError::Read { - path: crate::graph::absolute_path(path), - source, - })?; - if read == 0 { - break; +impl crate::GraphArtifact { + /// Decode and validate a typed graph using the same bytes as other views. + pub fn typed_document(&self) -> Result { + let digest = self.artifact_digest(); + if let Some(document) = load_content_cache(self.path(), &digest, self.signature.len) { + validate_code_graph(&document)?; + return Ok(document); + } + #[derive(Deserialize)] + struct SchemaEnvelope { + #[serde(default)] + graph: Option, + } + #[derive(Deserialize)] + struct SchemaHeader { + #[serde(default)] + schema: Option, + } + let found = serde_json::from_slice::(&self.bytes) + .map_err(GraphError::Corrupt)? + .graph + .and_then(|graph| graph.schema); + if found.as_deref() != Some(CODE_GRAPH_SCHEMA_V1) { + return Err(GraphError::UnsupportedGraphSchema { found }); } - hasher.update(&buffer[..read]); + let document = serde_json::from_slice(&self.bytes).map_err(GraphError::Corrupt)?; + validate_code_graph(&document)?; + let _ = write_content_cache(self.path(), &digest, &document); + Ok(document) } - Ok(format!("{:x}", hasher.finalize())) } -const CONTENT_CACHE_MAGIC: &[u8; 8] = b"CGRPHV01"; +const CONTENT_CACHE_MAGIC: &[u8; 8] = b"CGRPHV02"; static CONTENT_CACHE_SEQUENCE: AtomicU64 = AtomicU64::new(0); fn content_cache_path(graph_path: &Path, digest: &str) -> PathBuf { @@ -2023,11 +1982,16 @@ fn content_cache_path(graph_path: &Path, digest: &str) -> PathBuf { .parent() .unwrap_or_else(|| Path::new(".")) .join("cache") - .join(format!("{file_name}.{digest}.content-v1.cache")) + .join(format!("{file_name}.{digest}.content-v2.cache")) } -fn load_content_cache(path: &Path, digest: &str) -> Option { - let mut reader = BufReader::new(File::open(content_cache_path(path, digest)).ok()?); +fn load_content_cache(path: &Path, digest: &str, source_bytes: u64) -> Option { + let file = File::open(content_cache_path(path, digest)).ok()?; + let maximum = source_bytes.saturating_mul(2).saturating_add(1024 * 1024); + if file.metadata().ok()?.len() > maximum { + return None; + } + let mut reader = BufReader::new(file.take(maximum)); let mut magic = [0_u8; CONTENT_CACHE_MAGIC.len()]; std::io::Read::read_exact(&mut reader, &mut magic).ok()?; if &magic != CONTENT_CACHE_MAGIC { @@ -2104,7 +2068,7 @@ mod tests { fn content_cache_path_is_visible_and_scoped() { assert_eq!( content_cache_path(Path::new("compass-out/graph.json"), "abc123"), - Path::new("compass-out/cache/graph.json.abc123.content-v1.cache") + Path::new("compass-out/cache/graph.json.abc123.content-v2.cache") ); } diff --git a/crates/compass-model/src/document.rs b/crates/compass-model/src/document.rs index bd7210d43..45a5f196c 100644 --- a/crates/compass-model/src/document.rs +++ b/crates/compass-model/src/document.rs @@ -3,13 +3,13 @@ use std::fs::{self, File, OpenOptions}; use std::io::{BufReader, BufWriter, Read, Write}; use std::path::{Path, PathBuf}; use std::sync::atomic::{AtomicU64, Ordering}; -use std::time::UNIX_EPOCH; use serde::de::{self, IgnoredAny, MapAccess, SeqAccess, Visitor}; use serde::{Deserialize, Deserializer, Serialize}; use serde_json::{Map, Value}; -use crate::GraphError; +use crate::artifact::GraphSignature; +use crate::{GraphArtifact, GraphError}; /// One node in `NetworkX` node-link form. #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] @@ -741,151 +741,23 @@ pub struct GraphDocument { impl GraphDocument { /// Load a node-link document under the extension and size guards. pub fn load(path: &Path) -> Result { - if path.extension().and_then(|part| part.to_str()) != Some("json") { - return Err(GraphError::InvalidExtension(path.to_path_buf())); - } - if let Some((size, cap)) = Self::size_cap_exceeded(path) { - return Err(GraphError::TooLarge { - path: crate::graph::absolute_path(path), - size, - cap, - }); - } - let before = graph_signature(path); - if let Some(signature) = before - && let Some(document) = load_query_cache(path, signature) - && graph_signature(path) == Some(signature) - { - let _ = write_affected_cache(path, signature, &document); - return Ok(document); - } - let document = Self::load_for_recluster(path)?; - if let Some(signature) = before - && graph_signature(path) == Some(signature) - { - let _ = write_query_cache(path, signature, &document); - let _ = write_affected_cache(path, signature, &document); - } - Ok(document) + GraphArtifact::load(path)?.document() } - /// Load the bounded projection used by focused graph traversal commands. - /// - /// The projection preserves every value read by label scoring, seed - /// tie-breaking, traversal filtering, and text rendering while omitting - /// unrelated publication attributes. It is disposable and keyed by the - /// graph file signature; the JSON graph remains authoritative. + /// Load the bounded traversal projection, keyed by exact graph content. pub fn load_for_traversal(path: &Path) -> Result { - if path.extension().and_then(|part| part.to_str()) != Some("json") { - return Err(GraphError::InvalidExtension(path.to_path_buf())); - } - if let Some((size, cap)) = Self::size_cap_exceeded(path) { - return Err(GraphError::TooLarge { - path: crate::graph::absolute_path(path), - size, - cap, - }); - } - let signature = graph_signature(path); - if let Some(signature) = signature - && let Some(document) = load_traversal_cache(path, signature) - && graph_signature(path) == Some(signature) - { - return Ok(document); - } - let compact = load_traversal_projection(path)?.into_cache(); - if let Some(signature) = signature - && graph_signature(path) == Some(signature) - && !cache_is_valid( - &traversal_cache_path(path), - TRAVERSAL_CACHE_MAGIC, - signature, - ) - { - let _ = write_traversal_cache(path, signature, &compact); - } - Ok(compact.into_document()) + GraphArtifact::load(path)?.traversal_document() } /// Load the compact, lossless projection required by `graph affected`. - /// - /// The projection retains every node endpoint and edge relation while - /// omitting attributes that cannot influence seed resolution, traversal, - /// or rendering. Other graph commands continue to load the full document. pub fn load_for_affected(path: &Path) -> Result { - if path.extension().and_then(|part| part.to_str()) != Some("json") { - return Err(GraphError::InvalidExtension(path.to_path_buf())); - } - if let Some((size, cap)) = Self::size_cap_exceeded(path) { - return Err(GraphError::TooLarge { - path: crate::graph::absolute_path(path), - size, - cap, - }); - } - let signature = graph_signature(path); - if let Some(signature) = signature - && let Some(document) = load_affected_cache(path, signature) - && graph_signature(path) == Some(signature) - { - return Ok(document); - } - let document = Self::load(path)?; - if let Some(signature) = signature - && let Some(compact) = load_affected_cache(path, signature) - && graph_signature(path) == Some(signature) - { - return Ok(compact); - } - let compact = document.compact_for_affected(); - if let Some(signature) = signature - && graph_signature(path) == Some(signature) - { - let _ = write_compact_cache(path, signature, &compact); - } - Ok(compact) + GraphArtifact::load(path)?.affected_document() } - /// Load a node-link document for re-clustering without requiring a `.json` - /// extension. The same configured graph-size bound applies to this path. + /// Load without requiring a `.json` extension, under the same byte bound. pub fn load_for_recluster(path: &Path) -> Result { - if !path.exists() { - return Err(GraphError::NotFound(crate::graph::absolute_path(path))); - } - let file = File::open(path).map_err(|source| GraphError::Read { - path: crate::graph::absolute_path(path), - source, - })?; - let cap = crate::graph::graph_size_cap(); - let size = file - .metadata() - .map_err(|source| GraphError::Read { - path: crate::graph::absolute_path(path), - source, - })? - .len(); - if size > cap { - return Err(GraphError::TooLarge { - path: crate::graph::absolute_path(path), - size, - cap, - }); - } - let mut bytes = Vec::new(); - file.take(cap.saturating_add(1)) - .read_to_end(&mut bytes) - .map_err(|source| GraphError::Read { - path: crate::graph::absolute_path(path), - source, - })?; - if bytes.len() as u64 > cap { - return Err(GraphError::TooLarge { - path: crate::graph::absolute_path(path), - size: bytes.len() as u64, - cap, - }); - } - serde_json::from_slice(&bytes).map_err(GraphError::Corrupt) + let artifact = GraphArtifact::load_for_recluster(path)?; + serde_json::from_slice(&artifact.bytes).map_err(GraphError::Corrupt) } #[must_use] @@ -957,10 +829,10 @@ impl GraphDocument { } } -const QUERY_CACHE_MAGIC: &[u8; 8] = b"TRAILG01"; -const AFFECTED_CACHE_MAGIC: &[u8; 8] = b"TRAILA02"; -const TRAVERSAL_CACHE_MAGIC: &[u8; 8] = b"TRAILT04"; -const QUERY_CACHE_HEADER_LEN: usize = 28; +const QUERY_CACHE_MAGIC: &[u8; 8] = b"TRAILG02"; +const AFFECTED_CACHE_MAGIC: &[u8; 8] = b"TRAILA03"; +const TRAVERSAL_CACHE_MAGIC: &[u8; 8] = b"TRAILT07"; +const QUERY_CACHE_HEADER_LEN: usize = 48; static QUERY_CACHE_SEQUENCE: AtomicU64 = AtomicU64::new(0); /// Streaming input for natural traversal. Unlike [`GraphDocument`], these @@ -1012,6 +884,7 @@ struct TraversalRawEdge { source_location: Option, relationship_site: Option, evidence_confidence: Option, + deferred: Option, } #[derive(Default)] @@ -1115,17 +988,17 @@ impl<'de> Deserialize<'de> for TraversalRawEdge { "kind" => edge.kind = Some(map.next_value()?), "confidence" => edge.confidence = Some(map.next_value()?), "context" => edge.context = Some(map.next_value()?), + "deferred" => edge.deferred = Some(map.next_value()?), "source_file" => edge.source_file = Some(map.next_value()?), "source_location" => edge.source_location = Some(map.next_value()?), "relationshipSite" => edge.relationship_site = Some(map.next_value()?), "evidence" => { - let first_confidence = map - .next_value::()? - .0 - .into_iter() - .next() - .and_then(|evidence| evidence.confidence); - edge.evidence_confidence = first_confidence; + edge.evidence_confidence = weakest_traversal_confidence( + map.next_value::()? + .0 + .into_iter() + .map(|evidence| evidence.confidence.unwrap_or(Value::Null)), + ); } _ => { let _: IgnoredAny = map.next_value()?; @@ -1315,6 +1188,7 @@ struct TraversalCacheEdge( Option, Option, Option, + Option, ); impl TraversalRawGraphDocument { @@ -1388,12 +1262,11 @@ impl TraversalRawNode { .map(|label| Value::String(label.to_owned())) }) .or(community_name); - let community = community.filter(|value| { - value - .as_object() - .and_then(|community| community.get("label")) - .and_then(Value::as_str) - .is_none() + // Compact labeled communities to their identity rather than dropping + // the whole record after extracting the display name. + let community = community.and_then(|value| match value { + Value::Object(mut fields) => fields.remove("id"), + scalar => Some(scalar), }); let label = label .filter(|value| value_as_python_string(value).is_some()) @@ -1430,20 +1303,10 @@ impl TraversalRawEdge { source_location, relationship_site, evidence_confidence, + deferred, } = self; - let confidence = confidence - .as_ref() - .and_then(value_as_python_string) - .map(Value::String) - .or_else(|| { - evidence_confidence.map(|value| match value.as_str() { - Some("exact") => Value::String("EXTRACTED".to_owned()), - Some("inferred") => Value::String("INFERRED".to_owned()), - Some("ambiguous") => Value::String("AMBIGUOUS".to_owned()), - Some("unresolved") => Value::String("UNRESOLVED".to_owned()), - Some(_) | None => value, - }) - }); + let confidence = + weakest_traversal_confidence(confidence.into_iter().chain(evidence_confidence)); TraversalCacheEdge( source, target, @@ -1472,10 +1335,25 @@ impl TraversalRawEdge { .and_then(Value::as_object) .and_then(source_anchor_location), ), + deferred, ) } } +// Traversal consumes the conservative confidence of the complete evidence set. +// Unknown or malformed confidence must not become an exact structural fact. +fn weakest_traversal_confidence(values: impl Iterator) -> Option { + values + .map(|value| match value.as_str() { + Some("exact" | "EXTRACTED") => "EXTRACTED", + Some("inferred" | "INFERRED") => "INFERRED", + Some("ambiguous" | "AMBIGUOUS") => "AMBIGUOUS", + _ => "UNRESOLVED", + }) + .max_by_key(|value| (confidence_rank(value), *value)) + .map(|value| Value::String(value.to_owned())) +} + fn projected_string_value(direct: Option<&Value>, fallback: Option) -> Option { direct .and_then(value_as_python_string) @@ -1540,6 +1418,7 @@ impl TraversalCacheDocument { context, source_file, source_location, + deferred, ) = edge; let mut attributes = Map::new(); insert_optional_value(&mut attributes, "relation", relation); @@ -1547,6 +1426,7 @@ impl TraversalCacheDocument { insert_optional_value(&mut attributes, "context", context); insert_optional_value(&mut attributes, "source_file", source_file); insert_optional_value(&mut attributes, "source_location", source_location); + insert_optional_value(&mut attributes, "deferred", deferred); EdgeRecord { source, target, @@ -1565,21 +1445,39 @@ impl TraversalCacheDocument { } } -#[derive(Clone, Copy, Debug, Eq, PartialEq)] -struct GraphSignature { - len: u64, - modified_secs: u64, - modified_nanos: u32, -} +impl GraphArtifact { + /// Decode the full compatibility document from this artifact's exact bytes. + /// Disposable caches are accepted only for the same content digest. + pub fn document(&self) -> Result { + if let Some(document) = load_query_cache(self.path(), self.signature) { + let _ = write_affected_cache(self.path(), self.signature, &document); + return Ok(document); + } + let document = serde_json::from_slice(&self.bytes).map_err(GraphError::Corrupt)?; + let _ = write_query_cache(self.path(), self.signature, &document); + let _ = write_affected_cache(self.path(), self.signature, &document); + Ok(document) + } -fn graph_signature(path: &Path) -> Option { - let metadata = path.metadata().ok()?; - let modified = metadata.modified().ok()?.duration_since(UNIX_EPOCH).ok()?; - Some(GraphSignature { - len: metadata.len(), - modified_secs: modified.as_secs(), - modified_nanos: modified.subsec_nanos(), - }) + /// Derive the existing compact traversal projection from this same snapshot. + pub fn traversal_document(&self) -> Result { + if let Some(document) = load_traversal_cache(self.path(), self.signature) { + return Ok(document); + } + let raw: TraversalRawGraphDocument = + serde_json::from_slice(&self.bytes).map_err(GraphError::Corrupt)?; + let compact = raw.into_cache(); + let _ = write_traversal_cache(self.path(), self.signature, &compact); + Ok(compact.into_document()) + } + + fn affected_document(&self) -> Result { + if let Some(document) = load_affected_cache(self.path(), self.signature) { + return Ok(document); + } + let document = self.document()?; + Ok(document.compact_for_affected()) + } } fn query_cache_path(graph_path: &Path) -> PathBuf { @@ -1622,8 +1520,7 @@ fn encode_cache_header(magic: &[u8; 8], signature: GraphSignature) -> [u8; QUERY let mut header = [0_u8; QUERY_CACHE_HEADER_LEN]; header[..8].copy_from_slice(magic); header[8..16].copy_from_slice(&signature.len.to_le_bytes()); - header[16..24].copy_from_slice(&signature.modified_secs.to_le_bytes()); - header[24..28].copy_from_slice(&signature.modified_nanos.to_le_bytes()); + header[16..48].copy_from_slice(&signature.digest); header } @@ -1643,24 +1540,11 @@ fn load_traversal_cache(path: &Path, signature: GraphSignature) -> Option Result { - let file = File::open(path).map_err(|source| { - if source.kind() == std::io::ErrorKind::NotFound { - GraphError::NotFound(crate::graph::absolute_path(path)) - } else { - GraphError::Read { - path: crate::graph::absolute_path(path), - source, - } - } - })?; - serde_json::from_reader(BufReader::new(file)).map_err(GraphError::Corrupt) -} - fn load_cache( cache_path: &Path, magic: &[u8; 8], @@ -1672,7 +1556,11 @@ fn load_cache( if !cache_header_matches(cache_path, magic, signature, &header) { return None; } - rmp_serde::from_read(reader).ok() + rmp_serde::from_read(reader.take(cache_read_limit(signature))).ok() +} + +fn cache_read_limit(signature: GraphSignature) -> u64 { + signature.len.saturating_mul(2).saturating_add(1024 * 1024) } fn cache_header_matches( @@ -1684,7 +1572,7 @@ fn cache_header_matches( let Some(cache_size) = cache_path.metadata().ok().map(|metadata| metadata.len()) else { return false; }; - let maximum = signature.len.saturating_mul(2).saturating_add(1024 * 1024); + let maximum = cache_read_limit(signature); cache_size <= maximum && header == &encode_cache_header(magic, signature) } @@ -1890,6 +1778,42 @@ mod tests { GraphDocument, NodeRecord, affected_cache_path, query_cache_path, traversal_cache_path, }; + #[test] + fn traversal_cache_preserves_labeled_community_ids() -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + fs::create_dir(directory.path().join("cache"))?; + fs::write( + &path, + r#"{"nodes":[ + {"id":"a","name":"A","community":{"id":4,"label":"Core"}}, + {"id":"b","name":"B","community":{"id":7}}, + {"id":"c","label":"C","community":9}],"links":[]}"#, + )?; + for _ in 0..2 { + let graph = GraphDocument::load_for_traversal(&path)?; + assert_eq!(graph.nodes[0].unsigned("community"), Some(4)); + assert_eq!(graph.nodes[0].string("community_name"), "Core"); + assert_eq!(graph.nodes[1].unsigned("community"), Some(7)); + assert_eq!(graph.nodes[2].unsigned("community"), Some(9)); + } + // Old disposable caches can contain the label but lack its ID. + let mut stale = serde_json::from_slice::( + &super::GraphArtifact::load(&path)?.bytes, + )? + .into_cache(); + stale.2[0].8 = None; + let signature = super::GraphArtifact::load(&path)?.signature; + super::write_traversal_cache(&path, signature, &stale)?; + let cache = traversal_cache_path(&path); + let mut bytes = fs::read(&cache)?; + bytes[..8].copy_from_slice(b"TRAILT04"); + fs::write(cache, bytes)?; + let graph = GraphDocument::load_for_traversal(&path)?; + assert_eq!(graph.nodes[0].unsigned("community"), Some(4)); + Ok(()) + } + #[test] fn omitted_multigraph_uses_networkx_legacy_default() { let document: GraphDocument = serde_json::from_str(r#"{"nodes":[{"id":"a"}],"links":[]}"#) diff --git a/crates/compass-model/src/lib.rs b/crates/compass-model/src/lib.rs index c989ac760..33e3b4c1a 100644 --- a/crates/compass-model/src/lib.rs +++ b/crates/compass-model/src/lib.rs @@ -3,6 +3,7 @@ /// Default bounded size accepted by current graph readers. pub const DEFAULT_GRAPH_SIZE_CAP_BYTES: u64 = 1024 * 1024 * 1024; +mod artifact; pub mod code_graph; mod document; mod error; @@ -16,6 +17,7 @@ mod query_index; pub mod search; mod validation; +pub use artifact::GraphArtifact; pub use document::{EdgeRecord, GraphDocument, NodeRecord}; pub use error::GraphError; pub use graph::{EdgeIndex, Graph, NodeIndex}; diff --git a/crates/compass-model/src/query_contract.rs b/crates/compass-model/src/query_contract.rs index 3a87f30cd..efba10200 100644 --- a/crates/compass-model/src/query_contract.rs +++ b/crates/compass-model/src/query_contract.rs @@ -529,9 +529,16 @@ pub struct NodeTrailRequest { pub source: String, pub target: String, pub include_heuristic: bool, + /// Restrict both traversal and direction diagnostics to call relationships. + #[serde(default, skip_serializing_if = "is_false")] + pub calls_only: bool, pub limits: CodeQueryLimits, } +fn is_false(value: &bool) -> bool { + !value +} + #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct CodeQueryResponse { diff --git a/crates/compass-model/tests/code_graph_loading.rs b/crates/compass-model/tests/code_graph_loading.rs index 5948da14d..d622dbb58 100644 --- a/crates/compass-model/tests/code_graph_loading.rs +++ b/crates/compass-model/tests/code_graph_loading.rs @@ -250,7 +250,7 @@ fn strict_loading_uses_a_content_addressed_validated_cache() let cache_name = cache_entries[0].file_name(); let cache_name = cache_name.to_string_lossy(); assert!(cache_name.starts_with("graph.json.")); - assert!(cache_name.ends_with(".content-v1.cache")); + assert!(cache_name.ends_with(".content-v2.cache")); assert!(!cache_name.contains("compass")); assert_eq!(GraphDocument::load(&graph_path)?, document()); Ok(()) diff --git a/crates/compass-model/tests/graph_cache_freshness.rs b/crates/compass-model/tests/graph_cache_freshness.rs new file mode 100644 index 000000000..c8950a1e5 --- /dev/null +++ b/crates/compass-model/tests/graph_cache_freshness.rs @@ -0,0 +1,77 @@ +use std::error::Error; +use std::fs::{self, File, FileTimes}; +use std::path::Path; + +use compass_model::{GraphDocument, GraphError}; + +type Loader = fn(&Path) -> Result; + +fn preserved_metadata_replacement(loader: Loader) -> Result<(), Box> { + for atomic in [false, true] { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + fs::create_dir(directory.path().join("cache"))?; + let before = r#"{"directed":true,"nodes":[{"id":"a","label":"Alpha"},{"id":"b","label":"Beta"}],"links":[{"source":"a","target":"b","relation":"calls"}]}"#; + let after = before.replace("Alpha", "Omega").replace("Beta", "Zeta"); + assert_eq!(before.len(), after.len()); + fs::write(&path, before)?; + let modified = path.metadata()?.modified()?; + assert_eq!(loader(&path)?.nodes[0].label(), "Alpha"); + assert!( + fs::read_dir(directory.path().join("cache"))? + .next() + .is_some() + ); + let destination = if atomic { + directory.path().join("next.json") + } else { + path.clone() + }; + fs::write(&destination, after)?; + File::options() + .write(true) + .open(&destination)? + .set_times(FileTimes::new().set_modified(modified))?; + if atomic { + // NamedTempFile::persist uses the platform's atomic replacement primitive. + let temporary = tempfile::NamedTempFile::new_in(directory.path())?; + fs::copy(&destination, temporary.path())?; + temporary + .as_file() + .set_times(FileTimes::new().set_modified(modified))?; + temporary.persist(&path)?; + } + assert_eq!(path.metadata()?.modified()?, modified); + for _ in 0..2 { + let document = loader(&path)?; + assert_eq!(document.nodes[0].label(), "Omega", "atomic={atomic}"); + assert_eq!(document.nodes[1].label(), "Zeta"); + assert_eq!(document.links.len(), 1); + } + // A same-length corrupt replacement must not become a successful cache hit. + fs::write(&path, vec![b'!'; before.len()])?; + File::options() + .write(true) + .open(&path)? + .set_times(FileTimes::new().set_modified(modified))?; + assert!(loader(&path).is_err()); + fs::remove_file(&path)?; + assert!(loader(&path).is_err()); + } + Ok(()) +} + +#[test] +fn query_cache_reads_changed_content_with_preserved_metadata() -> Result<(), Box> { + preserved_metadata_replacement(GraphDocument::load) +} + +#[test] +fn traversal_cache_reads_changed_content_with_preserved_metadata() -> Result<(), Box> { + preserved_metadata_replacement(GraphDocument::load_for_traversal) +} + +#[test] +fn affected_cache_reads_changed_content_with_preserved_metadata() -> Result<(), Box> { + preserved_metadata_replacement(GraphDocument::load_for_affected) +} diff --git a/crates/compass-model/tests/traversal_confidence.rs b/crates/compass-model/tests/traversal_confidence.rs new file mode 100644 index 000000000..28ad5c8c0 --- /dev/null +++ b/crates/compass-model/tests/traversal_confidence.rs @@ -0,0 +1,41 @@ +use std::error::Error; +use std::fs; + +use compass_model::GraphDocument; +use serde_json::json; + +#[test] +fn traversal_projection_preserves_weakest_confidence_and_deferred_state() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + fs::create_dir(directory.path().join("cache"))?; + let links = [ + json!({"source":"a", "target":"b", "kind":"exports", "evidence":[{"confidence":"exact"},{"confidence":"inferred"}]}), + json!({"source":"a", "target":"b", "kind":"exports", "evidence":[{"confidence":"inferred"},{"confidence":"exact"}]}), + json!({"source":"a", "target":"b", "kind":"exports", "deferred":true, "evidence":[{"confidence":"exact"}]}), + json!({"source":"a", "target":"b", "kind":"exports", "confidence":"EXTRACTED", "evidence":[{"confidence":"ambiguous"}]}), + ]; + fs::write( + &path, + serde_json::to_vec(&json!({"nodes":[{"id":"a"},{"id":"b"}],"links":links}))?, + )?; + for _ in 0..2 { + let graph = GraphDocument::load_for_traversal(&path)?; + assert_eq!(graph.links[0].string("confidence"), "INFERRED"); + assert_eq!(graph.links[1].string("confidence"), "INFERRED"); + assert_eq!(graph.links[2].boolean("deferred"), Some(true)); + assert_eq!(graph.links[3].string("confidence"), "AMBIGUOUS"); + } + // A cache bearing the previous format must be rebuilt, even when its + // content signature still matches the authoritative graph. + let cache = directory.path().join("cache/graph.json.traversal-v1.cache"); + let mut bytes = fs::read(&cache)?; + bytes[..8].copy_from_slice(b"TRAILT06"); + fs::write(&cache, bytes)?; + let graph = GraphDocument::load_for_traversal(&path)?; + assert_eq!(graph.links[0].string("confidence"), "INFERRED"); + assert_eq!(graph.links[2].boolean("deferred"), Some(true)); + assert_eq!(&fs::read(cache)?[..8], b"TRAILT07"); + Ok(()) +} diff --git a/crates/compass-output/src/agent_query.rs b/crates/compass-output/src/agent_query.rs index 2aade6dca..3205dd018 100644 --- a/crates/compass-output/src/agent_query.rs +++ b/crates/compass-output/src/agent_query.rs @@ -11,7 +11,7 @@ use compass_model::query_contract::{ }; use compass_query::{ CursorTokenError, code_query_response_digest, decode_cursor_token, discovery_response_digest, - encode_cursor_token, + encode_cursor_token, normalize_code_query_symbol, }; use serde::{Deserialize, Serialize}; use serde_json::{Map, Value, json}; @@ -1963,20 +1963,18 @@ fn duplicated_entity_labels(entities: &[AgentEntity]) -> HashSet<&str> { /// Whether a page must print the stable identifier of one entity. /// -/// A page needs the identifier only where the page is resolving a name and the -/// name it printed is not unique enough to address the row, which is when two -/// retained rows share that label. A row that a caller can name - the resolved -/// answers, and every distinct label in a candidate list - stays addressed by -/// the qualified name and source anchor it already prints, which keeps the -/// answer's evidence per token high; a duplicated label cannot be repeated back -/// to the tool alone, so those rows carry the identity that separates them. The -/// candidate list, its order, and every identifier stay in `--format json`. +/// An ambiguous query asks the user to select an exact ID, so every retained +/// candidate carries that ID even when its qualified label is distinct. Other +/// unresolved candidate lists need IDs only for colliding labels. Resolved +/// answers stay compact; JSON carries every identifier unchanged. fn entity_needs_identity( entity: &AgentEntity, match_state: AgentMatch, duplicated_labels: &HashSet<&str>, ) -> bool { - !matches!(match_state, AgentMatch::Exact) && duplicated_labels.contains(entity.label.as_str()) + match_state == AgentMatch::Ambiguous + || (!matches!(match_state, AgentMatch::Exact) + && duplicated_labels.contains(entity.label.as_str())) } fn render_relationship(relationship: &AgentRelationship) -> String { @@ -2211,9 +2209,13 @@ fn unique_node_id(value: &str, nodes: &BTreeMap) -> Option>(); matches.sort(); @@ -2593,13 +2595,26 @@ fn code_match_state( if query.is_some_and(|query| { response.results.first().is_some_and(|hit| { nodes.get(&hit.node_id).is_some_and(|node| { - node.id == query || node.name == query || node.qualified_name == query + node.id == query + || normalize_code_query_symbol(&node.name) + == normalize_code_query_symbol(query) + || normalize_code_query_symbol(&node.qualified_name) + == normalize_code_query_symbol(query) }) }) }) { AgentMatch::Exact } else if response.results.is_empty() { - AgentMatch::None + if response.truncated + || has_diagnostic( + &response.diagnostics, + QueryDiagnosticCode::BoundedTruncation, + ) + { + AgentMatch::Unknown + } else { + AgentMatch::None + } } else { AgentMatch::Fuzzy } @@ -2633,7 +2648,9 @@ fn code_result_state( { return AgentResultState::NoPath; } - if operation == AgentOperation::Search && match_state == AgentMatch::Fuzzy { + if operation == AgentOperation::Search + && matches!(match_state, AgentMatch::Fuzzy | AgentMatch::Unknown) + { AgentResultState::Candidates } else { AgentResultState::Answered @@ -2679,12 +2696,28 @@ fn answer_for_code( .first() .map(|operand| operand.value.clone()) .unwrap_or_else(|| "the requested query".to_owned()); + if result_state == AgentResultState::NeedsResolution { + return AgentAnswer { + headline: "The query matches multiple candidates; retry with an exact node ID for each ambiguous operand.".to_owned(), + basis: vec![AgentBasis { + kind: "operation".to_owned(), + id: context.operation.label().to_owned(), + }], + }; + } let subject = primary_results .first() .map(|entity| entity.label.clone()) .unwrap_or_else(|| requested.clone()); let headline = match context.operation { AgentOperation::Search => match result_state { + AgentResultState::Candidates + if match_state == AgentMatch::Unknown && response.results.is_empty() => + { + format!( + "Search stopped at its bound before a match or absence could be established for \"{requested}\"." + ) + } AgentResultState::NoMatch => { format!("No exact match for \"{requested}\"; fallback candidates are shown.") } diff --git a/crates/compass-output/tests/agent_query.rs b/crates/compass-output/tests/agent_query.rs index 0770ff9fd..a04ba64dc 100644 --- a/crates/compass-output/tests/agent_query.rs +++ b/crates/compass-output/tests/agent_query.rs @@ -63,6 +63,58 @@ fn context(operation: AgentOperation) -> AgentQueryContext { AgentQueryContext::new(operation, "graph-identity", "generation-identity") } +#[test] +fn relationship_subject_uses_the_query_engines_symbol_normalization() -> Result<(), Box> +{ + let source = anchor("src/lib.rs", 1); + for (operation, agent_operation) in [ + (CodeQueryOperation::Callers, AgentOperation::Callers), + (CodeQueryOperation::Callees, AgentOperation::Callees), + ] { + let mut response = response(operation); + response.nodes = vec![ + node("a:neighbor", "Neighbor", &source), + node("z:subject", ".Subject()", &source), + ]; + response.nodes[1].qualified_name = "Fixture.Subject".to_owned(); + let (from, to) = if operation == CodeQueryOperation::Callers { + ("a:neighbor", "z:subject") + } else { + ("z:subject", "a:neighbor") + }; + response.edges.push(QueryEdge { + id: "e:call".to_owned(), + source: from.to_owned(), + target: to.to_owned(), + kind: EdgeKind::Calls, + relationship_site: Some(source.clone()), + details: None, + evidence: vec![evidence(&source)], + }); + for query in [ + "Subject", + "subject()", + ".SUBJECT()", + " Fixture.Subject ", + "z:subject", + ] { + let view = build_code_query_view( + &response, + context(agent_operation) + .with_operand(compass_output::AgentOperandRole::Symbol, query), + )?; + assert!( + view.answer.headline.ends_with("for Fixture.Subject."), + "{query}: {}", + view.answer.headline + ); + assert_eq!(view.answer.basis[0].id, "z:subject"); + assert_eq!(view.primary_results[0].id, "z:subject"); + } + } + Ok(()) +} + #[test] fn direct_usage_survives_the_projection_bound_ahead_of_owner_references() -> Result<(), Box> { @@ -790,7 +842,8 @@ fn legacy_page_cursor_encoding_is_rejected_with_a_version_error() -> Result<(), let checksum = format!("{:x}", Sha256::digest(payload.as_bytes())); let cursor = format!("{payload}.{checksum}"); let error = compass_output::decode_agent_text_page_cursor(&cursor) - .expect_err("a legacy cursor must not be reinterpreted"); + .err() + .ok_or("a legacy cursor must not be reinterpreted")?; let message = error.to_string(); assert!( message.contains("cursor"), @@ -800,6 +853,58 @@ fn legacy_page_cursor_encoding_is_rejected_with_a_version_error() -> Result<(), Ok(()) } +#[test] +fn ambiguity_never_selects_a_headline_subject_or_claims_no_path() -> Result<(), Box> { + for (operation, agent_operation) in [ + (CodeQueryOperation::Callers, AgentOperation::Callers), + (CodeQueryOperation::Callees, AgentOperation::Callees), + (CodeQueryOperation::Impact, AgentOperation::Impact), + (CodeQueryOperation::NodeTrail, AgentOperation::NodeTrail), + ] { + let mut response = response(operation); + response.nodes = vec![ + node("n:library", "Library.run", &anchor("src/lib.rs", 10)), + node("n:test", "Tests.run", &anchor("tests/run.rs", 20)), + ]; + response.diagnostics.push(QueryDiagnostic { + code: QueryDiagnosticCode::AmbiguousMatch, + message: "run matched two declarations".to_owned(), + node_id: None, + path: None, + }); + let query_context = + context(agent_operation).with_operand(compass_output::AgentOperandRole::Symbol, "run"); + for reverse in [false, true] { + if reverse { + response.nodes.reverse(); + } + let view = build_code_query_view(&response, query_context.clone())?; + assert_eq!(view.status.result_state, AgentResultState::NeedsResolution); + assert!(view.answer.headline.contains("multiple candidates")); + assert!(view.answer.headline.contains("exact node ID")); + assert_eq!(view.answer.basis.len(), 1); + assert_eq!(view.answer.basis[0].kind, "operation"); + let page = render_code_query_text_page( + &response, + query_context.clone(), + AgentTextPageOptions { + token_budget: 2_000, + cursor: None, + }, + )?; + for text in [render_agent_query_text(&view)?, page.text] { + for id in ["n:library", "n:test"] { + assert!(text.contains(&format!("id: {id}")), "{text}"); + } + assert!(!text.contains("fallback candidate"), "{text}"); + assert!(!text.contains("No directed path"), "{text}"); + assert!(!text.contains("No exact match"), "{text}"); + } + } + } + Ok(()) +} + #[test] fn unresolved_relationship_answers_never_speak_for_another_symbol() -> Result<(), Box> { let caller_anchor = anchor("src/caller.rs", 10); @@ -867,3 +972,51 @@ fn unresolved_relationship_answers_never_speak_for_another_symbol() -> Result<() ); Ok(()) } + +#[test] +fn bounded_empty_search_is_unknown_instead_of_a_no_match_claim() -> Result<(), Box> { + for diagnostic_only in [false, true] { + let mut result = response(CodeQueryOperation::Search); + result.truncated = !diagnostic_only; + result.diagnostics.push(QueryDiagnostic { + code: QueryDiagnosticCode::BoundedTruncation, + message: "Exact lookup stopped before filtering was complete".to_owned(), + node_id: None, + path: None, + }); + let view = build_code_query_view( + &result, + context(AgentOperation::Search) + .with_operand(compass_output::AgentOperandRole::Query, "Subject"), + )?; + assert_eq!(view.status.match_state, AgentMatch::Unknown); + assert_eq!(view.status.result_state, AgentResultState::Candidates); + assert_eq!(view.status.source_execution, AgentExecution::Partial); + assert!(view.primary_results.is_empty()); + let text = render_agent_query_text(&view)?; + assert!(text.contains("before a match or absence could be established")); + assert!(!view.caveats.iter().any(|c| c.code == "no_match")); + } + Ok(()) +} + +#[test] +fn search_exact_match_display_uses_typed_name_normalization() -> Result<(), Box> { + let mut result = response(CodeQueryOperation::Search); + result + .nodes + .push(node("id:subject", ".Subject()", &anchor("src/lib.rs", 1))); + result.results.push(SearchHit { + node_id: "id:subject".to_owned(), + score: 1.0, + matched_fields: vec!["name".to_owned()], + }); + let view = build_code_query_view( + &result, + context(AgentOperation::Search) + .with_operand(compass_output::AgentOperandRole::Query, " SUBJECT "), + )?; + assert_eq!(view.status.match_state, AgentMatch::Exact); + assert_eq!(view.status.result_state, AgentResultState::Answered); + Ok(()) +} diff --git a/crates/compass-query/src/code_query.rs b/crates/compass-query/src/code_query.rs index 89c2eddc1..fa3b9c10e 100644 --- a/crates/compass-query/src/code_query.rs +++ b/crates/compass-query/src/code_query.rs @@ -34,6 +34,9 @@ use crate::text::{canonical_query_token, query_recall_terms, strip_diacritics}; type GraphPath = (Vec, Vec); type BoundedPathResult = (Option, bool); +// A cheaper arrival at a node may consume more hops. Retain separate states +// so it cannot erase a costlier arrival that still fits the remaining depth. +type TrailState = (String, usize); const MAX_CODE_QUERY_CANDIDATES: u32 = 256; const MAX_RECALL_FUZZY_VARIANTS_PER_TERM: usize = 192; const MAX_RECALL_FUZZY_VARIANTS_TOTAL: usize = 256; @@ -100,6 +103,7 @@ pub(crate) enum StructuralOperandRole { ImpactTarget, TrailSource, TrailTarget, + CallTrailTarget, } impl StructuralOperandRole { @@ -110,6 +114,7 @@ impl StructuralOperandRole { Self::ImpactTarget => (true, IMPACT_KINDS), Self::TrailSource => (false, ALL_EDGE_KINDS), Self::TrailTarget => (true, ALL_EDGE_KINDS), + Self::CallTrailTarget => (true, &[EdgeKind::Calls]), } } } @@ -231,6 +236,12 @@ impl CandidateReadBudget { } } +#[derive(Clone, Copy)] +struct TrailPolicy { + directed: bool, + calls_only: bool, +} + struct TraversalBudget { remaining_nodes: usize, remaining_edges: usize, @@ -304,6 +315,15 @@ const IMPACT_KINDS: &[EdgeKind] = &[ EdgeKind::Renders, ]; +/// Optional conjunctive filters for exact symbol lookup. Paths are compared to +/// stored repository-relative paths; they are never opened or canonicalized. +#[derive(Clone, Debug, Default, Eq, PartialEq)] +pub struct ExactSearchFilter { + pub source_file: Option, + pub start_line: Option, + pub kind: Option, +} + pub struct CodeQueryEngine { pub(crate) backend: CodeGraphBackend, pub(crate) program: Option, @@ -1565,6 +1585,104 @@ impl CodeQueryEngine { self.search_instrumented(request, &mut QueryInstrumentation::default()) } + /// Return every bounded exact ID/name candidate satisfying explicit filters. + /// Name normalization matches typed symbol resolution. No lexical fallback, + /// ranking-based selection or export-binding elimination is performed. + /// The candidate bound applies before filtering: a filtered prefix never + /// establishes uniqueness or absence when exact lookup was truncated. + pub fn search_exact( + &self, + request: SearchRequest, + filter: ExactSearchFilter, + ) -> Result { + self.check_deadline()?; + validate_limits(&request.limits)?; + let valid_text = |value: &str| { + !value.trim().is_empty() && value.len() <= 4096 && !value.chars().any(char::is_control) + }; + if !valid_text(&request.query) + || filter + .source_file + .as_deref() + .is_some_and(|value| !valid_text(value)) + || filter.start_line == Some(0) + || (filter.start_line.is_some() && filter.source_file.is_none()) + { + return Err(QueryError::new( + QueryErrorKind::InvalidParameter, + "invalid_exact_search", + "exact search requires 1..4096 non-control selector/file bytes; start line must be positive and requires a source file", + )); + } + let bound = usize::try_from(request.limits.max_candidates).unwrap_or(usize::MAX); + let exact_id = self.backend.node_by_id(&request.query)?; + let id_match = exact_id.is_some(); + let (mut candidates, truncated) = if let Some(node) = exact_id { + (vec![node], false) + } else { + self.backend + .nodes_by_normalized_name(&normalize_symbol(&request.query), bound)? + }; + self.check_deadline()?; + candidates.retain(|node| { + filter.kind.is_none_or(|kind| node.kind == kind) + && filter.source_file.as_deref().is_none_or(|file| { + node.source + .as_ref() + .is_some_and(|source| source.file == file) + }) + && filter.start_line.is_none_or(|line| { + node.source + .as_ref() + .is_some_and(|source| source.start_line == line) + }) + }); + candidates.sort_by(|a, b| a.id.cmp(&b.id)); + let mut response = CodeQueryResponse::empty(CodeQueryOperation::Search, request.limits); + response.truncated = truncated; + if truncated { + response.diagnostics.push(QueryDiagnostic { + code: QueryDiagnosticCode::BoundedTruncation, + message: format!("Exact-name lookup exceeded {bound} candidates before filtering; returned matches do not establish uniqueness or absence"), + node_id: None, + path: None, + }); + } else if candidates.is_empty() { + response.diagnostics.push(QueryDiagnostic { + code: QueryDiagnosticCode::NoMatch, + message: "No exact symbol satisfies the supplied filters".to_owned(), + node_id: None, + path: None, + }); + } + let max_nodes = usize::try_from(response.limits.max_nodes).unwrap_or(usize::MAX); + if candidates.len() > max_nodes { + response.truncated = true; + candidates.truncate(max_nodes); + } + for node in candidates { + let matched_fields = if id_match { + vec!["id".to_owned()] + } else { + [ + ("name", &node.name), + ("qualified_name", &node.qualified_name), + ] + .into_iter() + .filter(|(_, value)| normalize_symbol(value) == normalize_symbol(&request.query)) + .map(|(field, _)| field.to_owned()) + .collect() + }; + response.results.push(SearchHit { + node_id: node.id.clone(), + score: 1.0, + matched_fields, + }); + response.nodes.push(query_node(&node)); + } + self.finish_response(&mut response) + } + pub(crate) fn search_instrumented( &self, request: SearchRequest, @@ -3016,20 +3134,24 @@ impl CodeQueryEngine { response.truncated = true; break; } - if let [source, target] = pair - && let (Some((nodes, edges)), truncated) = self.shortest_path( + if let [source, target] = pair { + let (path, truncated) = self.shortest_path( source, target, request.include_heuristic, &request.limits, &mut budget, - false, - )? - { + TrailPolicy { + directed: false, + calls_only: false, + }, + )?; response.truncated |= truncated; - ids.extend(nodes.iter().cloned()); - edge_ids.extend(edges.iter().cloned()); - response.paths.push(self.path_record(&nodes, &edges)?); + if let Some((nodes, edges)) = path { + ids.extend(nodes.iter().cloned()); + edge_ids.extend(edges.iter().cloned()); + response.paths.push(self.path_record(&nodes, &edges)?); + } } } self.add_nodes(&ids, &mut response)?; @@ -3060,7 +3182,11 @@ impl CodeQueryEngine { let source = self.resolve_symbol( &request.source, &mut response, - Some(StructuralOperandRole::TrailSource), + Some(if request.calls_only { + StructuralOperandRole::CalleesSource + } else { + StructuralOperandRole::TrailSource + }), request.include_heuristic, instrumentation, )?; @@ -3074,7 +3200,11 @@ impl CodeQueryEngine { let target = self.resolve_symbol( &request.target, &mut response, - Some(StructuralOperandRole::TrailTarget), + Some(if request.calls_only { + StructuralOperandRole::CallTrailTarget + } else { + StructuralOperandRole::TrailTarget + }), request.include_heuristic, instrumentation, )?; @@ -3093,7 +3223,10 @@ impl CodeQueryEngine { request.include_heuristic, &request.limits, &mut budget, - true, + TrailPolicy { + directed: true, + calls_only: request.calls_only, + }, )?; response.truncated |= truncated; let Some((nodes, edges)) = path else { @@ -3109,15 +3242,19 @@ impl CodeQueryEngine { request.include_heuristic, &request.limits, &mut budget, - false, + TrailPolicy { + directed: false, + calls_only: request.calls_only, + }, )?; budget.record_work(instrumentation); response.truncated |= mismatch_truncated; + let qualifier = if request.calls_only { "call " } else { "" }; if undirected_path.is_some() { response.diagnostics.push(QueryDiagnostic { code: QueryDiagnosticCode::DirectionMismatch, message: format!( - "A trail connects {source} and {target}, but not in the requested source-to-target direction" + "A {qualifier}trail connects {source} and {target}, but not in the requested source-to-target direction" ), node_id: Some(source), path: None, @@ -3125,7 +3262,9 @@ impl CodeQueryEngine { } else if !mismatch_truncated { response.diagnostics.push(QueryDiagnostic { code: QueryDiagnosticCode::NoMatch, - message: format!("No bounded directed trail connects {source} to {target}"), + message: format!( + "No bounded directed {qualifier}trail connects {source} to {target}" + ), node_id: Some(source), path: None, }); @@ -3187,25 +3326,130 @@ impl CodeQueryEngine { } let normalized = normalize_symbol(query); let candidate_limit = usize::try_from(response.limits.max_candidates).unwrap_or(usize::MAX); - let (exact_nodes, exact_truncated) = self + let (mut exact_nodes, exact_truncated) = self .backend .nodes_by_normalized_name(&normalized, candidate_limit)?; instrumentation.work.candidates_read = instrumentation .work .candidates_read .saturating_add(u64::try_from(exact_nodes.len()).unwrap_or(u64::MAX)); + // A question may name an owner and member without knowing the module + // prefix or the stored `::` separator. Verify that suffix against the + // complete bounded leaf-name posting, never against a ranked prefix. + // If the posting is truncated, uniqueness cannot be proved. + let qualified_query = normalized.replace("::", "."); + if exact_nodes.is_empty() + && !exact_truncated + && let Some((_, leaf)) = qualified_query.rsplit_once('.') + && !leaf.is_empty() + { + let (leaf_nodes, leaf_truncated) = self + .backend + .nodes_by_normalized_name(leaf, candidate_limit)?; + instrumentation.work.candidates_read = instrumentation + .work + .candidates_read + .saturating_add(u64::try_from(leaf_nodes.len()).unwrap_or(u64::MAX)); + let leaf_has_exact_candidates = !leaf_nodes.is_empty(); + let suffix = format!(".{qualified_query}"); + let qualified = leaf_nodes + .into_iter() + .filter(|node| { + let qualified_name = normalize_symbol(&node.qualified_name).replace("::", "."); + qualified_name == qualified_query || qualified_name.ends_with(&suffix) + }) + .collect::>(); + if leaf_truncated { + response.truncated = true; + response.diagnostics.push(QueryDiagnostic { + code: QueryDiagnosticCode::AmbiguousMatch, + message: format!( + "Owner-qualified symbol {query:?} cannot be resolved within the {}-candidate leaf-name bound", + response.limits.max_candidates + ), + node_id: None, + path: None, + }); + self.publish_exact_ambiguity(response, &qualified, candidate_limit)?; + return Ok(None); + } + match qualified.as_slice() { + [node] => return Ok(Some(node.id.clone())), + [] if leaf_has_exact_candidates => { + response.diagnostics.push(QueryDiagnostic { + code: QueryDiagnosticCode::NoMatch, + message: format!("NO OWNER-QUALIFIED MATCH for {query:?}"), + node_id: None, + path: None, + }); + return Ok(None); + } + [] => {} + _ => { + response.diagnostics.push(QueryDiagnostic { + code: QueryDiagnosticCode::AmbiguousMatch, + message: format!( + "Owner-qualified symbol {query:?} matched {} nodes", + qualified.len() + ), + node_id: None, + path: None, + }); + self.publish_exact_ambiguity(response, &qualified, candidate_limit)?; + return Ok(None); + } + } + } + let mut proof_truncated = false; + if !exact_truncated + && exact_nodes.len() > 1 + && exact_nodes.len() <= crate::export_binding::MAX_EXPORT_PROOF_CANDIDATES + && exact_nodes.iter().any(|node| node.kind == NodeKind::Export) + { + use crate::export_binding::{ + BindingEdge, BindingNode, ProofRead, redundant_export_bindings, + }; + let candidates = exact_nodes + .iter() + .map(BindingNode::typed) + .collect::>(); + let pinned = self.backend.pin_discovery()?; + let proof = redundant_export_bindings(&candidates, |node, inbound, limit| { + let kinds = if inbound { + &[EdgeKind::Contains] + } else { + &[EdgeKind::Exports] + }; + let (edges, truncated, examined) = + pinned.matching_bounded_counted(node, inbound, kinds, true, limit)?; + Ok::<_, QueryError>(ProofRead { + edges: edges.iter().map(BindingEdge::typed).collect(), + truncated, + examined, + }) + })?; + instrumentation.work.edges_expanded = instrumentation + .work + .edges_expanded + .saturating_add(u64::try_from(proof.examined).unwrap_or(u64::MAX)); + proof_truncated = proof.truncated; + response.truncated |= proof_truncated; + exact_nodes.retain(|node| !proof.redundant.contains(&node.id)); + } let exact = exact_nodes .iter() .map(|node| node.id.clone()) .collect::>(); response.truncated |= exact_truncated; match exact.as_slice() { - [node] if !exact_truncated => return Ok(Some(node.clone())), + [node] if !exact_truncated && !proof_truncated => return Ok(Some(node.clone())), [] => {} _ => { response.diagnostics.push(QueryDiagnostic { code: QueryDiagnosticCode::AmbiguousMatch, - message: if exact_truncated { + message: if proof_truncated { + format!("Symbol {query:?} remains ambiguous because export evidence exceeded the {}-edge proof bound", crate::export_binding::MAX_EXPORT_PROOF_EDGES) + } else if exact_truncated { format!( "Symbol {query:?} exceeded the {}-candidate resolution bound", response.limits.max_candidates @@ -3446,8 +3690,17 @@ impl CodeQueryEngine { include_heuristic: bool, limits: &compass_model::query_contract::CodeQueryLimits, budget: &mut TraversalBudget, - directed: bool, + policy: TrailPolicy, ) -> Result { + let TrailPolicy { + directed, + calls_only, + } = policy; + let kinds = if calls_only { + &[EdgeKind::Calls][..] + } else { + ALL_EDGE_KINDS + }; let max_depth = usize::try_from(limits.max_depth).unwrap_or(usize::MAX); if !budget.consume_node() { return Ok((None, true)); @@ -3458,34 +3711,45 @@ impl CodeQueryEngine { source.to_owned(), source.to_owned(), ))]); - let mut best = HashMap::from([(source.to_owned(), (0_u32, 0_usize, source.to_owned()))]); + let mut best = HashMap::from([( + source.to_owned(), + BTreeMap::from([(0_usize, (0_u32, source.to_owned()))]), + )]); let mut admitted = HashSet::from([source.to_owned()]); - let mut predecessor = HashMap::::new(); + let mut predecessor = HashMap::::new(); let mut truncated = false; + let mut depth_frontier = BTreeSet::new(); while let Some(Reverse((cost, depth, path_key, node))) = queue.pop() { self.check_deadline()?; - if best.get(&node).is_none_or(|current| { - current.0 != cost || current.1 != depth || current.2 != path_key - }) { + let state = (node.clone(), depth); + let Some(labels) = best.get(&node) else { + continue; + }; + if labels + .get(&depth) + .is_none_or(|current| current.0 != cost || current.1 != path_key) + || labels.range(..depth).any(|(_, current)| current.0 <= cost) + { continue; } if node == target { let mut nodes = vec![target.to_owned()]; let mut edges = Vec::new(); - let mut cursor = target; - while cursor != source { - let Some((previous, edge)) = predecessor.get(cursor) else { + let mut cursor = state; + while cursor.0 != source || cursor.1 != 0 { + let Some((previous, edge)) = predecessor.get(&cursor) else { return Ok((None, truncated)); }; edges.push(edge.clone()); - nodes.push(previous.clone()); - cursor = previous; + nodes.push(previous.0.clone()); + cursor = previous.clone(); } nodes.reverse(); edges.reverse(); return Ok((Some((nodes, edges)), truncated)); } if depth >= max_depth { + depth_frontier.insert(node); continue; } let mut adjacent = Vec::new(); @@ -3493,7 +3757,7 @@ impl CodeQueryEngine { self.backend.matching_bounded( &node, false, - ALL_EDGE_KINDS, + kinds, include_heuristic, budget.remaining_edges, )? @@ -3507,6 +3771,11 @@ impl CodeQueryEngine { truncated = true; break; } + // The undirected diagnostic still charges every incident + // record it examines, including excluded structural edges. + if calls_only && edge.kind != EdgeKind::Calls { + continue; + } if edge.source == node { adjacent.push((edge.target.clone(), edge)); } else if !directed && edge.target == node { @@ -3524,20 +3793,89 @@ impl CodeQueryEngine { let next_depth = depth.saturating_add(1); let next_cost = cost.saturating_add(code_relation_weight(edge.kind)); let next_key = format!("{path_key}\0{}\0{next}", edge.id); - let candidate = (next_cost, next_depth, next_key.clone()); + let next_state = (next.clone(), next_depth); + let candidate = (next_cost, next_key.clone()); + // A route can dominate another only if it is no deeper and + // no costlier. In particular, reject positive-cost cycles. + if best.get(&next).is_some_and(|labels| { + labels.range(..=next_depth).any(|(known_depth, current)| { + current.0 < next_cost + || (current.0 == next_cost + && (*known_depth < next_depth || current.1 <= next_key)) + }) + }) { + continue; + } + if !admitted.contains(&next) { + if !budget.consume_node() { + truncated = true; + continue; + } + admitted.insert(next.clone()); + } + // Every new state comes from an examined edge, so the shared + // edge budget also bounds the queue and predecessor storage. + best.entry(next.clone()) + .or_default() + .insert(next_depth, candidate); + predecessor.insert(next_state, (state.clone(), edge.id.clone())); + queue.push(Reverse((next_cost, next_depth, next_key, next))); + } + } + // Probe the depth frontier only after the bounded search fails. Doing + // this while the queue still has viable states would spend their shared + // work budget and could hide a valid, costlier, shorter route. + if !truncated { + for node in depth_frontier { + self.check_deadline()?; + // A shallower arrival was fully expanded already. Its outgoing + // records therefore cannot hide an unexplored continuation. if best - .get(&next) - .is_some_and(|current| candidate >= current.clone()) + .get(&node) + .is_some_and(|labels| labels.keys().any(|depth| *depth < max_depth)) { continue; } - if admitted.insert(next.clone()) && !budget.consume_node() { + let (incident, incomplete) = if directed { + self.backend.matching_bounded( + &node, + false, + kinds, + include_heuristic, + budget.remaining_edges, + )? + } else { + self.backend.incident_bounded( + &node, + include_heuristic, + budget.remaining_edges, + )? + }; + if incomplete { truncated = true; - continue; + break; + } + for edge in incident { + if !budget.consume_edge() { + truncated = true; + break; + } + if calls_only && edge.kind != EdgeKind::Calls { + continue; + } + let next = if edge.source == node { + &edge.target + } else { + &edge.source + }; + if !admitted.contains(next) { + truncated = true; + break; + } + } + if truncated { + break; } - best.insert(next.clone(), candidate); - predecessor.insert(next.clone(), (node.clone(), edge.id.clone())); - queue.push(Reverse((next_cost, next_depth, next_key, next))); } } Ok((None, truncated)) @@ -3726,7 +4064,10 @@ fn path_record(nodes: &[String], edges: &[String], selected: &[EdgeRecord]) -> Q } } -pub(crate) fn normalize_symbol(value: &str) -> String { +/// Canonical name comparison shared by typed resolution and its projections. +/// Node IDs are matched exactly before this normalization is applied to names. +#[must_use] +pub fn normalize_symbol(value: &str) -> String { value .trim() .trim_end_matches("()") diff --git a/crates/compass-query/src/discovery.rs b/crates/compass-query/src/discovery.rs index 4cbda3aa1..88ba5583f 100644 --- a/crates/compass-query/src/discovery.rs +++ b/crates/compass-query/src/discovery.rs @@ -463,6 +463,38 @@ impl CodeQueryEngine { } } + // Preserve identifier spellings embedded in prose before generic + // behavior postings can fill the recall pool. The name index also + // contains aliases, so only a declared name equal to the literal earns + // exact-name rank. Every lookup and pool omission participates in the + // completeness proof; a bounded collision set is never unique. + for literal in literal_identifier_terms(question) { + guard.check()?; + if probes >= candidate_probe_limit || nodes_read >= candidate_read_limit { + exact_name_recall_complete = false; + truncated = true; + break; + } + probes += 1; + let remaining = candidate_read_limit.saturating_sub(nodes_read).min(64); + let (nodes, read_truncated) = + backend.nodes_by_normalized_name(&literal, remaining.max(1))?; + nodes_read = nodes_read.saturating_add(nodes.len()); + exact_name_recall_complete &= !read_truncated; + truncated |= read_truncated; + for node in nodes { + if discovery_scope_matches(&node, scope) + && crate::ranking::normalize_symbol_name(&node.name) == literal + { + let id = node.id.clone(); + let matches = operation_indexed_matches(&node, &prepared.ranking_terms); + let _ = pool.add(CandidateSource::ExactName, node); + let _ = pool.add_indexed_matches(&id, matches); + } + } + } + exact_name_recall_complete &= !pool.is_truncated(); + // An absent composite identifier is intentionally exact-only: the // final specificity gate below rejects every alias, term, // relationship, and fuzzy candidate for this query shape. Finish a @@ -518,7 +550,8 @@ impl CodeQueryEngine { role_pool.into_vec(), candidate_limit, ); - if !read.truncated + if exact_name_recall_complete + && !read.truncated && !role_pool_truncated && ranked.first().is_some_and(|candidate| { candidate @@ -586,7 +619,8 @@ impl CodeQueryEngine { let required_seed_count = usize::try_from(limits.max_seeds) .unwrap_or(usize::MAX) .min(usize::try_from(limits.max_nodes).unwrap_or(usize::MAX)); - if !read.truncated + if exact_name_recall_complete + && !read.truncated && !declaration_pool_truncated && ranked.len() >= required_seed_count && ranked @@ -1125,7 +1159,8 @@ impl CodeQueryEngine { || (candidate.channel_rank == 5 && exact_name_recall_complete) }); let operation_dominance_complete = ranked.first().is_some_and(|candidate| { - candidate.operation_root.is_some() + candidate.channel_rank < 5 + && candidate.operation_root.is_some() && operation_predicate_posting_complete( &candidate.node, &prepared.ranking_terms, @@ -1512,6 +1547,26 @@ fn is_explicit_binary_path_question( >= 2 } +fn literal_identifier_terms(question: &str) -> BTreeSet { + // Standalone names already use the full-query exact lookup. In prose, + // underscores and mixed-case internal capitals distinguish code spellings + // from ordinary words such as "Explain", "close", or "HTTP". This is a + // retrieval hint, not a claim that a named declaration exists or is unique. + if !question.chars().any(char::is_whitespace) { + return BTreeSet::new(); + } + question + .split(|character: char| !character.is_alphanumeric() && character != '_') + .filter(|token| { + token.chars().any(char::is_alphanumeric) + && (token.contains('_') + || (token.chars().any(char::is_lowercase) + && token.chars().skip(1).any(char::is_uppercase))) + }) + .map(crate::ranking::normalize_symbol_name) + .collect() +} + fn is_composite_identifier_query(question: &str, terms: &[String]) -> bool { !question.chars().any(char::is_whitespace) && question @@ -1999,16 +2054,19 @@ fn discovery_seeds( .iter() .filter(|other| { other.node.id != candidate.node.id - && other.channel_rank == candidate.channel_rank - && other.relation_evidence == candidate.relation_evidence - && ((other.operation_root == candidate.operation_root - && (other.score.total_cmp(&candidate.score).is_eq() - || calibrated_low_margin(candidate.score, other.score) - || (candidate.source == DiscoverySeedSource::ExactName - && other.source == DiscoverySeedSource::ExactName - && source_backed_name_collision(candidate, other)))) - || (other.score.total_cmp(&candidate.score).is_eq() - && source_backed_callable_name_collision(candidate, other))) + // Ranking evidence orders declarations; it cannot + // disambiguate identical exact names across kinds, + // signatures, or owners. + && ((candidate.source == DiscoverySeedSource::ExactName + && other.source == DiscoverySeedSource::ExactName + && source_backed_name_collision(candidate, other)) + || (other.channel_rank == candidate.channel_rank + && other.relation_evidence == candidate.relation_evidence + && ((other.operation_root == candidate.operation_root + && (other.score.total_cmp(&candidate.score).is_eq() + || calibrated_low_margin(candidate.score, other.score))) + || (other.score.total_cmp(&candidate.score).is_eq() + && source_backed_callable_name_collision(candidate, other))))) }) .map(|other| DiscoveryAlternative { node_id: other.node.id.clone(), @@ -3016,6 +3074,170 @@ mod tests { Ok(()) } + #[test] + fn literal_identifiers_in_prose_keep_exact_name_priority() + -> Result<(), Box> { + for name in [ + "_BufferedSink", + "openSession", + "PendingQueue", + "flush_buffer", + ] { + let engine = engine( + vec![ + anchored_node("n:subject", name, "src/subject.rs", 1), + anchored_node("n:close", "close", "src/other.rs", 2), + anchored_node("n:context", "context", "src/context.rs", 3), + ], + vec![edge("e:context", "n:close", "n:context")], + ); + let mut query = request(DiscoveryDirection::Both); + query.question = + format!("Explain {name} ownership, close behavior and context cleanup."); + query.limits.max_candidates = 1; + let response = engine.discover(query)?; + assert_eq!(response.seeds[0].node_id, "n:subject", "{name}"); + assert!(!response.seeds[0].matched_terms.is_empty(), "{name}"); + assert_eq!( + response.seeds[0].candidate_source, + DiscoverySeedSource::ExactName + ); + } + Ok(()) + } + + #[test] + fn literal_identifiers_in_prose_preserve_collisions() -> Result<(), Box> + { + let engine = engine( + vec![ + anchored_node("n:a", "openSession", "src/a.rs", 1), + anchored_node("n:b", "openSession", "src/b.rs", 2), + ], + Vec::new(), + ); + let mut query = request(DiscoveryDirection::Both); + query.question = "Explain openSession cleanup".to_owned(); + let response = engine.discover(query)?; + assert!(response.seeds[0].ambiguous); + assert_eq!( + response.seeds[0].candidate_source, + DiscoverySeedSource::ExactName + ); + assert!( + response.seeds[0] + .alternatives + .iter() + .any(|other| other.node_id != response.seeds[0].node_id) + ); + Ok(()) + } + + #[test] + fn literal_identifiers_in_prose_keep_collisions_across_rank_evidence() + -> Result<(), Box> { + let mut declaration = anchored_node("n:struct", "PendingQueue", "src/queue.rs", 1); + declaration.kind = NodeKind::Struct; + let engine = engine( + vec![ + declaration, + anchored_node("n:factory", "PendingQueue", "src/factory.rs", 2), + ], + Vec::new(), + ); + let mut query = request(DiscoveryDirection::Both); + query.question = "Explain PendingQueue ownership".to_owned(); + let response = engine.discover(query)?; + assert_eq!(response.seeds.len(), 2); + assert!(response.seeds.iter().all(|seed| seed.ambiguous)); + Ok(()) + } + + #[test] + fn literal_identifiers_in_prose_keep_multiple_subjects_and_report_pool_limits() + -> Result<(), Box> { + let engine = engine( + vec![ + anchored_node("n:a", "openSession", "src/a.rs", 1), + anchored_node("n:b", "closeSession", "src/b.rs", 2), + ], + Vec::new(), + ); + let mut query = request(DiscoveryDirection::Both); + query.question = "Compare openSession and closeSession behavior".to_owned(); + let response = engine.discover(query.clone())?; + assert_eq!(response.seeds.len(), 2); + assert!( + response + .seeds + .iter() + .all(|seed| seed.candidate_source == DiscoverySeedSource::ExactName) + ); + query.limits.max_candidates = 1; + let limited = engine.discover(query)?; + assert!(limited.truncated); + assert!(limited.seeds[0].ambiguous); + Ok(()) + } + + #[test] + fn literal_identifiers_in_prose_report_incomplete_name_postings() + -> Result<(), Box> { + let nodes = (0..70) + .map(|index| { + anchored_node( + &format!("n:{index:03}"), + "openSession", + &format!("src/{index}.rs"), + 1, + ) + }) + .collect(); + let engine = engine(nodes, Vec::new()); + let mut query = request(DiscoveryDirection::Both); + query.question = "Explain openSession cleanup".to_owned(); + // Only the first declaration is in scope. Truncated global postings + // still cannot prove that it is the only matching declaration here. + query.scope = vec![DiscoveryScope { + kind: DiscoveryScopeKind::Source, + value: "src/0.rs".to_owned(), + }]; + let response = engine.discover(query)?; + assert!(response.truncated); + assert_eq!(response.seeds.len(), 1); + assert_eq!(response.seeds[0].node_id, "n:000"); + assert!(response.seeds[0].ambiguous); + Ok(()) + } + + #[test] + fn literal_identifiers_in_prose_do_not_promote_plain_words_or_partial_names() + -> Result<(), Box> { + let engine = engine( + vec![ + anchored_node("n:close", "close", "src/close.rs", 1), + anchored_node("n:explain", "Explain", "src/explain.rs", 2), + anchored_node("n:partial", "Session", "src/session.rs", 3), + ], + Vec::new(), + ); + for question in [ + "Explain close behavior", + "Explain missingSession close behavior", + ] { + let mut query = request(DiscoveryDirection::Both); + query.question = question.to_owned(); + let response = engine.discover(query)?; + assert!( + response + .seeds + .iter() + .all(|seed| seed.candidate_source != DiscoverySeedSource::ExactName) + ); + } + Ok(()) + } + #[test] fn exact_name_beats_a_maximal_relationship_match() -> Result<(), Box> { let engine = engine( diff --git a/crates/compass-query/src/explanation_members.rs b/crates/compass-query/src/explanation_members.rs new file mode 100644 index 000000000..783c08b52 --- /dev/null +++ b/crates/compass-query/src/explanation_members.rs @@ -0,0 +1,287 @@ +//! Source evidence for recorded members, independent of language layout. + +use std::collections::{BTreeSet, VecDeque}; +use std::path::Path; + +use compass_model::code_graph::NodeKind; +use compass_model::{EdgeRecord, Graph, NodeRecord, canonical_code_token, identifier_tokens}; +use serde_json::Value; + +use crate::neighbors::bounded_json_size; +use crate::traversal::{ + ExplainedSource, ExplanationSourceError, explanation_source, node_source_anchor, + resolve_explanation_source_node, +}; + +const MAX_MEMBERS: usize = 128; +const MAX_CONTAINERS: usize = 128; +const MAX_ADJACENCY: usize = 10_000; +const MAX_DEPTH: usize = 4; +const MAX_METADATA_BYTES: usize = 1_048_576; +const MAX_SOURCE_BYTES: u64 = 1_048_576; +const MAX_VERIFIED_SPAN_BYTES: u64 = 16_777_216; + +#[derive(Debug)] +pub struct ExplainedMember<'a> { + pub node: &'a NodeRecord, + pub source: Result, + /// Lexical matches in the recorded name, not evidence of behavior. + pub matched_focus_terms: Vec, +} + +#[derive(Debug)] +pub struct ExplainedMembers<'a> { + pub root: &'a NodeRecord, + pub focus_terms: Vec, + /// Full recorded membership evidence, retaining parallel records. + pub membership: Vec<&'a EdgeRecord>, + pub members: Vec>, + pub omitted_members: usize, + pub source_bytes: u64, + /// Charged span sizes, including failed attempts; not a disk-I/O measurement. + pub verification_bytes_charged: u64, + pub truncated: bool, +} + +fn error(message: &str) -> ExplanationSourceError { + ExplanationSourceError::Read(message.to_owned()) +} + +/// Validated lexical focus for recorded member names. No source is read to rank. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExplanationMemberFocus { + terms: BTreeSet, +} + +impl ExplanationMemberFocus { + pub fn new(text: &str) -> Result { + if text.len() > 4096 { + return Err(error("member focus exceeds its 4096-byte limit")); + } + let terms = crate::query_terms(text) + .into_iter() + .collect::>(); + if terms.is_empty() || terms.len() > 32 { + return Err(error( + "member focus requires from 1 to 32 distinct searchable terms", + )); + } + Ok(Self { terms }) + } + + fn matches(&self, node: &NodeRecord) -> Vec { + let mut tokens = BTreeSet::new(); + // Match the lexical index's treatment of whole snake-case identifiers + // and their components; identifier_tokens deliberately retains '_'. + for token in identifier_tokens(&node.string("name")) { + tokens.insert(canonical_code_token(token.clone())); + if token.contains('_') { + for part in token.split('_').filter(|part| !part.is_empty()) { + tokens.insert(canonical_code_token(part.to_owned())); + } + } + } + self.terms.intersection(&tokens).cloned().collect() + } +} + +fn kind(node: &NodeRecord) -> Option { + if node.kind_name().len() > 64 { + return None; + } + serde_json::from_value(Value::String(node.kind_name().to_owned())).ok() +} + +/// Read callable members reached through recorded outgoing containment. +/// +/// Nested type containers are traversed; callable bodies already include their +/// lexical contents, so their nested declarations are not read a second time. +/// Source order is deterministic and all excerpts share one retained-byte cap. +/// Bounds on traversal, metadata and verification work apply independently. +/// This reports graph membership, not proof of excessive responsibility. +pub fn explanation_member_sources<'a>( + graph: &'a Graph, + label: &str, + root: &Path, + max_source_bytes: u64, +) -> Result, ExplanationSourceError> { + explanation_member_sources_with_focus(graph, label, root, max_source_bytes, None) +} + +/// Prioritize distinct normalized name matches, then the original source order. +/// +/// Focus changes only presentation priority; it neither filters membership nor +/// resolves ambiguity. The unfocused API and zero-match ordering are preserved. +pub fn explanation_member_sources_with_focus<'a>( + graph: &'a Graph, + label: &str, + root: &Path, + max_source_bytes: u64, + focus: Option<&ExplanationMemberFocus>, +) -> Result, ExplanationSourceError> { + if label.len() > 4096 || !(1..=MAX_SOURCE_BYTES).contains(&max_source_bytes) { + return Err(error( + "member source requires a selector up to 4096 bytes and a source budget from 1 to 1048576 bytes", + )); + } + if !graph.is_directed() { + return Err(error( + "member source requires directed recorded containment", + )); + } + let seed = resolve_explanation_source_node(graph, label)?; + let mut metadata_bytes = bounded_json_size(graph.node(seed), MAX_METADATA_BYTES) + .map_err(|_| error("member metadata exceeds its 1048576-byte limit"))?; + let mut queue = VecDeque::from([(seed, 0_usize)]); + let mut containers = BTreeSet::from([seed]); + let mut members = BTreeSet::new(); + let mut membership = Vec::new(); + let mut adjacency = 0_usize; + while let Some((owner, depth)) = queue.pop_front() { + for index in graph.outgoing_edges(owner) { + adjacency += 1; + if adjacency > MAX_ADJACENCY { + return Err(error("member discovery exceeds its 10000-adjacency limit")); + } + let edge = graph.edge(index); + if !matches!(edge.relation(), "contains" | "method") + || edge.source != graph.node(owner).id + { + continue; + } + // Bound normalization even for records later excluded by confidence. + metadata_bytes += + bounded_json_size(edge, MAX_METADATA_BYTES.saturating_sub(metadata_bytes)) + .map_err(|_| error("member metadata exceeds its 1048576-byte limit"))?; + if edge.attributes.get("deferred").and_then(Value::as_bool) == Some(true) + || !matches!(edge.string("confidence").as_str(), "" | "EXTRACTED") + { + continue; + } + let Some(target) = graph.node_index(&edge.target) else { + continue; + }; + let node = graph.node(target); + let Some(kind) = kind(node) else { + continue; + }; + if !kind.is_callable() && !kind.is_type() { + continue; + } + // Canonical order retains every parallel record and unknown attribute. + let mut canonical = serde_json::to_value(edge).map_err(|e| error(&e.to_string()))?; + canonical.sort_all_objects(); + let key = serde_json::to_vec(&canonical).map_err(|e| error(&e.to_string()))?; + membership.push((key, edge)); + if target == seed || containers.contains(&target) || members.contains(&target) { + continue; + } + if depth >= MAX_DEPTH { + return Err(error( + "member discovery exceeds its containment depth limit (4)", + )); + } + metadata_bytes += + bounded_json_size(node, MAX_METADATA_BYTES.saturating_sub(metadata_bytes)) + .map_err(|_| error("member metadata exceeds its 1048576-byte limit"))?; + if kind.is_callable() { + members.insert(target); + if members.len() > MAX_MEMBERS { + return Err(error("member discovery exceeds its 128-callable limit")); + } + } else { + containers.insert(target); + if containers.len() > MAX_CONTAINERS { + return Err(error("member discovery exceeds its 128-container limit")); + } + queue.push_back((target, depth + 1)); + } + } + } + membership.sort_by(|a, b| a.0.cmp(&b.0)); + let mut ordered = members + .into_iter() + .map(|index| { + let node = graph.node(index); + let anchor = node_source_anchor(node); + let key = anchor + .as_ref() + .map(|a| (a.file.clone(), a.start_byte, a.end_byte)); + let matches = focus.map(|f| f.matches(node)).unwrap_or_default(); + (key, node, matches) + }) + .collect::>(); + ordered.sort_by(|a, b| { + b.2.len() + .cmp(&a.2.len()) + .then_with(|| a.0.cmp(&b.0)) + .then_with(|| a.1.id.cmp(&b.1.id)) + }); + let total = ordered.len(); + let mut report = ExplainedMembers { + root: graph.node(seed), + focus_terms: focus + .map(|f| f.terms.iter().cloned().collect()) + .unwrap_or_default(), + membership: membership.into_iter().map(|(_, edge)| edge).collect(), + members: Vec::new(), + omitted_members: 0, + source_bytes: 0, + verification_bytes_charged: 0, + truncated: false, + }; + for (_, node, matched_focus_terms) in ordered { + let remaining = max_source_bytes.saturating_sub(report.source_bytes); + if remaining == 0 { + report.truncated = true; + break; + } + let Some(anchor) = node_source_anchor(node) else { + report.members.push(ExplainedMember { + node, + matched_focus_terms, + source: Err(ExplanationSourceError::Unsourced { + label: node.id.clone(), + }), + }); + continue; + }; + let Some(span_bytes) = anchor.end_byte.checked_sub(anchor.start_byte) else { + report.members.push(ExplainedMember { + node, + matched_focus_terms, + source: Err(error("recorded member source span is inverted")), + }); + continue; + }; + if span_bytes > MAX_VERIFIED_SPAN_BYTES.saturating_sub(report.verification_bytes_charged) { + report.truncated = true; + break; + } + // Charge attempted complete spans too: failed digest checks consume work. + report.verification_bytes_charged += span_bytes; + let mut source = explanation_source(graph, &node.id, root, remaining); + if let Ok(excerpt) = &mut source { + // Lossy UTF-8 decoding can expand a clipped sequence. The retained + // string itself must still fit the shared byte cap. + let cap = usize::try_from(remaining).unwrap_or(usize::MAX); + if excerpt.source.len() > cap { + let mut end = cap; + while !excerpt.source.is_char_boundary(end) { + end -= 1; + } + excerpt.source.truncate(end); + excerpt.truncated = true; + } + report.source_bytes += excerpt.source.len() as u64; + report.truncated |= excerpt.truncated; + } + report.members.push(ExplainedMember { + node, + source, + matched_focus_terms, + }); + } + report.omitted_members = total.saturating_sub(report.members.len()); + Ok(report) +} diff --git a/crates/compass-query/src/export_binding.rs b/crates/compass-query/src/export_binding.rs new file mode 100644 index 000000000..8282d0bea --- /dev/null +++ b/crates/compass-query/src/export_binding.rs @@ -0,0 +1,299 @@ +//! Name lookup may expose both a public export binding and its declaration. +//! Only explicit, coincident export evidence lets lookup remove the redundant +//! binding candidate. Exact-ID lookup bypasses this rule entirely. + +use std::collections::BTreeSet; + +use compass_model::code_graph::{EdgeRecord, NodeRecord}; +use compass_model::provenance::{EvidenceConfidence, SourceAnchor, effective_confidence}; + +pub(crate) const MAX_EXPORT_PROOF_EDGES: usize = 1024; +pub(crate) const MAX_EXPORT_PROOF_CANDIDATES: usize = 256; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub(crate) struct SourceRange { + file: String, + start: (u32, u32), + end: (u32, u32), +} + +impl SourceRange { + fn from_anchor(anchor: &SourceAnchor) -> Option { + Self::new( + anchor.file.clone(), + (anchor.start_line, anchor.start_column), + (anchor.end_line, anchor.end_column), + ) + } + + fn new(file: String, start: (u32, u32), end: (u32, u32)) -> Option { + (!file.is_empty() && start.0 > 0 && start < end).then_some(Self { file, start, end }) + } + + fn from_location(file: String, location: &str) -> Option { + let (start, end) = location.strip_prefix('L')?.split_once("-L")?; + let position = |value: &str| { + let (line, column) = value.split_once(':')?; + Some((line.parse::().ok()?, column.parse::().ok()?)) + }; + Self::new(file, position(start)?, position(end)?) + } +} + +pub(crate) struct BindingNode { + pub(crate) id: String, + kind: String, + name: String, + qualified_name: String, + site: Option, +} + +impl BindingNode { + pub(crate) fn typed(node: &NodeRecord) -> Self { + Self { + id: node.id.clone(), + kind: node.kind.as_str().to_owned(), + name: crate::normalize_code_query_symbol(&node.name), + qualified_name: node.qualified_name.clone(), + site: node.source.as_ref().and_then(SourceRange::from_anchor), + } + } + + pub(crate) fn legacy(node: &compass_model::NodeRecord) -> Self { + Self { + id: node.id.clone(), + kind: node.kind_name().to_owned(), + name: crate::normalize_code_query_symbol(node.label()), + qualified_name: node + .logical_property("qualified_name") + .and_then(|v| v.as_str().map(str::to_owned)) + .unwrap_or_default(), + site: SourceRange::from_location( + node.string("source_file"), + &node.string("source_location"), + ), + } + } + + fn represents(&self, target: &Self) -> bool { + self.kind == "export" + && !matches!( + target.kind.as_str(), + "export" | "import" | "module" | "file" + ) + && !self.qualified_name.is_empty() + && self.qualified_name == target.qualified_name + && self.name == target.name + && matches!((&self.site, &target.site), (Some(left), Some(right)) if left.file == right.file) + } +} + +pub(crate) struct BindingEdge { + source: String, + target: String, + site: Option, + exact: bool, +} + +impl BindingEdge { + pub(crate) fn typed(edge: &EdgeRecord) -> Self { + Self { + source: edge.source.clone(), + target: edge.target.clone(), + site: edge + .relationship_site + .as_ref() + .and_then(SourceRange::from_anchor), + exact: !edge.deferred + && effective_confidence(&edge.evidence) == Some(EvidenceConfidence::Exact), + } + } + + pub(crate) fn legacy(edge: &compass_model::EdgeRecord) -> Self { + // Do not inherit the permissive compatibility default for an unknown + // confidence spelling, or select the first item of mixed evidence. + let mut confidence_seen = false; + let mut exact = edge + .attributes + .get("deferred") + .is_none_or(|value| value.as_bool() == Some(false)); + if let Some(value) = edge.attributes.get("confidence") { + confidence_seen = true; + exact &= matches!(value.as_str(), Some("EXTRACTED" | "exact")); + } + if let Some(evidence) = edge.attributes.get("evidence") { + if let Some(items) = evidence.as_array() { + for item in items { + confidence_seen = true; + exact &= + item.get("confidence").and_then(serde_json::Value::as_str) == Some("exact"); + } + } else { + exact = false; + } + } + Self { + source: edge.source.clone(), + target: edge.target.clone(), + site: SourceRange::from_location( + edge.string("source_file"), + &edge.string("source_location"), + ), + exact: exact && confidence_seen, + } + } +} + +pub(crate) struct ProofRead { + pub(crate) edges: Vec, + pub(crate) examined: usize, + pub(crate) truncated: bool, +} + +#[derive(Default)] +pub(crate) struct ExportProof { + pub(crate) redundant: BTreeSet, + pub(crate) examined: usize, + pub(crate) truncated: bool, +} + +pub(crate) fn redundant_export_bindings( + candidates: &[BindingNode], + mut read: impl FnMut(&str, bool, usize) -> Result, +) -> Result { + let mut proof = ExportProof::default(); + if candidates.len() > MAX_EXPORT_PROOF_CANDIDATES { + return Ok(proof); + } + for binding in candidates.iter().filter(|n| n.kind == "export") { + if !candidates.iter().any(|target| binding.represents(target)) { + continue; + } + let Some(site) = binding.site.as_ref() else { + continue; + }; + let remaining = MAX_EXPORT_PROOF_EDGES.saturating_sub(proof.examined); + if remaining == 0 { + proof.truncated = true; + break; + } + let incoming = read(&binding.id, true, remaining)?; + proof.examined = proof.examined.saturating_add(incoming.examined); + if incoming.truncated { + proof.truncated = true; + break; + } + let [contains] = incoming.edges.as_slice() else { + continue; + }; + if contains.target != binding.id || !contains.exact || contains.site.as_ref() != Some(site) + { + continue; + } + let remaining = MAX_EXPORT_PROOF_EDGES.saturating_sub(proof.examined); + if remaining == 0 { + proof.truncated = true; + break; + } + let exports = read(&contains.source, false, remaining)?; + proof.examined = proof.examined.saturating_add(exports.examined); + if exports.truncated { + proof.truncated = true; + break; + } + // Missing occurrence evidence cannot rule out another target at this + // binding. Do not decide uniqueness from a partial source projection. + if exports.edges.iter().any(|edge| edge.site.is_none()) { + continue; + } + let selected = exports + .edges + .iter() + .filter(|edge| edge.site.as_ref() == Some(site)) + .collect::>(); + if selected.is_empty() + || selected + .iter() + .any(|edge| !edge.exact || edge.source != contains.source) + { + continue; + } + let targets = selected + .iter() + .map(|edge| edge.target.as_str()) + .collect::>(); + if targets.len() != 1 { + continue; + } + if candidates + .iter() + .any(|target| targets.contains(target.id.as_str()) && binding.represents(target)) + { + proof.redundant.insert(binding.id.clone()); + } + } + // Avoid a partially canonicalized result if any required proof exhausts + // its budget. The caller retains ambiguity, never an empty/no-match claim. + if proof.truncated { + proof.redundant.clear(); + } + Ok(proof) +} + +pub(crate) fn legacy_candidates( + graph: &compass_model::Graph, + mut matches: Vec, +) -> Vec { + if matches.len() < 2 + || matches.len() > MAX_EXPORT_PROOF_CANDIDATES + || !matches + .iter() + .any(|index| graph.node(*index).kind_name() == "export") + { + return matches; + } + let candidates = matches + .iter() + .map(|index| BindingNode::legacy(graph.node(*index))) + .collect::>(); + let result = + redundant_export_bindings::(&candidates, |id, inbound, limit| { + let Some(index) = graph.node_index(id) else { + return Ok(ProofRead { + edges: Vec::new(), + examined: 0, + truncated: false, + }); + }; + let mut edges = Vec::new(); + let mut examined = 0; + let mut truncated = false; + let indices: Box> = if inbound { + Box::new(graph.incoming_edges(index)) + } else { + Box::new(graph.outgoing_edges(index)) + }; + for edge_index in indices.take(limit.saturating_add(1)) { + examined += 1; + if examined > limit { + truncated = true; + break; + } + let edge = graph.edge(edge_index); + if edge.relation() == if inbound { "contains" } else { "exports" } { + edges.push(BindingEdge::legacy(edge)); + } + } + Ok(ProofRead { + edges, + examined, + truncated, + }) + }); + let proof = match result { + Ok(proof) => proof, + Err(never) => match never {}, + }; + matches.retain(|index| !proof.redundant.contains(&graph.node(*index).id)); + matches +} diff --git a/crates/compass-query/src/intent.rs b/crates/compass-query/src/intent.rs index 4b530d810..f3b09ac77 100644 --- a/crates/compass-query/src/intent.rs +++ b/crates/compass-query/src/intent.rs @@ -38,9 +38,15 @@ pub struct NaturalQueryPlan { intent: NaturalQueryIntent, confidence: u8, operands: Vec, + #[serde(default, skip_serializing_if = "is_false")] + calls_only: bool, } impl NaturalQueryPlan { + #[must_use] + pub fn calls_only(&self) -> bool { + self.calls_only + } #[must_use] pub fn profile(&self) -> &str { &self.profile @@ -145,6 +151,7 @@ impl CodeQueryEngine { })?; self.node_trail_instrumented( NodeTrailRequest { + calls_only: plan.calls_only, source: primary, target, include_heuristic: request.include_heuristic, @@ -176,6 +183,14 @@ fn plan_validated_natural_query(question: &str) -> NaturalQueryPlan { } let lower = original.to_ascii_lowercase(); + for prefix in ["call path from ", "call chain from "] { + if let Some((source, target)) = split_operands(original, &lower, prefix, " to ") { + let mut result = plan(NaturalQueryIntent::NodeTrail, 100, [source, target]); + result.calls_only = true; + return result; + } + } + for prefix in [ "shortest path from ", "path from ", @@ -325,9 +340,14 @@ fn plan( intent, confidence, operands: operands.into_iter().collect(), + calls_only: false, } } +fn is_false(value: &bool) -> bool { + !value +} + fn fallback_plan(query: &str) -> NaturalQueryPlan { plan(NaturalQueryIntent::Fallback, 0, [query.to_owned()]) } diff --git a/crates/compass-query/src/lib.rs b/crates/compass-query/src/lib.rs index a14d3c766..84d0e501e 100644 --- a/crates/compass-query/src/lib.rs +++ b/crates/compass-query/src/lib.rs @@ -9,9 +9,12 @@ mod code_query; mod cql; mod discovery; mod discovery_text; +mod explanation_members; +mod export_binding; mod graph_engine; mod index; mod intent; +mod neighbors; mod program_join; mod ranking; mod recall; @@ -25,7 +28,9 @@ mod traversal; pub use affected::{DEFAULT_AFFECTED_RELATIONS, affected_nodes, format_affected, resolve_seed}; pub use benchmark::{BenchmarkQuestion, BenchmarkResult, format_benchmark, run_benchmark}; -pub use code_query::CodeQueryEngine; +pub use code_query::{ + CodeQueryEngine, ExactSearchFilter, normalize_symbol as normalize_code_query_symbol, +}; pub use cql::{ CacheStats, ExplainPlan, OperatorProfile, PlanCache, PlanCacheConfig, QueryError, QueryErrorKind, QueryLimits, QueryProfile, QueryRequest, QueryResult, execute, @@ -36,6 +41,10 @@ pub use discovery_text::{ discovery_response_digest, discovery_result_envelope, render_discovery_text_page, render_discovery_text_page_with_prefix, }; +pub use explanation_members::{ + ExplainedMember, ExplainedMembers, ExplanationMemberFocus, explanation_member_sources, + explanation_member_sources_with_focus, +}; pub use graph_engine::{ DirectGraphEngine, EffectiveGraphEngine, GraphEngine, JsonGraphEngine, StoreGraphEngine, open_graph_engine, @@ -50,6 +59,10 @@ pub use intent::{ NaturalQueryIntent, NaturalQueryPlan, NaturalQueryRequest, QUERY_PLANNER_PROFILE_V1, plan_natural_query, }; +pub use neighbors::{ + MAX_NEIGHBOR_ADJACENCY_ENTRIES, MAX_NEIGHBOR_RECORDS, MAX_NEIGHBOR_RESPONSE_BYTES, + NeighborDirection, NeighborError, NeighborGroup, NeighborReport, direct_neighbors, +}; pub use program_join::join_program_evidence; pub use ranking::QUERY_RANKER_PROFILE_V1; pub use relevance::{ @@ -61,7 +74,8 @@ pub use relevance::{ }; pub use score::{ ProfiledQueryScores, QueryScores, ScoredNode, TEXT_RANKER_BM25_V1, TEXT_RANKER_FULL_SCAN_V1, - TextRankProfile, find_node, pick_scored_endpoint, score_nodes, score_nodes_with_profile, + TextRankProfile, find_exact_nodes, find_node, pick_scored_endpoint, score_nodes, + score_nodes_with_profile, }; pub use telemetry::{ ProfiledCodeQueryResponse, QUERY_EXECUTION_PROFILE_V1, QueryExecutionProfile, @@ -74,10 +88,10 @@ pub use text_cursor::{ }; pub use traversal::{ DEFAULT_PATH_DEPTH_LIMIT, DEFAULT_TEXT_TOKEN_BUDGET, ExplainedSource, ExplanationSourceError, - ProfiledTextPageOptions, TextPageOptions, TextPaginationError, TraversalMode, + HopPathResult, ProfiledTextPageOptions, TextPageOptions, TextPaginationError, TraversalMode, explanation_source, query_graph_text, query_graph_text_page, query_graph_text_page_with_profile, render_explanation, render_explanation_page, - render_shortest_path, render_shortest_path_with_limit, + render_shortest_path, render_shortest_path_with_limit, shortest_hop_path, }; /// Return the canonical semantic-result digest for a typed code query. diff --git a/crates/compass-query/src/neighbors.rs b/crates/compass-query/src/neighbors.rs new file mode 100644 index 000000000..4829e2a23 --- /dev/null +++ b/crates/compass-query/src/neighbors.rs @@ -0,0 +1,349 @@ +//! Bounded, lossless incident-record projection for direct navigation. + +use std::collections::{BTreeMap, BTreeSet}; +use std::io::Write; + +use compass_model::{EdgeRecord, Graph, NodeIndex, NodeRecord}; +use serde::Serialize; +use thiserror::Error; + +pub const MAX_NEIGHBOR_ADJACENCY_ENTRIES: usize = 1_000_000; +pub const MAX_NEIGHBOR_RECORDS: usize = 10_000; +pub const MAX_NEIGHBOR_RESPONSE_BYTES: usize = 1_048_576; + +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum NeighborDirection { + Outgoing, + Incoming, +} + +#[derive(Debug, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct NeighborGroup<'a> { + pub direction: NeighborDirection, + pub node: &'a NodeRecord, + /// Complete records, including parallel occurrences and unknown attributes. + pub edges: Vec<&'a EdgeRecord>, +} + +#[derive(Debug, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct NeighborReport<'a> { + pub schema: &'static str, + /// Directions describe persisted endpoints, even on undirected artifacts. + pub direction_basis: &'static str, + pub graph_directed: bool, + pub seed: &'a NodeRecord, + pub relation_filter: String, + pub neighbors: Vec>, + pub truncated: bool, +} + +#[derive(Debug, Error)] +pub enum NeighborError { + #[error("neighbor seed is absent from the selected graph")] + MissingSeed, + #[error("neighbor relation filter exceeds 4096 bytes")] + FilterLimit, + #[error("neighbor lookup exceeds its adjacency-entry limit ({0})")] + AdjacencyLimit(usize), + #[error("neighbor lookup exceeds its matching-record limit ({0})")] + RecordLimit(usize), + #[error("neighbor result exceeds its byte limit ({0}); narrow relation_filter")] + ResponseLimit(usize), + #[error("cannot encode neighbor evidence: {0}")] + Encoding(#[from] serde_json::Error), +} + +struct ByteCounter { + bytes: usize, + limit: usize, + exceeded: bool, +} + +impl Write for ByteCounter { + fn write(&mut self, bytes: &[u8]) -> std::io::Result { + if bytes.len() > self.limit.saturating_sub(self.bytes) { + self.exceeded = true; + return Err(std::io::Error::other("neighbor byte limit")); + } + self.bytes += bytes.len(); + Ok(bytes.len()) + } + + fn flush(&mut self) -> std::io::Result<()> { + Ok(()) + } +} + +impl ByteCounter { + fn count(&mut self, value: &impl Serialize) -> Result<(), NeighborError> { + let result = serde_json::to_writer(&mut *self, value); + if self.exceeded { + return Err(NeighborError::ResponseLimit(self.limit)); + } + result?; + Ok(()) + } +} + +/// Project exact destinations and every matching incident record from one graph. +/// +/// No partial result is returned on exhaustion. Nodes sort by direction then ID; +/// records sort by canonical JSON, preserving identical parallel records. A self +/// loop appears in both directions, but counts once against the record budget. +/// Supply a full-record graph, not a compact traversal projection. +pub fn direct_neighbors<'a>( + graph: &'a Graph, + seed: NodeIndex, + relation_filter: &str, +) -> Result, NeighborError> { + bounded_neighbors( + graph, + seed, + relation_filter, + MAX_NEIGHBOR_ADJACENCY_ENTRIES, + MAX_NEIGHBOR_RECORDS, + MAX_NEIGHBOR_RESPONSE_BYTES, + ) +} + +fn bounded_neighbors<'a>( + graph: &'a Graph, + seed: NodeIndex, + relation_filter: &str, + max_adjacency: usize, + max_records: usize, + max_bytes: usize, +) -> Result, NeighborError> { + if seed >= graph.node_count() { + return Err(NeighborError::MissingSeed); + } + if relation_filter.len() > 4096 { + return Err(NeighborError::FilterLimit); + } + let filter = relation_filter.to_lowercase(); + let seed_node = graph.node(seed); + let mut bytes = ByteCounter { + bytes: 0, + limit: max_bytes, + exceeded: false, + }; + bytes.count(seed_node)?; + let mut seen = BTreeSet::new(); + let mut matched = 0; + let mut groups = BTreeMap::<(NeighborDirection, &str), Vec<(Vec, &EdgeRecord)>>::new(); + for (examined, index) in graph + .outgoing_edges(seed) + .chain(graph.incoming_edges(seed)) + .enumerate() + { + if examined >= max_adjacency { + return Err(NeighborError::AdjacencyLimit(max_adjacency)); + } + if !seen.insert(index) { + continue; + } + let edge = graph.edge(index); + // Bound encoding and normalization even for a nonmatching record. + let mut edge_bytes = ByteCounter { + bytes: 0, + limit: max_bytes, + exceeded: false, + }; + edge_bytes.count(edge)?; + if !filter.is_empty() && !edge.string("relation").to_lowercase().contains(&filter) { + continue; + } + if matched >= max_records { + return Err(NeighborError::RecordLimit(max_records)); + } + matched += 1; + let mut canonical = serde_json::to_value(edge)?; + canonical.sort_all_objects(); + let key = serde_json::to_vec(&canonical)?; + for (direction, applies, other) in [ + ( + NeighborDirection::Outgoing, + edge.source == seed_node.id, + edge.target.as_str(), + ), + ( + NeighborDirection::Incoming, + edge.target == seed_node.id, + edge.source.as_str(), + ), + ] { + if !applies { + continue; + } + let node = graph.node_index(other).ok_or(NeighborError::MissingSeed)?; + if !groups.contains_key(&(direction, other)) { + bytes.count(graph.node(node))?; + } + bytes.count(edge)?; + groups + .entry((direction, other)) + .or_default() + .push((key.clone(), edge)); + } + } + let neighbors = groups + .into_iter() + .map(|((direction, id), mut edges)| { + edges.sort_by(|left, right| left.0.cmp(&right.0)); + let index = graph.node_index(id).ok_or(NeighborError::MissingSeed)?; + Ok(NeighborGroup { + direction, + node: graph.node(index), + edges: edges.into_iter().map(|(_, edge)| edge).collect(), + }) + }) + .collect::, NeighborError>>()?; + let report = NeighborReport { + schema: "compass.query.neighbors/1", + direction_basis: "stored-endpoints", + graph_directed: graph.is_directed(), + seed: seed_node, + relation_filter: filter, + neighbors, + truncated: false, + }; + // Include envelope keys and repeated direction/node fields in the final cap. + ByteCounter { + bytes: 0, + limit: max_bytes, + exceeded: false, + } + .count(&report)?; + Ok(report) +} + +/// Reuse the streaming JSON counter for other bounded graph projections. +pub(crate) fn bounded_json_size( + value: &impl Serialize, + limit: usize, +) -> Result { + let mut counter = ByteCounter { + bytes: 0, + limit, + exceeded: false, + }; + counter.count(value)?; + Ok(counter.bytes) +} + +#[cfg(test)] +mod tests { + use super::*; + use compass_model::GraphDocument; + use serde_json::{Value, json}; + + fn graph(directed: bool, reverse: bool) -> Result> { + let mut nodes = vec![ + json!({"id":"seed","label":"run"}), + json!({"id":"b","label":"close","source":{"file":"b.rs","startLine":5}}), + json!({"id":"c","label":"close","source_file":"c.rs","source_location":"L9"}), + ]; + let mut links = vec![ + json!({"id":"edge-b","source":"seed","target":"b","relation":"calls","relationshipSite":{"file":"a.rs","startLine":1},"evidence":[{"origin":"ast","custom":{"x":1}}]}), + json!({"id":"edge-b2","source":"seed","target":"b","relation":"calls","relationshipSite":{"file":"a.rs","startLine":2}}), + json!({"source":"seed","target":"b","relation":"contains"}), + json!({"id":"edge-c","source":"c","target":"seed","relation":"calls"}), + json!({"id":"loop","source":"seed","target":"seed","relation":"calls"}), + ]; + links.push(links[0].clone()); + if reverse { + nodes.reverse(); + links.reverse(); + } + let document: GraphDocument = serde_json::from_value( + json!({"directed":directed,"multigraph":true,"nodes":nodes,"links":links}), + )?; + Ok(Graph::from_traversal_document(document)?) + } + + #[test] + fn neighbors_preserve_direction_parallel_records_self_loops_and_evidence() + -> Result<(), Box> { + for directed in [false, true] { + let graph = graph(directed, false)?; + let report = + direct_neighbors(&graph, graph.node_index("seed").ok_or("seed")?, "CALLS")?; + assert_eq!(report.neighbors.len(), 4); + assert_eq!(report.graph_directed, directed); + assert_eq!(report.direction_basis, "stored-endpoints"); + let group = &report.neighbors[0]; + assert_eq!(group.node.id, "b"); + assert_eq!(group.direction, NeighborDirection::Outgoing); + assert_eq!(group.edges.len(), 3); + assert_eq!(group.node.attributes["source"]["startLine"], 5); + assert_eq!(group.edges[0].attributes["evidence"][0]["custom"]["x"], 1); + assert_eq!(group.edges[0], group.edges[1]); + assert_eq!(report.neighbors[1].node.id, "seed"); + assert_eq!(report.neighbors[2].node.id, "c"); + assert_eq!(report.neighbors[2].direction, NeighborDirection::Incoming); + assert_eq!(report.neighbors[3].node.id, "seed"); + } + Ok(()) + } + + #[test] + fn neighbors_are_stable_under_graph_order_and_preserve_same_label_ids() + -> Result<(), Box> { + let mut outputs = Vec::::new(); + for reverse in [false, true] { + let graph = graph(true, reverse)?; + outputs.push(serde_json::to_value(direct_neighbors( + &graph, + graph.node_index("seed").ok_or("seed")?, + "", + )?)?); + } + assert_eq!(outputs[0], outputs[1]); + assert_eq!( + outputs[0]["neighbors"][0]["edges"] + .as_array() + .ok_or("edges")? + .len(), + 4 + ); + Ok(()) + } + + #[test] + fn neighbors_fail_explicitly_on_every_bound_and_distinguish_empty_result() + -> Result<(), Box> { + let graph = graph(true, false)?; + let seed = graph.node_index("seed").ok_or("seed")?; + assert!(matches!( + bounded_neighbors(&graph, seed, "", 0, 100, 100000), + Err(NeighborError::AdjacencyLimit(0)) + )); + assert!(matches!( + bounded_neighbors(&graph, seed, "absent", 0, 100, 100000), + Err(NeighborError::AdjacencyLimit(0)) + )); + assert!(matches!( + bounded_neighbors(&graph, seed, "calls", 100, 1, 100000), + Err(NeighborError::RecordLimit(1)) + )); + assert!(matches!( + bounded_neighbors(&graph, seed, "calls", 100, 100, 1), + Err(NeighborError::ResponseLimit(1)) + )); + assert!(matches!( + direct_neighbors(&graph, seed, &"x".repeat(4097)), + Err(NeighborError::FilterLimit) + )); + assert!(matches!( + direct_neighbors(&graph, graph.node_count(), ""), + Err(NeighborError::MissingSeed) + )); + let empty = direct_neighbors(&graph, seed, "absent")?; + assert!(empty.neighbors.is_empty()); + assert!(!empty.truncated); + Ok(()) + } +} diff --git a/crates/compass-query/src/score.rs b/crates/compass-query/src/score.rs index 237957009..e47e49536 100644 --- a/crates/compass-query/src/score.rs +++ b/crates/compass-query/src/score.rs @@ -424,7 +424,10 @@ pub fn pick_seeds( #[must_use] pub fn find_node(graph: &Graph, label: &str) -> Vec { - if let Some(index) = graph.node_index(label.trim()) { + if let Some(index) = graph + .node_index(label) + .or_else(|| graph.node_index(label.trim())) + { return vec![index]; } let term = search_tokens(label).join(" "); @@ -495,8 +498,12 @@ pub fn find_node(graph: &Graph, label: &str) -> Vec { source_exact } -pub(crate) fn find_exact_nodes(graph: &Graph, label: &str) -> Vec { - if let Some(index) = graph.node_index(label.trim()) { +/// Resolve an exact ID or normalized symbol/qualified name without fuzzy fallback. +pub fn find_exact_nodes(graph: &Graph, label: &str) -> Vec { + if let Some(index) = graph + .node_index(label) + .or_else(|| graph.node_index(label.trim())) + { return vec![index]; } let term = search_tokens(label).join(" "); @@ -504,7 +511,7 @@ pub(crate) fn find_exact_nodes(graph: &Graph, label: &str) -> Vec { return Vec::new(); } let norm_query = strip_diacritics(label).to_lowercase().trim().to_owned(); - graph + let matches = graph .nodes() .filter_map(|(index, node)| { let norm_label = normalized_label(node); @@ -521,7 +528,24 @@ pub(crate) fn find_exact_nodes(graph: &Graph, label: &str) -> Vec { || (!norm_qualified_name.is_empty() && norm_query == norm_qualified_name)) .then_some(index) }) - .collect() + .collect::>(); + if !matches.is_empty() { + return crate::export_binding::legacy_candidates(graph, matches); + } + let qualified_query = norm_query.trim_end_matches("()").replace("::", "."); + if !qualified_query.contains('.') { + return Vec::new(); + } + let suffix = format!(".{qualified_query}"); + let suffix_matches = graph + .nodes() + .filter_map(|(index, node)| { + let qualified_name = normalized_qualified_name(node).replace("::", "."); + (qualified_name == qualified_query || qualified_name.ends_with(&suffix)) + .then_some(index) + }) + .collect(); + crate::export_binding::legacy_candidates(graph, suffix_matches) } fn normalized_qualified_name(node: &NodeRecord) -> String { @@ -704,6 +728,66 @@ mod tests { score_nodes, score_nodes_with_profile, singleton_score, }; + #[test] + fn exact_node_id_precedes_whitespace_normalization() -> Result<(), Box> { + let graph = Graph::from_document(serde_json::from_value(json!({ + "directed":true, + "nodes":[{"id":" A\n","label":"run"},{"id":"A","label":"run"}], + "links":[] + }))?)?; + for query in [" A\n", "A"] { + let matches = super::find_node(&graph, query); + assert_eq!(matches.len(), 1); + assert_eq!(graph.node(matches[0]).id, query); + assert_eq!(super::find_exact_nodes(&graph, query), matches); + } + let padded = super::find_node(&graph, " A "); + assert_eq!(padded.len(), 1); + assert_eq!(graph.node(padded[0]).id, "A"); + assert_eq!(super::find_node(&graph, "run").len(), 2); + Ok(()) + } + + #[test] + fn owner_qualified_suffix_preserves_exact_precedence_and_ambiguity() + -> Result<(), Box> { + let mut document = json!({ + "directed": true, + "nodes": [ + {"id":"fastapi","label":".get_route_handler()","kind":"method","qualifiedName":"fastapi.routing.APIRoute::get_route_handler"}, + {"id":"docs","label":".get_route_handler()","kind":"method","qualifiedName":"docs.GzipRoute::get_route_handler"}, + {"id":"other","label":".get_route_handler()","kind":"method","qualifiedName":"other.routing.APIRoute::get_route_handler"} + ], + "links": [] + }); + let graph = Graph::from_document(serde_json::from_value(document.clone())?)?; + let ids = |graph: &Graph, query| { + super::find_exact_nodes(graph, query) + .into_iter() + .map(|index| graph.node(index).id.clone()) + .collect::>() + }; + assert_eq!( + ids(&graph, "APIRoute.get_route_handler"), + ["fastapi", "other"] + ); + assert_eq!( + ids(&graph, "fastapi.routing.APIRoute.get_route_handler"), + ["fastapi"] + ); + assert!(ids(&graph, "MissingRoute.get_route_handler").is_empty()); + document["nodes"] + .as_array_mut() + .ok_or("missing nodes")? + .push(json!({"id":"literal","label":"APIRoute.get_route_handler","kind":"method","qualifiedName":"literal"})); + let with_literal = Graph::from_document(serde_json::from_value(document)?)?; + assert_eq!( + ids(&with_literal, "APIRoute.get_route_handler"), + ["literal"] + ); + Ok(()) + } + fn seed(score: f64, degree: usize, label_len: usize, id: &str) -> BestSeed { BestSeed { score, diff --git a/crates/compass-query/src/traversal.rs b/crates/compass-query/src/traversal.rs index 8465b7c11..fb0bd109e 100644 --- a/crates/compass-query/src/traversal.rs +++ b/crates/compass-query/src/traversal.rs @@ -324,7 +324,8 @@ pub fn render_shortest_path_with_limit( target.index, max_depth, PathRanking::Weighted, - ); + PathSearchBudget::default(), + )?; let Some(path) = weighted.path else { return Ok(format!( "Source resolved: {}\nTarget resolved: {}\nNO PATH FOUND to resolved target (depth limit {max_depth}, {} nodes visited)", @@ -355,7 +356,8 @@ pub fn render_shortest_path_with_limit( target.index, max_depth, PathRanking::Hops, - ); + PathSearchBudget::default(), + )?; if let Some(alternative) = shorter.path && alternative.edges != path.edges && alternative.nodes.len() < path.nodes.len() @@ -534,6 +536,54 @@ enum PathRanking { struct GraphPathResult { path: Option, visited_nodes: usize, + depth_limited: bool, +} + +/// A bounded, undirected minimum-hop search over exact graph node identities. +#[derive(Debug, PartialEq, Eq)] +pub enum HopPathResult { + Found { + nodes: Vec, + edges: Vec, + }, + NoPath { + visited_nodes: usize, + depth_limited: bool, + }, +} + +/// Minimize hops, then structural relation cost, then the existing stable path key. +/// Uses the same adjacency and allocation budgets as the public weighted path query. +pub fn shortest_hop_path( + graph: &Graph, + source: NodeIndex, + target: NodeIndex, + max_hops: usize, +) -> Result { + if source >= graph.node_count() || target >= graph.node_count() { + return Err("path endpoint index is outside the selected graph".to_owned()); + } + if max_hops > 64 { + return Err("max_hops must be between 0 and 64".to_owned()); + } + let result = ranked_path_undirected( + graph, + source, + target, + max_hops, + PathRanking::Hops, + PathSearchBudget::default(), + )?; + Ok(match result.path { + Some(path) => HopPathResult::Found { + nodes: path.nodes, + edges: path.edges, + }, + None => HopPathResult::NoPath { + visited_nodes: result.visited_nodes, + depth_limited: result.depth_limited, + }, + }) } struct WeightedGraphPath { @@ -542,76 +592,135 @@ struct WeightedGraphPath { weight: u32, } +// Depth-aware search keeps multiple arrivals per node. Bound both the graph +// work and the cumulative string allocation used for deterministic tie keys. +// Exhaustion is an error, never evidence that the endpoints are disconnected. +#[derive(Clone, Copy)] +struct PathSearchBudget { + adjacency_entries: usize, + key_bytes: usize, +} + +impl Default for PathSearchBudget { + fn default() -> Self { + Self { + adjacency_entries: 1_000_000, + key_bytes: 16 * 1024 * 1024, + } + } +} + +fn path_work_limit() -> String { + "path search work limit exceeded; reduce the hop bound or use a smaller graph".to_owned() +} + fn ranked_path_undirected( graph: &Graph, source: NodeIndex, target: NodeIndex, max_depth: usize, ranking: PathRanking, -) -> GraphPathResult { + mut budget: PathSearchBudget, +) -> Result { + type State = (NodeIndex, u32); let source_id = graph.node(source).id.clone(); + budget.key_bytes = budget + .key_bytes + .checked_sub(source_id.len()) + .ok_or_else(path_work_limit)?; let mut queue = BinaryHeap::from([Reverse((0_u32, 0_u32, source_id.clone(), source))]); - let mut best = BTreeMap::from([(source, (0_u32, 0_u32, source_id))]); - let mut predecessor = BTreeMap::::new(); + let mut best = BTreeMap::from([(source, BTreeMap::from([(0_u32, (0_u32, source_id))]))]); + let mut predecessor = BTreeMap::::new(); let mut visited = BTreeSet::new(); + let mut target_state = None; + let mut depth_limited = false; while let Some(Reverse((primary, secondary, path_key, node))) = queue.pop() { - if best.get(&node).is_none_or(|current| { - current.0 != primary || current.1 != secondary || current.2 != path_key - }) { + let (weight, hops) = match ranking { + PathRanking::Weighted => (primary, secondary), + PathRanking::Hops => (secondary, primary), + }; + let Some(labels) = best.get(&node) else { + continue; + }; + if labels + .get(&hops) + .is_none_or(|current| current.0 != weight || current.1 != path_key) + || labels.range(..hops).any(|(_, current)| current.0 <= weight) + { continue; } + let state = (node, hops); visited.insert(node); if node == target { + target_state = Some(state); break; } - let hops = match ranking { - PathRanking::Weighted => secondary, - PathRanking::Hops => primary, - }; if usize::try_from(hops).unwrap_or(usize::MAX) >= max_depth { + // Conservative: an unexpanded boundary with incident edges cannot + // establish global disconnection, even if those edges form cycles. + depth_limited |= graph.outgoing_edges(node).next().is_some() + || graph.incoming_edges(node).next().is_some(); continue; } - for (neighbor, edge_index, weight, edge_key) in graph_adjacency(graph, node) { + for (neighbor, edge_index, edge_weight, edge_key) in + graph_adjacency(graph, node, &mut budget)? + { let next_hops = hops.saturating_add(1); - let current_weight = match ranking { - PathRanking::Weighted => primary, - PathRanking::Hops => secondary, - }; - let next_weight = current_weight.saturating_add(weight); + let next_weight = weight.saturating_add(edge_weight); + // Reject dominated arrivals (including positive-cost cycles) + // before allocating a path key. Only equal-cost/depth ties need + // the lexical comparison below. + if best.get(&neighbor).is_some_and(|labels| { + labels.range(..=next_hops).any(|(depth, current)| { + current.0 < next_weight || (current.0 == next_weight && *depth < next_hops) + }) + }) { + continue; + } let (next_primary, next_secondary) = match ranking { PathRanking::Weighted => (next_weight, next_hops), PathRanking::Hops => (next_hops, next_weight), }; + let next_length = path_key + .len() + .checked_add(edge_key.len()) + .and_then(|length| length.checked_add(graph.node(neighbor).id.len())) + .and_then(|length| length.checked_add(2)) + .ok_or_else(path_work_limit)?; + budget.key_bytes = budget + .key_bytes + .checked_sub(next_length) + .ok_or_else(path_work_limit)?; let next_key = format!("{path_key}\0{edge_key}\0{}", graph.node(neighbor).id); - let candidate = (next_primary, next_secondary, next_key.clone()); if best .get(&neighbor) - .is_none_or(|current| candidate < current.clone()) + .and_then(|labels| labels.get(&next_hops)) + .is_some_and(|current| current.0 == next_weight && current.1 <= next_key) { - best.insert(neighbor, candidate); - predecessor.insert(neighbor, (node, edge_index)); - queue.push(Reverse((next_primary, next_secondary, next_key, neighbor))); + continue; } + best.entry(neighbor) + .or_default() + .insert(next_hops, (next_weight, next_key.clone())); + predecessor.insert((neighbor, next_hops), (state, edge_index)); + queue.push(Reverse((next_primary, next_secondary, next_key, neighbor))); } } - if !best.contains_key(&target) || !visited.contains(&target) { - return GraphPathResult { + let Some(mut cursor) = target_state else { + return Ok(GraphPathResult { path: None, visited_nodes: visited.len(), - }; - } + depth_limited, + }); + }; let mut nodes = vec![target]; let mut edges = Vec::new(); - let mut cursor = target; - while cursor != source { + while cursor != (source, 0) { let Some((previous, edge)) = predecessor.get(&cursor).copied() else { - return GraphPathResult { - path: None, - visited_nodes: visited.len(), - }; + return Err("path predecessor state is missing".to_owned()); }; edges.push(edge); - nodes.push(previous); + nodes.push(previous.0); cursor = previous; } nodes.reverse(); @@ -620,21 +729,32 @@ fn ranked_path_undirected( .iter() .map(|edge| relation_weight(&graph.edge(*edge).string("relation"))) .fold(0_u32, u32::saturating_add); - GraphPathResult { + Ok(GraphPathResult { path: Some(WeightedGraphPath { nodes, edges, weight, }), visited_nodes: visited.len(), - } + depth_limited, + }) } -fn graph_adjacency(graph: &Graph, node: NodeIndex) -> Vec<(NodeIndex, EdgeIndex, u32, String)> { - let edge_indices = graph - .outgoing_edges(node) - .chain(graph.incoming_edges(node)) - .collect::>(); +type PathAdjacency = (NodeIndex, EdgeIndex, u32, String); + +fn graph_adjacency( + graph: &Graph, + node: NodeIndex, + budget: &mut PathSearchBudget, +) -> Result, String> { + let mut edge_indices = BTreeSet::new(); + for edge in graph.outgoing_edges(node).chain(graph.incoming_edges(node)) { + budget.adjacency_entries = budget + .adjacency_entries + .checked_sub(1) + .ok_or_else(path_work_limit)?; + edge_indices.insert(edge); + } let mut adjacent = Vec::with_capacity(edge_indices.len()); for edge_index in edge_indices.iter().copied() { let Some((source, target)) = graph.edge_endpoints(edge_index) else { @@ -657,7 +777,7 @@ fn graph_adjacency(graph: &Graph, node: NodeIndex) -> Vec<(NodeIndex, EdgeIndex, .then_with(|| graph.node(left.0).id.cmp(&graph.node(right.0).id)) .then_with(|| left.3.cmp(&right.3)) }); - adjacent + Ok(adjacent) } fn relation_weight(relation: &str) -> u32 { @@ -717,7 +837,7 @@ pub fn render_explanation( } } -/// A digest-verified source excerpt for one uniquely resolved graph node. +/// A bounded source excerpt for one uniquely resolved graph node. #[derive(Clone, Debug, Eq, PartialEq)] pub struct ExplainedSource { pub file: String, @@ -725,6 +845,9 @@ pub struct ExplainedSource { pub end_line: u32, pub source: String, pub truncated: bool, + /// True only when the complete recorded span matched a stored digest. + /// An anchor alone does not establish that current source is unchanged. + pub digest_verified: bool, } /// Reasons an explain source excerpt could not be produced. @@ -745,14 +868,43 @@ pub enum ExplanationSourceError { /// Resolution follows the same rules as the explanation renderer: exact /// matches win, source-backed nodes are preferred, and an ambiguous or /// unsourced target is reported instead of guessed. The excerpt is bounded by -/// `max_bytes`, and the recorded symbol digest is verified before the text is -/// returned. +/// `max_bytes`. A recorded symbol digest is verified before text is returned; +/// without one, the excerpt explicitly reports that it is unverified. pub fn explanation_source( graph: &Graph, label: &str, root: &Path, max_bytes: u64, ) -> Result { + let node_index = resolve_explanation_source_node(graph, label)?; + let node = graph.node(node_index); + let anchor = node_source_anchor(node).ok_or_else(|| ExplanationSourceError::Unsourced { + label: label.to_owned(), + })?; + let digest = node_source_digest(node)?; + let span = bounded_source_span( + root, + &anchor.file, + anchor.start_byte, + anchor.end_byte, + digest.as_deref(), + max_bytes, + ) + .map_err(|error| ExplanationSourceError::Read(error.to_string()))?; + Ok(ExplainedSource { + file: anchor.file, + start_line: anchor.start_line, + end_line: anchor.end_line, + source: span.text, + truncated: span.truncated, + digest_verified: digest.is_some(), + }) +} + +pub(crate) fn resolve_explanation_source_node( + graph: &Graph, + label: &str, +) -> Result { let exact_matches = find_exact_nodes(graph, label); let mut matches = if exact_matches.is_empty() { find_node(graph, label) @@ -781,39 +933,19 @@ pub fn explanation_source( }); } }; - let node = graph.node(node_index); - let anchor = node_source_anchor(node).ok_or_else(|| ExplanationSourceError::Unsourced { - label: label.to_owned(), - })?; - let digest = node_source_digest(node); - let span = bounded_source_span( - root, - &anchor.file, - anchor.start_byte, - anchor.end_byte, - digest.as_deref(), - max_bytes, - ) - .map_err(|error| ExplanationSourceError::Read(error.to_string()))?; - Ok(ExplainedSource { - file: anchor.file, - start_line: anchor.start_line, - end_line: anchor.end_line, - source: span.text, - truncated: span.truncated, - }) + Ok(node_index) } #[derive(Clone, Debug)] -struct NodeSourceAnchor { - file: String, - start_byte: u64, - end_byte: u64, - start_line: u32, - end_line: u32, +pub(crate) struct NodeSourceAnchor { + pub(crate) file: String, + pub(crate) start_byte: u64, + pub(crate) end_byte: u64, + pub(crate) start_line: u32, + pub(crate) end_line: u32, } -fn node_source_anchor(node: &NodeRecord) -> Option { +pub(crate) fn node_source_anchor(node: &NodeRecord) -> Option { let anchor = node.attributes.get("source")?.as_object()?; let file = anchor.get("file")?.as_str()?.to_owned(); let start_byte = anchor.get("startByte")?.as_u64()?; @@ -833,15 +965,22 @@ fn node_source_anchor(node: &NodeRecord) -> Option { }) } -fn node_source_digest(node: &NodeRecord) -> Option { - node.attributes - .get("details")? - .as_object()? - .get("data")? - .as_object()? - .get("sourceDigest")? +fn node_source_digest(node: &NodeRecord) -> Result, ExplanationSourceError> { + let Some(digest) = node + .attributes + .get("details") + .and_then(|details| details.pointer("/data/sourceDigest")) + else { + return Ok(None); + }; + digest .as_str() - .map(str::to_owned) + .map(|value| Some(value.to_owned())) + .ok_or_else(|| { + ExplanationSourceError::Read( + "recorded source digest is not a string; rebuild the graph".to_owned(), + ) + }) } pub fn render_explanation_page( @@ -1549,6 +1688,99 @@ mod tests { use super::dfs; + #[test] + fn hop_paths_preserve_bounds_identity_and_structural_ties() + -> Result<(), Box> { + for reverse in [false, true] { + let mut links = vec![ + json!({"source":"s","target":"a","relation":"references"}), + json!({"source":"a","target":"t","relation":"references"}), + json!({"source":"s","target":"b","relation":"contains"}), + json!({"source":"b","target":"t","relation":"contains"}), + ]; + if reverse { + links.reverse(); + } + let graph = Graph::from_document(serde_json::from_value::(json!({ + "directed":true, + "nodes":[{"id":"s"},{"id":"a","label":"Middle"}, + {"id":"b","label":"Middle"},{"id":"t"},{"id":"isolated"}], + "links":links + }))?)?; + let s = graph.node_index("s").ok_or("s")?; + let b = graph.node_index("b").ok_or("b")?; + let t = graph.node_index("t").ok_or("t")?; + let isolated = graph.node_index("isolated").ok_or("isolated")?; + let super::HopPathResult::Found { nodes, edges } = + super::shortest_hop_path(&graph, s, t, 2)? + else { + return Err("missing path".into()); + }; + assert_eq!(nodes, vec![s, b, t]); + assert_eq!(edges.len(), 2); + assert!( + edges + .iter() + .all(|edge| graph.edge(*edge).string("relation") == "contains") + ); + assert_eq!( + super::shortest_hop_path(&graph, s, t, 0)?, + super::HopPathResult::NoPath { + visited_nodes: 1, + depth_limited: true + } + ); + assert!(matches!( + super::shortest_hop_path(&graph, s, t, 1)?, + super::HopPathResult::NoPath { + depth_limited: true, + .. + } + )); + assert!(matches!( + super::shortest_hop_path(&graph, s, isolated, 8)?, + super::HopPathResult::NoPath { + depth_limited: false, + .. + } + )); + assert!(super::shortest_hop_path(&graph, s, t, 65).is_err()); + assert!(super::shortest_hop_path(&graph, usize::MAX, t, 8).is_err()); + } + Ok(()) + } + + #[test] + fn path_work_exhaustion_is_an_error_not_a_disconnected_result() + -> Result<(), Box> { + let graph = Graph::from_document(serde_json::from_value::(json!({ + "directed": true, + "nodes": [{"id":"seed", "label":"Seed"}, {"id":"target", "label":"Target"}], + "links": [{"source":"seed", "target":"target", "relation":"calls"}] + }))?)?; + let seed = graph.node_index("seed").ok_or("missing seed")?; + let target = graph.node_index("target").ok_or("missing target")?; + for budget in [ + super::PathSearchBudget { + adjacency_entries: 0, + ..Default::default() + }, + super::PathSearchBudget { + key_bytes: 4, + ..Default::default() + }, + ] { + for ranking in [super::PathRanking::Weighted, super::PathRanking::Hops] { + let error = super::ranked_path_undirected(&graph, seed, target, 2, ranking, budget) + .err() + .ok_or("expected work-limit error")?; + assert!(error.contains("path search work limit exceeded")); + assert!(!error.contains("NO PATH FOUND")); + } + } + Ok(()) + } + #[test] fn dfs_edges_always_reference_visited_nodes_at_depth_cap() -> Result<(), Box> { diff --git a/crates/compass-query/tests/bounded_path_oracle.rs b/crates/compass-query/tests/bounded_path_oracle.rs new file mode 100644 index 000000000..a5db5f90b --- /dev/null +++ b/crates/compass-query/tests/bounded_path_oracle.rs @@ -0,0 +1,343 @@ +mod support; + +use std::error::Error; + +use compass_model::code_graph::{EdgeKind, GraphDocument, NodeKind}; +use compass_model::identity::edge_id; +use compass_model::query_contract::{CodeQueryLimits, NodeTrailRequest}; +use compass_query::{ + HopPathResult, open_with_document, render_shortest_path_with_limit, shortest_hop_path, +}; + +const PAIRS: [(usize, usize); 6] = [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]; +type Matrix = [[Option; 4]; 4]; + +// Independent enumeration of all simple paths. Positive weights mean a cycle +// cannot improve either cost or hop count. This oracle does not reuse the +// production queue, dominance rules, relation-weight mapping, or predecessor map. +fn oracle(matrix: &Matrix, max_depth: usize) -> Option<(u32, usize)> { + fn visit(matrix: &Matrix, node: usize, remaining: usize, visited: u8) -> Option<(u32, usize)> { + if node == 3 { + return Some((0, 0)); + } + if remaining == 0 { + return None; + } + (0..4) + .filter(|next| visited & (1 << next) == 0) + .filter_map(|next| { + let edge = matrix[node][next]?; + let (cost, hops) = visit(matrix, next, remaining - 1, visited | (1 << next))?; + Some((edge + cost, 1 + hops)) + }) + .min() + } + visit(matrix, 0, max_depth, 1) +} + +fn hop_oracle(matrix: &Matrix, max_depth: usize) -> Option<(usize, u32)> { + fn visit(matrix: &Matrix, node: usize, remaining: usize, visited: u8) -> Option<(usize, u32)> { + if node == 3 { + return Some((0, 0)); + } + if remaining == 0 { + return None; + } + (0..4) + .filter(|next| visited & (1 << next) == 0) + .filter_map(|next| { + let edge = matrix[node][next]?; + let (hops, cost) = visit(matrix, next, remaining - 1, visited | (1 << next))?; + Some((hops + 1, cost + edge)) + }) + .min() + } + visit(matrix, 0, max_depth, 1) +} + +// Independent unweighted closure of nodes reachable within the hop bound. +// A missing bounded path is incomplete if the frontier can reach unseen nodes. +fn open_frontier(matrix: &Matrix, max_depth: usize) -> bool { + let mut reachable = [true, false, false, false]; + for _ in 0..max_depth { + let previous = reachable; + for (source, row) in matrix.iter().enumerate() { + if previous[source] { + for (target, edge) in row.iter().enumerate() { + reachable[target] |= edge.is_some(); + } + } + } + } + matrix.iter().enumerate().any(|(source, row)| { + reachable[source] + && row + .iter() + .enumerate() + .any(|(target, edge)| edge.is_some() && !reachable[target]) + }) +} + +#[test] +fn all_path_engines_match_exhaustive_four_node_oracles() -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let graph_path = directory.path().join("graph.json"); + support::write_graph(&graph_path)?; + let mut template = GraphDocument::load(&graph_path)?; + let node_pattern = regex::Regex::new(r"Node([0-3])")?; + let edge_pattern = regex::Regex::new( + r"--(calls|references)(?: \[[^\]]+\])?-->|<--(calls|references)(?: \[[^\]]+\])?--", + )?; + let edge_template = template + .links + .first() + .cloned() + .ok_or("missing edge template")?; + template.nodes = (0..4) + .map(|i| { + support::node( + &format!("n:{i}"), + NodeKind::Function, + &format!("Node{i}"), + &format!("Node{i}"), + ) + }) + .collect(); + + // Every one of the six forward pairs is absent, a cost-1 call, or a cost-4 + // reference: 729 graphs. The typed engine sees DAGs; the undirected path + // engine also sees cycles. Every graph is queried at all three hop bounds. + for encoding in 0_u32..729 { + let mut graph = template.clone(); + graph.links.clear(); + let mut directed: Matrix = [[None; 4]; 4]; + let mut undirected: Matrix = [[None; 4]; 4]; + let mut digits = encoding; + for (source, target) in PAIRS { + let digit = digits % 3; + digits /= 3; + let (kind, weight) = match digit { + 1 => (EdgeKind::Calls, 1), + 2 => (EdgeKind::References, 4), + _ => continue, + }; + directed[source][target] = Some(weight); + undirected[source][target] = Some(weight); + undirected[target][source] = Some(weight); + let mut edge = edge_template.clone(); + edge.source = format!("n:{source}"); + edge.target = format!("n:{target}"); + edge.kind = kind; + edge.occurrence_rule = None; + edge.id = edge_id( + &edge.source, + kind, + &edge.target, + edge.relationship_site.as_ref(), + None, + ); + edge.key.clone_from(&edge.id); + graph.links.push(edge); + } + let legacy = compass_model::Graph::from_document(serde_json::from_value( + serde_json::to_value(&graph)?, + )?)?; + // Drop each index before the next graph so this test's disk use stays + // bounded by one tiny graph rather than accumulating 729 databases. + let cache = tempfile::tempdir_in(directory.path())?; + let engine = open_with_document(graph.clone(), &graph_path, None, cache.path())?; + for depth in 1..=3 { + let context = format!("graph={encoding}, depth={depth}"); + let calls = directed.map(|row| row.map(|edge| edge.filter(|weight| *weight == 1))); + let filtered = engine.node_trail(NodeTrailRequest { + source: "n:0".into(), + target: "n:3".into(), + calls_only: true, + include_heuristic: false, + limits: CodeQueryLimits { + max_depth: depth as u32, + ..CodeQueryLimits::default() + }, + })?; + if let Some((_, hops)) = oracle(&calls, depth) { + assert!(!filtered.truncated, "calls-only {context}"); + assert_eq!(filtered.paths.len(), 1, "calls-only {context}"); + let path = &filtered.paths[0]; + assert_eq!(path.edge_ids.len(), hops, "calls-only {context}"); + assert_eq!(path.node_ids.first().map(String::as_str), Some("n:0")); + assert_eq!(path.node_ids.last().map(String::as_str), Some("n:3")); + for (pair, identity) in path.node_ids.windows(2).zip(&path.edge_ids) { + let edge = graph + .links + .iter() + .find(|edge| &edge.id == identity) + .ok_or("invented edge")?; + assert_eq!(edge.kind, EdgeKind::Calls); + assert_eq!((&edge.source, &edge.target), (&pair[0], &pair[1])); + } + } else { + assert!(filtered.paths.is_empty(), "calls-only {context}"); + if open_frontier(&calls, depth) { + assert!(filtered.truncated, "calls-only {context}"); + assert!(!filtered.diagnostics.iter().any(|d| matches!( + d.code, + compass_model::query_contract::QueryDiagnosticCode::NoMatch + | compass_model::query_contract::QueryDiagnosticCode::DirectionMismatch + ))); + } + } + + let start = legacy.node_index("n:0").ok_or("start")?; + let end = legacy.node_index("n:3").ok_or("end")?; + match ( + hop_oracle(&undirected, depth), + shortest_hop_path(&legacy, start, end, depth)?, + ) { + (Some((hops, cost)), HopPathResult::Found { nodes, edges }) => { + assert_eq!(nodes.first(), Some(&start), "{context}"); + assert_eq!(nodes.last(), Some(&end), "{context}"); + assert_eq!(nodes.len(), hops + 1, "{context}"); + assert_eq!(edges.len(), hops, "{context}"); + let mut actual_cost = 0; + for (pair, edge) in nodes.windows(2).zip(edges) { + let edge = legacy.edge(edge); + let weight = match edge.string("relation").as_str() { + "calls" => 1, + "references" => 4, + _ => return Err("unknown path relation".into()), + }; + let source = edge + .source + .strip_prefix("n:") + .ok_or("edge source")? + .parse::()?; + let target = edge + .target + .strip_prefix("n:") + .ok_or("edge target")? + .parse::()?; + assert_eq!(directed[source][target], Some(weight), "{context}"); + let endpoints = (&legacy.node(pair[0]).id, &legacy.node(pair[1]).id); + assert!( + endpoints == (&edge.source, &edge.target) + || endpoints == (&edge.target, &edge.source), + "{context}" + ); + actual_cost += weight; + } + assert_eq!(actual_cost, cost, "{context}"); + } + (None, HopPathResult::NoPath { depth_limited, .. }) => { + if !depth_limited { + assert!(hop_oracle(&undirected, 3).is_none(), "{context}"); + } + } + (expected, actual) => { + return Err(format!("{context}: expected {expected:?}, got {actual:?}").into()); + } + } + let output = render_shortest_path_with_limit(&legacy, "n:0", "n:3", depth)?; + if let Some((cost, hops)) = oracle(&undirected, depth) { + assert!( + output.contains(&format!( + "Best path (weighted, {hops} hops, weight {cost}):" + )), + "{context}: {output}" + ); + let body = output + .lines() + .find(|line| line.trim_start().starts_with("Node0")) + .ok_or("missing rendered path body")?; + let nodes = node_pattern + .captures_iter(body) + .map(|capture| capture[1].parse::()) + .collect::, _>>()?; + let edges = edge_pattern.captures_iter(body).collect::>(); + assert_eq!(nodes.first(), Some(&0), "{context}"); + assert_eq!(nodes.last(), Some(&3), "{context}"); + assert_eq!(nodes.len(), hops + 1, "{context}"); + assert_eq!(edges.len(), hops, "{context}"); + let mut rendered_cost = 0; + for (pair, edge) in nodes.windows(2).zip(edges) { + let (source, target, relation) = if let Some(relation) = edge.get(1) { + (pair[0], pair[1], relation.as_str()) + } else { + ( + pair[1], + pair[0], + edge.get(2).ok_or("missing relation")?.as_str(), + ) + }; + let weight = if relation == "calls" { 1 } else { 4 }; + assert_eq!(directed[source][target], Some(weight), "{context}: {body}"); + rendered_cost += weight; + } + assert_eq!(rendered_cost, cost, "{context}"); + } else { + assert!(output.contains("NO PATH FOUND"), "{context}: {output}"); + } + let response = engine.node_trail(NodeTrailRequest { + calls_only: false, + source: "n:0".to_owned(), + target: "n:3".to_owned(), + include_heuristic: false, + limits: CodeQueryLimits { + max_depth: depth as u32, + ..CodeQueryLimits::default() + }, + })?; + if let Some((expected_cost, expected_hops)) = oracle(&directed, depth) { + assert!(!response.truncated, "{context}"); + assert_eq!(response.paths.len(), 1, "{context}"); + let path = &response.paths[0]; + assert_eq!( + path.node_ids.first().map(String::as_str), + Some("n:0"), + "{context}" + ); + assert_eq!( + path.node_ids.last().map(String::as_str), + Some("n:3"), + "{context}" + ); + assert_eq!(path.edge_ids.len(), expected_hops, "{context}"); + assert_eq!(path.node_ids.len(), expected_hops + 1, "{context}"); + let mut cost = 0; + for (pair, edge_id) in path.node_ids.windows(2).zip(&path.edge_ids) { + let edge = graph + .links + .iter() + .find(|edge| edge.id == *edge_id) + .ok_or("path invented an edge")?; + assert_eq!( + (&edge.source, &edge.target), + (&pair[0], &pair[1]), + "{context}" + ); + cost += match edge.kind { + EdgeKind::Calls => 1, + EdgeKind::References => 4, + _ => return Err("unexpected edge kind".into()), + }; + } + assert_eq!(cost, expected_cost, "{context}"); + } else { + assert!(response.paths.is_empty(), "{context}"); + let incomplete = open_frontier(&directed, depth) + || (oracle(&undirected, depth).is_none() && open_frontier(&undirected, depth)); + assert_eq!(response.truncated, incomplete, "{context}"); + if incomplete { + assert!( + !response.diagnostics.iter().any(|d| matches!( + d.code, + compass_model::query_contract::QueryDiagnosticCode::DirectionMismatch + | compass_model::query_contract::QueryDiagnosticCode::NoMatch + )), + "{context}" + ); + } + } + } + } + Ok(()) +} diff --git a/crates/compass-query/tests/code_graph_assembly.rs b/crates/compass-query/tests/code_graph_assembly.rs index 2a927afe2..c6fcca16f 100644 --- a/crates/compass-query/tests/code_graph_assembly.rs +++ b/crates/compass-query/tests/code_graph_assembly.rs @@ -313,6 +313,7 @@ fn exact_and_remapped_duplicate_edges_are_order_independent_and_heuristic_gated( .any(|node| node.name == "Caller") ); let trail = |include_heuristic| NodeTrailRequest { + calls_only: false, source: "crate::Caller".to_owned(), target: "crate::Target".to_owned(), include_heuristic, @@ -394,6 +395,7 @@ fn trusted_incremental_rewrite_evidence_controls_heuristic_query_gating() .any(|node| node.qualified_name == "crate::Caller") ); let trail = |include_heuristic| NodeTrailRequest { + calls_only: false, source: "crate::Caller".to_owned(), target: "crate::Alternate".to_owned(), include_heuristic, @@ -540,6 +542,7 @@ fn lossy_normalized_alias_collisions_are_diagnostic_and_never_choose_a_node() assert!( engine .node_trail(NodeTrailRequest { + calls_only: false, source: "crate::First".to_owned(), target: "crate::Target".to_owned(), include_heuristic: false, diff --git a/crates/compass-query/tests/code_query_scale.rs b/crates/compass-query/tests/code_query_scale.rs index 4f17c2b62..5cd3915cc 100644 --- a/crates/compass-query/tests/code_query_scale.rs +++ b/crates/compass-query/tests/code_query_scale.rs @@ -124,6 +124,7 @@ fn enterprise_queries_stay_within_in_process_ceiling() -> Result<(), Box Result<(), Box Result> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + support::write_graph(&path)?; + let mut graph = GraphDocument::load(&path)?; + let template = graph.nodes.first().ok_or("fixture node missing")?.clone(); + let mut other_file = graph + .graph + .files + .first() + .ok_or("fixture file missing")? + .clone(); + other_file.path = "other.rs".to_owned(); + other_file.id = compass_model::identity::file_id("other.rs"); + graph.graph.files.push(other_file); + graph.nodes.clear(); + graph.links.clear(); + for (id, name, kind, file, line) in [ + ( + "a:declaration", + "Target()", + compass_model::code_graph::NodeKind::Function, + "src/lib.rs", + 10, + ), + ( + "b:export", + "Target", + compass_model::code_graph::NodeKind::Export, + "src/lib.rs", + 10, + ), + ( + "c:overload", + "Target()", + compass_model::code_graph::NodeKind::Function, + "src/lib.rs", + 20, + ), + ( + "d:other", + "Target()", + compass_model::code_graph::NodeKind::Function, + "other.rs", + 10, + ), + ] { + let mut node = template.clone(); + node.id = id.to_owned(); + node.name = name.to_owned(); + node.qualified_name = format!("Scope.{name}"); + node.kind = kind; + let source = node.source.as_mut().ok_or("fixture source missing")?; + source.file = file.to_owned(); + source.start_line = line; + source.end_line = line; + graph.nodes.push(node); + } + for i in 0..300 { + let mut node = template.clone(); + node.id = format!("noise:{i:03}"); + node.name = format!("TargetAdapter{i}"); + node.qualified_name = format!("Other.{}", node.name); + graph.nodes.push(node); + } + Ok(graph) +} + +fn exact_search_engines( + directory: &std::path::Path, + graph: GraphDocument, +) -> Result, Box> { + let path = directory.join("graph.json"); + std::fs::write(&path, serde_json::to_vec(&graph)?)?; + let json = compass_query::open_with_engine( + &path, + None, + &directory.join("json-cache"), + compass_query::EngineSelection::Json, + )?; + let direct = compass_query::open_with_document( + graph.clone(), + &path, + None, + &directory.join("direct-cache"), + )?; + let store = compass_store::SqliteStore::open(directory.join("store.sqlite"))?; + let prepared = compass_graph::GraphSnapshotBuilder::new().prepare(&store, &graph)?; + compass_graph::GraphSnapshotBuilder::new().activate(&store, &prepared)?; + let stored = + compass_query::open_with_store(&store, &path, None, &directory.join("store-cache"))?; + Ok(vec![json, direct, stored]) +} + +#[test] +fn exact_search_avoids_lexical_overflow_and_keeps_explicit_identity_constraints() +-> Result<(), Box> { + use compass_model::code_graph::NodeKind; + use compass_query::ExactSearchFilter; + let directory = tempfile::tempdir()?; + let engines = exact_search_engines(directory.path(), exact_search_graph()?)?; + let request = || SearchRequest { + query: "Target".to_owned(), + limits: CodeQueryLimits { + max_candidates: 256, + max_nodes: 500, + ..CodeQueryLimits::default() + }, + }; + let mut responses = Vec::new(); + for engine in engines { + assert!(engine.search(request())?.truncated); + let exact = engine.search_exact(request(), ExactSearchFilter::default())?; + assert!(!exact.truncated); + assert_eq!(exact.results.len(), 4); + let filter = ExactSearchFilter { + source_file: Some("src/lib.rs".to_owned()), + start_line: Some(10), + kind: None, + }; + let ambiguity = engine.search_exact(request(), filter.clone())?; + assert!(!ambiguity.truncated); + assert_eq!( + ambiguity + .nodes + .iter() + .map(|n| n.id.as_str()) + .collect::>(), + ["a:declaration", "b:export"] + ); + let selected = engine.search_exact( + request(), + ExactSearchFilter { + kind: Some(NodeKind::Function), + ..filter.clone() + }, + )?; + assert!(!selected.truncated); + assert_eq!(selected.results.len(), 1); + assert_eq!(selected.results[0].node_id, "a:declaration"); + let miss = engine.search_exact( + request(), + ExactSearchFilter { + start_line: Some(11), + ..filter.clone() + }, + )?; + assert!(!miss.truncated && miss.results.is_empty()); + assert!( + miss.diagnostics + .iter() + .any(|d| d.code == QueryDiagnosticCode::NoMatch) + ); + for filter in [ + ExactSearchFilter { + source_file: Some("missing.rs".to_owned()), + ..filter.clone() + }, + ExactSearchFilter { + kind: Some(NodeKind::Class), + ..filter + }, + ] { + let miss = engine.search_exact(request(), filter)?; + assert!(!miss.truncated && miss.results.is_empty()); + } + let lexical_only = engine.search_exact( + SearchRequest { + query: "Adapter".to_owned(), + ..request() + }, + ExactSearchFilter::default(), + )?; + assert!(lexical_only.results.is_empty() && !lexical_only.truncated); + responses.push(serde_json::to_value(selected)?); + } + assert!(responses.windows(2).all(|pair| pair[0] == pair[1])); + Ok(()) +} + +#[test] +fn exact_search_limits_never_turn_a_filtered_prefix_into_proof() +-> Result<(), Box> { + use compass_query::ExactSearchFilter; + let directory = tempfile::tempdir()?; + for engine in exact_search_engines(directory.path(), exact_search_graph()?)? { + let request = || SearchRequest { + query: "Target".to_owned(), + limits: CodeQueryLimits { + max_candidates: 1, + ..CodeQueryLimits::default() + }, + }; + for file in ["src/lib.rs", "other.rs", "missing.rs"] { + let r = engine.search_exact( + request(), + ExactSearchFilter { + source_file: Some(file.to_owned()), + ..ExactSearchFilter::default() + }, + )?; + assert!(r.truncated); + assert!( + !r.diagnostics + .iter() + .any(|d| d.code == QueryDiagnosticCode::NoMatch) + ); + assert!( + r.diagnostics + .iter() + .any(|d| d.message.contains("before filtering")) + ); + } + let bounded = engine.search_exact( + SearchRequest { + limits: CodeQueryLimits { + max_nodes: 1, + ..CodeQueryLimits::default() + }, + ..request() + }, + ExactSearchFilter::default(), + )?; + assert!(bounded.truncated && bounded.nodes.len() == 1 && bounded.results.len() == 1); + let id = engine.search_exact( + SearchRequest { + query: "a:declaration".to_owned(), + ..request() + }, + ExactSearchFilter::default(), + )?; + assert!(!id.truncated && id.results.len() == 1); + let constrained_id = engine.search_exact( + SearchRequest { + query: "a:declaration".to_owned(), + ..request() + }, + ExactSearchFilter { + source_file: Some("other.rs".to_owned()), + ..ExactSearchFilter::default() + }, + )?; + assert!(!constrained_id.truncated && constrained_id.results.is_empty()); + assert!( + engine + .search_exact( + SearchRequest { + limits: CodeQueryLimits { + max_response_bytes: 1, + ..CodeQueryLimits::default() + }, + ..request() + }, + ExactSearchFilter::default() + ) + .is_err() + ); + } + Ok(()) +} + +#[test] +fn exact_search_retains_same_coordinate_overloads_and_rejects_invalid_filters() +-> Result<(), Box> { + use compass_query::ExactSearchFilter; + let directory = tempfile::tempdir()?; + let mut graph = exact_search_graph()?; + let mut duplicate = graph.nodes[0].clone(); + duplicate.id = "a:second-declaration".to_owned(); + graph.nodes.push(duplicate); + graph.nodes.reverse(); + for engine in exact_search_engines(directory.path(), graph)? { + let request = || SearchRequest { + query: " .TARGET() ".to_owned(), + limits: CodeQueryLimits::default(), + }; + let filter = ExactSearchFilter { + source_file: Some("src/lib.rs".to_owned()), + start_line: Some(10), + kind: Some(compass_model::code_graph::NodeKind::Function), + }; + let result = engine.search_exact(request(), filter.clone())?; + assert!(!result.truncated && result.results.len() == 2); + for bad in [ + ExactSearchFilter { + source_file: None, + ..filter.clone() + }, + ExactSearchFilter { + start_line: Some(0), + ..filter.clone() + }, + ExactSearchFilter { + source_file: Some("a\nb".to_owned()), + ..filter.clone() + }, + ExactSearchFilter { + source_file: Some("x".repeat(4097)), + ..filter.clone() + }, + ] { + assert!(engine.search_exact(request(), bad).is_err()); + } + for bad in ["".to_owned(), "a\nb".to_owned(), "x".repeat(4097)] { + assert!( + engine + .search_exact( + SearchRequest { + query: bad, + ..request() + }, + filter.clone() + ) + .is_err() + ); + } + } + Ok(()) +} diff --git a/crates/compass-query/tests/code_traversal.rs b/crates/compass-query/tests/code_traversal.rs index da604fe73..7797db909 100644 --- a/crates/compass-query/tests/code_traversal.rs +++ b/crates/compass-query/tests/code_traversal.rs @@ -3,13 +3,15 @@ mod support; use std::collections::HashSet; use std::fs; +use compass_graph::GraphSnapshotBuilder; use compass_model::code_graph::{EdgeKind, GraphDocument}; use compass_model::identity::{edge_id, file_id}; use compass_model::provenance::{OccurrenceRule, SourceAnchor}; use compass_model::query_contract::{ CallRequest, CodeQueryLimits, ImpactRequest, NodeTrailRequest, QueryDiagnosticCode, }; -use compass_query::open; +use compass_query::{open, open_with_store}; +use compass_store::SqliteStore; #[test] fn callers_include_calls_and_route_bindings_while_callees_follow_calls() @@ -404,6 +406,7 @@ fn node_trail_returns_a_stable_evidence_aware_path() -> Result<(), Box Result<(), Box Result<(), Box Result<(), Box> { + support::write_graph(path)?; + let mut graph = GraphDocument::load(path)?; + let template = graph + .links + .iter() + .find(|edge| edge.kind == EdgeKind::Calls) + .cloned() + .ok_or("missing call template")?; + graph.nodes = ["n:s", "n:a", "n:b", "n:t"] + .into_iter() + .map(|id| support::node(id, compass_model::code_graph::NodeKind::Function, id, id)) + .collect(); + graph.links = edges + .iter() + .map(|(source, kind, target)| { + let mut edge = template.clone(); + edge.source = (*source).to_owned(); + edge.target = (*target).to_owned(); + edge.kind = *kind; + edge.occurrence_rule = None; + edge.id = edge_id(source, *kind, target, edge.relationship_site.as_ref(), None); + edge.key.clone_from(&edge.id); + edge + }) + .collect(); + fs::write(path, serde_json::to_vec(&graph)?)?; + Ok(()) +} + +#[test] +fn node_trail_keeps_a_costlier_shorter_prefix_that_can_reach_the_target() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let graph_path = directory.path().join("graph.json"); + write_weighted_trail_fixture( + &graph_path, + &[ + ("n:s", EdgeKind::Calls, "n:a"), + ("n:a", EdgeKind::Calls, "n:b"), + ("n:a", EdgeKind::Calls, "n:s"), + ("n:s", EdgeKind::References, "n:b"), + ("n:b", EdgeKind::Calls, "n:t"), + ], + )?; + for (max_depth, expected) in [ + (2, vec!["n:s", "n:b", "n:t"]), + (3, vec!["n:s", "n:a", "n:b", "n:t"]), + ] { + for reverse in [false, true] { + if reverse { + let mut graph = GraphDocument::load(&graph_path)?; + graph.nodes.reverse(); + graph.links.reverse(); + fs::write(&graph_path, serde_json::to_vec(&graph)?)?; + } + let graph = GraphDocument::load(&graph_path)?; + let store = SqliteStore::open( + directory + .path() + .join(format!("store-{max_depth}-{reverse}.db")), + )?; + let prepared = GraphSnapshotBuilder::new().prepare(&store, &graph)?; + GraphSnapshotBuilder::new().activate(&store, &prepared)?; + for engine in [ + open(&graph_path, None, &directory.path().join("cache"))?, + open_with_store( + &store, + &graph_path, + None, + &directory.path().join("store-cache"), + )?, + ] { + let response = engine.node_trail(NodeTrailRequest { + calls_only: false, + source: "n:s".to_owned(), + target: "n:t".to_owned(), + include_heuristic: false, + limits: CodeQueryLimits { + max_depth, + max_edges: 5, + ..CodeQueryLimits::default() + }, + })?; + assert_eq!(response.paths.len(), 1); + assert_eq!(response.paths[0].node_ids, expected); + assert_eq!(response.paths[0].edge_ids.len(), expected.len() - 1); + } + } + } + Ok(()) +} + +#[test] +fn node_trail_does_not_readmit_a_rejected_node_without_paying_its_budget() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let graph_path = directory.path().join("graph.json"); + write_weighted_trail_fixture( + &graph_path, + &[ + ("n:s", EdgeKind::Calls, "n:a"), + ("n:s", EdgeKind::Calls, "n:b"), + ("n:a", EdgeKind::Calls, "n:b"), + ], + )?; + let engine = open(&graph_path, None, &directory.path().join("cache"))?; + let response = engine.node_trail(NodeTrailRequest { + calls_only: false, + source: "n:s".to_owned(), + target: "n:b".to_owned(), + include_heuristic: false, + limits: CodeQueryLimits { + max_nodes: 2, + ..CodeQueryLimits::default() + }, + })?; + assert!(response.truncated); + assert!( + response.paths.is_empty(), + "a budget-rejected node was admitted on a second visit" + ); + assert!( + !response.nodes.iter().any(|node| node.id == "n:b"), + "a budget-rejected node leaked into the response on a second visit" + ); + Ok(()) +} + #[test] fn node_trail_excludes_graph_assembly_endpoint_remaps_by_default() -> Result<(), Box> { @@ -473,6 +610,7 @@ fn node_trail_excludes_graph_assembly_endpoint_remaps_by_default() support::write_endpoint_remap_graph(&graph_path)?; let engine = open(&graph_path, None, &directory.path().join("cache"))?; let request = |include_heuristic| NodeTrailRequest { + calls_only: false, source: "crate::Caller".to_owned(), target: "crate::Target".to_owned(), include_heuristic, @@ -499,6 +637,7 @@ fn node_trail_excludes_deferred_external_inheritance_by_default() support::write_deferred_external_inheritance_graph(&graph_path)?; let engine = open(&graph_path, None, &directory.path().join("cache"))?; let request = |include_heuristic| NodeTrailRequest { + calls_only: false, source: "App\\Child".to_owned(), target: "Illuminate\\Database\\Eloquent\\Model".to_owned(), include_heuristic, @@ -516,3 +655,392 @@ fn node_trail_excludes_deferred_external_inheritance_by_default() })); Ok(()) } + +#[test] +fn node_trail_depth_bound_does_not_assert_direction_mismatch_for_a_longer_forward_route() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let graph_path = directory.path().join("graph.json"); + write_weighted_trail_fixture( + &graph_path, + &[ + ("n:s", EdgeKind::Calls, "n:a"), + ("n:a", EdgeKind::Calls, "n:b"), + ("n:b", EdgeKind::Calls, "n:t"), + ("n:t", EdgeKind::Calls, "n:s"), + ], + )?; + for reverse in [false, true] { + let mut graph = GraphDocument::load(&graph_path)?; + if reverse { + graph.nodes.reverse(); + graph.links.reverse(); + fs::write(&graph_path, serde_json::to_vec(&graph)?)?; + } + let store = SqliteStore::open(directory.path().join(format!("store-{reverse}.db")))?; + let prepared = GraphSnapshotBuilder::new().prepare(&store, &graph)?; + GraphSnapshotBuilder::new().activate(&store, &prepared)?; + for engine in [ + open(&graph_path, None, &directory.path().join("cache"))?, + open_with_store( + &store, + &graph_path, + None, + &directory.path().join("store-cache"), + )?, + ] { + for depth in [1, 2, 3] { + let result = engine.node_trail(NodeTrailRequest { + calls_only: false, + source: "n:s".into(), + target: "n:t".into(), + include_heuristic: false, + limits: CodeQueryLimits { + max_depth: depth, + ..CodeQueryLimits::default() + }, + })?; + if depth < 3 { + assert!(result.paths.is_empty()); + assert!(result.truncated, "{result:?}"); + assert!( + result + .diagnostics + .iter() + .any(|d| d.code == QueryDiagnosticCode::BoundedTruncation) + ); + assert!(!result.diagnostics.iter().any(|d| matches!( + d.code, + QueryDiagnosticCode::DirectionMismatch | QueryDiagnosticCode::NoMatch + ))); + } else { + assert!(!result.truncated); + assert_eq!(result.paths.len(), 1); + assert_eq!(result.paths[0].node_ids, ["n:s", "n:a", "n:b", "n:t"]); + } + } + } + } + Ok(()) +} + +#[test] +fn node_trail_depth_frontier_proves_closed_dead_ends_and_cycles() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + for cycle in [false, true] { + let path = directory.path().join(format!("closed-{cycle}.json")); + let mut edges = vec![ + ("n:s", EdgeKind::Calls, "n:a"), + ("n:a", EdgeKind::Calls, "n:b"), + ]; + if cycle { + edges.push(("n:b", EdgeKind::Calls, "n:a")); + } + write_weighted_trail_fixture(&path, &edges)?; + let graph = GraphDocument::load(&path)?; + let store = SqliteStore::open(directory.path().join(format!("closed-{cycle}.db")))?; + let prepared = GraphSnapshotBuilder::new().prepare(&store, &graph)?; + GraphSnapshotBuilder::new().activate(&store, &prepared)?; + for engine in [ + open(&path, None, &directory.path().join("cache"))?, + open_with_store(&store, &path, None, &directory.path().join("store-cache"))?, + ] { + let response = engine.node_trail(NodeTrailRequest { + calls_only: false, + source: "n:s".into(), + target: "n:t".into(), + include_heuristic: false, + limits: CodeQueryLimits { + max_depth: 2, + ..CodeQueryLimits::default() + }, + })?; + assert!(!response.truncated, "{response:?}"); + assert!(response.paths.is_empty()); + assert!( + response + .diagnostics + .iter() + .any(|d| d.code == QueryDiagnosticCode::NoMatch) + ); + } + } + Ok(()) +} + +#[test] +fn explore_keeps_depth_exhaustion_when_no_connecting_path_is_returned() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + write_weighted_trail_fixture( + &path, + &[ + ("n:s", EdgeKind::Calls, "n:a"), + ("n:a", EdgeKind::Calls, "n:b"), + ("n:b", EdgeKind::Calls, "n:t"), + ], + )?; + let graph = GraphDocument::load(&path)?; + let store = SqliteStore::open(directory.path().join("store.db"))?; + let prepared = GraphSnapshotBuilder::new().prepare(&store, &graph)?; + GraphSnapshotBuilder::new().activate(&store, &prepared)?; + for engine in [ + open(&path, None, &directory.path().join("cache"))?, + open_with_store(&store, &path, None, &directory.path().join("store-cache"))?, + ] { + let response = engine.explore(compass_model::query_contract::ExploreRequest { + symbols: vec!["n:s".into(), "n:t".into()], + root: directory.path().to_string_lossy().into_owned(), + include_heuristic: false, + limits: CodeQueryLimits { + max_depth: 2, + ..CodeQueryLimits::default() + }, + })?; + assert!(response.paths.is_empty()); + assert!(response.truncated, "{response:?}"); + } + Ok(()) +} + +#[test] +fn calls_only_trails_preserve_bounds_occurrences_and_backend_parity() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + write_weighted_trail_fixture( + &path, + &[ + ("n:s", EdgeKind::Contains, "n:t"), + ("n:s", EdgeKind::Calls, "n:a"), + ("n:a", EdgeKind::Calls, "n:b"), + ("n:b", EdgeKind::Calls, "n:t"), + ("n:a", EdgeKind::Calls, "n:s"), + ], + )?; + let mut graph = GraphDocument::load(&path)?; + let mut parallel = graph + .links + .iter() + .find(|e| e.source == "n:s" && e.kind == EdgeKind::Calls) + .cloned() + .ok_or("missing call")?; + let mut anchor = parallel.relationship_site.clone().ok_or("missing site")?; + anchor.start_column += 1; + anchor.start_byte += 1; + parallel.relationship_site = Some(anchor.clone()); + parallel.id = edge_id( + ¶llel.source, + parallel.kind, + ¶llel.target, + Some(&anchor), + None, + ); + parallel.key.clone_from(¶llel.id); + for evidence in &mut parallel.evidence { + evidence.anchors = vec![anchor.clone()]; + } + graph.links.push(parallel); + let mut canonical = None; + for reverse in [false, true] { + if reverse { + graph.nodes.reverse(); + graph.links.reverse(); + } + fs::write(&path, serde_json::to_vec(&graph)?)?; + let store = SqliteStore::open(directory.path().join(format!("calls-{reverse}.db")))?; + let prepared = GraphSnapshotBuilder::new().prepare(&store, &graph)?; + GraphSnapshotBuilder::new().activate(&store, &prepared)?; + for engine in [ + open(&path, None, &directory.path().join("cache"))?, + open_with_store(&store, &path, None, &directory.path().join("store-cache"))?, + ] { + let request = NodeTrailRequest { + source: "n:s".into(), + target: "n:t".into(), + calls_only: true, + include_heuristic: false, + limits: CodeQueryLimits { + max_depth: 3, + ..CodeQueryLimits::default() + }, + }; + let structural = engine.node_trail(NodeTrailRequest { + calls_only: false, + ..request.clone() + })?; + assert_eq!(structural.paths[0].node_ids, ["n:s", "n:t"]); + let result = engine.node_trail(request.clone())?; + assert!(!result.truncated); + assert_eq!(result.paths[0].node_ids, ["n:s", "n:a", "n:b", "n:t"]); + assert!(result.edges.iter().all(|e| e.kind == EdgeKind::Calls)); + assert!( + result.edges.iter().all(|e| graph + .links + .iter() + .any(|stored| stored.id == e.id + && stored.relationship_site == e.relationship_site)) + ); + assert!( + engine + .node_trail(NodeTrailRequest { + limits: CodeQueryLimits { + max_response_bytes: 1, + ..request.limits.clone() + }, + ..request.clone() + }) + .is_err() + ); + let bytes = serde_json::to_vec(&result)?; + if let Some(expected) = &canonical { + assert_eq!(expected, &bytes); + } else { + canonical = Some(bytes); + } + for limits in [ + CodeQueryLimits { + max_depth: 2, + ..request.limits.clone() + }, + CodeQueryLimits { + max_edges: 1, + ..request.limits.clone() + }, + CodeQueryLimits { + max_nodes: 2, + ..request.limits.clone() + }, + ] { + let result = engine.node_trail(NodeTrailRequest { + limits, + ..request.clone() + })?; + assert!(result.truncated && result.paths.is_empty(), "{result:?}"); + assert!(!result.diagnostics.iter().any(|d| matches!( + d.code, + QueryDiagnosticCode::NoMatch | QueryDiagnosticCode::DirectionMismatch + ))); + } + for question in ["call path from n:s to n:t", "call chain from n:s to n:t"] { + let asked = engine.query_natural(compass_query::NaturalQueryRequest { + question: question.into(), + include_heuristic: false, + limits: request.limits.clone(), + })?; + assert_eq!(serde_json::to_vec(&asked)?, serde_json::to_vec(&result)?); + } + } + } + Ok(()) +} + +#[test] +fn calls_only_negative_diagnostics_ignore_structural_frontiers_and_reverse_shortcuts() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + for (name, edges, expected) in [ + ( + "structural-reverse", + vec![("n:t", EdgeKind::Contains, "n:s")], + QueryDiagnosticCode::NoMatch, + ), + ( + "call-reverse", + vec![("n:t", EdgeKind::Calls, "n:s")], + QueryDiagnosticCode::DirectionMismatch, + ), + ( + "closed-call-cycle", + vec![ + ("n:s", EdgeKind::Calls, "n:a"), + ("n:a", EdgeKind::Calls, "n:s"), + ("n:a", EdgeKind::Contains, "n:t"), + ], + QueryDiagnosticCode::NoMatch, + ), + ] { + let path = directory.path().join(format!("{name}.json")); + write_weighted_trail_fixture(&path, &edges)?; + let graph = GraphDocument::load(&path)?; + let store = SqliteStore::open(directory.path().join(format!("{name}.db")))?; + let prepared = GraphSnapshotBuilder::new().prepare(&store, &graph)?; + GraphSnapshotBuilder::new().activate(&store, &prepared)?; + for engine in [ + open(&path, None, &directory.path().join("cache"))?, + open_with_store(&store, &path, None, &directory.path().join("store-cache"))?, + ] { + let result = engine.node_trail(NodeTrailRequest { + calls_only: true, + source: "n:s".into(), + target: "n:t".into(), + include_heuristic: false, + limits: CodeQueryLimits { + max_depth: 1, + ..CodeQueryLimits::default() + }, + })?; + assert!( + !result.truncated && result.paths.is_empty(), + "{name}: {result:?}" + ); + assert!( + result.diagnostics.iter().any(|d| d.code == expected), + "{name}: {result:?}" + ); + } + } + Ok(()) +} + +#[test] +fn calls_only_retains_heuristic_opt_in_and_exact_name_ambiguity() +-> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + support::write_graph(&path)?; + let engine = open(&path, None, &directory.path().join("cache"))?; + let request = NodeTrailRequest { + source: "n:heuristic".into(), + target: "n:list".into(), + calls_only: true, + include_heuristic: false, + limits: CodeQueryLimits::default(), + }; + assert!(engine.node_trail(request.clone())?.paths.is_empty()); + let enriched = engine.node_trail(NodeTrailRequest { + include_heuristic: true, + ..request + })?; + assert_eq!(enriched.paths.len(), 1); + assert!(enriched.edges.iter().all(|e| e.kind == EdgeKind::Calls)); + let mut graph = GraphDocument::load(&path)?; + let original = graph + .nodes + .iter() + .find(|n| n.id == "n:list") + .cloned() + .ok_or("missing node")?; + let mut duplicate = original.clone(); + duplicate.id = "n:duplicate".into(); + graph.nodes.push(duplicate); + fs::write(&path, serde_json::to_vec(&graph)?)?; + let engine = open(&path, None, &directory.path().join("cache"))?; + let ambiguous = engine.node_trail(NodeTrailRequest { + source: original.name, + target: "n:callee".into(), + calls_only: true, + include_heuristic: false, + limits: CodeQueryLimits::default(), + })?; + assert!(ambiguous.paths.is_empty()); + assert!( + ambiguous + .diagnostics + .iter() + .any(|d| d.code == QueryDiagnosticCode::AmbiguousMatch) + ); + Ok(()) +} diff --git a/crates/compass-query/tests/coverage_paths.rs b/crates/compass-query/tests/coverage_paths.rs index 5969b66e9..91c58eafe 100644 --- a/crates/compass-query/tests/coverage_paths.rs +++ b/crates/compass-query/tests/coverage_paths.rs @@ -5,7 +5,8 @@ use compass_model::{Graph, GraphDocument}; use compass_query::{ TraversalMode, affected_nodes, find_node, format_affected, format_benchmark, normalize_context_filters, query_graph_text, query_terms, render_explanation, - render_shortest_path, resolve_seed, run_benchmark, sanitize_label, score_nodes, search_tokens, + render_shortest_path, render_shortest_path_with_limit, resolve_seed, run_benchmark, + sanitize_label, score_nodes, search_tokens, }; use serde_json::{Map, Value, json}; @@ -36,6 +37,36 @@ const FIXTURE: &str = r#"{ ] }"#; +#[test] +fn weighted_path_retains_shorter_prefixes_within_the_hop_limit() -> Result<(), Box> { + let graph = graph( + r#"{ + "directed":true, + "nodes":[{"id":"s","label":"Start"},{"id":"a","label":"First"}, + {"id":"b","label":"Join"},{"id":"t","label":"Target"}], + "links":[{"source":"s","target":"a","relation":"calls"}, + {"source":"a","target":"b","relation":"calls"}, + {"source":"s","target":"b","relation":"references"}, + {"source":"b","target":"t","relation":"calls"}] + }"#, + )?; + let shallow = render_shortest_path_with_limit(&graph, "s", "t", 2)?; + assert!( + shallow.contains("Best path (weighted, 2 hops, weight 5)"), + "{shallow}" + ); + assert!( + shallow.contains("Start --references--> Join --calls--> Target"), + "{shallow}" + ); + let deep = render_shortest_path_with_limit(&graph, "s", "t", 3)?; + assert!( + deep.contains("Best path (weighted, 3 hops, weight 3)"), + "{deep}" + ); + Ok(()) +} + #[test] fn affected_resolution_covers_ids_labels_sources_members_and_misses() -> Result<(), Box> { diff --git a/crates/compass-query/tests/explanation_members.rs b/crates/compass-query/tests/explanation_members.rs new file mode 100644 index 000000000..009129583 --- /dev/null +++ b/crates/compass-query/tests/explanation_members.rs @@ -0,0 +1,497 @@ +use std::error::Error; +use std::fs; + +use compass_model::{Graph, GraphDocument}; +use compass_query::{ + ExplanationMemberFocus, explanation_member_sources, explanation_member_sources_with_focus, +}; +use serde_json::{Value, json}; +use sha2::{Digest, Sha256}; + +const SOURCE: &str = "struct Owner {}\nfn first() { one(); }\nstruct Inner {}\nfn later() { two(); }\nfn wrong() {}\n"; +const FIRST: &str = "fn first() { one(); }"; +const LATER: &str = "fn later() { two(); }"; + +fn node(id: &str, name: &str, kind: &str, text: &str) -> Result> { + let start = SOURCE.find(text).ok_or("missing fixture span")?; + let line = SOURCE[..start].bytes().filter(|b| *b == b'\n').count() + 1; + Ok(json!({ + "id": id, "name": name, "kind": kind, + "source": {"file": "lib.rs", "startByte": start, "endByte": start + text.len(), "startLine": line, "endLine": line, "startColumn": 0, "endColumn": text.len()}, + "details": {"type": "symbol", "data": {"sourceDigest": format!("{:x}", Sha256::digest(text.as_bytes()))}} + })) +} +fn edge(id: &str, source: &str, target: &str, relation: &str) -> Value { + json!({"id": id, "source": source, "target": target, "relation": relation, "confidence": "EXTRACTED", "custom": id}) +} +fn document() -> Result> { + Ok( + json!({"directed": true, "multigraph": true, "graph": {}, "nodes": [ + node("owner", "Owner", "struct", "struct Owner {}")?, + node("first", "first", "method", FIRST)?, + node("inner", "Inner", "class", "struct Inner {}")?, + node("later", "later", "method", LATER)?, + node("wrong", "wrong", "function", "fn wrong() {}")? + ], "links": [ + edge("a", "owner", "first", "contains"), edge("b", "owner", "first", "contains"), + edge("c", "owner", "inner", "contains"), edge("d", "inner", "later", "method"), + edge("e", "owner", "wrong", "calls"), edge("f", "wrong", "owner", "contains"), + edge("g", "inner", "owner", "contains") + ]}), + ) +} +fn graph(value: Value) -> Result> { + Ok(Graph::from_document(serde_json::from_value::< + GraphDocument, + >(value)?)?) +} + +#[test] +fn focus_reaches_later_members_with_the_same_source_budget() -> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + let focus = ExplanationMemberFocus::new("later later")?; + for reversed in [false, true] { + let mut doc = document()?; + if reversed { + doc["nodes"].as_array_mut().ok_or("nodes")?.reverse(); + doc["links"].as_array_mut().ok_or("links")?.reverse(); + } + let graph = graph(doc)?; + let baseline = + explanation_member_sources(&graph, "owner", root.path(), LATER.len() as u64)?; + assert_eq!(baseline.members[0].node.id, "first"); + let report = explanation_member_sources_with_focus( + &graph, + "owner", + root.path(), + LATER.len() as u64, + Some(&focus), + )?; + assert_eq!(report.focus_terms, ["later"]); + assert_eq!(report.members.len(), 1); + assert_eq!(report.members[0].node.id, "later"); + assert_eq!(report.members[0].matched_focus_terms, ["later"]); + assert_eq!( + report.members[0] + .source + .as_ref() + .map_err(|e| e.to_string())? + .source, + LATER + ); + assert_eq!(report.source_bytes, LATER.len() as u64); + assert_eq!(report.verification_bytes_charged, LATER.len() as u64); + assert_eq!(report.omitted_members, 1); + assert!(report.truncated); + assert_eq!(report.membership.len(), baseline.membership.len()); + } + Ok(()) +} + +#[test] +fn absent_focus_matches_preserve_order_and_do_not_filter_members() -> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + let graph = graph(document()?)?; + let focus = ExplanationMemberFocus::new("nothing_matches")?; + let baseline = explanation_member_sources(&graph, "owner", root.path(), 8000)?; + for focus in [None, Some(&focus)] { + let report = + explanation_member_sources_with_focus(&graph, "owner", root.path(), 8000, focus)?; + assert_eq!( + report + .members + .iter() + .map(|m| m.node.id.as_str()) + .collect::>(), + ["first", "later"] + ); + assert!( + report + .members + .iter() + .all(|m| m.matched_focus_terms.is_empty()) + ); + assert_eq!(report.source_bytes, baseline.source_bytes); + assert_eq!( + report.verification_bytes_charged, + baseline.verification_bytes_charged + ); + assert_eq!(report.truncated, baseline.truncated); + } + Ok(()) +} + +#[test] +fn focus_counts_distinct_normalized_name_terms_and_keeps_ties_stable() -> Result<(), Box> +{ + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + for (first_name, later_name, question, expected) in [ + ( + "check", + "checkLoop", + "checking loops", + vec!["later", "first"], + ), + ( + "check_loop", + "checkLoop", + "checking loops", + vec!["first", "later"], + ), + ("other", "Résumé", "résumé", vec!["later", "first"]), + ] { + let mut doc = document()?; + doc["nodes"][1]["name"] = json!(first_name); + doc["nodes"][3]["name"] = json!(later_name); + let graph = graph(doc)?; + let focus = ExplanationMemberFocus::new(question)?; + let report = explanation_member_sources_with_focus( + &graph, + "owner", + root.path(), + 8000, + Some(&focus), + )?; + assert_eq!( + report + .members + .iter() + .map(|m| m.node.id.as_str()) + .collect::>(), + expected + ); + } + Ok(()) +} + +#[test] +fn focus_does_not_read_source_to_rank_or_suppress_stale_failures() -> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE.replace("two", "bad"))?; + let graph = graph(document()?)?; + // A body-only token must not rank a member. The matching name is stale, + // remains first, and its failed verification still consumes work. + let body_focus = ExplanationMemberFocus::new("two")?; + let report = explanation_member_sources_with_focus( + &graph, + "owner", + root.path(), + 8000, + Some(&body_focus), + )?; + assert_eq!(report.members[0].node.id, "first"); + let focus = ExplanationMemberFocus::new("later")?; + let report = + explanation_member_sources_with_focus(&graph, "owner", root.path(), 8000, Some(&focus))?; + assert_eq!(report.members[0].node.id, "later"); + assert!(report.members[0].source.is_err()); + assert!(report.members[1].source.is_ok()); + assert_eq!(report.source_bytes, FIRST.len() as u64); + assert_eq!( + report.verification_bytes_charged, + (FIRST.len() + LATER.len()) as u64 + ); + Ok(()) +} + +#[test] +fn focus_does_not_resolve_ambiguous_roots() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let mut doc = document()?; + doc["nodes"].as_array_mut().ok_or("nodes")?.push(node( + "other", + "Owner", + "struct", + "struct Owner {}", + )?); + let graph = graph(doc)?; + let focus = ExplanationMemberFocus::new("later")?; + assert!( + explanation_member_sources_with_focus(&graph, "Owner", root.path(), 8000, Some(&focus)) + .is_err() + ); + Ok(()) +} + +#[test] +fn focus_limits_reject_invalid_inputs_without_source_access() -> Result<(), Box> { + for text in [ + String::new(), + "!!!".to_owned(), + "x".repeat(4097), + (0..33) + .map(|i| format!("term{i}")) + .collect::>() + .join(" "), + ] { + assert!(ExplanationMemberFocus::new(&text).is_err()); + } + assert!(ExplanationMemberFocus::new(&"later ".repeat(100)).is_ok()); + Ok(()) +} + +#[test] +fn members_outside_the_owner_span_keep_nested_direction_and_parallel_evidence() +-> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + let mut summaries = Vec::new(); + for reversed in [false, true] { + let mut doc = document()?; + if reversed { + doc["nodes"].as_array_mut().ok_or("nodes")?.reverse(); + doc["links"].as_array_mut().ok_or("links")?.reverse(); + } + let graph = graph(doc)?; + let report = explanation_member_sources(&graph, "owner", root.path(), 8000)?; + assert!(!report.truncated); + assert_eq!(report.omitted_members, 0); + assert_eq!( + report + .members + .iter() + .map(|m| m.node.id.as_str()) + .collect::>(), + ["first", "later"] + ); + assert_eq!(report.source_bytes, (FIRST.len() + LATER.len()) as u64); + assert_eq!(report.verification_bytes_charged, report.source_bytes); + let excerpts = report + .members + .iter() + .map(|m| { + m.source + .as_ref() + .map(|s| (s.source.clone(), s.digest_verified)) + }) + .collect::, _>>() + .map_err(|e| e.to_string())?; + assert_eq!( + excerpts, + [(FIRST.to_owned(), true), (LATER.to_owned(), true)] + ); + assert_eq!(report.membership.len(), 5); + assert_eq!( + report + .membership + .iter() + .filter(|e| e.source == "owner" && e.target == "first") + .count(), + 2 + ); + summaries.push( + report + .membership + .iter() + .map(|e| serde_json::to_string(e)) + .collect::, _>>()?, + ); + } + assert_eq!(summaries[0], summaries[1]); + Ok(()) +} + +#[test] +fn source_budget_is_shared_and_omissions_are_explicit() -> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + let graph = graph(document()?)?; + let exact = explanation_member_sources(&graph, "owner", root.path(), FIRST.len() as u64)?; + assert_eq!(exact.members.len(), 1); + assert_eq!(exact.omitted_members, 1); + assert!(exact.truncated); + let partial = explanation_member_sources(&graph, "owner", root.path(), FIRST.len() as u64 + 3)?; + assert_eq!(partial.members.len(), 2); + assert_eq!(partial.omitted_members, 0); + assert!(partial.truncated); + assert_eq!(partial.source_bytes, FIRST.len() as u64 + 3); + assert_eq!( + partial.members[1] + .source + .as_ref() + .map_err(|e| e.to_string())? + .source, + "fn " + ); + assert!( + partial.members[1] + .source + .as_ref() + .map_err(|e| e.to_string())? + .digest_verified + ); + assert_eq!( + partial.verification_bytes_charged, + (FIRST.len() + LATER.len()) as u64 + ); + Ok(()) +} + +#[test] +fn stale_and_unverified_members_keep_their_individual_status() -> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE.replace("one", "uno"))?; + let mut doc = document()?; + doc["nodes"][3]["details"]["data"] + .as_object_mut() + .ok_or("details")? + .remove("sourceDigest"); + let graph = graph(doc)?; + let report = explanation_member_sources(&graph, "owner", root.path(), 8000)?; + assert!(report.members[0].source.is_err()); + let second = report.members[1] + .source + .as_ref() + .map_err(|e| e.to_string())?; + assert_eq!(second.source, LATER); + assert!(!second.digest_verified); + assert_eq!(report.source_bytes, LATER.len() as u64); + assert_eq!( + report.verification_bytes_charged, + (FIRST.len() + LATER.len()) as u64 + ); + Ok(()) +} + +#[test] +fn ambiguous_roots_and_undirected_graphs_are_not_guessed() -> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + let mut doc = document()?; + doc["nodes"].as_array_mut().ok_or("nodes")?.push(node( + "other", + "Owner", + "struct", + "struct Owner {}", + )?); + let ambiguous = graph(doc)?; + assert!(explanation_member_sources(&ambiguous, "Owner", root.path(), 8000).is_err()); + let mut doc = document()?; + doc["directed"] = json!(false); + assert!(explanation_member_sources(&graph(doc)?, "owner", root.path(), 8000).is_err()); + Ok(()) +} + +#[test] +fn ignored_relations_still_consume_the_discovery_work_budget() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let mut doc = document()?; + doc["links"] = Value::Array( + (0..10001) + .map(|i| edge(&format!("call-{i}"), "owner", "wrong", "calls")) + .collect(), + ); + let graph = graph(doc)?; + let error = explanation_member_sources(&graph, "owner", root.path(), 8000) + .err() + .ok_or("work limit not enforced")?; + assert!(error.to_string().contains("10000-adjacency")); + Ok(()) +} + +#[test] +fn heuristic_and_deferred_members_are_not_promoted_to_recorded_source_members() +-> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + let mut doc = document()?; + let mut inferred = edge("inferred", "owner", "wrong", "contains"); + inferred["confidence"] = json!("INFERRED"); + let mut deferred = edge("deferred", "owner", "wrong", "contains"); + deferred["deferred"] = json!(true); + doc["links"] + .as_array_mut() + .ok_or("links")? + .extend([inferred, deferred]); + let graph = graph(doc)?; + let report = explanation_member_sources(&graph, "owner", root.path(), 8000)?; + assert_eq!(report.members.len(), 2); + assert!(report.members.iter().all(|m| m.node.id != "wrong")); + Ok(()) +} + +#[test] +fn metadata_and_parameter_limits_fail_before_source_reads() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let base = graph(document()?)?; + for budget in [0, 1_048_577] { + assert!(explanation_member_sources(&base, "owner", root.path(), budget).is_err()); + } + let mut doc = document()?; + doc["nodes"][0]["large"] = json!("x".repeat(1_048_577)); + assert!(explanation_member_sources(&graph(doc)?, "owner", root.path(), 8000).is_err()); + Ok(()) +} + +#[test] +fn complete_span_work_is_bounded_even_for_failed_source_reads() -> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + let mut doc = document()?; + doc["nodes"][1]["source"]["endByte"] = json!(10_000_000); + doc["nodes"][3]["source"]["endByte"] = json!(10_000_000); + let graph = graph(doc)?; + let report = explanation_member_sources(&graph, "owner", root.path(), 8000)?; + assert_eq!(report.members.len(), 1); + assert!(report.members[0].source.is_err()); + assert_eq!(report.omitted_members, 1); + assert!(report.truncated); + assert_eq!(report.source_bytes, 0); + assert!(report.verification_bytes_charged <= 16_777_216); + Ok(()) +} + +#[test] +fn candidate_and_nesting_caps_are_explicit_errors() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let mut wide = document()?; + wide["links"] = json!([]); + for i in 0..129 { + let id = format!("member-{i}"); + wide["nodes"] + .as_array_mut() + .ok_or("nodes")? + .push(node(&id, &id, "method", FIRST)?); + wide["links"] + .as_array_mut() + .ok_or("links")? + .push(edge(&id, "owner", &id, "contains")); + } + let wide = graph(wide)?; + assert!( + explanation_member_sources(&wide, "owner", root.path(), 8000) + .err() + .ok_or("missing cap")? + .to_string() + .contains("128-callable") + ); + let mut deep = document()?; + deep["links"] = json!([]); + let mut parent = "owner".to_owned(); + for i in 0..5 { + let id = format!("nested-{i}"); + deep["nodes"].as_array_mut().ok_or("nodes")?.push(node( + &id, + &id, + "class", + "struct Inner {}", + )?); + deep["links"] + .as_array_mut() + .ok_or("links")? + .push(edge(&id, &parent, &id, "contains")); + parent = id; + } + let deep = graph(deep)?; + assert!( + explanation_member_sources(&deep, "owner", root.path(), 8000) + .err() + .ok_or("missing cap")? + .to_string() + .contains("depth limit") + ); + Ok(()) +} diff --git a/crates/compass-query/tests/explanation_source.rs b/crates/compass-query/tests/explanation_source.rs new file mode 100644 index 000000000..e05604aed --- /dev/null +++ b/crates/compass-query/tests/explanation_source.rs @@ -0,0 +1,97 @@ +use std::error::Error; +use std::fs; + +use compass_model::{Graph, GraphDocument}; +use compass_query::explanation_source; +use serde_json::{Value, json}; +use sha2::{Digest, Sha256}; + +const SOURCE: &str = "fn run() {\n body();\n}\n"; + +fn graph(digest: Option) -> Result> { + let mut node = json!({ + "id": "n:run", "name": "run", "kind": "function", + "source": { + "file": "lib.rs", "startByte": 0, "endByte": SOURCE.len(), + "startLine": 1, "endLine": 3, "startColumn": 0, "endColumn": 1 + }, + "details": {"type": "symbol", "data": {}} + }); + if let Some(digest) = digest { + node["details"]["data"]["sourceDigest"] = digest; + } + let document: GraphDocument = serde_json::from_value(json!({ + "directed": true, "multigraph": true, "graph": {}, + "nodes": [node], "links": [] + }))?; + Ok(Graph::from_document(document)?) +} + +#[test] +fn missing_digest_returns_explicitly_unverified_current_source() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let graph = graph(None)?; + for source in [SOURCE.to_owned(), SOURCE.replace("body", "next")] { + fs::write(root.path().join("lib.rs"), &source)?; + let excerpt = explanation_source(&graph, "n:run", root.path(), 4096)?; + assert_eq!(excerpt.source, source); + assert!(!excerpt.digest_verified); + assert!(!excerpt.truncated); + let bounded = explanation_source(&graph, "n:run", root.path(), 5)?; + assert_eq!(bounded.source, "fn ru"); + assert!(!bounded.digest_verified); + assert!(bounded.truncated); + } + Ok(()) +} + +#[test] +fn stored_digest_verifies_the_entire_span_even_when_only_a_prefix_is_returned() +-> Result<(), Box> { + let root = tempfile::tempdir()?; + let digest = format!("{:x}", Sha256::digest(SOURCE.as_bytes())); + for digest in [digest.clone(), format!("sha256:{digest}")] { + let graph = graph(Some(json!(digest)))?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + let excerpt = explanation_source(&graph, "n:run", root.path(), 5)?; + assert_eq!(excerpt.source, "fn ru"); + assert!(excerpt.digest_verified); + assert!(excerpt.truncated); + fs::write(root.path().join("lib.rs"), SOURCE.replace("body", "next"))?; + let error = explanation_source(&graph, "n:run", root.path(), 5) + .err() + .ok_or("stale source was accepted")?; + assert!(error.to_string().contains("does not match")); + } + Ok(()) +} + +#[test] +fn malformed_digest_cannot_fall_back_to_unverified_source() -> Result<(), Box> { + let root = tempfile::tempdir()?; + fs::write(root.path().join("lib.rs"), SOURCE)?; + for digest in [ + json!(null), + json!(false), + json!(7), + json!([]), + json!({}), + json!(""), + json!("sha256:bad"), + ] { + let graph = graph(Some(digest))?; + assert!(explanation_source(&graph, "n:run", root.path(), 4096).is_err()); + } + Ok(()) +} + +#[test] +fn absent_digest_keeps_missing_file_and_span_errors() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let graph = graph(None)?; + assert!(explanation_source(&graph, "n:run", root.path(), 4096).is_err()); + fs::write(root.path().join("lib.rs"), "short")?; + assert!(explanation_source(&graph, "n:run", root.path(), 4096).is_err()); + assert!(explanation_source(&graph, "missing", root.path(), 4096).is_err()); + Ok(()) +} diff --git a/crates/compass-query/tests/export_binding_resolution.rs b/crates/compass-query/tests/export_binding_resolution.rs new file mode 100644 index 000000000..5c8324e56 --- /dev/null +++ b/crates/compass-query/tests/export_binding_resolution.rs @@ -0,0 +1,342 @@ +mod support; + +use std::error::Error; +use std::fs; +use std::path::Path; + +use compass_graph::GraphSnapshotBuilder; +use compass_model::Graph; +use compass_model::code_graph::{EdgeKind, EdgeRecord, GraphDocument, NodeKind}; +use compass_model::identity::edge_id; +use compass_model::provenance::{EvidenceConfidence, ResolutionCandidate}; +use compass_model::query_contract::{ + CallRequest, CodeQueryLimits, NodeTrailRequest, QueryDiagnosticCode, +}; +use compass_query::{ + EngineSelection, find_exact_nodes, open, open_with_engine, open_with_store, + render_shortest_path_with_limit, +}; +use compass_store::{STORE_FILE_NAME, STORE_REF_FILE_NAME, SqliteStore}; + +fn fixture(path: &Path) -> Result> { + support::write_graph(path)?; + fs::create_dir_all(path.parent().ok_or("missing graph parent")?.join("cache"))?; + let mut graph = GraphDocument::load(path)?; + let template = graph + .links + .first() + .cloned() + .ok_or("missing edge template")?; + graph.nodes = vec![ + support::node("module", NodeKind::Module, "api", "api"), + support::node("binding", NodeKind::Export, "entry", "api.entry"), + support::node("function", NodeKind::Function, "entry()", "api.entry"), + support::node("leaf", NodeKind::Function, "leaf()", "api.leaf"), + ]; + graph.links = vec![ + edge(&template, "module", EdgeKind::Contains, "binding"), + edge(&template, "module", EdgeKind::Exports, "function"), + edge(&template, "function", EdgeKind::Calls, "leaf"), + ]; + Ok(graph) +} + +fn edge(template: &EdgeRecord, source: &str, kind: EdgeKind, target: &str) -> EdgeRecord { + let mut edge = template.clone(); + edge.source = source.to_owned(); + edge.target = target.to_owned(); + edge.kind = kind; + edge.id = edge_id(source, kind, target, edge.relationship_site.as_ref(), None); + edge.key.clone_from(&edge.id); + edge +} + +fn ids(graph: &Graph, query: &str) -> Vec { + let mut ids = find_exact_nodes(graph, query) + .into_iter() + .map(|index| graph.node(index).id.clone()) + .collect::>(); + ids.sort(); + ids +} + +#[test] +fn coincident_export_binding_resolves_to_its_proven_declaration() -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + let mut document = fixture(&path)?; + for reverse in [false, true] { + if reverse { + document.nodes.reverse(); + document.links.reverse(); + } + fs::write(&path, serde_json::to_vec(&document)?)?; + // Full document, cold traversal projection, and warm compact cache + // must retain enough evidence to make the same decision. + for projection in [ + document.to_legacy_document()?, + compass_model::GraphDocument::load_for_traversal(&path)?, + compass_model::GraphDocument::load_for_traversal(&path)?, + ] { + let graph = Graph::from_document(projection)?; + for query in ["entry", "entry()", "api.entry"] { + assert_eq!(ids(&graph, query), ["function"], "{query}"); + } + assert_eq!(ids(&graph, "binding"), ["binding"]); + let answer = render_shortest_path_with_limit(&graph, "entry", "leaf", 2)?; + assert!(answer.contains("1 hops"), "{answer}"); + assert!(!answer.contains("AMBIGUOUS"), "{answer}"); + } + let store = SqliteStore::open(directory.path().join(STORE_FILE_NAME))?; + let prepared = GraphSnapshotBuilder::new().prepare(&store, &document)?; + GraphSnapshotBuilder::new().activate(&store, &prepared)?; + fs::write( + directory.path().join(STORE_REF_FILE_NAME), + serde_json::to_vec(&store.snapshot_reference()?)?, + )?; + store.checkpoint()?; + for engine in [ + open_with_engine( + &path, + None, + &directory.path().join("cache"), + EngineSelection::Json, + )?, + open_with_engine( + &path, + None, + &directory.path().join("direct-cache"), + EngineSelection::Store, + )?, + open_with_store(&store, &path, None, &directory.path().join("store-cache"))?, + ] { + let response = engine.callees(CallRequest { + symbol: "entry".to_owned(), + include_heuristic: false, + limits: CodeQueryLimits::default(), + })?; + assert!( + !response + .diagnostics + .iter() + .any(|d| d.code == QueryDiagnosticCode::AmbiguousMatch) + ); + assert!( + response + .edges + .iter() + .any(|e| e.source == "function" && e.target == "leaf") + ); + let trail = engine.node_trail(NodeTrailRequest { + calls_only: false, + source: "entry".to_owned(), + target: "leaf".to_owned(), + include_heuristic: false, + limits: CodeQueryLimits::default(), + })?; + assert_eq!(trail.paths.len(), 1); + let exact = engine.callees(CallRequest { + symbol: "binding".to_owned(), + include_heuristic: false, + limits: CodeQueryLimits::default(), + })?; + assert!(exact.edges.is_empty(), "exact binding ID must not redirect"); + } + } + Ok(()) +} + +#[test] +fn incomplete_or_conflicting_export_proof_preserves_ambiguity() -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + for case in [ + "missing", + "wrong_site", + "reversed", + "inferred", + "mixed_confidence", + "deferred", + "missing_site", + "ambiguous", + "two_targets", + "other_declaration", + "wrong_qualified_name", + ] { + let mut document = fixture(&path)?; + match case { + "missing" => document.links.retain(|e| e.kind != EdgeKind::Exports), + "wrong_site" => { + let site = document.links[1] + .relationship_site + .as_mut() + .ok_or("missing site")?; + site.end_byte = 3; + site.end_column = 3; + } + "reversed" => { + document.links[1].source = "function".to_owned(); + document.links[1].target = "module".to_owned(); + } + "inferred" => document.links[1].evidence[0].confidence = EvidenceConfidence::Inferred, + "mixed_confidence" => { + let mut weaker = document.links[1].evidence[0].clone(); + weaker.confidence = EvidenceConfidence::Inferred; + document.links[1].evidence.push(weaker); + } + "deferred" => document.links[1].deferred = true, + "missing_site" => document.links[1].relationship_site = None, + "ambiguous" => { + let evidence = &mut document.links[1].evidence[0]; + evidence.confidence = EvidenceConfidence::Ambiguous; + evidence.candidates = ["function", "leaf"] + .map(|id| ResolutionCandidate { + node_id: id.to_owned(), + reason: "two possible targets".to_owned(), + confidence: EvidenceConfidence::Exact, + score: None, + anchor: None, + }) + .to_vec(); + } + "two_targets" => { + document.nodes.push(support::node( + "other", + NodeKind::Function, + "elsewhere", + "api.elsewhere", + )); + document.links.push(edge( + &document.links[1], + "module", + EdgeKind::Exports, + "other", + )); + } + "other_declaration" => document.nodes.push(support::node( + "other", + NodeKind::Function, + "entry()", + "other.entry", + )), + "wrong_qualified_name" => document.nodes[2].qualified_name = "other.entry".to_owned(), + _ => return Err("unexpected case".into()), + } + let graph = Graph::from_document(document.to_legacy_document()?)?; + assert!(ids(&graph, "entry").len() >= 2, "{case}"); + assert!( + render_shortest_path_with_limit(&graph, "entry", "leaf", 2).is_err(), + "{case}" + ); + // Graph validity is independent of proof. Mutation keys must follow + // updated endpoints/site; all cases remain valid public graphs. + for edge in &mut document.links { + edge.id = edge_id( + &edge.source, + edge.kind, + &edge.target, + edge.relationship_site.as_ref(), + None, + ); + edge.key.clone_from(&edge.id); + } + // Reverse exports is deliberately an invalid endpoint contract, so + // the permissive legacy reader alone exercises that negative. + if case == "reversed" { + continue; + } + fs::write(&path, serde_json::to_vec(&document)?)?; + for _ in 0..2 { + let graph = + Graph::from_document(compass_model::GraphDocument::load_for_traversal(&path)?)?; + assert!(ids(&graph, "entry").len() >= 2, "cached {case}"); + } + let engine = open(&path, None, &directory.path().join("negative-cache"))?; + let response = engine.callees(CallRequest { + symbol: "entry".to_owned(), + include_heuristic: true, + limits: CodeQueryLimits::default(), + })?; + assert!( + response + .diagnostics + .iter() + .any(|d| d.code == QueryDiagnosticCode::AmbiguousMatch), + "{case}" + ); + assert!(response.edges.is_empty(), "{case}"); + } + Ok(()) +} + +#[test] +fn truncated_candidate_or_export_evidence_never_selects_a_target() -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + let mut document = fixture(&path)?; + fs::write(&path, serde_json::to_vec(&document)?)?; + let engine = open(&path, None, &directory.path().join("cache"))?; + let response = engine.callees(CallRequest { + symbol: "entry".to_owned(), + include_heuristic: false, + limits: CodeQueryLimits { + max_candidates: 1, + ..CodeQueryLimits::default() + }, + })?; + assert!(response.truncated); + assert!( + response + .diagnostics + .iter() + .any(|d| d.code == QueryDiagnosticCode::AmbiguousMatch) + ); + assert!(response.edges.is_empty()); + for index in 0..1024 { + let id = format!("other:{index}"); + document.nodes.push(support::node( + &id, + NodeKind::Function, + "other", + &format!("api.other{index}"), + )); + document + .links + .push(edge(&document.links[1], "module", EdgeKind::Exports, &id)); + } + fs::write(&path, serde_json::to_vec(&document)?)?; + let graph = Graph::from_document(document.to_legacy_document()?)?; + assert_eq!(ids(&graph, "entry"), ["binding", "function"]); + let engine = open(&path, None, &directory.path().join("bounded-cache"))?; + let response = engine.callees(CallRequest { + symbol: "entry".to_owned(), + include_heuristic: false, + limits: CodeQueryLimits::default(), + })?; + assert!(response.truncated); + assert!(response.diagnostics.iter().any( + |d| d.code == QueryDiagnosticCode::AmbiguousMatch && d.message.contains("proof bound") + )); + assert!(response.edges.is_empty()); + Ok(()) +} + +#[test] +fn coarse_legacy_source_location_is_not_export_binding_proof() -> Result<(), Box> { + let directory = tempfile::tempdir()?; + let path = directory.path().join("graph.json"); + let document = fixture(&path)?; + let mut legacy = document.to_legacy_document()?; + let binding = legacy + .nodes + .iter_mut() + .find(|node| node.id == "binding") + .ok_or("missing binding")?; + binding.attributes.insert( + "source_location".to_owned(), + serde_json::Value::String("L1".to_owned()), + ); + let graph = Graph::from_document(legacy)?; + assert_eq!(ids(&graph, "entry"), ["binding", "function"]); + Ok(()) +} diff --git a/crates/compass-query/tests/natural_intent.rs b/crates/compass-query/tests/natural_intent.rs index 7581c4949..4935a825c 100644 --- a/crates/compass-query/tests/natural_intent.rs +++ b/crates/compass-query/tests/natural_intent.rs @@ -5,6 +5,7 @@ use std::path::Path; use std::time::Instant; use compass_graph::GraphSnapshotBuilder; +use compass_model::code_graph::GraphDocument; use compass_model::query_contract::{ CodeQueryLimits, CodeQueryOperation, MAX_INDEXED_CANDIDATE_NODES_READ, QueryDiagnosticCode, SearchRequest, @@ -103,6 +104,126 @@ fn natural_intents_route_to_typed_operations_with_backend_parity() Ok(()) } +#[test] +fn owner_qualified_calls_resolve_only_a_proven_unique_suffix() +-> Result<(), Box> { + for duplicate_owner in [false, true] { + let directory = tempfile::tempdir()?; + let graph_path = directory.path().join("graph.json"); + support::write_graph(&graph_path)?; + let mut graph = GraphDocument::load(&graph_path)?; + for node in &mut graph.nodes { + match node.id.as_str() { + "n:caller" => { + node.name = ".get_route_handler()".to_owned(); + node.qualified_name = "fastapi.routing.APIRoute::get_route_handler".to_owned(); + } + "n:other" => { + node.name = ".get_route_handler()".to_owned(); + node.qualified_name = "GzipRoute::get_route_handler".to_owned(); + } + "n:listing" => { + node.name = ".get_route_handler()".to_owned(); + node.qualified_name = if duplicate_owner { + "docs.APIRoute::get_route_handler".to_owned() + } else { + "docs.TimedRoute::get_route_handler".to_owned() + }; + } + "n:list" => { + node.name = "get_request_handler".to_owned(); + node.qualified_name = "fastapi.routing.get_request_handler".to_owned(); + } + _ => {} + } + } + fs::write(&graph_path, serde_json::to_vec(&graph)?)?; + publish_snapshot(directory.path(), &graph_path)?; + for backend in [EngineSelection::Json, EngineSelection::Store] { + let engine = open_with_engine( + &graph_path, + None, + &directory.path().join(format!("cache-{backend:?}")), + backend, + )?; + let fully_qualified = engine.query_natural(request( + "what does fastapi.routing.APIRoute::get_route_handler call?", + ))?; + assert!( + fully_qualified + .edges + .iter() + .any(|edge| { edge.source == "n:caller" && edge.target == "n:list" }) + ); + + for owner in ["APIRoute.get_route_handler", "APIRoute::get_route_handler"] { + let short_owner = + engine.query_natural(request(&format!("what does {owner} call?")))?; + if duplicate_owner { + assert!(short_owner.edges.is_empty()); + assert!(short_owner.diagnostics.iter().any(|diagnostic| { + diagnostic.code == QueryDiagnosticCode::AmbiguousMatch + })); + assert_eq!(short_owner.nodes.len(), 2); + } else { + assert!( + short_owner + .edges + .iter() + .any(|edge| { edge.source == "n:caller" && edge.target == "n:list" }) + ); + assert!( + !short_owner + .diagnostics + .iter() + .any(|diagnostic| { diagnostic.code == QueryDiagnosticCode::NoMatch }) + ); + let path = engine.query_natural(request(&format!( + "call path from {owner} to get_request_handler" + )))?; + assert!( + path.paths + .iter() + .any(|path| { path.node_ids == ["n:caller", "n:list"] }) + ); + } + } + + let missing_owner = + engine.query_natural(request("what does MissingRoute.get_route_handler call?"))?; + assert!(missing_owner.edges.is_empty()); + assert!( + missing_owner + .diagnostics + .iter() + .any(|diagnostic| { diagnostic.code == QueryDiagnosticCode::NoMatch }) + ); + + let root_owner = + engine.query_natural(request("what does GzipRoute.get_route_handler call?"))?; + assert!( + !root_owner + .diagnostics + .iter() + .any(|diagnostic| { diagnostic.code == QueryDiagnosticCode::NoMatch }) + ); + + let mut bounded_request = request("what does APIRoute.get_route_handler call?"); + bounded_request.limits.max_candidates = 1; + let bounded = engine.query_natural(bounded_request)?; + assert!(bounded.truncated); + assert!(bounded.edges.is_empty()); + assert!( + bounded + .diagnostics + .iter() + .any(|diagnostic| { diagnostic.code == QueryDiagnosticCode::AmbiguousMatch }) + ); + } + } + Ok(()) +} + #[test] fn expired_typed_query_deadline_fails_closed_with_a_typed_timeout() -> Result<(), Box> { diff --git a/crates/compass-query/tests/query_contract.rs b/crates/compass-query/tests/query_contract.rs index cfff2dcbb..a1be21f9a 100644 --- a/crates/compass-query/tests/query_contract.rs +++ b/crates/compass-query/tests/query_contract.rs @@ -77,3 +77,39 @@ fn checked_in_contract_fingerprint_matches_the_enum_and_field_manifest() assert_eq!(response.schema, CODE_QUERY_SCHEMA_V1); Ok(()) } + +#[test] +fn calls_only_request_defaults_false_and_rejects_non_boolean_policy() +-> Result<(), Box> { + use compass_model::query_contract::NodeTrailRequest; + let legacy = serde_json::json!({"source":"a","target":"b","includeHeuristic":false, + "limits": CodeQueryLimits::default()}); + let request: NodeTrailRequest = serde_json::from_value(legacy.clone())?; + assert!(!request.calls_only); + assert_eq!(serde_json::to_value(&request)?, legacy); + let mut scoped = legacy; + scoped["callsOnly"] = serde_json::json!(true); + assert!(serde_json::from_value::(scoped.clone())?.calls_only); + for value in [ + serde_json::json!("true"), + serde_json::json!(1), + serde_json::Value::Null, + ] { + scoped["callsOnly"] = value; + assert!(serde_json::from_value::(scoped.clone()).is_err()); + } + for (question, expected) in [ + ("path from a to b", false), + ("call path from a to b", true), + ("call chain from a to b", true), + ("find definition of a", false), + ] { + let plan = compass_query::plan_natural_query(question)?; + assert_eq!(plan.calls_only(), expected); + assert_eq!( + serde_json::to_value(&plan)?.get("callsOnly").is_some(), + expected + ); + } + Ok(()) +} diff --git a/crates/compass-query/tests/relevance_qualification.rs b/crates/compass-query/tests/relevance_qualification.rs index 10e296d4a..503f96095 100644 --- a/crates/compass-query/tests/relevance_qualification.rs +++ b/crates/compass-query/tests/relevance_qualification.rs @@ -910,6 +910,7 @@ fn backend_parity_subset_preserves_normalized_search_ids_and_edges() .all(|edge| !edge.kind.as_str().is_empty()) ); let trail = NodeTrailRequest { + calls_only: false, source: "Api.caller".to_owned(), target: "Store.callee".to_owned(), include_heuristic: false, diff --git a/crates/compass-query/tests/store_engine.rs b/crates/compass-query/tests/store_engine.rs index fa88d45ac..19fb309b6 100644 --- a/crates/compass-query/tests/store_engine.rs +++ b/crates/compass-query/tests/store_engine.rs @@ -1220,6 +1220,7 @@ fn store_engine_reads_the_immutable_phase2_snapshot_for_all_code_queries() serde_json::to_value(json.explore(explore)?)?, ); let trail = NodeTrailRequest { + calls_only: false, source: "Api.caller".to_owned(), target: "Store.callee".to_owned(), include_heuristic: false, @@ -1380,6 +1381,7 @@ fn redb_store_runs_the_same_typed_queries_as_json() -> Result<(), Box { (by_module_name, (by_scope_name, by_source_directory_name)) }, ); + // At most one source-spelling entry per admitted Java nominal declaration. + // This does not guess where a package name ends or select by a member. + let mut java_receivers_by_source_name = AHashMap::>::new(); + for declaration in declarations.values().filter(|declaration| { + declaration.language == "java" + && matches!( + declaration.kind.as_str(), + "class" | "interface" | "enum" | "record" | "annotation_type" | "enum_member" + ) + }) { + if let Some(slot) = declaration_slot(&declaration_ids, &declaration.id) { + java_receivers_by_source_name + .entry(declaration.qualified_name.replace("::", ".")) + .or_default() + .push(slot); + } + } + sort_declaration_index( + &mut java_receivers_by_source_name, + &declaration_ids, + limits.candidates_per_lookup, + ); profile_internal("universal declaration indices", &mut profile_started); let mut inventory_by_qualified = AHashMap::<_, Vec<_>>::new(); for node in inventory_nodes { @@ -1083,6 +1105,9 @@ impl IndexBuilder<'_> { csharp: CSharpIndexes { bindings_by_source: csharp_bindings_by_source, }, + java: JavaIndexes { + receivers_by_source_name: java_receivers_by_source_name, + }, php: PhpIndexes { members_by_owner_folded: php_members_by_owner_folded, }, diff --git a/crates/compass-resolve/src/evidence/index/mod.rs b/crates/compass-resolve/src/evidence/index/mod.rs index a0edde703..7cf2ad1ce 100644 --- a/crates/compass-resolve/src/evidence/index/mod.rs +++ b/crates/compass-resolve/src/evidence/index/mod.rs @@ -65,6 +65,13 @@ pub(super) struct CSharpIndexes { pub(super) bindings_by_source: AHashMap>, } +#[derive(Default)] +pub(super) struct JavaIndexes { + /// Source spelling keeps dots for both packages and nested types. Preserve + /// every matching nominal owner; member availability must not select one. + pub(super) receivers_by_source_name: AHashMap>, +} + #[derive(Default)] pub(super) struct PhpIndexes { pub(super) members_by_owner_folded: AHashMap<(String, String), Vec>, @@ -79,5 +86,6 @@ pub(super) struct ResolutionIndexes { pub(super) typescript: TypeScriptIndexes, pub(super) rust: RustIndexes, pub(super) csharp: CSharpIndexes, + pub(super) java: JavaIndexes, pub(super) php: PhpIndexes, } diff --git a/crates/compass-resolve/src/evidence/languages/java.rs b/crates/compass-resolve/src/evidence/languages/java.rs index eb33df41c..dd20a4c5d 100644 --- a/crates/compass-resolve/src/evidence/languages/java.rs +++ b/crates/compass-resolve/src/evidence/languages/java.rs @@ -1,8 +1,147 @@ -//! Java overload applicability and conversion resolution policy. +//! Java nominal receivers, overload applicability and conversion policy. use super::super::*; impl ResolutionDb<'_> { + pub(in crate::evidence) fn resolve_java_field_receiver( + &self, + candidate: &RelationshipCandidate, + ) -> Option { + if candidate.relation != CandidateRelation::AccessesMember { + return None; + } + let (owner, member) = candidate + .constraints + .qualified_name + .as_deref()? + .rsplit_once("::")?; + let declarations = if owner.contains("::") { + self.indexes + .names + .by_qualified + .get(&("java".to_owned(), owner.to_owned())) + } else { + self.indexes.java.receivers_by_source_name.get(owner) + }; + let Some(declarations) = declarations else { + return Some(ResolutionDecision::Unresolved); + }; + if declarations.len() > self.budget.candidates_per_lookup() { + return Some(ResolutionDecision::Ambiguous { + candidate_count: declarations.len(), + }); + } + // Member availability cannot choose among duplicate nominal types. + // Count receiver declarations before looking for the requested field. + let mut owners = declarations + .iter() + .filter_map(|slot| self.declaration(*slot)) + .filter(|declaration| { + matches!( + declaration.kind.as_str(), + "class" | "interface" | "enum" | "record" | "annotation_type" | "enum_member" + ) + }); + let Some(receiver) = owners.next() else { + return Some(ResolutionDecision::Unresolved); + }; + let count = 1 + owners.count(); + if count > 1 { + return Some(ResolutionDecision::Ambiguous { + candidate_count: count, + }); + } + // A duplicate enclosing type cannot be selected by the availability + // of a nested type in only one declaration. Every nominal prefix must + // be unique before using the canonical owner, within the lookup budget. + let mut prefix = receiver.qualified_name.as_str(); + let mut remaining = self.budget.candidates_per_lookup() - declarations.len(); + while let Some((parent, _)) = prefix.rsplit_once("::") { + if remaining == 0 { + return Some(ResolutionDecision::Unresolved); + } + let Some(parents) = self + .indexes + .names + .by_qualified + .get(&("java".to_owned(), parent.to_owned())) + else { + return Some(ResolutionDecision::Unresolved); + }; + if parents.len() > self.budget.candidates_per_lookup() { + return Some(ResolutionDecision::Ambiguous { + candidate_count: parents.len(), + }); + } + if parents.len() > remaining { + return Some(ResolutionDecision::Unresolved); + } + remaining -= parents.len(); + let count = parents + .iter() + .filter_map(|slot| self.declaration(*slot)) + .filter(|declaration| { + matches!( + declaration.kind.as_str(), + "class" + | "interface" + | "enum" + | "record" + | "annotation_type" + | "enum_member" + ) + }) + .count(); + if count != 1 { + return Some(if count == 0 { + ResolutionDecision::Unresolved + } else { + ResolutionDecision::Ambiguous { + candidate_count: count, + } + }); + } + prefix = parent; + } + // A constant-specific body can access its own fields. A value whose + // declared type is the enum cannot name that anonymous subclass. + // Require lexical ownership, not just a matching qualified prefix. + if receiver.kind == "enum_member" { + let mut scope = candidate.constraints.scope_id.as_deref(); + let mut owned = false; + for _ in 0..self.budget.candidates_per_lookup() { + let Some(current) = scope.and_then(|id| self.facts.scopes.get(id)) else { + return Some(ResolutionDecision::Unresolved); + }; + if current.owner_declaration_id.as_deref() == Some(receiver.id.as_str()) { + owned = true; + break; + } + scope = current.parent_scope_id.as_deref(); + } + if !owned { + return Some(ResolutionDecision::Unresolved); + } + } + if receiver.qualified_name == owner { + return None; + } + // This is nominal name canonicalization, not expression-chain typing. + // The producer must already have established the receiver's type. + let qualified = format!("{}::{member}", receiver.qualified_name); + Some( + self.unique_decision( + self.indexes + .names + .by_qualified + .get(&("java".to_owned(), qualified)), + candidate, + ResolutionRule::MemberBinding, + ) + .unwrap_or(ResolutionDecision::Unresolved), + ) + } + pub(in crate::evidence) fn resolve_java_same_package_builtin_collision( &self, candidate: &RelationshipCandidate, @@ -36,56 +175,120 @@ impl ResolutionDb<'_> { overloads: &[&'a DeclarationFact], argument_types: &[Option], ) -> Option<&'a str> { - let mut proven = Vec::new(); - for declaration in overloads { - if declaration.parameter_types.len() != argument_types.len() { + // JLS 15.12.2: strict fixed arity, loose fixed arity, then variable + // arity. A spread declaration participates in fixed phases as an array. + for phase in [ + JavaInvocationPhase::Strict, + JavaInvocationPhase::Loose, + JavaInvocationPhase::Variable, + ] { + let mut proven = Vec::new(); + let mut unknown = false; + for declaration in overloads { + match self.java_applicability(declaration, argument_types, phase) { + JavaApplicability::Proven => proven.push(*declaration), + JavaApplicability::Unknown => unknown = true, + JavaApplicability::Disproven => {} + } + } + // Missing type/hierarchy evidence in an earlier phase can change + // the selected overload. Never skip it to prefer a later phase. + if unknown { return None; } - let mut applicability = JavaApplicability::Proven; - for (parameter, argument) in declaration.parameter_types.iter().zip(argument_types) { - let argument = argument.as_deref()?; - match self.java_conversion(argument, parameter) { - JavaConversion::Proven => {} - JavaConversion::Disproven => { - applicability = JavaApplicability::Disproven; - break; - } - JavaConversion::Unknown => applicability = JavaApplicability::Unknown, - } + if proven.is_empty() { + continue; } - match applicability { - JavaApplicability::Proven => proven.push(*declaration), - JavaApplicability::Unknown => return None, - JavaApplicability::Disproven => {} + if let [only] = proven.as_slice() { + return Some(only.id.as_str()); } + let mut most_specific = proven.iter().copied().filter(|candidate| { + proven.iter().copied().all(|other| { + candidate.id == other.id + || self.java_parameters_more_specific(candidate, other, phase) + }) + }); + let only = most_specific.next()?; + return most_specific.next().is_none().then_some(only.id.as_str()); } - if let [only] = proven.as_slice() { - return Some(only.id.as_str()); + None + } + + fn java_applicability( + &self, + declaration: &DeclarationFact, + arguments: &[Option], + phase: JavaInvocationPhase, + ) -> JavaApplicability { + let parameters = &declaration.parameter_types; + if declaration.parameter_count != u32::try_from(parameters.len()).ok() { + return JavaApplicability::Unknown; } - let mut most_specific = proven.iter().copied().filter(|candidate| { - proven.iter().copied().all(|other| { - candidate.id == other.id - || self.java_parameter_vector_more_specific(candidate, other) - }) - }); - let only = most_specific.next()?; - most_specific.next().is_none().then_some(only.id.as_str()) + if phase == JavaInvocationPhase::Variable { + if !declaration.variadic + || parameters.is_empty() + || arguments.len() < parameters.len() - 1 + { + return JavaApplicability::Disproven; + } + if parameters.last().is_none_or(|p| !p.ends_with("[]")) { + return JavaApplicability::Unknown; + } + } else if parameters.len() != arguments.len() { + return JavaApplicability::Disproven; + } + let mut applicability = JavaApplicability::Proven; + for (index, argument) in arguments.iter().enumerate() { + let Some(parameter) = java_invocation_parameter(declaration, index, phase) else { + return JavaApplicability::Unknown; + }; + let Some(argument) = argument.as_deref() else { + applicability = JavaApplicability::Unknown; + continue; + }; + match self.java_phase_conversion(argument, parameter, phase) { + JavaConversion::Proven => {} + JavaConversion::Disproven => return JavaApplicability::Disproven, + JavaConversion::Unknown => applicability = JavaApplicability::Unknown, + } + } + applicability } - pub(in crate::evidence) fn java_parameter_vector_more_specific( + fn java_parameters_more_specific( &self, candidate: &DeclarationFact, other: &DeclarationFact, + phase: JavaInvocationPhase, ) -> bool { + // Comparing unequal fixed prefixes needs additional JLS specificity + // evidence. Retain ambiguity instead of selecting by declaration order. candidate.parameter_types.len() == other.parameter_types.len() - && candidate - .parameter_types - .iter() - .zip(&other.parameter_types) - .all(|(candidate, other)| { - self.java_conversion(candidate, other) == JavaConversion::Proven - }) && candidate.parameter_types != other.parameter_types + && (0..candidate.parameter_types.len()).all(|index| { + let Some(candidate) = java_invocation_parameter(candidate, index, phase) else { + return false; + }; + let Some(other) = java_invocation_parameter(other, index, phase) else { + return false; + }; + self.java_phase_conversion(candidate, other, JavaInvocationPhase::Strict) + == JavaConversion::Proven + }) + } + + fn java_phase_conversion( + &self, + argument: &str, + parameter: &str, + phase: JavaInvocationPhase, + ) -> JavaConversion { + if phase == JavaInvocationPhase::Strict + && java_primitive_type(argument) != java_primitive_type(parameter) + { + return JavaConversion::Disproven; + } + self.java_conversion(argument, parameter) } fn java_conversion(&self, argument: &str, parameter: &str) -> JavaConversion { @@ -243,6 +446,26 @@ impl ResolutionDb<'_> { } } +#[derive(Clone, Copy, Eq, PartialEq)] +enum JavaInvocationPhase { + Strict, + Loose, + Variable, +} + +fn java_invocation_parameter( + declaration: &DeclarationFact, + index: usize, + phase: JavaInvocationPhase, +) -> Option<&str> { + let parameters = &declaration.parameter_types; + if phase == JavaInvocationPhase::Variable && index >= parameters.len().checked_sub(1)? { + parameters.last()?.strip_suffix("[]") + } else { + parameters.get(index).map(String::as_str) + } +} + #[derive(Clone, Copy, Eq, PartialEq)] enum JavaApplicability { Proven, diff --git a/crates/compass-resolve/src/evidence/languages/policy.rs b/crates/compass-resolve/src/evidence/languages/policy.rs index 9973a5190..d03b72ab7 100644 --- a/crates/compass-resolve/src/evidence/languages/policy.rs +++ b/crates/compass-resolve/src/evidence/languages/policy.rs @@ -66,7 +66,9 @@ impl LanguagePolicyKind { candidate, )) } - Self::Java => db.resolve_java_same_package_builtin_collision(candidate), + Self::Java => db + .resolve_java_field_receiver(candidate) + .or_else(|| db.resolve_java_same_package_builtin_collision(candidate)), Self::Kotlin => db.resolve_kotlin_candidate(candidate), Self::Ruby | Self::Swift | Self::Dart | Self::Scala | Self::Groovy | Self::Generic => { None diff --git a/crates/compass-resolve/src/evidence/resolve/bindings.rs b/crates/compass-resolve/src/evidence/resolve/bindings.rs index 4299c9e8f..e10710561 100644 --- a/crates/compass-resolve/src/evidence/resolve/bindings.rs +++ b/crates/compass-resolve/src/evidence/resolve/bindings.rs @@ -88,6 +88,9 @@ impl ResolutionDb<'_> { { return Some(decision); } + if !candidate.constraints.allow_external { + return Some(ResolutionDecision::Unresolved); + } return Some(ResolutionDecision::QualifiedExternal { qualified_name: qualified, evidence: ResolutionEvidence { diff --git a/crates/compass-resolve/src/evidence/resolve/members.rs b/crates/compass-resolve/src/evidence/resolve/members.rs index c4c69f9bd..f7feefca4 100644 --- a/crates/compass-resolve/src/evidence/resolve/members.rs +++ b/crates/compass-resolve/src/evidence/resolve/members.rs @@ -780,7 +780,7 @@ impl ResolutionDb<'_> { } let argument_types = &candidate.constraints.argument_types; if target.language != "java" - || argument_types.is_empty() + || candidate.constraints.argument_count != u32::try_from(argument_types.len()).ok() || argument_types.iter().any(Option::is_none) { return true; @@ -802,7 +802,10 @@ impl ResolutionDb<'_> { .iter() .copied() .filter(|declaration| { - declaration.parameter_types.len() == argument_types.len() + // An absent optional type vector does not prove an empty + // parameter list, especially for zero-argument varargs. + declaration.parameter_count == u32::try_from(declaration.parameter_types.len()).ok() + && declaration.parameter_types.len() == argument_types.len() && declaration .parameter_types .iter() diff --git a/crates/compass-resolve/src/evidence/resolve/pipeline.rs b/crates/compass-resolve/src/evidence/resolve/pipeline.rs index 022472603..b0b8bdf9a 100644 --- a/crates/compass-resolve/src/evidence/resolve/pipeline.rs +++ b/crates/compass-resolve/src/evidence/resolve/pipeline.rs @@ -236,6 +236,23 @@ impl ResolutionDb<'_> { let Some(qualified) = candidate.constraints.qualified_name.as_ref() else { return StageOutcome::Continue; }; + if candidate.language == "go" + && candidate.relation == CandidateRelation::AccessesMember + && candidate.constraints.allowed_target_kinds == ["field"] + { + // A field's declared type may also create an alias with this + // qualified name. Resolve the source field itself before alias + // expansion, and leave missing fields unresolved. + let key = (context.language.to_owned(), qualified.clone()); + return StageOutcome::Decided( + self.unique_decision( + self.indexes.names.by_qualified.get(&key), + candidate, + ResolutionRule::ExplicitBinding, + ) + .unwrap_or(ResolutionDecision::Unresolved), + ); + } let qualified = match self.follow_alias(context.language, qualified) { Ok(qualified) => qualified, Err(candidate_count) => { diff --git a/crates/compass-resolve/src/frameworks/routes.rs b/crates/compass-resolve/src/frameworks/routes.rs index 17af81f25..e5c0d94b8 100644 --- a/crates/compass-resolve/src/frameworks/routes.rs +++ b/crates/compass-resolve/src/frameworks/routes.rs @@ -1,3 +1,5 @@ +mod hierarchy; + use std::collections::BTreeMap; use std::path::Path; @@ -218,85 +220,25 @@ pub fn publish_resolved_routes( .map(|edge| (edge.source.clone(), edge.target.clone())) .collect::>(); let mut hierarchy_diagnostics = Vec::new(); - let mut route_sources_by_scope = - BTreeMap::<(String, String), Vec<(String, String, RawFrameworkAnchor, bool)>>::new(); - for (route_id, route) in &route_ids { - route_sources_by_scope - .entry((route.framework.clone(), route_hierarchy_scope(route))) - .or_default() - .push(( - route.anchor.source_file.clone(), - route_id.clone(), - route.anchor.clone(), - route - .stages - .iter() - .any(|stage| stage.role == RawRouteStageRole::RouteComponent), - )); - } - for candidates in route_sources_by_scope.values_mut() { - candidates.sort_by(|left, right| left.0.cmp(&right.0)); - } - // Parent lookup is on the hot path for large convention route trees. A - // direct scan of every route in a scope makes a corpus with many routes - // in the same source file quadratic (the synthetic enterprise guard uses - // exactly that shape). Keep the original candidate ordering, but index - // the distinct source files by their parent directory once per scope. - let mut route_parent_sources_by_scope = - BTreeMap::<(String, String), BTreeMap>>::new(); - for ((framework, scope), candidates) in &route_sources_by_scope { - let mut by_directory = BTreeMap::>::new(); - for (source, _, _, _) in candidates { - let portable = source.replace('\\', "/"); - let Some((directory, _)) = portable.rsplit_once('/') else { - continue; - }; - let sources = by_directory.entry(directory.to_owned()).or_default(); - if sources.last().is_none_or(|previous| previous != source) { - sources.push(source.clone()); - } - } - route_parent_sources_by_scope.insert((framework.clone(), scope.clone()), by_directory); - } + let hierarchy = hierarchy::FileRouteHierarchy::new(&route_ids); for (child_id, child) in &route_ids { - let scope = route_hierarchy_scope(child); - let mut selected = None; - if let Some(candidates) = - route_sources_by_scope.get(&(child.framework.clone(), scope.clone())) - && let Some(parent_sources) = - route_parent_sources_by_scope.get(&(child.framework.clone(), scope.clone())) - && let Some(parent_source) = - route_parent_source_file_indexed(&child.anchor.source_file, parent_sources) - { - let matching = candidates - .iter() - .filter(|(source, _, _, _)| source == &parent_source) - .collect::>(); - if matching.len() == 1 { - let (_, parent_id, parent_anchor, component) = matching[0]; - selected = Some((parent_id.clone(), parent_anchor.clone(), *component)); - } else if matching.len() > 1 { - let component_candidates = matching - .iter() - .filter(|(_, _, _, component)| *component) - .collect::>(); - if component_candidates.len() == 1 { - let (_, parent_id, parent_anchor, component) = component_candidates[0]; - selected = Some((parent_id.clone(), parent_anchor.clone(), *component)); - } else { - hierarchy_diagnostics.push(json!({ - "kind": "ambiguous_route_parent", - "framework": child.framework, - "sourceFile": child.anchor.source_file, - "parentSourceFile": parent_source, - "candidates": matching.iter().map(|(_, id, _, _)| id).collect::>(), - })); - } - } - } - let Some((parent_id, parent_anchor, _)) = selected else { + let Some(candidates) = hierarchy.candidates(child) else { continue; }; + let [parent_index] = candidates else { + hierarchy_diagnostics.push(json!({ + "kind": "ambiguous_route_parent", + "framework": child.framework, + "sourceFile": child.anchor.source_file, + "parentSourceFiles": candidates.iter() + .map(|index| &route_ids[*index].1.anchor.source_file).collect::>(), + "candidates": candidates.iter().map(|index| &route_ids[*index].0).collect::>(), + })); + continue; + }; + let (parent_id, parent) = &route_ids[*parent_index]; + let parent_id = parent_id.clone(); + let parent_anchor = &parent.anchor; if parent_id == *child_id || !existing_hierarchy.insert((parent_id.clone(), child_id.clone())) { @@ -336,7 +278,7 @@ pub fn publish_resolved_routes( ]); attributes.insert( "parent_source_anchor".into(), - serde_json::to_value(source_anchor(&parent_anchor)).unwrap_or(Value::Null), + serde_json::to_value(source_anchor(parent_anchor)).unwrap_or(Value::Null), ); hierarchy_edges.push(RawEdgeRecord { source: parent_id, @@ -377,59 +319,47 @@ fn route_node_id(route: &RawRouteFact) -> String { ]) } -/// Select the same physical parent route that the independent frontend oracle -/// uses: walk up the source directory tree and take the first route module in -/// that directory's deterministic order. This preserves file-based route -/// conventions (including same-path layouts and TanStack dot segments) that -/// cannot be reconstructed from a normalized URL alone. -#[cfg(test)] -fn route_parent_source_file( - child_source: &str, - candidates: &[(String, String, RawFrameworkAnchor, bool)], -) -> Option { - let mut by_directory = BTreeMap::>::new(); - for (source, _, _, _) in candidates { - let portable = source.replace('\\', "/"); - let Some((directory, _)) = portable.rsplit_once('/') else { - continue; - }; - let sources = by_directory.entry(directory.to_owned()).or_default(); - if sources.last().is_none_or(|previous| previous != source) { - sources.push(source.clone()); - } - } - route_parent_source_file_indexed(child_source, &by_directory) -} - -fn route_parent_source_file_indexed( - child_source: &str, - sources_by_directory: &BTreeMap>, -) -> Option { - let portable = child_source.replace('\\', "/"); - let parts = portable.split('/').collect::>(); - if parts.len() < 2 { - return None; - } - for index in (1..parts.len()).rev() { - let parent_directory = parts[..index].join("/"); - if let Some(candidates) = sources_by_directory.get(&parent_directory) - && let Some(source) = candidates - .iter() - .find(|source| source.replace('\\', "/") != portable) - { - return Some(source.clone()); - } - } - None +fn has_filesystem_route_convention(route: &RawRouteFact) -> bool { + // Receiver spellings such as `r` are local bindings, not filesystem tree + // identities. Only facts from the explicit file-route producers may use + // physical source directories to infer a parent. Programmatic mounts and + // groups remain the responsibility of their framework's composition rules. + matches!(route.origin, RawFrameworkOrigin::Convention) + && matches!( + (route.framework.as_str(), route.rule.as_deref()), + ( + "next", + Some( + "next-app-router-convention" + | "next-app-route-convention" + | "next-app-route-unresolved-convention" + | "next-pages-api-convention" + | "next-file-route-convention" + ) + ) | ("remix", Some("remix-route-convention")) + | ("react-router", Some("react-router-file-route-convention")) + | ("tanstack-router", Some("tanstack-file-route-convention")) + | ( + "sveltekit", + Some("sveltekit-file-route-convention" | "sveltekit-endpoint-convention") + ) + | ( + "nuxt", + Some("nuxt-file-route-convention" | "nuxt-server-api-convention") + ) + | ( + "astro", + Some("astro-file-route-convention" | "astro-endpoint-convention") + ) + ) } /// Return the lexical route-tree owner for hierarchy matching. /// /// A repository can contain independent examples such as /// `test/a/app/...` and `test/b/app/...`; their `/` routes must never compete -/// with one another. The scope is intentionally derived from the portable -/// source identity rather than filesystem state so cached and projected -/// extractions remain deterministic. +/// with one another. The scope is derived from the portable source identity +/// rather than filesystem state so cached facts remain deterministic. fn route_hierarchy_scope(route: &RawRouteFact) -> String { let source = route .anchor @@ -437,15 +367,14 @@ fn route_hierarchy_scope(route: &RawRouteFact) -> String { .replace('\\', "/") .trim_matches('/') .to_owned(); - for marker in [ - "src/app/", - "app/", - "src/pages/", - "pages/", - "app/routes/", - "src/routes/", - "routes/", - ] { + let markers: &[&str] = match route.framework.as_str() { + "next" => &["src/app/", "app/", "src/pages/", "pages/"], + "react-router" | "remix" => &["app/routes/", "src/routes/", "routes/"], + "tanstack-router" | "sveltekit" => &["src/routes/", "routes/"], + "nuxt" => &["app/pages/", "src/pages/", "pages/"], + _ => &[], + }; + for &marker in markers { let mut offset = 0; while let Some(found) = source.get(offset..).and_then(|suffix| suffix.find(marker)) { let index = offset + found; @@ -1330,13 +1259,9 @@ mod tests { fn route_hierarchy_never_selects_the_route_as_its_own_parent() { let source = "src/routes/home.tsx"; let route = route_for_scope(source); - let candidates = vec![( - source.to_owned(), - "route-id".to_owned(), - route.anchor, - false, - )]; - assert_eq!(route_parent_source_file(source, &candidates), None); + let candidates = vec![("route-id".to_owned(), route.clone())]; + let hierarchy = hierarchy::FileRouteHierarchy::new(&candidates); + assert_eq!(hierarchy.candidates(&route), None); } #[test] diff --git a/crates/compass-resolve/src/frameworks/routes/hierarchy.rs b/crates/compass-resolve/src/frameworks/routes/hierarchy.rs new file mode 100644 index 000000000..426633ea2 --- /dev/null +++ b/crates/compass-resolve/src/frameworks/routes/hierarchy.rs @@ -0,0 +1,225 @@ +//! File-route parentage from framework naming rules, never directory ordering. + +use std::collections::BTreeMap; + +use compass_languages::RawRouteFact; + +use super::{has_filesystem_route_convention, route_hierarchy_scope}; + +pub(super) struct FileRouteHierarchy { + by_key: BTreeMap<(String, String, String), Vec>, +} + +impl FileRouteHierarchy { + pub(super) fn new(routes: &[(String, RawRouteFact)]) -> Self { + let mut by_key = BTreeMap::<_, Vec>::new(); + for (index, (_, route)) in routes.iter().enumerate() { + let Some(path) = RoutePath::for_route(route) else { + continue; + }; + if path.can_parent && matches!(route.operation.as_str(), "PAGE" | "ROOT") { + by_key + .entry((route.framework.clone(), path.scope, path.parts.join("/"))) + .or_default() + .push(index); + } + } + for candidates in by_key.values_mut() { + candidates.sort_by(|left, right| routes[*left].0.cmp(&routes[*right].0)); + candidates.dedup_by(|left, right| routes[*left].0 == routes[*right].0); + } + Self { by_key } + } + + /// Return every candidate at the nearest semantic parent key. An ambiguous + /// key must not fall back to a more distant parent or an arbitrary file. + pub(super) fn candidates(&self, child: &RawRouteFact) -> Option<&[usize]> { + let path = RoutePath::for_route(child)?; + let first = path.first_parent_len?; + for length in (path.minimum_parent_len..=first).rev() { + let key = ( + child.framework.clone(), + path.scope.clone(), + path.parts[..length].join("/"), + ); + if let Some(candidates) = self.by_key.get(&key) { + return Some(candidates); + } + } + None + } +} + +struct RoutePath { + scope: String, + parts: Vec, + can_parent: bool, + first_parent_len: Option, + minimum_parent_len: usize, +} + +impl RoutePath { + fn for_route(route: &RawRouteFact) -> Option { + if !has_filesystem_route_convention(route) { + return None; + } + let scope = route_hierarchy_scope(route); + let portable = route.anchor.source_file.replace('\\', "/"); + let relative = portable + .trim_matches('/') + .strip_prefix(&format!("{scope}/"))?; + let (stem, extension) = relative.rsplit_once('.')?; + if stem + .split('/') + .any(|part| part.is_empty() || matches!(part, "." | "..")) + { + return None; + } + let mut parts = stem.split('/').map(str::to_owned).collect::>(); + let file = parts.last()?.as_str(); + let (can_parent, first_parent_len, minimum_parent_len) = match route.framework.as_str() { + "next" => { + // Pages Router and HTTP route handlers have no automatic + // layout parent inferred from their URL or source directory. + if route.rule.as_deref() != Some("next-app-router-convention") + || !matches!( + extension, + "ts" | "tsx" | "js" | "jsx" | "mts" | "cts" | "mjs" | "cjs" + ) + || !matches!( + file, + "layout" + | "page" + | "template" + | "error" + | "loading" + | "not-found" + | "default" + ) + { + return None; + } + let layout = file == "layout"; + parts.pop(); + ( + layout, + if layout { + parts.len().checked_sub(1) + } else { + Some(parts.len()) + }, + 0, + ) + } + "sveltekit" => { + if extension != "svelte" || !matches!(file, "+layout" | "+page" | "+error") { + return None; + } + let layout = file == "+layout"; + parts.pop(); + ( + layout, + if layout { + parts.len().checked_sub(1) + } else { + Some(parts.len()) + }, + 0, + ) + } + "nuxt" => { + if extension != "vue" || route.rule.as_deref() != Some("nuxt-file-route-convention") + { + return None; + } + // parent.vue owns parent/child.vue; index.vue is a leaf. + // Named-view and route-group configuration is not represented + // in these facts, so it cannot establish a parent here. + if parts + .iter() + .any(|part| part.contains('@') || part.starts_with('(')) + { + return None; + } + (file != "index", parts.len().checked_sub(1), 1) + } + "react-router" | "remix" | "tanstack-router" => { + if !matches!( + extension, + "ts" | "tsx" | "js" | "jsx" | "mts" | "cts" | "mjs" | "cjs" + ) { + return None; + } + let tanstack = route.framework == "tanstack-router"; + if !tanstack && parts.len() > 1 { + // Flat-route folders expose route.tsx; colocated helper + // modules do not define nested routes by directory alone. + if parts.len() != 2 || file != "route" { + return None; + } + parts.pop(); + } + parts = flat_segments(&parts.join("/"), tanstack)?; + if tanstack && parts.last().is_some_and(|part| part == "route") { + parts.pop(); + } + if tanstack && parts == ["__root"] { + parts.clear(); + (true, None, 0) + } else { + let last = parts.last()?; + let can_parent = + last != if tanstack { "index" } else { "_index" } && !last.ends_with('_'); + (can_parent, parts.len().checked_sub(1), 0) + } + } + // Astro layouts are explicit component composition. File routes + // and API endpoints alone prove no containing route. + _ => return None, + }; + Some(Self { + scope, + parts, + can_parent, + first_parent_len, + minimum_parent_len, + }) + } +} + +/// Preserve escaped dots as literal filename text. Index, pathless, and +/// non-nesting markers remain in keys, preventing URL normalization from +/// merging distinct route ownership. Every iteration consumes one byte. +fn flat_segments(stem: &str, tanstack: bool) -> Option> { + let mut segments = Vec::new(); + let mut start = 0; + let mut escaped = false; + for (index, byte) in stem.bytes().enumerate() { + match byte { + b'[' if !escaped => escaped = true, + b']' if escaped => escaped = false, + b'[' | b']' => return None, + b'.' | b'/' if !escaped => { + segments.push(stem.get(start..index)?.to_owned()); + start = index + 1; + } + _ => {} + } + } + if escaped { + return None; + } + segments.push(stem.get(start..)?.to_owned()); + if segments.iter().any(|segment| segment.is_empty()) { + return None; + } + if tanstack { + if segments.iter().any(|segment| segment.starts_with('-')) + || segments.last().is_some_and(|segment| segment == "lazy") + { + return None; + } + segments.retain(|segment| !(segment.starts_with('(') && segment.ends_with(')'))); + } + Some(segments) +} diff --git a/crates/compass-resolve/tests/framework_qualification.rs b/crates/compass-resolve/tests/framework_qualification.rs index 1a528aa87..110b77381 100644 --- a/crates/compass-resolve/tests/framework_qualification.rs +++ b/crates/compass-resolve/tests/framework_qualification.rs @@ -75,15 +75,14 @@ fn qualification_rejects_unresolved_or_missing_framework_routes() "missing-route", vec![FrameworkRouteExpectation::new("express", "GET", "/missing")], ); - let error = qualify_framework_case( + let result = qualify_framework_case( &extraction, compass_languages::FrameworkLimits::default(), &case, - ) - .expect_err("a missing framework route must fail qualification"); + ); assert!(matches!( - error, - FrameworkQualificationError::MissingRoute { .. } + result, + Err(FrameworkQualificationError::MissingRoute { .. }) )); Ok(()) } diff --git a/crates/compass-resolve/tests/framework_routes.rs b/crates/compass-resolve/tests/framework_routes.rs index 6349219b2..6fc5a9688 100644 --- a/crates/compass-resolve/tests/framework_routes.rs +++ b/crates/compass-resolve/tests/framework_routes.rs @@ -74,6 +74,397 @@ fn route(handler: &str) -> RawRouteFact { } } +#[test] +fn programmatic_routes_do_not_inherit_filesystem_parentage() +-> Result<(), Box> { + for framework in ["chi", "express", "flask", "axum", "react-router", "next"] { + let facts = ["tests/a.go", "tests/b.go"].map(|file| { + let mut fact = route("handler"); + fact.framework = framework.to_owned(); + fact.declaring_scope = "r".to_owned(); + fact.anchor.source_file = file.to_owned(); + fact.rule = Some(format!("{framework}-router-call")); + RawFrameworkFact::Route(fact) + }); + for facts in [facts.to_vec(), facts.into_iter().rev().collect()] { + let mut extraction = Extraction { + framework_facts: facts, + ..Extraction::default() + }; + let resolved = + resolve_and_publish_framework_routes(&mut extraction, FrameworkLimits::default())?; + assert_eq!(resolved.len(), 2); + assert_eq!(extraction.nodes.len(), 2); + assert!( + extraction + .edges + .iter() + .all(|edge| edge.string("relation") != "contains"), + "{framework}: independent receiver names are not filesystem route parents" + ); + } + } + Ok(()) +} + +#[test] +fn filesystem_parentage_requires_a_recognized_convention() -> Result<(), Box> +{ + for (framework, origin, rule, expected) in [ + ( + "next", + RawFrameworkOrigin::Convention, + "next-app-router-convention", + 1, + ), + ( + "next", + RawFrameworkOrigin::Ast, + "next-app-router-convention", + 0, + ), + ("next", RawFrameworkOrigin::Convention, "unknown-rule", 0), + ( + "chi", + RawFrameworkOrigin::Convention, + "next-app-router-convention", + 0, + ), + ] { + let facts = ["app/layout.tsx", "app/blog/page.tsx"].map(|file| { + let mut fact = route("Page"); + fact.framework = framework.to_owned(); + fact.operation = "PAGE".to_owned(); + fact.anchor.source_file = file.to_owned(); + fact.origin = origin; + fact.rule = Some(rule.to_owned()); + RawFrameworkFact::Route(fact) + }); + let mut extraction = Extraction { + framework_facts: facts.to_vec(), + ..Extraction::default() + }; + resolve_and_publish_framework_routes(&mut extraction, FrameworkLimits::default())?; + let hierarchy: Vec<_> = extraction + .edges + .iter() + .filter(|edge| edge.string("relation") == "contains") + .collect(); + assert_eq!(hierarchy.len(), expected, "{framework} {origin:?} {rule}"); + if let Some(edge) = hierarchy.first() { + assert_eq!(edge.string("source_file"), "app/blog/page.tsx"); + assert_eq!(edge.string("rule"), "framework-route-hierarchy"); + let parent = extraction.nodes.iter().find(|node| node.id == edge.source); + assert!(parent.is_some_and(|node| node.string("source_file") == "app/layout.tsx")); + } + } + Ok(()) +} + +#[test] +fn filesystem_parentage_follows_framework_nesting_not_nearby_files() +-> Result<(), Box> { + type Case<'a> = (&'a str, &'a [&'a str], &'a [(&'a str, &'a str)]); + let cases: &[Case<'_>] = &[ + ( + "next", + &[ + "app/page.tsx", + "app/admin/page.tsx", + "app/admin/settings/page.tsx", + ], + &[], + ), + ( + "next", + &[ + "app/layout.tsx", + "app/page.tsx", + "app/blog/layout.tsx", + "app/blog/page.tsx", + "app/blog/item/page.tsx", + "app/api/route.ts", + "app/global-error.tsx", + ], + &[ + ("app/layout.tsx", "app/page.tsx"), + ("app/layout.tsx", "app/blog/layout.tsx"), + ("app/blog/layout.tsx", "app/blog/page.tsx"), + ("app/blog/layout.tsx", "app/blog/item/page.tsx"), + ], + ), + ( + "next", + &["app/layout.tsx", "app/layout.jsx", "app/page.tsx"], + &[], + ), + ("next", &["one/app/layout.tsx", "two/app/page.tsx"], &[]), + ( + "next", + &["pages/index.tsx", "pages/blog.tsx", "pages/blog/post.tsx"], + &[], + ), + ( + "next", + &[ + "app/layout.tsx", + "app/(private)/layout.tsx", + "app/(private)/page.tsx", + ], + &[ + ("app/layout.tsx", "app/(private)/layout.tsx"), + ("app/(private)/layout.tsx", "app/(private)/page.tsx"), + ], + ), + ( + "react-router", + &["src/routes/home.tsx", "src/routes/tanstack.tsx"], + &[], + ), + ( + "react-router", + &[ + "app/routes/concerts.tsx", + "app/routes/concerts.$city.tsx", + "app/routes/concerts._index.tsx", + "app/routes/concerts_.mine.tsx", + ], + &[ + ("app/routes/concerts.tsx", "app/routes/concerts.$city.tsx"), + ("app/routes/concerts.tsx", "app/routes/concerts._index.tsx"), + ], + ), + ( + "react-router", + &[ + "app/routes/_auth.tsx", + "app/routes/_auth.login.tsx", + "app/routes/_index.tsx", + "app/routes/about.tsx", + ], + &[("app/routes/_auth.tsx", "app/routes/_auth.login.tsx")], + ), + ( + "remix", + &[ + "app/routes/concerts/route.tsx", + "app/routes/concerts.$city.tsx", + "app/routes/concerts/helper.tsx", + ], + &[( + "app/routes/concerts/route.tsx", + "app/routes/concerts.$city.tsx", + )], + ), + ( + "remix", + &[ + "app/routes/concerts.tsx", + "app/routes/concerts/route.tsx", + "app/routes/concerts.$city.tsx", + ], + &[], + ), + ( + "react-router", + &[ + "app/routes/a.tsx", + "app/routes/a.b.tsx", + "app/routes/a.b_.c.tsx", + ], + &[ + ("app/routes/a.tsx", "app/routes/a.b.tsx"), + ("app/routes/a.tsx", "app/routes/a.b_.c.tsx"), + ], + ), + ( + "react-router", + &[ + "app/routes/foo[.]bar.tsx", + "app/routes/foo[.]bar.child.tsx", + "app/routes/foo.tsx", + ], + &[("app/routes/foo[.]bar.tsx", "app/routes/foo[.]bar.child.tsx")], + ), + ( + "react-router", + &[ + "app/routes/a.tsx", + "app/routes/a.jsx", + "app/routes/a.child.tsx", + ], + &[], + ), + ( + "tanstack-router", + &[ + "src/routes/__root.tsx", + "src/routes/index.tsx", + "src/routes/posts.tsx", + "src/routes/posts.index.tsx", + "src/routes/posts.$id.tsx", + "src/routes/posts_.$id.edit.tsx", + ], + &[ + ("src/routes/__root.tsx", "src/routes/index.tsx"), + ("src/routes/__root.tsx", "src/routes/posts.tsx"), + ("src/routes/posts.tsx", "src/routes/posts.index.tsx"), + ("src/routes/posts.tsx", "src/routes/posts.$id.tsx"), + ("src/routes/__root.tsx", "src/routes/posts_.$id.edit.tsx"), + ], + ), + ( + "tanstack-router", + &[ + "src/routes/account/route.tsx", + "src/routes/account/overview.tsx", + "src/routes/account/index.tsx", + "src/routes/account/-helper.tsx", + "src/routes/account/route.lazy.tsx", + ], + &[ + ( + "src/routes/account/route.tsx", + "src/routes/account/overview.tsx", + ), + ( + "src/routes/account/route.tsx", + "src/routes/account/index.tsx", + ), + ], + ), + ( + "tanstack-router", + &["src/routes/_auth.tsx", "src/routes/(group)/_auth.login.tsx"], + &[("src/routes/_auth.tsx", "src/routes/(group)/_auth.login.tsx")], + ), + ( + "tanstack-router", + &["src/routes/index.tsx", "src/routes/about.tsx"], + &[], + ), + ( + "nuxt", + &[ + "pages/index.vue", + "pages/parent.vue", + "pages/parent/child.vue", + "pages/parent/index.vue", + "pages/other.vue", + ], + &[ + ("pages/parent.vue", "pages/parent/child.vue"), + ("pages/parent.vue", "pages/parent/index.vue"), + ], + ), + ( + "nuxt", + &[ + "pages/parent/index.vue", + "pages/parent/child.vue", + "server/api/users.get.ts", + "server/api/users/[id].post.ts", + ], + &[], + ), + ( + "sveltekit", + &["src/routes/+page.svelte", "src/routes/+server.ts"], + &[], + ), + ( + "sveltekit", + &[ + "src/routes/+layout.svelte", + "src/routes/+page.svelte", + "src/routes/blog/+layout.svelte", + "src/routes/blog/+page.svelte", + "src/routes/blog/+server.ts", + ], + &[ + ("src/routes/+layout.svelte", "src/routes/+page.svelte"), + ( + "src/routes/+layout.svelte", + "src/routes/blog/+layout.svelte", + ), + ( + "src/routes/blog/+layout.svelte", + "src/routes/blog/+page.svelte", + ), + ], + ), + ( + "astro", + &[ + "src/pages/about.astro", + "src/pages/blog/post.astro", + "src/pages/api/items.ts", + ], + &[], + ), + ]; + for (framework, files, expected) in cases { + let facts = files + .iter() + .map(|file| { + let mut fact = route("Page"); + fact.framework = (*framework).to_owned(); + fact.operation = "PAGE".to_owned(); + fact.origin = RawFrameworkOrigin::Convention; + fact.anchor.source_file = (*file).to_owned(); + fact.rule = Some( + match *framework { + "next" if file.starts_with("pages/") => "next-file-route-convention", + "next" if file.ends_with("/route.ts") => "next-app-route-convention", + "next" => "next-app-router-convention", + "react-router" => "react-router-file-route-convention", + "remix" => "remix-route-convention", + "tanstack-router" => "tanstack-file-route-convention", + "nuxt" => "nuxt-file-route-convention", + "sveltekit" => "sveltekit-file-route-convention", + "astro" => "astro-file-route-convention", + _ => "unknown", + } + .to_owned(), + ); + RawFrameworkFact::Route(fact) + }) + .collect::>(); + let expected = expected + .iter() + .map(|(a, b)| ((*a).to_owned(), (*b).to_owned())) + .collect::>(); + for facts in [facts.clone(), facts.into_iter().rev().collect()] { + let mut extraction = Extraction { + framework_facts: facts, + ..Extraction::default() + }; + resolve_and_publish_framework_routes(&mut extraction, FrameworkLimits::default())?; + let mut actual = std::collections::BTreeSet::new(); + for edge in extraction + .edges + .iter() + .filter(|edge| edge.string("relation") == "contains") + { + let source = extraction + .nodes + .iter() + .find(|node| node.id == edge.source) + .ok_or("missing hierarchy source")?; + let target = extraction + .nodes + .iter() + .find(|node| node.id == edge.target) + .ok_or("missing hierarchy target")?; + actual.insert((source.string("source_file"), target.string("source_file"))); + assert_eq!(edge.string("rule"), "framework-route-hierarchy"); + } + assert_eq!(actual, expected, "{framework}: {files:?}"); + } + } + Ok(()) +} + #[test] fn neutral_framework_roles_publish_existing_node_roles_and_reject_unknown_values() -> Result<(), Box> { diff --git a/crates/compass-resolve/tests/java_constructor_receivers.rs b/crates/compass-resolve/tests/java_constructor_receivers.rs new file mode 100644 index 000000000..9cb8af418 --- /dev/null +++ b/crates/compass-resolve/tests/java_constructor_receivers.rs @@ -0,0 +1,248 @@ +use std::collections::{BTreeMap, HashMap}; +use std::error::Error; +use std::path::Path; + +use compass_languages::{CandidateRelation, Engine, EvidenceLimits, validate_evidence}; +use compass_resolve::resolve; + +const SOURCES: [(&str, &str); 3] = [ + ( + "lib/Cleaner.java", + r#"package lib; +public class Cleaner { + public boolean check(String value) { return true; } + public boolean check(int value) { return false; } + public Other next() { return new Other(); } + public String toString() { return "cleaner"; } +} +"#, + ), + ( + "lib/Other.java", + r#"package lib; +public class Other { + public boolean check(String value) { return false; } +} +"#, + ), + ( + "app/Use.java", + r#"package app; +import lib.Cleaner; +public class Use { + public boolean direct() { new Cleaner().check("first"); return new Cleaner().check("second"); } + public boolean parenthesized() { return (new Cleaner()).check("ok"); } + public boolean qualified() { return new lib.Cleaner().check("ok"); } + public boolean commented() { return (/* receiver */ new Cleaner(/* args */)).check("ok"); } + public boolean nested() { return (((new Cleaner()))).check("ok"); } + public boolean typeNamespace(String Cleaner) { return new Cleaner().check("ok"); } + public boolean tooDeep() { return (((((((((new Cleaner()))))))))).check("ok"); } + public String array() { return new Cleaner[0].toString(); } + public String casted() { return ((Object) new Cleaner()).toString(); } + public boolean qualifiedAnonymous() { return new lib.Cleaner() { + public boolean check(String value) { return false; } + }.check("ok"); } + public boolean overloaded() { return new Cleaner().check(1); } + public boolean anonymous() { return new Cleaner() { + public boolean check(String value) { return false; } + }.check("ok"); } + public boolean chained() { return new Cleaner().next().check("ok"); } + public boolean explicitOuter(Outer outer) { return outer.new Cleaner().check("ok"); } +} +class Outer { + class Cleaner { public boolean check(String value) { return false; } } +} +"#, + ), +]; + +#[test] +fn java_constructor_receivers_preserve_overloads_occurrences_and_unknown_results() +-> Result<(), Box> { + let sources = SOURCES + .into_iter() + .map(|(path, source)| (path.to_owned(), source.to_owned())) + .collect::>(); + let mut engine = Engine::default(); + let mut extractions = SOURCES + .into_iter() + .map(|(path, source)| engine.extract_source(Path::new(path), source.as_bytes())) + .collect::, _>>()?; + let evidence = extractions[2] + .semantic_evidence + .as_ref() + .ok_or("missing Java evidence")?; + validate_evidence(evidence, EvidenceLimits::default())?; + let enclosing_owner = evidence + .declarations + .iter() + .find(|declaration| declaration.name == "explicitOuter") + .ok_or("missing enclosing-instance caller")?; + let enclosing_constructions = evidence + .candidates + .iter() + .filter(|candidate| { + candidate.relation == CandidateRelation::Constructs + && candidate.source_declaration_id == enclosing_owner.id + }) + .collect::>(); + assert_eq!(enclosing_constructions.len(), 1); + let enclosing = enclosing_constructions[0]; + assert!(enclosing.binding_id.is_none()); + assert!(enclosing.constraints.qualified_name.is_none()); + assert!(!enclosing.constraints.allow_external); + let enclosing_occurrence = evidence + .occurrences + .iter() + .find(|occurrence| Some(&occurrence.id) == enclosing.occurrence_id.as_ref()) + .ok_or("missing enclosing-instance occurrence")?; + assert_eq!(enclosing_occurrence.qualifier.as_deref(), Some("outer")); + let mut call_sites = BTreeMap::>::new(); + for candidate in &evidence.candidates { + if candidate.relation != CandidateRelation::Calls + || !matches!(candidate.target_spelling.as_str(), "check" | "toString") + { + continue; + } + let owner = evidence + .declarations + .iter() + .find(|declaration| declaration.id == candidate.source_declaration_id) + .ok_or("missing call owner")?; + let occurrence = evidence + .occurrences + .iter() + .find(|occurrence| Some(&occurrence.id) == candidate.occurrence_id.as_ref()) + .ok_or("missing call occurrence")?; + let source_text = sources + .get(&occurrence.range.source_file) + .ok_or("missing occurrence source")?; + let start = usize::try_from(occurrence.range.start_byte)?; + let end = usize::try_from(occurrence.range.end_byte)?; + assert_eq!( + source_text.get(start..end), + Some(candidate.target_spelling.as_str()), + "call occurrences must retain the exact method-name span" + ); + call_sites + .entry(owner.name.clone()) + .or_default() + .push(occurrence); + let expected = match owner.name.as_str() { + "direct" | "parenthesized" | "qualified" | "overloaded" | "commented" | "nested" + | "typeNamespace" => Some("lib.Cleaner::check"), + "anonymous" | "chained" | "tooDeep" | "array" | "casted" | "qualifiedAnonymous" + | "explicitOuter" => None, + other => return Err(format!("unexpected check owner: {other}").into()), + }; + assert_eq!( + candidate.constraints.qualified_name.as_deref(), + expected, + "{}", + owner.name + ); + } + assert_eq!(call_sites.len(), 14); + assert_eq!(call_sites["direct"].len(), 2); + assert_ne!(call_sites["direct"][0].id, call_sites["direct"][1].id); + + let resolved = resolve(&extractions, &sources); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + assert!( + !resolved.edges.iter().any(|edge| { + edge.string("rule").starts_with("universal-construction-") + && resolved.nodes.iter().any(|node| { + node.id == edge.source + && node.string("qualified_name") == "app.Use::explicitOuter" + }) + && resolved.nodes.iter().any(|node| { + node.id == edge.target && node.string("qualified_name") == "lib.Cleaner" + }) + }), + "outer.new Cleaner() must not instantiate the unrelated imported Cleaner" + ); + let mut calls = BTreeMap::>::new(); + for edge in &resolved.edges { + // Raw construction projection also uses `calls` before publication + // normalizes it to `instantiates`; inspect method-call candidates here. + if edge.string("relation") != "calls" || !edge.string("rule").starts_with("universal-call-") + { + continue; + } + let source = resolved + .nodes + .iter() + .find(|node| node.id == edge.source) + .ok_or("missing source")?; + let target = resolved + .nodes + .iter() + .find(|node| node.id == edge.target) + .ok_or("missing target")?; + if source.string("qualified_name").starts_with("app.Use::") { + assert_eq!(edge.string("_origin"), "ast"); + assert_eq!(edge.string("confidence"), "EXTRACTED"); + calls + .entry(source.string("qualified_name")) + .or_default() + .push(format!( + "{}|{}", + target.string("qualified_name"), + target.string("signature") + )); + } + } + for targets in calls.values_mut() { + targets.sort(); + } + assert_eq!( + calls, + BTreeMap::from([ + ( + "app.Use::direct".to_owned(), + vec!["lib.Cleaner::check|check(String)".to_owned(); 2] + ), + ( + "app.Use::parenthesized".to_owned(), + vec!["lib.Cleaner::check|check(String)".to_owned()] + ), + ( + "app.Use::qualified".to_owned(), + vec!["lib.Cleaner::check|check(String)".to_owned()] + ), + ( + "app.Use::commented".to_owned(), + vec!["lib.Cleaner::check|check(String)".to_owned()] + ), + ( + "app.Use::nested".to_owned(), + vec!["lib.Cleaner::check|check(String)".to_owned()] + ), + ( + "app.Use::typeNamespace".to_owned(), + vec!["lib.Cleaner::check|check(String)".to_owned()] + ), + ( + "app.Use::overloaded".to_owned(), + vec!["lib.Cleaner::check|check(int)".to_owned()] + ), + ( + "app.Use::chained".to_owned(), + vec!["lib.Cleaner::next|next()".to_owned()] + ), + ]) + ); + extractions.reverse(); + let reversed = resolve(&extractions, &sources); + let canonical = |graph: &compass_languages::Extraction| { + let mut edges = graph + .edges + .iter() + .map(serde_json::to_string) + .collect::, serde_json::Error>>()?; + edges.sort(); + Ok::<_, serde_json::Error>(edges) + }; + assert_eq!(canonical(&resolved)?, canonical(&reversed)?); + Ok(()) +} diff --git a/crates/compass-resolve/tests/java_enum_access.rs b/crates/compass-resolve/tests/java_enum_access.rs new file mode 100644 index 000000000..0a5e6476b --- /dev/null +++ b/crates/compass-resolve/tests/java_enum_access.rs @@ -0,0 +1,576 @@ +use std::collections::{BTreeSet, HashMap}; +use std::error::Error; +use std::path::Path; + +use compass_graph::{BuildEvidence, normalize_v1}; +use compass_languages::Engine; +use compass_model::code_graph::{EdgeKind, GraphDocument, NodeKind}; +use compass_resolve::resolve; + +fn publish( + root: &Path, + files: &[(&str, &str)], + reverse: bool, +) -> Result> { + let mut sources = HashMap::new(); + let mut inputs = Vec::new(); + for &(file, source) in files { + let path = root.join(file); + std::fs::create_dir_all(path.parent().ok_or("missing parent")?)?; + std::fs::write(path, source)?; + sources.insert(file.to_owned(), source.to_owned()); + inputs.push(Engine::default().extract_source(Path::new(file), source.as_bytes())?); + } + if reverse { + inputs.reverse(); + } + let resolved = resolve(&inputs, &sources); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + let evidence = BuildEvidence::from_extraction(root, &resolved, "sha256:java-enum-access")?; + Ok(normalize_v1(resolved, evidence)?) +} + +fn member_pairs(graph: &GraphDocument) -> Result, Box> { + let mut result = Vec::new(); + for edge in &graph.links { + if !edge + .occurrence_rule + .as_ref() + .is_some_and(|rule| rule.as_str().starts_with("universal-member-access-")) + { + continue; + } + assert_eq!(edge.kind, EdgeKind::References); + let source = graph + .nodes + .iter() + .find(|n| n.id == edge.source) + .ok_or("source")?; + let target = graph + .nodes + .iter() + .find(|n| n.id == edge.target) + .ok_or("target")?; + let site = edge.relationship_site.as_ref().ok_or("member site")?; + assert!( + edge.evidence + .iter() + .any(|evidence| evidence.anchors.contains(site)) + ); + result.push((source.qualified_name.clone(), target.qualified_name.clone())); + } + result.sort(); + Ok(result) +} + +#[test] +fn cross_file_enum_references_keep_direction_multiplicity_provenance_and_order() +-> Result<(), Box> { + let model = "package model; public enum State { READY, DONE }"; + let caller = "package app; // λ\nimport model.State;\nclass Box {\n State run() {\n return State.READY == State.DONE ? State.READY : State.DONE;\n }\n}\n"; + let files = [("model/State.java", model), ("app/Box.java", caller)]; + let root = tempfile::tempdir()?; + let graph = publish(root.path(), &files, false)?; + let run = graph + .nodes + .iter() + .find(|n| n.qualified_name == "app.Box::run") + .ok_or("run")?; + let mut starts = BTreeSet::new(); + for edge in graph.links.iter().filter(|edge| edge.source == run.id) { + let target = graph + .nodes + .iter() + .find(|n| n.id == edge.target) + .ok_or("target")?; + if target.kind != NodeKind::EnumMember { + continue; + } + assert_eq!(edge.kind, EdgeKind::References); + assert!( + edge.occurrence_rule + .as_ref() + .is_some_and(|rule| { rule.as_str().starts_with("universal-member-access-") }) + ); + let site = edge.relationship_site.as_ref().ok_or("site")?; + assert_eq!(site.file, "app/Box.java"); + assert_eq!(site.start_line, 5); + let start = usize::try_from(site.start_byte)?; + let end = usize::try_from(site.end_byte)?; + assert_eq!(caller.get(start..end), Some(target.name.as_str())); + assert!(starts.insert(start)); + assert!( + edge.evidence + .iter() + .any(|evidence| evidence.anchors.contains(site)) + ); + } + assert_eq!(starts.len(), 4, "{:#?}", graph.links); + let reversed = publish(root.path(), &files, true)?; + assert_eq!( + serde_json::to_value(&graph.nodes)?, + serde_json::to_value(&reversed.nodes)? + ); + assert_eq!( + serde_json::to_value(&graph.links)?, + serde_json::to_value(&reversed.links)? + ); + Ok(()) +} + +#[test] +fn constant_specific_bodies_distinguish_own_fields_from_enclosing_enum_values() +-> Result<(), Box> { + let source = "package p; enum State { A { int B = 1; int size() { return B + this.B; } State next() { return State.B; } }, B; }"; + let root = tempfile::tempdir()?; + let graph = publish(root.path(), &[("p/State.java", source)], false)?; + assert_eq!( + member_pairs(&graph)?, + [ + ("p.State::A::next".into(), "p.State::B".into()), + ("p.State::A::size".into(), "p.State::A::B".into()), + ("p.State::A::size".into(), "p.State::A::B".into()), + ] + ); + Ok(()) +} + +#[test] +fn enum_switch_labels_use_the_cross_file_selector_type() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let graph = publish( + root.path(), + &[ + ( + "model/State.java", + "package model; public enum State { READY, DONE }", + ), + ( + "app/Box.java", + "package app; import model.State; class Box { static final int READY = 1; int run(State state) { switch (state) { case READY: return 1; case DONE: return 2; default: return 0; } } }", + ), + ], + false, + )?; + assert_eq!( + member_pairs(&graph)?, + [ + ("app.Box::run".into(), "model.State::DONE".into()), + ("app.Box::run".into(), "model.State::READY".into()), + ] + ); + Ok(()) +} + +#[test] +fn duplicate_receiver_types_are_not_disambiguated_by_enum_member_availability() +-> Result<(), Box> { + let root = tempfile::tempdir()?; + let files = [ + ("one/State.java", "package p; enum State { READY }"), + ("two/State.java", "package p; enum State { DONE }"), + ( + "p/Box.java", + "package p; class Box { State run(State state) { switch (state) { case READY: return State.READY; default: return state; } } }", + ), + ]; + for reverse in [false, true] { + assert!(member_pairs(&publish(root.path(), &files, reverse)?)?.is_empty()); + } + Ok(()) +} + +#[test] +fn shadowing_unknown_switches_and_unregistered_owners_do_not_invent_enum_edges() +-> Result<(), Box> { + for source in [ + "package p; enum State { READY } class Box { Object run(Object State) { return State.READY; } }", + "package p; enum State { READY } class Box { Object run() { return State.READY; } }", + "package p; enum State { READY } class Box { void run() { class State {} sink(State.READY); } }", + "package p; enum State { READY } class Box { int READY; int run() { switch (unknown()) { case READY: return 0; default: return 1; } } }", + "package p; enum State { READY } class Box { int run(Unknown state) { switch (state) { case READY: return 0; default: return 1; } } }", + "package p; enum State { READY; void run() { Object value = new Object() { State get() { return READY; } }; } }", + ] { + let root = tempfile::tempdir()?; + assert!( + member_pairs(&publish(root.path(), &[("p/State.java", source)], false)?)?.is_empty(), + "{source}" + ); + } + Ok(()) +} + +#[test] +fn enum_values_do_not_expose_constant_body_fields_to_other_classes() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let graph = publish( + root.path(), + &[ + ( + "model/State.java", + "package model; public enum State { READY { int hidden = 1; } }", + ), + ( + "app/Box.java", + "package app; import static model.State.READY; class Box { int run() { return READY.hidden; } }", + ), + ], + false, + )?; + assert!(member_pairs(&graph)?.is_empty()); + Ok(()) +} + +#[test] +fn same_package_enum_type_and_field_initializer_references_resolve() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let graph = publish( + root.path(), + &[ + ( + "p/State.java", + "package p; public enum State { READY { int value = 1; int next = value; }, DONE; }", + ), + ( + "p/Box.java", + "package p; class Box { State run() { return State.READY; } }", + ), + ], + false, + )?; + assert_eq!( + member_pairs(&graph)?, + [ + ("p.Box::run".into(), "p.State::READY".into()), + ( + "p.State::READY::next".into(), + "p.State::READY::value".into() + ), + ] + ); + Ok(()) +} + +#[test] +fn enum_body_field_resolution_requires_bounded_lexical_ownership() -> Result<(), Box> { + use compass_languages::CandidateRelation; + use compass_resolve::evidence::{ + ResolutionDecision, UniversalResolutionIndex, UniversalResolutionLimits, + }; + let source = "package p; enum State { A { int value; int run() { return value; } }; }"; + let evidence = Engine::default() + .extract_source(Path::new("State.java"), source.as_bytes())? + .semantic_evidence + .ok_or("missing Java evidence")?; + let candidate = evidence + .candidates + .iter() + .find(|candidate| candidate.relation == CandidateRelation::AccessesMember) + .ok_or("missing access")? + .clone(); + let target = evidence + .declarations + .iter() + .find(|declaration| declaration.qualified_name == "p.State::A::value") + .ok_or("field")? + .id + .clone(); + for budget in [1, 256] { + let index = UniversalResolutionIndex::new( + std::slice::from_ref(&evidence), + UniversalResolutionLimits { + candidates_per_lookup: budget, + ..UniversalResolutionLimits::default() + }, + )?; + let decision = index.resolve(&candidate.id); + if budget == 1 { + assert_eq!(decision, ResolutionDecision::Unresolved); + } else { + assert!( + matches!(decision, ResolutionDecision::Resolved { declaration_id, .. } if declaration_id == target) + ); + } + } + let module_scope = evidence + .scopes + .iter() + .find(|scope| scope.kind == "module") + .ok_or("missing module scope")? + .id + .clone(); + for scope in [None, Some(module_scope)] { + let mut foreign = evidence.clone(); + let access = foreign + .candidates + .iter_mut() + .find(|c| c.id == candidate.id) + .ok_or("candidate")?; + access.constraints.scope_id = scope; + let index = + UniversalResolutionIndex::new(&[foreign], UniversalResolutionLimits::default())?; + assert_eq!(index.resolve(&candidate.id), ResolutionDecision::Unresolved); + } + Ok(()) +} + +#[test] +fn nested_enum_type_shadows_import_before_member_selection() -> Result<(), Box> { + let root = tempfile::tempdir()?; + let graph = publish( + root.path(), + &[ + ( + "remote/State.java", + "package remote; public enum State { A }", + ), + ( + "p/Box.java", + "package p; import remote.State; class Box { enum State { A } State run() { return State.A; } }", + ), + ], + false, + )?; + assert_eq!( + member_pairs(&graph)?, + [("p.Box::run".into(), "p.Box::State::A".into())] + ); + Ok(()) +} + +#[test] +fn imported_nested_enum_nominal_receivers_keep_exact_occurrences() -> Result<(), Box> { + let model = "package model; public class Outer { public static class Middle { public enum State { READY, DONE; public int code; } } }"; + let caller = "package app; // λ\nimport model.Outer.Middle.State;\nclass Box {\n State direct() { return State.READY; }\n State viaValue(State value) { return value.DONE; }\n int code(State value) { return value.code; }\n int choose(State value) { switch (value) { case READY: return 1; default: return 0; } }\n Object shadow(Object State) { return State.READY; }\n Object typeParameter() { return State.READY; }\n}\n"; + let files = [("model/Outer.java", model), ("app/Box.java", caller)]; + let root = tempfile::tempdir()?; + let graph = publish(root.path(), &files, false)?; + assert_eq!( + member_pairs(&graph)?, + [ + ( + "app.Box::choose".into(), + "model.Outer::Middle::State::READY".into() + ), + ( + "app.Box::code".into(), + "model.Outer::Middle::State::code".into() + ), + ( + "app.Box::direct".into(), + "model.Outer::Middle::State::READY".into() + ), + ( + "app.Box::viaValue".into(), + "model.Outer::Middle::State::DONE".into() + ), + ] + ); + for edge in graph.links.iter().filter(|edge| { + edge.occurrence_rule + .as_ref() + .is_some_and(|rule| rule.as_str().starts_with("universal-member-access-")) + }) { + let site = edge.relationship_site.as_ref().ok_or("site")?; + assert_eq!(site.file, "app/Box.java"); + let token = caller + .get(usize::try_from(site.start_byte)?..usize::try_from(site.end_byte)?) + .ok_or("token")?; + assert!(matches!(token, "READY" | "DONE" | "code")); + } + let reversed = publish(root.path(), &files, true)?; + assert_eq!( + serde_json::to_value(&graph.nodes)?, + serde_json::to_value(&reversed.nodes)? + ); + assert_eq!( + serde_json::to_value(&graph.links)?, + serde_json::to_value(&reversed.links)? + ); + Ok(()) +} + +#[test] +fn dotted_nested_receiver_ambiguity_is_not_resolved_by_member_availability() +-> Result<(), Box> { + for extra in [ + ( + "duplicate/EmptyOuter.java", + "package model; public class Outer {}", + ), + ( + "duplicate/Outer.java", + "package model; public class Outer { public enum State { OTHER } }", + ), + ( + "model/Outer/State.java", + "package model.Outer; public enum State { OTHER }", + ), + ] { + let root = tempfile::tempdir()?; + let graph = publish( + root.path(), + &[ + ( + "model/Outer.java", + "package model; public class Outer { public enum State { READY } }", + ), + extra, + ( + "app/Box.java", + "package app; import model.Outer.State; class Box { State run() { return State.READY; } }", + ), + ], + false, + )?; + assert!(member_pairs(&graph)?.is_empty()); + } + Ok(()) +} + +#[test] +fn dotted_nominal_decisions_preserve_limits_kinds_and_exact_precedence() +-> Result<(), Box> { + use compass_languages::{ + CandidateRelation, EvidenceBuilder, EvidenceLimits, EvidenceRange, ResolutionConstraint, + SemanticRole, UniversalEvidenceRegistry, + }; + use compass_resolve::evidence::{ + ResolutionDecision, UniversalResolutionIndex, UniversalResolutionLimits, + }; + let pipeline = UniversalEvidenceRegistry::pipeline("java").ok_or("Java pipeline")?; + // Lowercase source type names deliberately forbid a capitalization heuristic. + for (parents, owners, collision, budget, exact, kind_allowed, resolves) in [ + (1, 1, false, 256, false, true, true), + (0, 1, false, 256, false, true, false), + (2, 1, false, 256, false, true, false), + (1, 2, false, 256, false, true, false), + (1, 1, true, 256, false, true, false), + (1, 2, false, 1, false, true, false), + (1, 1, false, 1, false, true, false), + (1, 1, false, 2, false, true, false), + (1, 1, false, 3, false, true, true), + (0, 2, true, 1, true, true, true), + (1, 1, false, 256, false, false, false), + ] { + let range = |start: u32| EvidenceRange { + source_file: "fixture.java".into(), + start_byte: u64::from(start), + end_byte: u64::from(start + 1), + start_line: 1, + end_line: 1, + start_column: start, + end_column: start + 1, + }; + let mut builder = EvidenceBuilder::new( + pipeline, + "dotted-owner", + "fixture.java", + EvidenceLimits::default(), + ); + let caller = builder.declare( + "method", + "caller", + "run", + "p.Box::run", + Some("p"), + None, + range(0), + )?; + let field = builder.declare( + "field", + "field", + "value", + "p.outer::middle::state::value", + Some("p"), + None, + range(2), + )?; + for i in 0..parents { + builder.declare( + "class", + &format!("outer-{i}"), + "outer", + "p.outer", + Some("p"), + None, + range(4 + i), + )?; + } + builder.declare( + "class", + "middle", + "middle", + "p.outer::middle", + Some("p"), + None, + range(8), + )?; + for i in 0..owners { + builder.declare( + "class", + &format!("state-{i}"), + "state", + "p.outer::middle::state", + Some("p"), + None, + range(10 + i), + )?; + } + if collision { + builder.declare( + "class", + "package-collision", + "state", + "p.outer.middle.state", + Some("p.outer.middle"), + None, + range(15), + )?; + } + let occurrence = builder.occur( + SemanticRole::MemberAccess, + &caller, + "value", + Some("item"), + None, + range(20), + )?; + let candidate = builder.relate( + CandidateRelation::AccessesMember, + &caller, + Some(&occurrence), + None, + "value", + ResolutionConstraint { + qualified_name: Some("p.outer.middle.state::value".into()), + allowed_target_kinds: vec![ + if kind_allowed { "field" } else { "enum_member" }.into(), + ], + exact_target_declaration_id: exact.then(|| field.clone()), + ..ResolutionConstraint::default() + }, + )?; + let index = UniversalResolutionIndex::new( + &[builder.finish()?], + UniversalResolutionLimits { + candidates_per_lookup: budget, + ..UniversalResolutionLimits::default() + }, + )?; + let decision = index.resolve(&candidate); + if resolves { + assert!( + matches!(decision, ResolutionDecision::Resolved { declaration_id, .. } if declaration_id == field) + ); + } else if owners > 1 || collision || parents > 1 { + assert!(matches!( + decision, + ResolutionDecision::Ambiguous { candidate_count: 2 } + )); + } else { + assert_eq!(decision, ResolutionDecision::Unresolved); + } + } + Ok(()) +} diff --git a/crates/compass-resolve/tests/java_field_access.rs b/crates/compass-resolve/tests/java_field_access.rs new file mode 100644 index 000000000..4917702d4 --- /dev/null +++ b/crates/compass-resolve/tests/java_field_access.rs @@ -0,0 +1,322 @@ +use std::collections::{BTreeSet, HashMap}; +use std::error::Error; +use std::path::Path; + +use compass_graph::{BuildEvidence, normalize_v1}; +use compass_languages::{Engine, Extraction}; +use compass_model::code_graph::{EdgeKind, NodeKind}; +use compass_resolve::resolve; + +fn extract(file: &str, source: &str) -> Result> { + Ok(Engine::default().extract_source(Path::new(file), source.as_bytes())?) +} + +#[test] +fn cross_file_fields_publish_exact_caller_direction_occurrences_and_stable_order() +-> Result<(), Box> { + let model = "package model; public class Cell { public int value; }\n"; + let caller = "package app;\nimport model.Cell;\nclass Box {\n void run(Cell cell) {\n cell.value = cell.value + 1;\n }\n}\n"; + let directory = tempfile::tempdir()?; + std::fs::create_dir_all(directory.path().join("model"))?; + std::fs::create_dir_all(directory.path().join("app"))?; + std::fs::write(directory.path().join("model/Cell.java"), model)?; + std::fs::write(directory.path().join("app/Box.java"), caller)?; + let sources = HashMap::from([ + ("model/Cell.java".into(), model.into()), + ("app/Box.java".into(), caller.into()), + ]); + let inputs = vec![ + extract("model/Cell.java", model)?, + extract("app/Box.java", caller)?, + ]; + let resolved = resolve(&inputs, &sources); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + let build = + BuildEvidence::from_extraction(directory.path(), &resolved, "sha256:java-field-access")?; + let graph = normalize_v1(resolved, build)?; + let run = graph + .nodes + .iter() + .find(|n| n.qualified_name == "app.Box::run") + .ok_or("missing run")?; + let field = graph + .nodes + .iter() + .find(|n| n.name == "value" && n.kind == NodeKind::Field) + .ok_or("missing field")?; + let edges = graph + .links + .iter() + .filter(|e| e.source == run.id && e.target == field.id) + .collect::>(); + assert_eq!(edges.len(), 2, "{:#?}", graph.links); + let mut starts = BTreeSet::new(); + for edge in edges { + assert_eq!(edge.kind, EdgeKind::References); + assert!( + edge.occurrence_rule + .as_ref() + .is_some_and(|rule| rule.as_str().starts_with("universal-member-access-")) + ); + let site = edge + .relationship_site + .as_ref() + .ok_or("missing occurrence")?; + assert_eq!(site.file, "app/Box.java"); + assert_eq!(site.start_line, 5); + let start = usize::try_from(site.start_byte)?; + let end = usize::try_from(site.end_byte)?; + assert_eq!(caller.get(start..end), Some("value")); + assert!(starts.insert(start)); + assert!(edge.evidence.iter().any(|e| e.anchors.contains(site))); + } + let mut reversed = inputs; + reversed.reverse(); + let second = resolve(&reversed, &sources); + let build = + BuildEvidence::from_extraction(directory.path(), &second, "sha256:java-field-access")?; + let second = normalize_v1(second, build)?; + assert_eq!( + serde_json::to_value(&graph.nodes)?, + serde_json::to_value(&second.nodes)? + ); + assert_eq!( + serde_json::to_value(&graph.links)?, + serde_json::to_value(&second.links)? + ); + Ok(()) +} + +#[test] +fn ambiguous_unknown_inherited_and_unregistered_owners_never_publish_false_field_edges() +-> Result<(), Box> { + for source in [ + "package p; class Cell { int value; } class Box { void run() { class Local { int value = new Cell().value; } } }", + "package p; class Cell { int value; int value; } class Box { int run(Cell item) { return item.value; } }", + "package p; class Cell { int value; } class Box { int run(Unknown item) { return item.value; } }", + "package p; class Cell { int value; } class Box { void run() { class Local { int get(Cell item) { return item.value; } } } }", + "package p; class Box { int value; class Inner extends Unknown { int get() { return value; } } }", + "package p; import a.*; class Cell { int value; } class Box { int run(Unknown item) { return item.value; } }", + "package p; class Cell { int value; } class Box { Cell item; int run(Object obj) { if (!(obj instanceof Cell item)) { log(); return 0; } return item.value; } }", + ] { + let resolved = resolve( + &[extract("Box.java", source)?], + &HashMap::from([("Box.java".into(), source.into())]), + ); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + assert!( + !resolved + .edges + .iter() + .any(|edge| edge.string("relation") == "accesses"), + "{source}: {:#?}", + resolved.edges + ); + } + Ok(()) +} + +#[test] +fn state_access_is_separate_from_method_selector_and_read_write_classification() +-> Result<(), Box> { + let source = "package p; class Cell { int value; int get() { return value; } } class Box { Cell item; void run() { item.get(); } }"; + let resolved = resolve( + &[extract("Box.java", source)?], + &HashMap::from([("Box.java".into(), source.into())]), + ); + let fields = resolved + .nodes + .iter() + .filter(|n| n.string("symbol_kind") == "field") + .map(|n| n.id.as_str()) + .collect::>(); + let accesses = resolved + .edges + .iter() + .filter(|edge| edge.string("relation") == "accesses") + .collect::>(); + assert_eq!(accesses.len(), 2); + assert!( + accesses + .iter() + .all(|edge| fields.contains(edge.target.as_str())) + ); + assert!( + resolved + .edges + .iter() + .any(|edge| edge.string("relation") == "calls") + ); + Ok(()) +} + +#[test] +fn member_type_precedes_imported_type_across_files() -> Result<(), Box> { + let sources = HashMap::from([ + ("remote/Cell.java".into(), "package remote; public class Cell { public int value; }".into()), + ("p/Box.java".into(), "package p; import remote.Cell; class Box { class Cell { int value; } int run(Cell item) { return item.value; } }".into()), + ]); + let inputs = sources + .iter() + .map(|(file, source): (&String, &String)| extract(file, source)) + .collect::, _>>()?; + let resolved = resolve(&inputs, &sources); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + let targets = resolved + .edges + .iter() + .filter(|edge| edge.string("relation") == "accesses") + .map(|edge| { + resolved + .nodes + .iter() + .find(|node| node.id == edge.target) + .map(|node| node.string("qualified_name")) + }) + .collect::>(); + assert_eq!(targets, vec![Some("p.Box::Cell::value".to_owned())]); + Ok(()) +} + +#[test] +fn ambiguous_receiver_types_cannot_be_selected_by_field_availability() -> Result<(), Box> +{ + let sources = HashMap::from([ + ( + "one/Cell.java".into(), + "package p; class Cell { int value; }".into(), + ), + ( + "two/Cell.java".into(), + "package p; class Cell { int other; }".into(), + ), + ( + "p/Box.java".into(), + "package p; class Box { int run(Cell item) { return item.value; } }".into(), + ), + ]); + let inputs = sources + .iter() + .map(|(file, source): (&String, &String)| extract(file, source)) + .collect::, _>>()?; + for inputs in [inputs.clone(), inputs.into_iter().rev().collect()] { + let resolved = resolve(&inputs, &sources); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + assert!( + !resolved + .edges + .iter() + .any(|edge| edge.string("relation") == "accesses"), + "{:#?}", + resolved.edges + ); + } + Ok(()) +} + +#[test] +fn field_receiver_decisions_preserve_ambiguity_limits_and_exact_evidence() +-> Result<(), Box> { + use compass_languages::{ + CandidateRelation, EvidenceBuilder, EvidenceLimits, EvidenceRange, ResolutionConstraint, + SemanticRole, UniversalEvidenceRegistry, + }; + use compass_resolve::evidence::{ + ResolutionDecision, UniversalResolutionIndex, UniversalResolutionLimits, + }; + let pipeline = UniversalEvidenceRegistry::pipeline("java").ok_or("Java pipeline")?; + for (receivers, budget, exact) in [ + (0, 256, false), + (1, 256, false), + (2, 256, false), + (2, 1, false), + (2, 256, true), + ] { + let range = |start: u32| EvidenceRange { + source_file: "fixture.java".into(), + start_byte: u64::from(start), + end_byte: u64::from(start + 1), + start_line: 1, + end_line: 1, + start_column: start, + end_column: start + 1, + }; + let mut builder = EvidenceBuilder::new( + pipeline, + "field-receiver-test", + "fixture.java", + EvidenceLimits::default(), + ); + let caller = builder.declare( + "method", + "caller", + "run", + "p.Box::run", + Some("p"), + None, + range(0), + )?; + let field = builder.declare( + "field", + "field", + "value", + "p.Cell::value", + Some("p"), + None, + range(2), + )?; + for i in 0..receivers { + builder.declare( + "class", + &format!("class-{i}"), + "Cell", + "p.Cell", + Some("p"), + None, + range(4 + i), + )?; + } + let occurrence = builder.occur( + SemanticRole::MemberAccess, + &caller, + "value", + Some("item"), + None, + range(10), + )?; + let candidate = builder.relate( + CandidateRelation::AccessesMember, + &caller, + Some(&occurrence), + None, + "value", + ResolutionConstraint { + qualified_name: Some("p.Cell::value".into()), + allowed_target_kinds: vec!["field".into()], + exact_target_declaration_id: exact.then(|| field.clone()), + ..ResolutionConstraint::default() + }, + )?; + let index = UniversalResolutionIndex::new( + &[builder.finish()?], + UniversalResolutionLimits { + candidates_per_lookup: budget, + ..UniversalResolutionLimits::default() + }, + )?; + let decision = index.resolve(&candidate); + if exact || receivers == 1 { + assert!( + matches!(decision, ResolutionDecision::Resolved { declaration_id, .. } if declaration_id == field) + ); + } else if receivers == 0 { + assert_eq!(decision, ResolutionDecision::Unresolved); + } else { + assert_eq!( + decision, + ResolutionDecision::Ambiguous { candidate_count: 2 } + ); + } + } + Ok(()) +} diff --git a/crates/compass-resolve/tests/java_varargs.rs b/crates/compass-resolve/tests/java_varargs.rs new file mode 100644 index 000000000..dd1574b8b --- /dev/null +++ b/crates/compass-resolve/tests/java_varargs.rs @@ -0,0 +1,73 @@ +use std::collections::{BTreeMap, HashMap}; +use std::error::Error; +use std::path::Path; + +use compass_languages::{Engine, EvidenceLimits, validate_evidence}; +use compass_resolve::resolve; + +#[test] +fn java_varargs_resolves_compiler_supported_overloads() -> Result<(), Box> { + let source = + include_str!("../../../benchmarks/agent_query/fixtures/java_varargs/VarargsDemo.java"); + let extraction = + Engine::default().extract_source(Path::new("VarargsDemo.java"), source.as_bytes())?; + validate_evidence( + extraction + .semantic_evidence + .as_ref() + .ok_or("missing evidence")?, + EvidenceLimits::default(), + )?; + let sources = HashMap::from([("VarargsDemo.java".to_owned(), source.to_owned())]); + let resolved = resolve(&[extraction], &sources); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + let mut calls = BTreeMap::>::new(); + for edge in &resolved.edges { + if edge.string("relation") != "calls" || !edge.string("rule").starts_with("universal-call-") + { + continue; + } + let caller = resolved + .nodes + .iter() + .find(|node| node.id == edge.source) + .ok_or("missing caller")?; + let target = resolved + .nodes + .iter() + .find(|node| node.id == edge.target) + .ok_or("missing target")?; + assert_eq!(edge.string("_origin"), "ast"); + assert_eq!(edge.string("confidence"), "EXTRACTED"); + calls + .entry(caller.string("qualified_name")) + .or_default() + .push(target.string("signature")); + } + assert_eq!( + calls, + BTreeMap::from([ + ( + "audit.VarargsDemo::text".to_owned(), + vec!["join(String...)".to_owned()] + ), + ( + "audit.VarargsDemo::numbers".to_owned(), + vec!["join(int...)".to_owned()] + ), + ( + "audit.VarargsDemo::flag".to_owned(), + vec!["join(boolean)".to_owned()] + ), + ( + "audit.VarargsDemo::explicitArray".to_owned(), + vec!["join(String...)".to_owned()] + ), + ( + "audit.VarargsDemo::mixed".to_owned(), + vec!["prefixed(String,String...)".to_owned()] + ), + ]) + ); + Ok(()) +} diff --git a/crates/compass-resolve/tests/java_varargs_phases.rs b/crates/compass-resolve/tests/java_varargs_phases.rs new file mode 100644 index 000000000..2c66d452c --- /dev/null +++ b/crates/compass-resolve/tests/java_varargs_phases.rs @@ -0,0 +1,203 @@ +use std::collections::{BTreeMap, HashMap}; +use std::error::Error; +use std::path::Path; + +use compass_languages::{CandidateRelation, Engine, EvidenceLimits, validate_evidence}; +use compass_resolve::resolve; + +#[test] +fn java_zero_argument_varargs_does_not_treat_missing_parameter_types_as_empty_parameters() +-> Result<(), Box> { + let source = + include_str!("../../../benchmarks/agent_query/fixtures/java_varargs/ExtendedVarargs.java"); + let mut extraction = + Engine::default().extract_source(Path::new("ExtendedVarargs.java"), source.as_bytes())?; + let evidence = extraction + .semantic_evidence + .as_mut() + .ok_or("missing evidence")?; + let unknown = evidence + .declarations + .iter_mut() + .find(|d| d.signature.as_deref() == Some("choose(Object...)")) + .ok_or("missing overload")?; + unknown.parameter_types.clear(); + // Canonical parameter types are optional evidence. An absent vector does + // not turn this one-parameter declaration into a zero-parameter overload. + validate_evidence(evidence, EvidenceLimits::default())?; + let sources = HashMap::from([("ExtendedVarargs.java".to_owned(), source.to_owned())]); + let resolved = resolve(&[extraction], &sources); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + let caller = resolved + .nodes + .iter() + .find(|n| n.string("qualified_name") == "audit.ExtendedVarargs::mostSpecificEmpty") + .ok_or("missing caller")?; + assert!( + !resolved + .edges + .iter() + .any(|e| e.source == caller.id && e.string("rule").starts_with("universal-call-")), + "missing canonical types must retain ambiguity for zero-argument varargs" + ); + Ok(()) +} + +#[test] +fn java_varargs_keeps_invocation_phases_occurrences_and_unknown_targets() +-> Result<(), Box> { + let source = + include_str!("../../../benchmarks/agent_query/fixtures/java_varargs/ExtendedVarargs.java"); + let inputs = [ + ("ExtendedVarargs.java", source), + ( + "VarargsDemo.java", + include_str!("../../../benchmarks/agent_query/fixtures/java_varargs/VarargsDemo.java"), + ), + ]; + let sources = inputs + .into_iter() + .map(|(p, s)| (p.to_owned(), s.to_owned())) + .collect::>(); + let mut engine = Engine::default(); + let mut extractions = inputs + .into_iter() + .map(|(p, s)| engine.extract_source(Path::new(p), s.as_bytes())) + .collect::, _>>()?; + let evidence = extractions[0] + .semantic_evidence + .as_ref() + .ok_or("missing evidence")?; + validate_evidence(evidence, EvidenceLimits::default())?; + let unknown = evidence + .declarations + .iter() + .find(|d| d.name == "unknown") + .ok_or("missing unknown caller")?; + let unknown_call = evidence + .candidates + .iter() + .filter(|c| { + c.source_declaration_id == unknown.id + && c.relation == CandidateRelation::Calls + && c.target_spelling == "choose" + }) + .collect::>(); + assert_eq!( + unknown_call.len(), + 1, + "retain the unresolved source occurrence" + ); + assert_eq!(unknown_call[0].constraints.argument_types, [None]); + let repeated = evidence + .declarations + .iter() + .find(|d| d.name == "repeated") + .ok_or("missing repeated caller")?; + let repeated_calls = evidence + .candidates + .iter() + .filter(|c| { + c.source_declaration_id == repeated.id + && c.relation == CandidateRelation::Calls + && c.target_spelling == "strings" + }) + .collect::>(); + assert_eq!(repeated_calls.len(), 2); + assert_ne!( + repeated_calls[0].occurrence_id, + repeated_calls[1].occurrence_id + ); + for candidate in &evidence.candidates { + if candidate.relation != CandidateRelation::Calls { + continue; + } + let occurrence = evidence + .occurrences + .iter() + .find(|o| Some(&o.id) == candidate.occurrence_id.as_ref()) + .ok_or("missing occurrence")?; + assert_eq!( + source.get( + usize::try_from(occurrence.range.start_byte)? + ..usize::try_from(occurrence.range.end_byte)? + ), + Some(candidate.target_spelling.as_str()) + ); + } + let resolved = resolve(&extractions, &sources); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + let mut calls = BTreeMap::>::new(); + for edge in &resolved.edges { + if edge.string("relation") != "calls" || !edge.string("rule").starts_with("universal-call-") + { + continue; + } + let caller = resolved + .nodes + .iter() + .find(|n| n.id == edge.source) + .ok_or("missing caller")?; + let target = resolved + .nodes + .iter() + .find(|n| n.id == edge.target) + .ok_or("missing target")?; + let name = caller.string("qualified_name"); + if let Some(name) = name.strip_prefix("audit.ExtendedVarargs::") + && target + .string("qualified_name") + .starts_with("audit.ExtendedVarargs::") + { + assert_eq!(edge.string("_origin"), "ast"); + assert_eq!(edge.string("confidence"), "EXTRACTED"); + calls + .entry(name.to_owned()) + .or_default() + .push(target.string("signature")); + } + } + let expected = [ + ("empty", "strings(String...)"), + ("mostSpecificEmpty", "choose(String...)"), + ("mostSpecificMany", "choose(String...)"), + ("nullArray", "choose(String...)"), + ("fixedBeforeExpanded", "phase(Object)"), + ("wideningBeforeBoxing", "widen(long)"), + ("boxingBeforeExpanded", "loose(Integer)"), + ("primitiveSpecific", "primitive(int...)"), + ("prefixEmpty", "prefixed(String,int...)"), + ("arrayArgument", "shape(String[])"), + ("matrixArgument", "shape(String[][])"), + ("matrixInitializer", "shape(String[][])"), + ("spreadForward", "shape(String[])"), + ("trailingDimensions", "shape(String[])"), + ("receiver", "shape(String[])"), + ("modified", "shape(String[])"), + ("arrays", "shape(String[][])"), + ] + .into_iter() + .map(|(name, signature)| (name.to_owned(), vec![signature.to_owned()])) + .chain([( + "repeated".to_owned(), + vec!["strings(String...)".to_owned(); 2], + )]) + .collect::>(); + // unknown's nested method-result argument has no proven type: retaining + // ambiguity is correct even though javac knows the String return type. + assert_eq!(calls, expected); + extractions.reverse(); + let reversed = resolve(&extractions, &sources); + assert!(reversed.error.is_none(), "{:?}", reversed.error); + let canonical = |graph: &compass_languages::Extraction| { + let mut edges = graph + .edges + .iter() + .map(serde_json::to_string) + .collect::, _>>()?; + edges.sort(); + Ok::<_, serde_json::Error>(edges) + }; + assert_eq!(canonical(&resolved)?, canonical(&reversed)?); + Ok(()) +} diff --git a/crates/compass-resolve/tests/rust_field_access.rs b/crates/compass-resolve/tests/rust_field_access.rs new file mode 100644 index 000000000..329b69348 --- /dev/null +++ b/crates/compass-resolve/tests/rust_field_access.rs @@ -0,0 +1,145 @@ +use std::collections::{BTreeSet, HashMap}; +use std::error::Error; +use std::path::Path; + +use compass_graph::{BuildEvidence, normalize_v1}; +use compass_languages::{Engine, Extraction}; +use compass_model::code_graph::{EdgeKind, NodeKind}; +use compass_resolve::resolve; + +fn extract(file: &str, source: &str) -> Result> { + Ok(Engine::default().extract_source(Path::new(file), source.as_bytes())?) +} + +#[test] +fn cross_file_field_accesses_publish_exact_occurrences_and_preserve_order() +-> Result<(), Box> { + let model = "pub struct Item { pub value: usize }\n"; + let caller = + "use crate::model::Item;\nfn run(item: &mut Item) {\n item.value = item.value + 1;\n}\n"; + let directory = tempfile::tempdir()?; + std::fs::create_dir_all(directory.path().join("src"))?; + std::fs::write(directory.path().join("src/model.rs"), model)?; + std::fs::write(directory.path().join("src/lib.rs"), caller)?; + let sources = HashMap::from([ + ("src/model.rs".into(), model.into()), + ("src/lib.rs".into(), caller.into()), + ]); + let inputs = vec![ + extract("src/model.rs", model)?, + extract("src/lib.rs", caller)?, + ]; + let resolved = resolve(&inputs, &sources); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + let build = BuildEvidence::from_extraction(directory.path(), &resolved, "sha256:field-access")?; + let graph = normalize_v1(resolved, build)?; + let run = graph + .nodes + .iter() + .find(|n| n.name == "run()") + .ok_or("missing run")?; + let field = graph + .nodes + .iter() + .find(|n| n.name == "value" && n.kind == NodeKind::Field) + .ok_or("missing field")?; + let edges = graph + .links + .iter() + .filter(|e| e.source == run.id && e.target == field.id) + .collect::>(); + assert_eq!(edges.len(), 2, "{:#?}", graph.links); + let mut starts = BTreeSet::new(); + for edge in edges { + assert_eq!(edge.kind, EdgeKind::References); + assert!( + edge.occurrence_rule + .as_ref() + .is_some_and(|rule| rule.as_str().starts_with("universal-member-access-")) + ); + let site = edge + .relationship_site + .as_ref() + .ok_or("missing occurrence")?; + assert_eq!(site.file, "src/lib.rs"); + assert_eq!(site.start_line, 3); + let start = usize::try_from(site.start_byte)?; + let end = usize::try_from(site.end_byte)?; + assert_eq!(caller.get(start..end), Some("value")); + assert!(starts.insert(start)); + assert!(edge.evidence.iter().any(|e| e.anchors.contains(site))); + } + let mut reversed = inputs; + reversed.reverse(); + let second = resolve(&reversed, &sources); + let build = BuildEvidence::from_extraction(directory.path(), &second, "sha256:field-access")?; + let second = normalize_v1(second, build)?; + assert_eq!( + serde_json::to_value(&graph.nodes)?, + serde_json::to_value(&second.nodes)? + ); + assert_eq!( + serde_json::to_value(&graph.links)?, + serde_json::to_value(&second.links)? + ); + Ok(()) +} + +#[test] +fn shadowed_unknown_and_duplicate_field_targets_never_publish_a_convenient_match() +-> Result<(), Box> { + for source in [ + "struct Item { value: usize } fn run(item: &Item) { let item = unknown(); let _ = item.value; }", + "struct Item { value: usize } fn run(item: Unknown) { let _ = item.value; }", + "struct Item { value: usize, value: usize } fn run(item: &Item) { let _ = item.value; }", + "struct Item { value: usize } fn run(item: &Item) { let _ = (|item| item.value)(unknown()); }", + "mod other { pub struct Item { pub value: usize } } use other::*; fn run(item: Unknown) { let _ = item.value; }", + ] { + let resolved = resolve( + &[extract("src/lib.rs", source)?], + &HashMap::from([("src/lib.rs".into(), source.into())]), + ); + assert!(resolved.error.is_none(), "{:?}", resolved.error); + assert!( + !resolved + .edges + .iter() + .any(|e| e.string("relation") == "accesses"), + "{source}: {:#?}", + resolved.edges + ); + } + Ok(()) +} + +#[test] +fn nested_receivers_publish_field_contacts_but_never_method_contacts() -> Result<(), Box> +{ + let source = "struct Item { value: usize } impl Item { fn get(&self) -> usize { self.value } } struct State { item: Item } impl State { fn run(&self) { self.item.get(); } }"; + let resolved = resolve( + &[extract("src/lib.rs", source)?], + &HashMap::from([("src/lib.rs".into(), source.into())]), + ); + let fields = resolved + .nodes + .iter() + .filter(|n| n.string("symbol_kind") == "field") + .map(|n| n.id.as_str()) + .collect::>(); + let accesses = resolved + .edges + .iter() + .filter(|e| e.string("relation") == "accesses") + .collect::>(); + assert_eq!(accesses.len(), 2, "{:#?}", resolved.edges); + for edge in accesses { + assert!(fields.contains(edge.target.as_str())); + } + assert!( + resolved + .edges + .iter() + .any(|e| e.string("relation") == "calls") + ); + Ok(()) +} diff --git a/crates/compass-resolve/tests/universal_resolution/go.rs b/crates/compass-resolve/tests/universal_resolution/go.rs index f5128bbf5..ea3edaa25 100644 --- a/crates/compass-resolve/tests/universal_resolution/go.rs +++ b/crates/compass-resolve/tests/universal_resolution/go.rs @@ -1,3 +1,33 @@ +#[test] +fn go_returned_callback_invocation_does_not_reference_receiver_type() { + let source = br#"package pkg +type Command struct{} +func (*Command) Callback() func() { return nil } +func caller(command *Command) { + command.Callback()() +} +"#; + let extracted = extract("pkg/callback.go", source); + let sources = HashMap::from([( + "pkg/callback.go".to_owned(), + String::from_utf8(source.to_vec()).expect("source"), + )]); + let resolved = compass_resolve::resolve(&[extracted], &sources); + let callback = resolved + .nodes + .iter() + .find(|node| node.string("qualified_name") == "pkg.Command::Callback") + .expect("callback factory declaration"); + let site_edges: Vec<_> = resolved + .edges + .iter() + .filter(|edge| edge.string("source_location") == "L5") + .collect(); + assert_eq!(site_edges.len(), 1, "only the inner factory call is known"); + assert_eq!(site_edges[0].target, callback.id); + assert_eq!(site_edges[0].string("relation"), "calls"); +} + #[test] fn go_closures_resolve_typed_parameters_and_captured_receivers() { let go_source = br#"package pkg @@ -574,3 +604,217 @@ func (body *Body) Encode() { edge.string("relation") != "calls" || edge.string("source_location") != "L6" })); } + +#[test] +fn go_field_accesses_resolve_only_source_proven_named_targets() { + let types = br#"package pkg +type Logger struct{} +type Store struct { Count int; Logger *Logger } +type Other struct { Count int } +"#; + let methods = br#"package pkg +func (s *Store) Read(other *Store) { + s.Count++ + _ = other.Count + s.Touch() + { s := &Other{}; _ = s.Count } + _ = s.Missing + _ = s.Logger +} +func (s *Store) Touch() {} +"#; + let extracted = [ + extract("pkg/types.go", types), + extract("pkg/methods.go", methods), + ]; + let sources = HashMap::from([( + "pkg/methods.go".to_owned(), + String::from_utf8(methods.to_vec()).expect("source"), + )]); + let resolved = compass_resolve::resolve(&extracted, &sources); + let read = resolved + .nodes + .iter() + .find(|node| node.string("qualified_name") == "pkg.Store::Read") + .expect("Store.Read declaration"); + let store_count = resolved + .nodes + .iter() + .find(|node| node.string("qualified_name") == "pkg.Store::Count") + .expect("Store.Count declaration"); + let other_count = resolved + .nodes + .iter() + .find(|node| node.string("qualified_name") == "pkg.Other::Count") + .expect("Other.Count declaration"); + let store_logger = resolved + .nodes + .iter() + .find(|node| node.string("qualified_name") == "pkg.Store::Logger") + .expect("Store.Logger declaration"); + let accesses = resolved + .edges + .iter() + .filter(|edge| edge.string("relation") == "accesses" && edge.source == read.id) + .map(|edge| (edge.string("source_location"), edge.target.clone())) + .collect::>(); + assert_eq!( + accesses, + std::collections::BTreeSet::from([ + ("L3".to_owned(), store_count.id.clone()), + ("L4".to_owned(), store_count.id.clone()), + ("L6".to_owned(), other_count.id.clone()), + ("L8".to_owned(), store_logger.id.clone()), + ]) + ); + assert!(resolved.edges.iter().all(|edge| { + edge.string("relation") != "accesses" + || (edge.string("source_location") != "L5" + && edge.string("source_location") != "L7") + })); +} + +#[test] +fn go_imported_receiver_without_a_field_declaration_stays_unresolved() { + let source = br#"package pkg +import ext "example.com/ext" +func Use(value *ext.External) { _ = value.Field } +"#; + let extracted = extract("pkg/external.go", source); + let evidence = extracted + .semantic_evidence + .as_ref() + .expect("Go universal evidence"); + assert!(evidence.candidates.iter().any(|candidate| { + candidate.relation == CandidateRelation::AccessesMember + && candidate.constraints.qualified_name.as_deref() + == Some("example.com/ext.External::Field") + && !candidate.constraints.allow_external + })); + let sources = HashMap::from([( + "pkg/external.go".to_owned(), + String::from_utf8(source.to_vec()).expect("source"), + )]); + let resolved = compass_resolve::resolve(&[extracted], &sources); + assert!(resolved.edges.iter().all(|edge| { + edge.string("relation") != "accesses" || edge.string("source_location") != "L3" + })); + assert!(resolved.nodes.iter().all(|node| { + node.string("qualified_name") != "example.com/ext.External::Field" + })); +} + + +#[test] +fn go_control_initializers_resolve_occurrences_without_leaking_shadowed_types() { + let definitions = br#"package pkg +type Runner interface { Run() } +type Good struct{} +func (*Good) Run() {} +type Bad struct{} +func (*Bad) Run() {} +func Factory() *Good { return nil } +func Other() *Bad { return nil } +"#; + let source = br#"package pkg +func Use(current *Bad, Factory func() Runner) { + current.Run() // bad + if current := Other(); current != nil { + current.Run() // bad + } + if current := Factory(); current != nil { + current.Run() // unknown callback + } + current.Run() // bad +} +func Direct(current *Bad) { + if current := Factory(); current != nil { + current.Run() // good + current.Run() // good + } else { + current.Run() // good + } + current.Run() // bad + switch current := Factory(); { + default: current.Run() // good + } + for current := Factory(); current != nil; { + current.Run() // good + break + } + { + current := Factory() + current.Run() // good + callback := func(current *Bad) { current.Run() } // bad + _ = callback + } + current.Run() // bad +} +"#; + let inputs = vec![ + extract("pkg/definitions.go", definitions), + extract("pkg/caller.go", source), + ]; + let sources = HashMap::from([ + ( + "pkg/definitions.go".to_owned(), + String::from_utf8(definitions.to_vec()).expect("definitions"), + ), + ( + "pkg/caller.go".to_owned(), + String::from_utf8(source.to_vec()).expect("caller"), + ), + ]); + let first = compass_resolve::resolve(&inputs, &sources); + let second = compass_resolve::resolve(&[inputs[1].clone(), inputs[0].clone()], &sources); + assert_eq!(universal_edges(&first), universal_edges(&second)); + let good = first + .nodes + .iter() + .find(|n| n.string("qualified_name") == "pkg.Good::Run") + .expect("Good.Run"); + let bad = first + .nodes + .iter() + .find(|n| n.string("qualified_name") == "pkg.Bad::Run") + .expect("Bad.Run"); + for (index, line) in std::str::from_utf8(source) + .expect("source") + .lines() + .enumerate() + { + let expected = if line.ends_with("// good") { + Some(&good.id) + } else if line.ends_with("// bad") { + Some(&bad.id) + } else { + None + }; + if !line.contains(".Run()") { + continue; + } + let calls = first + .edges + .iter() + .filter(|e| { + e.string("relation") == "calls" + && e.string("source_file") == "pkg/caller.go" + && e.string("source_location") == format!("L{}", index + 1) + }) + .collect::>(); + let matches = calls + .iter() + .filter(|e| e.target == good.id || e.target == bad.id) + .collect::>(); + if let Some(target) = expected { + assert_eq!(matches.len(), 1, "line {}: {line}; {matches:?}", index + 1); + assert_eq!(&matches[0].target, target, "line {}: {line}", index + 1); + assert!(matches[0].string("extractor").contains(".universal")); + } else { + assert!( + matches.is_empty(), + "callback must not select a same-named factory: {matches:?}" + ); + } + } +} diff --git a/crates/compass-resolve/tests/universal_resolution/rust.rs b/crates/compass-resolve/tests/universal_resolution/rust.rs index 180a75df4..d83a9d641 100644 --- a/crates/compass-resolve/tests/universal_resolution/rust.rs +++ b/crates/compass-resolve/tests/universal_resolution/rust.rs @@ -3123,3 +3123,269 @@ fn rust_wildcard_bindings_resolve_local_exports_and_preserve_external_candidates && edge.string("resolution_rule") == "qualified-external" })); } + +#[test] +fn rust_shadowed_receivers_never_capture_an_outer_parameter() { + for (case, body) in [ + ("unknown let", "{ let builder = factory(); builder.finish(); }"), + ("known let", "{ let builder: Actual = factory(); builder.finish(); }"), + ("loop", "for builder in builders { builder.finish(); }"), + ("closure", "builders.iter().for_each(|builder| builder.finish());"), + ("match arm", "match builders.first() { Some(builder) => builder.finish(), None => {} }"), + ("match guard", "match builders.first() { Some(builder) if { builder.finish(); true } => builder.finish(), _ => {} }"), + ("if let", "if let Some(builder) = builders.first() { builder.finish(); }"), + ("while let", "while let Some(builder) = builders.first() { builder.finish(); break; }"), + ("let chain", "if let Some(builder) = builders.first() && { builder.finish(); true } { builder.finish(); }"), + ("destructured let", "struct Wrap { builder: Actual } impl Wrap { fn finish(&self) {} } { let Wrap { builder } = Wrap { builder: factory() }; builder.finish(); }"), + ] { + let source = format!( + "struct Actual;\nimpl Actual {{ fn finish(&self) {{}} }}\n\ + struct Decoy;\nimpl Decoy {{ fn finish(&self) {{}} }}\n\ + fn factory() -> Actual {{ Actual }}\n\ + fn run(builder: &Decoy, builders: &[Actual]) {{\n {body}\n builder.finish();\n}}\n" + ); + let extracted = extract("src/lib.rs", source.as_bytes()); + let evidence = extracted.semantic_evidence.as_ref().expect("Rust evidence"); + assert_eq!(evidence.occurrences.iter().filter(|occurrence| { + occurrence.role == compass_languages::SemanticRole::Call + && occurrence.spelling == "finish" + }).count(), source.matches(".finish()").count(), "{case}: all source occurrences must remain visible"); + let resolved = compass_resolve::resolve( + &[extracted], &HashMap::from([("src/lib.rs".to_owned(), source)]), + ); + let run = resolved.nodes.iter().find(|node| node.string("qualified_name") == "crate::run") + .expect("run declaration"); + let decoy = resolved.nodes.iter().find(|node| node.string("qualified_name") == "crate::Decoy::finish") + .expect("Decoy method"); + let calls = resolved.edges.iter().filter(|edge| { + edge.source == run.id && edge.target == decoy.id && edge.string("relation") == "calls" + }).collect::>(); + assert_eq!(calls.len(), 1, "{case}: only the unshadowed outer call may target Decoy: {calls:#?}"); + assert_eq!(calls[0].string("source_location"), "L8", "{case}"); + assert_eq!(calls[0].string("confidence"), "EXTRACTED", "{case}"); + let actual = resolved.nodes.iter().find(|node| node.string("qualified_name") == "crate::Actual::finish") + .expect("Actual method"); + for edge in resolved.edges.iter().filter(|edge| edge.source == run.id + && edge.string("relation") == "calls" && edge.string("source_location") == "L7") { + let target = resolved.nodes.iter().find(|node| node.id == edge.target).expect("call target"); + if target.string("qualified_name").ends_with("::finish") + && target.attributes.get("placeholder").and_then(serde_json::Value::as_bool) != Some(true) { + assert_eq!(target.id, actual.id, "{case}: inner call must not target the container or outer receiver"); + } + } + if case == "known let" { + assert!(resolved.edges.iter().any(|edge| edge.source == run.id + && edge.target == actual.id && edge.string("relation") == "calls" + && edge.string("source_location") == "L7"), "typed inner call must still resolve"); + } + } +} + +#[test] +fn rust_result_vec_match_loop_preserves_source_proven_builder_calls() { + let source = br#"use std::io; +struct CommandSet { commands: Vec<()> } +struct CommandBuilder; +struct Decoy; +impl Decoy { fn finish(&self) {} } +impl CommandBuilder { + fn new(_: &()) -> io::Result { Ok(Self) } + fn push(&mut self) {} + fn finish(&mut self) {} + fn exit_code(&self) {} +} +impl CommandSet { + fn execute_batch(&self, builder: &Decoy) { + let builders: io::Result> = self.commands.iter() + .map(|command| CommandBuilder::new(command)).collect(); + match builders { + Ok(mut builders) => { + for builder in &mut builders { + builder.push(); + builder.finish(); + } + builders.iter().map(|b| b.exit_code()).count(); + } + Err(_) => {} + } + builder.finish(); + } +} +"#; + let resolved = compass_resolve::resolve( + &[extract("src/lib.rs", source)], + &HashMap::from([( + "src/lib.rs".to_owned(), + String::from_utf8(source.to_vec()).expect("source"), + )]), + ); + let caller = resolved + .nodes + .iter() + .find(|node| node.string("qualified_name") == "crate::CommandSet::execute_batch") + .expect("source caller"); + for (target_name, line) in [ + ("crate::CommandBuilder::new", "L15"), + ("crate::CommandBuilder::push", "L19"), + ("crate::CommandBuilder::finish", "L20"), + ("crate::CommandBuilder::exit_code", "L22"), + ("crate::Decoy::finish", "L26"), + ] { + let target = resolved + .nodes + .iter() + .find(|node| node.string("qualified_name") == target_name) + .expect("source target"); + assert!(resolved.edges.iter().any(|edge| { + edge.source == caller.id + && edge.target == target.id + && edge.string("relation") == "calls" + && edge.string("source_location") == line + }), "missing {line} -> {target_name}"); + } + let decoy = resolved + .nodes + .iter() + .find(|node| node.string("qualified_name") == "crate::Decoy::finish") + .expect("Decoy method"); + assert_eq!(resolved.edges.iter().filter(|edge| { + edge.source == caller.id && edge.target == decoy.id && edge.string("relation") == "calls" + }).count(), 1, "the loop receiver must not inherit the outer Decoy binding"); + + let source = String::from_utf8(source.to_vec()).expect("source"); + for (case, altered) in [ + ( + "custom Result alias", + source.replace("use std::io;", "mod io { pub type Result = std::io::Result; }"), + ), + ( + "local Vec alias", + source.replace("use std::io;", "use std::io;\ntype Vec = std::vec::Vec;"), + ), + ( + "different constructor return", + source.replace("io::Result { Ok(Self) }", "io::Result { Ok(Decoy) }"), + ), + ] { + let resolved = compass_resolve::resolve( + &[extract("src/lib.rs", altered.as_bytes())], + &HashMap::from([("src/lib.rs".to_owned(), altered)]), + ); + let caller = resolved.nodes.iter().find(|node| { + node.string("qualified_name") == "crate::CommandSet::execute_batch" + }).expect("caller"); + for edge in resolved.edges.iter().filter(|edge| { + edge.source == caller.id && edge.string("relation") == "calls" + }) { + let target = resolved.nodes.iter().find(|node| node.id == edge.target) + .expect("call target"); + assert!( + !matches!(target.string("qualified_name").as_str(), + "crate::CommandBuilder::push" | "crate::CommandBuilder::finish" | "crate::CommandBuilder::exit_code"), + "{case}: unsupported type chain invented a builder call: {edge:#?}" + ); + } + } +} + +#[test] +fn rust_let_initializer_uses_the_previous_receiver_binding() { + let source = b"struct Actual; +impl Actual { fn finish(&self) {} } +struct Decoy; +impl Decoy { fn replace(&self) -> Actual { Actual } } +fn run(builder: &Decoy) { + let builder: Actual = builder.replace(); + builder.finish(); +} + +"; + let resolved = compass_resolve::resolve(&[extract("src/lib.rs", source)], + &HashMap::from([("src/lib.rs".to_owned(), String::from_utf8(source.to_vec()).expect("source"))])); + for (target, site) in [("crate::Decoy::replace", "L6"), ("crate::Actual::finish", "L7")] { + let target = resolved.nodes.iter().find(|node| node.string("qualified_name") == target).expect("target"); + assert!(resolved.edges.iter().any(|edge| edge.target == target.id + && edge.string("relation") == "calls" && edge.string("source_location") == site), + "missing {site} -> {}", target.string("qualified_name")); + } +} + +#[test] +fn rust_condition_binding_is_not_visible_in_else_or_afterward() { + let source = b"struct Actual; +impl Actual { fn finish(&self) {} } +struct Decoy; +impl Decoy { fn finish(&self) {} } +fn run(builder: &Decoy, builders: &[Actual]) { + if let Some(builder) = builders.first() { builder.finish(); } + else { builder.finish(); } + builder.finish(); +} +"; + let resolved = compass_resolve::resolve(&[extract("src/lib.rs", source)], + &HashMap::from([("src/lib.rs".to_owned(), String::from_utf8(source.to_vec()).expect("source"))])); + let decoy = resolved.nodes.iter().find(|node| node.string("qualified_name") == "crate::Decoy::finish") + .expect("Decoy method"); + let sites = resolved.edges.iter().filter(|edge| edge.target == decoy.id && edge.string("relation") == "calls") + .map(|edge| edge.string("source_location")).collect::>(); + assert_eq!(sites, BTreeSet::from(["L7".to_owned(), "L8".to_owned()])); +} + +#[test] +fn rust_indexed_receivers_publish_exact_cross_file_calls_and_occurrences() { + let api_source = "pub struct Entry; impl Entry { pub fn close(&self) {} }"; + let caller_source = "use crate::api::Entry; struct Store { entries: Vec, cursor: usize } impl Store { fn close(&self) {} fn run(&self) { self.entries[self.cursor].close(); self.entries[0].close(); } }"; + let sources = HashMap::from([ + ("src/api.rs".to_owned(), api_source.to_owned()), + ("src/lib.rs".to_owned(), caller_source.to_owned()), + ]); + let extractions = vec![extract("src/api.rs", api_source.as_bytes()), extract("src/lib.rs", caller_source.as_bytes())]; + let resolved = compass_resolve::resolve(&extractions, &sources); + let reversed = compass_resolve::resolve(&extractions.into_iter().rev().collect::>(), &sources); + assert_eq!(universal_edges(&resolved), universal_edges(&reversed)); + let run = resolved.nodes.iter().find(|node| node.string("qualified_name") == "crate::Store::run").expect("run"); + let close = resolved.nodes.iter().find(|node| node.string("qualified_name") == "crate::api::Entry::close").expect("Entry.close"); + let calls = resolved.edges.iter().filter(|edge| edge.source == run.id && edge.string("relation") == "calls").collect::>(); + assert_eq!(calls.len(), 2, "{calls:#?}"); + let mut actual_ranges = Vec::new(); + for call in calls { + assert_eq!(call.target, close.id, "{call:#?}"); + assert_eq!(call.string("confidence"), "EXTRACTED"); + assert!(call.string("extractor").contains(".universal")); + assert_ne!(call.string("resolution_rule"), "deferred-receiver"); + let start = call.attributes["start_byte"].as_u64().expect("start") as usize; + let end = call.attributes["end_byte"].as_u64().expect("end") as usize; + actual_ranges.push(&caller_source[start..end]); + } + actual_ranges.sort(); + assert_eq!(actual_ranges, ["self.entries[0].close", "self.entries[self.cursor].close"]); +} + +#[test] +fn rust_unsupported_index_receivers_never_capture_same_named_methods() { + for source in [ + "struct Entry; impl Entry { fn close(&self) {} } struct Vec(T); impl Vec { fn close(&self) {} } fn run(entries: Vec) { entries[0].close(); }", + "struct Entry; impl Entry { fn close(&self) {} } struct Custom(T); struct Store { entries: Custom } impl Store { fn close(&self) {} } fn run(store: &Store) { store.entries[0].close(); }", + "struct Entry; impl Entry { fn close(&self) {} } fn run(entries: Vec, n: Unknown) { entries[n].close(); }", + "struct Entry; impl Entry { fn close(&self) {} } fn run(entries: Vec) { entries[..].close(); }", + "struct Entry; trait A { fn close(&self); } trait B { fn close(&self); } impl A for Entry { fn close(&self) {} } impl B for Entry { fn close(&self) {} } fn run(entries: Vec) { entries[0].close(); }", + ] { + let resolved = compass_resolve::resolve(&[extract("src/lib.rs", source.as_bytes())], &HashMap::from([("src/lib.rs".to_owned(), source.to_owned())])); + let run = resolved.nodes.iter().find(|node| node.string("qualified_name") == "crate::run").expect("run"); + for call in resolved.edges.iter().filter(|edge| edge.source == run.id && edge.string("relation") == "calls") { + assert_eq!(call.string("resolution_rule"), "deferred-receiver", "{source}\n{call:#?}"); + } + } +} + +#[test] +fn rust_indexed_parameter_fields_never_bind_the_container_method() { + let source = "struct Entry; impl Entry { fn close(&self) {} } struct Store { entries: Vec } impl Store { fn close(&self) {} } fn run(store: &Store) { store.entries[0].close(); }"; + let resolved = compass_resolve::resolve(&[extract("src/lib.rs", source.as_bytes())], &HashMap::from([("src/lib.rs".to_owned(), source.to_owned())])); + let run = resolved.nodes.iter().find(|node| node.string("qualified_name") == "crate::run").expect("run"); + let target = resolved.nodes.iter().find(|node| node.string("qualified_name") == "crate::Entry::close").expect("Entry.close"); + let calls = resolved.edges.iter().filter(|edge| edge.source == run.id && edge.string("relation") == "calls").collect::>(); + assert_eq!(calls.len(), 1, "{calls:#?}"); + assert_eq!(calls[0].target, target.id); + assert_eq!(calls[0].string("confidence"), "EXTRACTED"); +} diff --git a/docs/design/code-graph-v1-qualification.md b/docs/design/code-graph-v1-qualification.md index 5a9a9c827..36fab6f7a 100644 --- a/docs/design/code-graph-v1-qualification.md +++ b/docs/design/code-graph-v1-qualification.md @@ -1,7 +1,7 @@ # Compass code graph v1 qualification Status: executable release gate -Contracts: `compass.graph/1` and `compass.code-graph-qualification/2` +Contracts: `compass.graph/1` and `compass.code-graph-qualification/3` ## Release claim @@ -15,6 +15,8 @@ The checked-in manifests require: family, including route operation, normalized path, source, handler kind, handler language, relationship stage, resolution, and provenance; - executable near-match negatives that must not publish exact framework routes; +- source-reviewed independent route groups that must retain route nodes in + both files while publishing no containment from the first group to the second; - an observed production producer for every one of the 45 node kinds and 28 edge kinds; - an inventoried file, language, and current extractor version for every @@ -31,6 +33,34 @@ compatibility, source bounds, known producers, direct and heuristic provenance, candidate bounds, external-placeholder scope, deferred placeholder wiring, non-recursive self-loops, and unresolved global hubs. +Manifest version 3 adds required `routeContainmentNegatives`. Each entry names +two source files and records the source-based reason for their independence. +Both files must have route nodes; a missing endpoint is a failure, not an absence +success. The assertion forbids directed `contains` edges regardless of claimed +confidence. The graph and summary schema majors are unchanged. + +The September 26 hierarchy correction removed 19 false containment records from +the qualification fixture graph. The topology policy was recalibrated by adding +each measured before/after metric delta to its existing bound, retaining the +previous margin. Counts alone do not validate edge meaning or community quality. +The [fixture review](../../benchmarks/agent_query/route_hierarchy_fixture_review.json) +records all removed identities, source hashes, and policy changes; eight new +semantic negatives reject the former links independently of those counts. +That route-hierarchy checkpoint still failed one of these negatives: +the directory-order lookup makes sibling `/tanstack` and `/home` modules a +parent-child pair. The subsequent framework-specific correction removes the +remaining 12 unsupported file-route records from identical original sources. +The negative manifest now covers 18 source-file pairs. Two explicit Next layout +fixtures separately add four expected layout relationships, checked as an exact +set by the frontend fixture gate. The +[follow-up review](../../benchmarks/agent_query/semantic_route_parent_fixture_review.json) +records both identical-input comparisons and the fixture-only delta, along with +mutation checks and topology bound adjustments preserving their prior margins. +The complete fixture gate passed for commit `c20db15b`, including the release +frontend checks. Historical +pinned frontend hierarchy scorecards are invalidated until their sources are +re-reviewed, so their prior counts cannot establish current qualification. + ## Command Run the complete offline fixture gate from the repository root: diff --git a/docs/implementation/agent-query-evaluation-2026-09-23.md b/docs/implementation/agent-query-evaluation-2026-09-23.md index ee0ad125f..0b5bb4715 100644 --- a/docs/implementation/agent-query-evaluation-2026-09-23.md +++ b/docs/implementation/agent-query-evaluation-2026-09-23.md @@ -1,10 +1,21 @@ # Agent query evaluation: five repositories, five languages +> Audit correction, 2026-09-26: the original `compass.agent-query-run/1` +> graph-anchor scorer ignored the requested symbol and credited any Compass +> node whose source span covered the requested line. A module could therefore +> stand in for a missing declaration. The anchor counts below must not be used +> as evidence of declaration coverage until replayed with the corrected v2 +> scorer. The source-backed ratios also measure metadata presence, not source +> correctness. Historical query pass counts are text-oracle results on this +> suite, not a current-release or population-wide accuracy claim. See the +> [continuing audit](code-graph-intelligence-audit-2026-09-26.md). + ## Result -Compass answers the reviewed agent questions more accurately and publishes a -better-anchored graph than Graphify on this suite, but it still spends more -tokens per answered question. The evaluation ran on 2026-09-23 against Compass +The historical text oracle credited more Compass responses on this suite, +with higher token estimates per passing response. Its graph-anchor comparison +is invalidated by the scorer defect described above; these results do not +establish better graph correctness. The evaluation ran on 2026-09-23 against Compass commit `3fd246dc` plus the fixes in this change, and Graphify `0.9.36`. | Metric | Compass | Graphify | diff --git a/docs/implementation/code-graph-intelligence-audit-2026-09-26.md b/docs/implementation/code-graph-intelligence-audit-2026-09-26.md new file mode 100644 index 000000000..57c4ed6dc --- /dev/null +++ b/docs/implementation/code-graph-intelligence-audit-2026-09-26.md @@ -0,0 +1,4908 @@ +# Code graph intelligence audit: 2026-09-26 + +## Status and acceptance criteria + +Broad superiority over Graphify is **unproven**. The objective covers hub +analysis, code graph correctness, queries, explanations, navigation/path +finding, clusters and communities. A focused text-recall score cannot establish all of those properties. + +| Requirement | Evidence needed | Current evidence | +| --- | --- | --- | +| Reliable hub analysis and god-object diagnosis | Declaration-aware candidates, stable rankings, independently reviewed responsibility defects and negatives | Five hub defects fixed. The declared release-server follow-up admits both graphs for all eight reviewed classes, but neither tool returns any of the four positive classes at cutoffs 10/50/100. The selected Go/Python/Rust source-first panel checks retrieval and stored degree, including a Graphify-only `PeerAuth` top-100 hit. Class-only degree still retrieves 0/4 Java positives for either tool. Typed member evidence exposes stored methods, fields and own-field contacts; the later Go field correction changes ranks in rebuilt graphs but does not supply a classifier. God-object quality remains unproven. | +| Accurate code graph | Reviewed declaration and relationship precision/recall, direction, occurrences, unresolved/ambiguous cases | Native fixes and source-first audits are recorded below. The latest compiler-backed jsoup census verifies 3,115/3,785 ordinary field occurrences and 368/529 enum occurrences for Compass versus 0 for Graphify. All 3,483 returned in-cohort contacts agree with the compiler. Eight rated Java classes have 95/95 direct methods and 65/65 direct fields as unique Compass nodes versus 90/95 methods and 0/65 field nodes in Graphify's frozen graphs. In one pinned Go repository, independent parser censuses find 993/993 named struct fields and 2,742/2,742 exact direct receiver-field contacts in the candidate Compass graph versus zero under each matching frozen-graph join. The 1,908 other new field-reference edges remain uncredited. These selected results do not establish cross-language or whole-graph precision. | +| Better query answers | Held-out equivalent questions, independent source judgments, precision and recall | Five-language development suites, source-first fd questions and panel-A reviews expose real wins and misses. A new source-first Go/Python/Rust selected panel records 9/12 versus 8/12 text passes and 9/12 versus 6/12 source-supported passes; it is too small and selected to confirm representative superiority. | +| Better explanations | Correct target, supported responsibility claims, source provenance, callers/callees and explicit uncertainty | The common source-order workflow at an 8,000-byte quota retrieves 14/20 reviewed facts for Compass versus 15/20 for Graphify; results depend on quota and retrieval policy. This evaluates available evidence, not authored explanation correctness. | +| Better navigation and walks | Valid ordered edges, direction, hop bounds, alternatives, ambiguity and negative cases | The shared public-neighbor workflow finds source-supported static call paths on 4/5 known questions for Compass versus 0/5 for Graphify. Graphify's native Click path success remains in a separate control. No runtime-feasibility or held-out claim follows. | +| Useful clusters and communities | Reviewed functional responsibilities, membership and boundary correctness, useful cross-community navigation | Membership, co-location and partition-change diagnostics exist. They do not establish functional cohesion, responsibility boundaries or superior communities. | +| Fair efficiency comparison | Same successful tasks, repeated timings, explicit resource/token accounting and environment provenance | The shared path workflow consumes 72 requests / 1,558,220 bytes for Compass versus 38 / 11,001 for Graphify, with different outcomes and public identity capabilities. The largest of four SQL files improves in repeated release timings, but the first complete-source candidate observation is longer (280.053 s versus 193.966 s). The separate registered repeat completes all six runs with identical partial graphs and medians of 204.082 s candidate versus 215.288 s baseline (ratio 0.948). Timing variation remains unexplained; no general efficiency win is established. | +| Independent confirmation | Unseen repositories/questions evaluated after freezing the final candidate and scoring rules | Three previously unused Go/Python/Rust checkouts were pinned and 12 selected source-first questions registered before both tools ran. Their narrow direct-call review is recorded below. Broad final-candidate confirmation remains open; preserve all competitor wins, unavailable outcomes and source-oracle corrections. | + +Current evidence summaries are in the +[original Blob audit](../../benchmarks/agent_query/mlcq_god_audit_review.json), +[larger-artifact follow-up](../../benchmarks/agent_query/mlcq_admission_followup_review.json), +[release-server Blob follow-up](../../benchmarks/agent_query/mlcq_release_followup_review.json), +[original Java field census](../../benchmarks/agent_query/java_real_field_review.json), +[Java enum follow-up](../../benchmarks/agent_query/java_enum_access_review.json), +[Java dotted-owner follow-up](../../benchmarks/agent_query/java_dotted_owner_review.json), +[paired explanation study](../../benchmarks/agent_query/paired_member_focus_review.json), +[shared path workflow](../../benchmarks/agent_query/public_neighbor_path_review.json), +[SQL prefix diagnosis](../../benchmarks/agent_query/sql_prefix_scan_review.json) +and [release SQL cache diagnosis](../../benchmarks/agent_query/sql_regex_cache_review.json). +The chronological sections below retain earlier checkpoints; their counts and +claims apply to the stated binary, graph and protocol rather than the latest +branch automatically. + +“God mode” is interpreted here as the existing `god_nodes` hub analysis. +It orders connected candidates by degree; it does not measure responsibility, +cohesion, or whether a high-degree declaration needs refactoring. + +## Reproduced production defects + +`crates/compass-graph/src/analyze.rs` previously discarded names such as +`Path` and `Counter` even when they were project declarations with source +locations. It also used graph input order to break degree ties, and returned +isolated declarations when enough results were requested. + +The fix retains those source-located declarations, breaks ties by stable node +ID, and omits degree-zero candidates. Two regression tests failed before the +fix; all ten tests in `analyze_coverage` passed afterward. An MCP regression +checks the rendered ordering and top-N behavior. Public fields and degree +semantics are unchanged; candidate lists can change. + +A fourth defect treated every `.method()` label as a file even when the node +had canonical kind `method`, and allowed explicitly typed files with descriptive +labels into the hub list. The regression returned `[caller, file]` where the +source-located candidates were `[method, caller, function]`. Recognized canonical +kinds now take precedence; the label heuristic remains for legacy unknown kinds. +The updated graph-analysis integration suite passes all eleven tests. + +A fifth defect excluded typed functions whose source filename has no extension. +An MCP diagnostic using the release binary omitted `prepare()` in `bin/launch`, +but included the identical node when its source was `bin/launch.sh`. A native +regression reproduced the failure. Canonical structural kinds now take +precedence over the concept filename heuristic when the source path is nonempty. +Nodes without a source remain excluded, and unknown legacy kinds retain the +existing fallback. The graph-analysis integration suite passes all twelve tests. + +Remaining limitation: legacy file/concept/JSON-noise eligibility still uses heuristics. +Degree combines relationship kinds and counts directed endpoint pairs, not +responsibilities or call-site occurrences. A popular infrastructure type may +be a legitimate hub. A separate design diagnosis requires reviewed evidence +and an explicit metric contract before it can be claimed. + +## Reproduced navigation defects + +Two adversarial native regressions exposed problems in the typed `node` search: + +1. Keeping only the cheapest arrival at each node loses feasible paths under a + hop limit. For `s -> a -> b -> t` (cheap calls) and `s -> b` (costlier + reference), a two-hop request incorrectly returned no path. The search now + retains nondominated cost/depth states and reconstructs the exact state path. +2. A node rejected by the node budget was inserted into the admitted set before + the budget check. A second visit could admit it without paying, leaking that + rejected node into a truncated response. Admission now happens only after + successful budget consumption. + +Both tests failed before the changes and passed afterward. The full traversal +integration suite passes 11/11, including JSON and SQLite checks, record-order +permutations, two/three-hop expectations and a cycle under a five-edge work +budget. Positive-cost cycles are dominated rather than repeatedly expanded. +All search labels and predecessor records remain bounded by examined edges. +The CLI contract regression also passed, within the 34-test CLI query suite. + +A third navigation defect was then reproduced in the separate undirected +`path` implementation: it retained only one arrival per node and made the same +incorrect no-path claim under a two-hop bound. The release CLI and a native +regression both reproduced it. That implementation now also keeps cost/depth +states and reconstructs their exact predecessors. Its two ranking passes each +cap adjacency work at 1,000,000 entries and cumulative path keys at 16 MiB; +exhaustion is a command error, not a no-path claim. + +An independent oracle enumerates all simple paths through 729 four-node graphs, +where each of six pairs is absent, a cost-1 call, or a cost-4 reference. Both +engines are checked at depths one through three (4,374 queries). The directed +engine sees DAGs; the undirected engine also sees cycles. The oracle compares +reachability, minimum cost and hop count, and validates rendered/native edge +chains and directions. It reproduced the legacy defect at graph 113, depth 2. +This is exhaustive coverage of that small family, not a general graph proof or +independent real-source extraction evaluation. + +## Evaluation corrections + +The v1 graph-anchor scorer ignored the requested symbol. For Compass, any +node span covering a reviewed line could earn credit, including a whole +module. For Graphify, any name at that line could earn credit. Fourteen +negative subcases reproduced false positives in the old scorer. + +Run schema v2 records `exact-file-start-terminal-symbol/1`: exact file, +exact declaration start, and case-sensitive terminal name on both tools. +Qualification/signature text is stripped symmetrically; this does not verify +owner identity or parameter types. Missing anchors are listed for review. +Source-located ratios are metadata counts, not verified source correctness. + +The runner also previously reused graph files by directory existence and +reported the current executable identity. A changed tool could be credited +with an old graph. Runs now build fresh artifacts beneath their own run +directory and refuse existing run IDs/artifact directories. They check clean +pinned Git state before extraction and after querying, retain graph digests +and build logs, and compare executable identities before/after the run. +Executable-file hashes do not cover Python imports or the full environment. + +A response containing the requested strings could pass even if its process +failed or timed out. Such executions now fail independently of text matching. +Capture now enforces a 16 MiB per-stream disk cap during execution; limit +failures cannot pass. An invalid snapshot pointer cannot silently select an +unpublished graph. Unpaired token medians no longer produce a cost-winner claim. +The existing text oracle remains a recall proxy: mentioning both endpoints +does not prove a valid path, and mentioning a caller does not prove its edge. + +The historical report is annotated and its unsupported graph-quality conclusion +withdrawn. Its original raw artifact directories are unavailable on this host, +so the historical graph scores have not been recalculated. Do not substitute +newer tool outputs for that missing historical evidence. + +## Available comparison inputs + +Cobra, Flask, Gson and Zod have clean working checkouts at the suite commits. +The old `doctor` accepted Axum's bare Git repository merely because HEAD matched; +that directory has no source tree to extract. The runner and doctor now reject +bare repositories. A separate Axum working checkout was created and verified at the suite commit. +Existing checkouts remain read-only. +The installed Compass reports 0.3.29 and cannot represent this working branch. +Installed Graphify reports 0.9.67; the old report used 0.9.36. The separately +available Graphify source checkout is at `26b02b5e3430e4ab85dd7e72c7b98836d8e65c48` +(version 0.9.63), so its implementation is not assumed identical to 0.9.67. + +## Verification ledger + +- Graph analysis integration suite: 12/12 passed after all five hub fixes. +- Benchmark Python unit suite: 38/38 passed, including ten path-auditor tests. +- CLI query contract suite: 35/35 passed; product suite: 9/9 passed. +- After the separate legacy `path` fix: query library 178/178, exhaustive oracle + 1/1 (4,374 queries), traversal integration 11/11, legacy query coverage 6/6, + CLI query suite 35/35 and product suite 9/9 passed. This includes an actual + work-limit CLI failure with empty stdout. These graph/path regressions and + the competitor-free Python scorer tests are now explicitly wired into CI. +- Query relevance qualification: 5/5 passed, including the 500 synthetic cases. +- Workspace Clippy (`--workspace --lib --bins --locked -- -D warnings`): passed + after all eight production corrections. The new query integration tests also + pass a dedicated Clippy run with warnings denied. +- Rust formatting check: passed. +- Product boundary script: passed; competitor tooling stays outside production. +- Workspace native tests (`--workspace --lib --bins --locked`): 1,083 passed, + zero failed, two ignored after all eight production corrections, including + the three new MCP regressions. +- Code-graph fixture qualification: initial native stages passed; the React + oracle then failed because locked TypeScript dependencies were absent. + After `npm ci --ignore-scripts`, the complete final gate passed (exit 0), + including deterministic production updates, semantic/topology assertions, + Markdown quality, and independent React source-anchor checks at the six-defect + checkpoint. The complete gate also passed at the seven-defect checkpoint + after the extensionless-source fix. The built release binary still reproduces + the separate legacy `path` defect; that run is not evidence for the eighth fix. +- First v2 replay: complete but invalidated for comparative scoring (see below). +- Corrected v2 replay `v2-corrected-02`: complete, after all three evaluation + corrections. It uses the debug binary and recorded source patch from before + the explicit-kind hub and typed-trail fixes, with Graphify 0.9.67. +- Release replay `v2-release-03`: complete at source commit `8a13928e`, including + the six original production fixes, before the extensionless-source correction. + Scores and paired token estimates match the corrected debug replay. Its + source-grounded path audit passes 5/5 per tool. All 92 previously recorded + Graphify source/data file hashes remain unchanged after the run; this does not + pin every transitive dependency. +- Explicit fixed-graph regression replay `query-only-04`: the current debug + query binary passes all 50 text oracles on the retained `v2-release-03` + Compass graphs and all five source-grounded path witnesses. Source state and + graph hashes were verified before/after querying. This checks query + compatibility; it is not a new extraction or comparative performance run. + +## Findings from the first fresh replay + +The raw evidence is retained under the `code-graph-audit-20260926` evaluation +workspace, run `v2-fresh-01`, with a separate invalidation record. Before scoring +it as a comparison, three issues required correction (now implemented): + +- Graphify 0.9.67 deliberately exits 1 when `explain` returns an ambiguity list. + Its installed `cli.py` and the captured Cobra, Flask and Gson responses confirm + this. The new blanket nonzero-exit rejection wrongly penalizes a correct + pick-list outcome. The scorer now permits this explicit contract only when the + candidate oracle passes; actual command failures and timeouts still fail. +- Gson's `JsonWriter.value(String)` annotation starts at line 526; its method + header is line 527. Both tools correctly locate the declaration at 526. + The reviewed anchor now uses the annotation start. These were not extraction + failures; the matching policy remains exact. +- Axum's suite uses paths relative to the `axum/` package, while the separate + checkout is the monorepo root. The corrected replay uses that package as the + source root, and preflight now rejects roots missing reviewed files. + +The source patch and Graphify distribution file hashes were retained alongside +this run. Timings from the debug Compass executable are not release-performance +evidence. Preliminary score totals must not be presented as accuracy results. + +## Corrected focused comparison + +The corrected replay uses the exact source roots and reviewed declaration starts +and accepts Graphify's documented ambiguity exit status. Both executable +identities remained unchanged and all five source roots remained clean/pinned. +Its suite and runner copies, tool hashes, graphs, logs and raw responses are +retained under `runs/v2-corrected-02` in the evaluation workspace. + +| Measured item | Compass | Graphify 0.9.67 | +| --- | ---: | ---: | +| Text-oracle passes, all rows | 50/50 | 44/50 | +| Non-excerpt rows | 45/45 | 44/45 | +| Source-excerpt rows | 5/5 | 0/5 | +| Exact reviewed declaration anchors | 15/15 | 14/15 | +| Median estimated tokens on 44 shared passes | 308 | 111.5 | + +The largest difference is a source-excerpt feature gap: Graphify's `explain` +returns metadata rather than the requested declaration text. Those five rows +are separated above instead of treating them as five independent relationship +accuracy wins. Among the other 45 rows, the difference is one Axum file-path +lookup. Both path inputs resolve to the same unrelated test module. A follow-up +using the full `src/routing/...` paths produced the same failure; the raw retry +is retained as `axum-exact-path.stdout`/`.stderr`. This is evidence of that file +lookup failure, not proof that Graphify cannot traverse an explicit-ID path. +Its missing Zod anchor is the implementation at `classic/schemas.ts:303`; its +graph retains the interface declaration at line 72 instead. + +Graphify has the lower paired token estimate. These are bytes/4 estimates, not +measured model tokens. No speed comparison is claimed: Compass used a debug +binary, other native checks ran concurrently, and timings were single samples. +The later release checkpoint reproduced every score and paired token median +in the table. Its single-run paired median latency was 259.5 ms for Compass and +216 ms for Graphify; this also does not establish a repeatable speed advantage. +The release executable and build log were retained with a source-commit record +and SHA-256, and both tool identities were unchanged across the replay. +All 50 questions are an existing development suite. The six extra passes do +not establish held-out precision, execution-path accuracy or overall superiority. +The subsequent native trail defects demonstrate gaps this text suite misses. +The separate 500-query relevance qualification runs AI-reviewed synthetic +phrasing-equivalence cases over the shared fixture graph, as its test and +corpus notes explicitly state. It is useful regression coverage, not 500 +independent real-repository judgments or production telemetry. + +## Source-grounded path review + +The five positive path responses from `v2-corrected-02` were audited separately +against the printed ordered hops, unique graph node identities, semantic edge +direction, relation, declaration anchors, and reviewed source occurrences. +Both tools pass all five navigation witnesses in `path-audit-02.json`. +This is post-output development review, not held-out precision or recall. + +The first diagnostic incorrectly required Gson's construction line 801 even +when allowing the coarse `references` relation. Graphify's actual edge is a +valid return-type reference at line 797. The corrected witness accepts that +site for `references` and line 801 for `instantiates`; Compass returns the +latter. The report preserves this specificity difference. The earlier +`path-audit-01.json` remains as an oracle-error diagnostic, not a competitor +failure. Zod's route uses reverse/forward file containment in both tools; +it supports navigation but proves no runtime call chain. + +The checked-in auditor rejects missing/reversed edges, wrong occurrences, +wrong declarations, ambiguous labels, invalid identities, endpoint-only text, +and inconsistent hop counts. It checks recorded graph/suite digests and pinned +source state, bounds inputs, and records hashes for its own code, witnesses, +and captured responses. It currently audits successful positive path rows; +unreachable, ambiguous, truncated and limit outcomes still need a broader +source-reviewed corpus. + +## Synthetic boundary diagnostics + +Separate shared-graph cases were recorded before executing either tool, with +raw outputs and exact arguments retained under `path-boundary-diagnostic` in +the evaluation workspace. These isolate query behavior from extraction quality. + +| Case | Compass release checkpoint | Graphify 0.9.67 | +| --- | --- | --- | +| Two disconnected components | Explicit no path | Explicit no path | +| Absent endpoint | Nonzero no-match error | Nonzero no-match error | +| Two `Worker` nodes in different components | Lists both IDs and refuses a path | Warns on stderr, selects one, returns its path | +| Exact ID in the disconnected component | Explicit no path | Explicit no path | +| Reverse traversal of a stored call | Preserves reverse arrow | Preserves reverse arrow | +| Both endpoints resolve to the same node | Explicit refusal | Explicit refusal | + +The ambiguity row records a policy difference: Graphify does disclose the +ambiguity, but still picks an endpoint. It must not be described as hiding the +warning. The two hop-limit cases are Compass-only contract checks because +Graphify exposes no documented hop-bound option. A one-hop request correctly +returns a bounded no-path result; the two-hop request reproduced the third +navigation defect above. These are not extra head-to-head accuracy wins. + +## Separate source-first fd sample + +The inputs in `benchmarks/agent_query/suite_fd.toml` and +`edge_witnesses_fd.json` were committed at `fe1a1fb5` before either tool was +run on this checkout. Source selection used `sharkdp/fd` at +`b422e5d8c9cffaa1ae43ba68e7b97a60fb3e8ae5`, with a separate clean working +checkout because the existing repository was bare. The sources stayed pinned +and clean before/after extraction. This is a source-first selected sample, +not a representative held-out corpus. It becomes development evidence once +used to guide fixes. + +The fresh run `fd-source-first-01` uses the frozen debug Compass executable +with all eight preceding fixes. It records both graph digests, executable +identities, build logs and every query response. It is not performance evidence. + +| Measured item | Compass | Graphify 0.9.67 | +| --- | ---: | ---: | +| Predeclared text-oracle passes | 11/12 | 9/12 | +| Non-excerpt passes | 10/11 | 9/11 | +| Exact reviewed declaration anchors | 5/5 | 5/5 | +| Predeclared positive direct-call pairs present | 10/10 | 10/10 | +| Reviewed line-level call occurrences preserved | 16/16 | 10/16 | +| Predeclared wrong-target pairs correctly absent | 2/2 | 2/2 | +| Post-output positive path witnesses | 2/2 | 2/2 | +| Median estimated tokens on eight shared passes | 227 | 88 | + +Relationship presence and occurrence preservation are different measurements. +Graphify retains one occurrence for each reviewed pair, losing six repeated +sites across four pairs. These are selected-pair results, not whole-graph +precision or recall. The positive path review confirms an adjacent directed +call and a compatible source occurrence in each graph; neither rendered path +names a particular parallel edge or proves runtime execution. + +The Compass failure is real: the `execute_batch` callees answer omits +`CommandBuilder::finish` at `src/exec/mod.rs:111`. The graph also lacks that +method's calls to `CommandBuilder::push` at line 104 and `exit_code` at line +116. The enclosing function maps constructors into a collected result, +destructures its success case, then iterates the builders. Graphify finds all +three method targets. Compass's Rust value-type collector handles function +parameters and local lets, but does not establish the loop/match/iterator +binding chain needed here. This is an extraction/resolution gap, not an +answer-rendering error. + +The same answer exposes a Graphify precision error: its call at line 97 targets +`CommandTemplate::new` (declaration line 220), although the source explicitly +calls `CommandBuilder::new` (declaration line 136). Compass targets the correct +constructor. The post-output manifest `edge_witnesses_fd_diagnostic.json` +records those five checks separately. Graphify's text-oracle pass is retained; +it does not prove every returned edge correct. + +Graphify's other text failures are the source-excerpt feature gap, a file +lookup resolving `src/exec/mod.rs` to the `Exec` declaration in +`src/cli.rs:858`, and a broad question that never returns `handle_cmd_error` +within its three budget increases. Compass needs two follow-up pages for +that broad question (1,769 estimated total tokens), so its pass also identifies +room to improve ranking and answer size. The lower paired token median remains +a Graphify advantage. + +The first generated report incorrectly describes every suite as containing +five repositories. Its original report is retained. The renderer now uses the +recorded repository count, with singular/plural regression coverage; this +wording correction changes no scores or raw observations. + +### Rust receiver correctness defect and correction + +Reducing the loop miss uncovered false-positive calls in Compass. The frozen +eight-fix executable emits `Decoy::finish` for both calls below, although the +loop call is on `Actual`: + +```rust +struct Actual; +impl Actual { fn finish(&self) {} } +struct Decoy; +impl Decoy { fn finish(&self) {} } +fn run(builder: &Decoy, builders: &[Actual]) { + for builder in builders { builder.finish(); } + builder.finish(); +} +``` + +A nested `let builder = factory();` also inherits the outer parameter's +type when the local initializer does not yield a producer-known type. +Unknown local types currently fall through the value-type lookup, while the +parameter's alias remains available to call resolution. These are +precision defects, not acceptable substitutes for unresolved evidence. +Retained reductions are under `rust-loop-diagnostic-01` and +`rust-shadow-diagnostic-02`; the latter uses a source-defined factory returning +a different declared type. + +The new edge auditor and report/input regression coverage pass 48 Python +tests. No production Rust change is included in this evaluation checkpoint; +the prior native verification ledger still describes the eight-fix executable. + +The subsequent correction is in the Rust evidence producer. Value lookup now +distinguishes an absent binding from an existing binding of unknown type. +Local bindings suppress stale parameter aliases, including loop and closure +patterns, match arms/guards, conditional lets, and let-chain guards. Binding +visibility is bounded by lexical scope and source range; initializers and else +branches keep their proper outer bindings. Destructuring records the bound +names without assigning the whole container's type to each field. If an inner +receiver's type remains unknown, its source occurrence and unresolved candidate +remain visible; no target is invented. + +A native regression failed before the fix by returning two calls to `Decoy` +where only the unshadowed outer call is valid. The expanded regression covers +ten scope/pattern forms, initializer timing, preserved typed inner calls, and +else-branch visibility. The current targeted checks pass 27 Rust language +tests, all 206 universal resolver integration tests, and 33 filesystem +contracts. Workspace and changed integration-test Clippy pass with warnings +denied. An existing needless borrow in the touched filesystem test was also +removed to allow that test target's Clippy check. + +AST cache semantics advance from 2 to 3 so warm builds cannot keep previously +incorrect relationships. A cache regression checks that version-2 facts are +discarded. This is a correction to the existing producer contract, not a new +advertised capability or a new universal-pipeline promotion. Evidence/graph +schema majors and the Rust producer capability identity remain unchanged; +historical graphs are not rewritten. + +The full workspace native baseline passes 1,083 tests with zero failures and +two ignored tests. The qualifying debug executable was copied and hashed after +its successful native build; its source snapshot, patch, and committed Rust +file hashes are retained under `shadow-fix-provenance`. The replay in +`rust-shadow-corrected-03` removes the wrong `Decoy` edge in both source +reductions while preserving exactly one valid outer call in each. The still +unproven inner receiver remains unresolved. + +Fresh extraction/query run `fd-shadow-02` preserves all 12 query outcomes, +all 16 reviewed Compass call occurrences, and both source-grounded path +witnesses. The paired token medians remain 227 versus 88 on eight shared +passes. The separate diagnostic still records the three missing Compass +loop/callback calls and Graphify's wrong constructor target. All 92 recorded +Graphify distribution-file hashes remained unchanged; this does not pin every +transitive dependency. The Compass executable is a debug build and native +qualification ran concurrently, so these timings are not performance evidence. + +Fixture qualification initially stopped at preflight because the default +parser-source bundle directory was absent. It was restarted using the complete +bundle already present in this checkout's build directory, whose language +definition hash matches the vendored manifest. The full fixture gate completed +successfully, including independent Markdown and React frontend qualification. +The release executable is frozen under `shadow-fix-provenance/compass-release` +with SHA256 `6baa1cabccdea6357ad5e9653a008efa1b384250557c1ce27278402e85399719`. + +## Natural-language interface comparison + +The preregistered `suite_ask.toml` sends identical caller/callee questions and +2,000-token budgets through Compass `ask` and Graphify `query`, with no +continuations. The ten questions reuse reviewed facts from the five-language +panel; they are interface checks, not ten independent source judgments. +Captured run `ask-paired-01` passes 9/10 selected-fact text checks for Compass +and 10/10 for Graphify. Compass's Cobra callees page omits `Find` before its +12-primary-result projection bound, even though the requested token budget +has room. Graphify wins that preregistered row. Do not change its oracle or +silently add a follow-up to erase this failure. + +Review beyond the text oracle finds seven Compass relationship headlines +attributing the answer to the wrong subject: Cobra callers, both Flask rows, +both Gson rows, Zod callees, and Axum callees. Their correct fact anchors do +not make these answers fully correct. The CLI executes parsed operands but +supplies the whole natural-language question as a query operand to the +renderer; the first node by ID then substitutes for the requested subject. +This also affects answer basis, primary ordering, and suggested next actions. +The native CLI regression reproduced the wrong subject before correction. +The CLI now passes the planner operands with their symbol/source/target roles +and retains the original question separately. The first correction passes +36 CLI query and 9 product tests, workspace Clippy, and the 1,083-test native +baseline. The expanded regression also checks a missing subject and follow-up +actions. Python benchmark tests pass 49 cases. + +Graphify exceeds the requested 2,000-token budget on four answers (Cobra +callers: 2,854; Gson callers and callees: 2,773 each; Axum callees: 3,160), +using the recorded stdout bytes/4 estimate. Each explicitly discloses the +overrun. The original selected-fact scores remain recorded; they are not +hard-budget success scores or complete precision judgments. On the nine +shared text passes, median output is 291 versus 1,210 estimated tokens. +This does not establish equal-budget correctness or performance superiority. + +The diagnostic query-only replay `ask-operands-replay-02` uses retained, +digest-checked graphs from `ask-paired-01`. Both tools now pass 10/10 text +checks, including Cobra: correct subject ordering puts its missing fact on +page one without changing the budget or oracle. Median text output is 279.5 +versus 1,439.5 estimated tokens on the ten shared passes. Additional JSON +requests compare all ten Compass ask projections with their direct commands; +those diagnostic requests are excluded from paired workflow costs. + +All ten agree with direct commands, but source review still finds two wrong +headlines in both interfaces (Zod callees and Axum callees): function labels +such as `convertSchema()` and `validate_path()` carry trailing parentheses, +and the renderer's exact-string lookup does not share the query engine's +symbol normalization. Consequently Zod still names `convertBaseSchema` and Axum still names +`validate_v07_paths` as their subjects. The first correction resolves five of +seven observed headline failures; direct-command equivalence alone cannot prove source correctness. +A separate renderer regression failed before correction. The renderer now +shares the query engine's existing normalization for case, leading dots, and +trailing empty parentheses, while exact IDs and uniqueness remain explicit. +The original run, intermediate replay, and their scores remain retained +independently. + +Final query-only replay `ask-operands-replay-03` passes 10/10 text checks for +both tools. A separate post-output subject diagnostic verifies all ten Compass +headlines and node bases against exact reviewed declaration labels, files, +and start lines (including Zod and Axum). Those witnesses are retained as +`ask-subject-witnesses.json`; they do not replace the original text oracle. +The frozen final debug executable has SHA256 +`a748d0fa8eb08fec09a43647e29be0b056a706eb986d70c47049463c9dbb123c`. +The source patch and file hashes are retained under +`ask-normalization-provenance`. Output medians remain 279.5 versus 1,439.5 +estimated tokens on the same ten passing text questions. + +The complete native run passes 1,145 tests: 1,083 workspace lib/bin tests, +36 CLI query tests, 9 CLI product tests, and 17 output integration tests; +two existing tests remain ignored. Workspace and changed integration-target +Clippy pass with warnings denied. The first expanded Clippy run found an +existing `expect_err` in the touched output test; it now returns the failed +assertion as an error. The 17-test output suite was rerun after that test-only +cleanup. Formatting, diff checks, product boundary, and 49 Python benchmark +tests pass. The full extraction fixture gate passed at the preceding receiver +checkpoint; these presentation corrections use native query/CLI tests and +retained real graphs rather than claiming a new extraction qualification. + +The fresh `v2-shadow-05` run remains 50/50 versus 44/50, with five source +excerpt availability differences and one Axum file-resolution difference. +Its five source-grounded path witnesses pass for both tools in +`path-audit-v2-shadow-05.json`. Graphify uses less output on its 44 shared +passes (112 versus 308 estimated tokens). All of these runs use a frozen +debug executable during concurrent qualification; timings are not speed +comparisons. The new ask failures demonstrate why that earlier suite is +insufficient to establish the requested superiority. + +## Shared MCP comparison across five languages + +Commit `152efdd7` records `suite_mcp.json` and the bounded stdio collector before +execution. There are 29 questions per tool on the retained five-repository +panel: graph counts, top-ten hubs, largest-community enumeration, missing +communities, calls adjacent to reviewed declarations, and four ambiguous +neighbor names. Both products expose the same MCP operations. Input node IDs +and community IDs are prepared symmetrically from the graphs and are not +counted as successful node retrieval. Sources and graph hashes are checked +before and after use. + +Graphify runs in the isolated 0.9.67 MCP environment described in the coverage +plan. Its optional SDK dependencies are separately recorded, and all 227 +compared Graphify package files match the original installation. This avoids +counting an absent optional SDK as a product failure. Full-enumeration requests +use its explicit 262,144-token allowance; Compass exposes whole-result output. +The external limits are 60 seconds per RPC, 16 MiB per response/stderr, and +64 MiB per session. These are complete-enumeration tasks, not an equal +2,000-token arm. Text bytes and actual response-wire bytes are reported +separately. Concurrent debug timings are not performance comparisons. + +All 58 RPCs completed in `mcp-paired-01`. The original run exposed two production +defects: the compact traversal projection retained community names but dropped +labeled community IDs, and `get_neighbors` selected the first ambiguous match. +The independent auditor checks source-run/graph/input/collector hashes and +captured responses against raw JSON-RPC transcripts. Its checks implement the +preregistered graph-consistency policies; these are not complete source-precision +or functional-clustering oracles. + +| Graph-consistency check | Initial Compass | Corrected Compass | Graphify in both runs | +| --- | ---: | ---: | ---: | +| Node/edge/community totals | 0/5 | 5/5 | 5/5 | +| Largest-community member multiset and count | 0/5 | 5/5 | 5/5 | +| Absent community is reported absent | 5/5 | 5/5 | 5/5 | +| Filtered neighbor direction/label/relation triples | 5/5 | 5/5 | 5/5 | +| Ambiguous neighbor lookup preserves ambiguity | 0/4 | 4/4 | 4/4 | + +The first two failures share one cache defect; they are not ten independent +implementation bugs. Native regressions failed before both corrections. +The model now retains the community ID and display name in its compact cache, +and advances cache magic to `TRAILT05` so previously deficient `TRAILT04` +projections rebuild. Cold, warm, and stale-cache regression cases pass. +MCP now returns a stable candidate list (at most 20 plus an omission count) +with source paths and exact IDs. Exact IDs preserve case. Graph schemas and +historical artifacts remain unchanged. + +Replay `mcp-paired-02` uses the same questions, source graphs, and Graphify +environment. It rebuilds the old Compass traversal caches automatically and +passes the graph-consistency checks above. The corrected debug binary SHA256 +is `4b3b755fd8a3e8d74c4eac8c336f719506dcfee9f8ac89cea2eafbe181042efb`; +source/file hashes are under `mcp-corrections-provenance`. No oracle was retuned +to replace the initial failures. Reports and transcripts for both runs remain. + +The hub outputs expose another unresolved limitation. Only 29/50 Compass and +37/50 Graphify entries have labels that uniquely identify a graph node. +All of those identifiable entries have matching independently computed degree; +the remaining entries are unverified because their labels collide. Matching a +label plus its expected degree to choose a convenient identity would conceal +this limitation. Both MCP outputs need stronger identity presentation for +reliable navigation. These counts do not verify ranking eligibility or source +correctness, and high degree does not establish excessive responsibility or +poor cohesion. Zod's highly connected module nodes also need explicit role +interpretation before any design conclusion. + +Verification after the two corrections: 1,148 native tests passed (1,086 +workspace lib/bin tests plus 36 CLI query, 9 product, and 17 output tests), +zero failed, two ignored. Workspace Clippy passes with warnings denied. +The benchmark/transport/auditor suite passes 65 Python tests, including +membership mismatches, ambiguous labels, direction errors, parallel edges, +self-loops, transport timeouts/byte limits, and unsupported-platform handling. +Formatting, diff checks, and the native product boundary pass. Full extraction +fixture qualification remains the preceding receiver checkpoint; this change +is verified through native cache/MCP regressions and the retained-graph replay. + +### Neighbor filtering diagnostic + +The five selected neighbor questions missed another defect: MCP grouped each +neighbor before applying the relation filter. A preceding containment or +reference edge could therefore hide a later call between the same endpoints. +Both incoming and outgoing lookups were affected. A post-output source review +of Flask `tests/test_helpers.py:275–281` establishes the nested `index` to +`generate` call. The retained graph contains both containment and call edges, +but both filtered MCP lookups returned empty adjacency before correction. +This diagnostic is separate from the preregistered comparison scores. + +The filter now precedes grouping. Native regression coverage exercises both +directions, both edge orders, and duplicate calls. The tool continues to return +distinct neighbors; it does not promise call-site multiplicity. The unchanged +Flask source and graph now produce the correct outgoing and incoming call in +`mcp-filter-diagnostic-02`, with original failures retained in +`mcp-filter-diagnostic-01`. Similar edge-order candidates exist elsewhere in +the panel, but their presence alone is not source-accuracy evidence. + +The final filter executable is retained under `mcp-filter-provenance`, SHA256 +`367dfd78301d9c3914049b8c134933dce91934003eafbc2c144d9abd760a7e1a`. +Native verification passes 1,149 tests, zero failed, two ignored; workspace +Clippy passes with warnings denied. Formatting, diff checks, and the product +boundary also pass. This is a query correction on retained graphs; no new +extraction or performance claim follows. Replay `mcp-paired-03` completes all +58 RPCs; `mcp-audit-03.json` confirms the same graph-consistency results as +`mcp-paired-02` for both tools. The separate Flask diagnostic is the evidence +for the additional filter correction. + +### Hub identity and direct navigation + +The first hub responses omitted the exact IDs already retained by Compass's +analysis layer. MCP now adds ID/source/location text and the versioned +`compass.mcp.hubs/1` structured result inside its existing transport envelope. +It preserves ranking and degree semantics. Labels are sanitized for display; +exact IDs are JSON-escaped in text and retained unchanged in structured data. +Missing source fields remain null. The public description now describes +topology candidates rather than asserting that connectivity proves a core +abstraction or design defect. + +A failed-before native regression covers duplicate labels, legacy source +locations, typed anchors, and an ID containing quotes, a backslash, and a +newline. Its follow-up also exposed lookup trimming an ID before checking exact +identity. Exact lookup now precedes the existing trimmed fallback; a separate +query-layer test verifies IDs distinguished by surrounding whitespace. +The transport regression checks that clients receive structured hub results. + +`mcp-paired-04` repeats all 58 original RPCs. All previous graph-consistency +checks remain passing for both tools. All 50 Compass hub IDs now resolve to +unique graph nodes, with independently matching degrees and source anchors. +Graphify's MCP result still provides label-only identity: 37/50 entries can be +identified uniquely from their display labels. Its CLI JSON interface supplies +IDs, so this is specifically a finding about these MCP responses. Neither +count proves complete top-N eligibility, source precision, or design quality. + +Commit `7c554c2f` adds a separate development diagnostic before its follow-up +requests: use each returned hub ID when available, otherwise the returned +label, for exactly one `get_neighbors` request. The graph may be read by the +oracle but never to substitute a request ID. Explicit ambiguity is safe and +is not counted as completed direct navigation. The same full-enumeration +bounds apply to both tools. Additional disambiguation steps and the alternative +Graphify CLI workflow are outside this diagnostic. + +| Repository | Compass before IDs | Compass with IDs | Graphify in both runs | +| --- | ---: | ---: | ---: | +| Cobra | 2/10 | 10/10 | 7/10 | +| Flask | 2/10 | 10/10 | 5/10 | +| Gson | 0/10 | 10/10 | 7/10 | +| Zod | 0/10 | 10/10 | 4/10 | +| Axum | 0/10 | 10/10 | 5/10 | +| Total | 4/50 | 50/50 | 28/50 | + +Runs `hub-navigation-02` and `hub-navigation-03` each capture all 100 follow-up +RPCs without execution failures. The oracle checks seed identity, response +headline, and the multiset of displayed direction/neighbor-label pairs after +grouping by distinct neighbor. It does not validate individual neighbor IDs, +all parallel relations, source occurrences, or source accuracy. Both products' +broader name matching can be ambiguous even when a case-sensitive display +label is unique. The initial `hub-navigation-01` attempt stopped before +follow-up RPCs because the collector resolved Python's virtual-environment +symlink, losing its package environment. Commit `e3652ae3` fixes that harness +error; it is not counted as a product failure. + +The five hub responses plus 50 follow-ups total 593,962 text bytes / 626,338 +wire-response bytes for corrected Compass, versus 265,393 / 272,996 for +Graphify. These totals include different completion counts and different +returned hub sets, and are not an efficiency win. Initialization/setup +transcripts are retained separately. A separate transcript integrity pass +checks all 200 follow-up requests and responses against their recorded +arguments, text, and byte counts. Timings remain unsuitable for speed claims. + +The frozen executable in `mcp-hubs-provenance` has SHA256 +`0c54260eb380c08c18a14c7044a1abce932ede56114d6a515223ab19e1b7be93`. +Verification passes 1,198 native tests, zero failed, two ignored, including +the broader `coverage_paths` suites and the new identity regressions. +Workspace and `coverage_paths` Clippy pass with warnings denied. All 72 Python +benchmark tests, formatting, diff checks, and product boundary pass. Full +extraction fixture qualification remains the receiver checkpoint; this change +adds query/MCP presentation and exact-ID lookup verification on retained graphs. + +### Source-role diagnostics from the returned hubs + +Two post-output reductions in `hub-source-diagnostics-01.json` retain pinned +source excerpts, file and graph hashes, node records, and selected edges: + +- Compass's Zod `to-json-schema.test` module spans the test suite, not a + production object. Its distinct-pair degree is 789. Its 1,156 incident edge + records include 789 containment, 321 reference, and 46 call records, with + overlap between endpoint pairs. Containment-driven degree does not establish + excessive responsibility. +- Graphify's Axum hubs `S` at `src/service_ext.rs:47` and `T` at + `src/handler/mod.rs:272` are generic implementation subjects. Their degrees + are 153 and 87, predominantly reference edges. Two reviewed edges target + the ServiceExt implementation's `S` from `Router` and the separate + `Handler<..., S> for T` implementation. Each source declaration binds its + own `S`; those references do not identify the independently bound `S` in + `service_ext.rs`. This establishes two wrong reference targets, not that all + 150 references to that hub are wrong or a representative precision rate. + +These diagnostics motivate role-aware explanations and independent edge +review. They are not folded into the original graph-consistency scores, and +do not establish that Compass already diagnoses god objects reliably. + +## MCP path identity, bounds, and source-route diagnostics + +The next development arm uses the same retained Cobra (Go), Flask (Python), +Gson (Java), Zod (TypeScript), and Axum (Rust) graphs. There are 28 questions per +tool: five forward paths, five reverse paths, five one-hop-too-small bounds, +five nonexistent source IDs, four ambiguous source names, and four disconnected +pairs. Exact IDs are prepared symmetrically from source anchors and are not +scored as retrieval. Each side has the same external 60-second/16-MiB RPC and +64-MiB session bounds. Graphify receives `undirected=true`; Compass's public +MCP operation is undirected navigation. These results do not establish directed +call-flow accuracy. + +Disconnected pairs are selected from common source-anchored nodes in different +components in each graph. They include files/modules/configuration as well as +function declarations. Preparation examined at most 2,048 common anchors; +no Cobra pair was selected, which does not prove none exists. Positive source +witnesses reuse development witnesses reviewed after earlier path outputs. + +**Registration correction:** inputs were written before the first requests, +but a transient Python runner cleanup `PermissionError` prevented the intended +pre-execution commit. The initial capture was launched before that command +failure was noticed. Its retained manifest's preregistration claim is wrong; +this report and the current input scope supersede it. This is a development +diagnostic. The original log is `mcp-path-python-01.log`; the child process was +subsequently absent and the full 81-test rerun passed. The runner was not changed +for an unreproduced failure. + +### Baseline findings and the separate label arm + +All 56 requests execute in `mcp-path-paired-01`. The independent auditor checks +transcript/input/graph hashes, actual path bodies, exact endpoint identity, +minimum distance, each ordered edge's relation and direction, and source-route +witnesses separately. It never resolves an ambiguous displayed intermediate +node using the expected answer. + +| ID-input diagnostic | Baseline Compass | Graphify 0.9.67 | +| --- | ---: | ---: | +| Verifiable minimum-hop path | 8/10 | 0/10 | +| Explicit hop-bound outcome | 5/5 | 3/5 | +| Missing source stays unresolved | 5/5 | 0/5 | +| Ambiguous source is not selected | 0/4 | 0/4 | +| Correct global disconnection | 4/4 | 1/4 | + +Compass's two positive misses use a Zod intermediate label shared by several +nodes; the text does not identify the selected node. This does not prove the +route itself wrong. Graphify's exact-ID inputs frequently select other nodes: +Cobra `.Find()` becomes `Command`, Axum `validate_path` becomes `routing()`, +and some pairs resolve to the same node. Its missing-ID sentinel also resolves +to fuzzy candidates. These are strict identity diagnostics, not a general +claim about Graphify's advertised label/keyword interface. + +A separate label-input arm was committed before its requests, after the ID +failures were observed. It uses the same positive source endpoints and bounds, +with each tool's actual display labels: 15 questions per tool, all 30 executed. +**Graphify wins this baseline comparison:** 10/10 verifiable paths versus +Compass's 8/10; both give 5/5 explicit hop-limit outcomes. Graphify matches all +five reviewed source routes; Compass verifies four of five, with Zod's identity +unverified. This arm is development evidence, not held-out confirmation. +Artifacts are `mcp-path-labels-01` and `mcp-path-labels-audit-01.json`. + +### Production corrections and the intermediate failure + +MCP path endpoints now require an exact ID or uniquely matching normalized +symbol/qualified name. Ambiguity returns stable candidates and exact IDs; +missing names remain unresolved. The public hop bound is validated from zero +to 64. Search uses the query crate's shared bounded engine, minimizing hops, +then structural relation cost, then a stable tie key. Its one-million-adjacency +and 16-MiB cumulative path-key budgets fail explicitly. Reaching a depth +frontier is distinguished from proving disconnection; conservative depth +reports may remain incomplete even when the full stored graph is disconnected. + +The versioned `compass.mcp.path/1` structured result preserves ordered node IDs, +source anchors, and selected edges with their stored and traversal directions. +Legacy text remains available. Equal-hop routes can change under the structural +tie rule, and callers relying on fuzzy endpoint selection must migrate; the +compatibility reference and migration guide document both changes. + +The first corrected binary (`3fc64bc00f1f47e36fb2158c9dfbfb360cf81915c6b81f588c84f5f29b023ed1`) +failed every positive structured-anchor check: compact traversal nodes omit +numeric source lines, so projection emitted null. Both `*-02` captures and +audits preserve this failure. Projection now reads the full stored node +records, as hub projection does, and a native regression requires line 9 to +survive actual structured invocation. The oracle was not relaxed. + +The intermediate ID run already refused all four ambiguous endpoints. It +reported global disconnection for only two of four disconnected pairs; Gson +and Axum reached the depth bound. Those two remain incomplete answers rather +than being credited as proven disconnections. + +The next frozen binary (`78e2a3528ef864937b7160fb523826b621218e05e14ccad51faba6dc8caf1082`) +restored all node source anchors, but `*-03` audits exposed null edge IDs: +the compact cache omits these too. All positive results therefore still failed +the structured-edge checks. The implementation now selects and renders paths +from one full bounded document snapshot, retaining parallel-edge IDs during +the search itself. It does not attach an arbitrary full-record edge after +traversing a lossy projection. The native regression uses two parallel calls +and requires the stable selected ID (`edge-a`), as well as the source line. +This full-snapshot load can cost more than compact traversal; no timing or +memory improvement is claimed. + +### Final path replay at this checkpoint + +The frozen executable in `mcp-path-identities-provenance` has SHA256 +`b16d7f755a81bf68110737a445701158ee541a4cc0f070b9e4e800cff693c988`. +Its base commit, full source patch, and changed-file hashes are retained. +`mcp-path-paired-04` completes all 56 RPCs and `mcp-path-labels-04` completes +all 30. Corresponding `mcp-path-audit-04.json` and +`mcp-path-labels-audit-04.json` validate raw transcripts and stored graph +identities. The current auditor also rechecks both baseline captures in +`mcp-path-baseline-current-audit.json` and +`mcp-path-labels-baseline-current-audit.json`; all 86 original outcomes remain +unchanged. Errors cannot pass from error text, and structured negative statuses +must agree with the required outcome. + +| ID-input diagnostic | Baseline Compass | Corrected Compass | Graphify | +| --- | ---: | ---: | ---: | +| Verifiable minimum-hop path | 8/10 | 10/10 | 0/10 | +| Explicit hop-bound outcome | 5/5 | 5/5 | 3/5 | +| Missing source stays unresolved | 5/5 | 5/5 | 0/5 | +| Ambiguous source is not selected | 0/4 | 4/4 | 0/4 | +| Correct global disconnection | 4/4 | 2/4 | 1/4 | + +The corrected label arm **ties Graphify**: each returns 10/10 verifiable +minimum-hop paths and 5/5 hop-bound outcomes. Each matches all five reviewed +source routes. Compass also matches those five routes in the ID arm; Graphify +matches none of the five with ID inputs. Failure to establish identity remains +unverified source-route evidence, not evidence that every underlying edge is +wrong. These short selected navigation routes do not establish representative +path precision, source occurrence recall, execution feasibility, or broad +superiority. + +Compass's two lost global-disconnection completions are explicit depth-limit +outcomes for Gson and Axum at eight hops. The original implementation searched +the whole component before applying the requested hop limit. The corrected +one stops at the bound; neither this report nor the auditor credits those +incomplete answers as disconnections. Retain that completion tradeoff alongside +the identity and ambiguity improvements. + +Verification: 1,212 native tests pass, zero fail, two are ignored. This includes +workspace library/binary tests, CLI query/product contracts, output agent-query +contracts, MCP coverage, typed traversal, and the three-engine independent +path oracle (729 four-node graphs × three depth bounds × three engines = +6,561 queries). The small oracle covers hop/cost optimality and actual edge +chains; it does not establish large-graph performance or source extraction +accuracy. Workspace and changed integration-target Clippy pass with warnings +denied. All 86 Python benchmark tests, formatting, diff checks, and the product +boundary gate pass. Logs are `mcp-path-corrections-tests-04.log`, +`mcp-path-corrections-clippy-04.log`, and `mcp-path-python-07.log`. +The test build emits existing core `unused_mut` and macOS linker unwind +warnings. Full extraction fixture qualification remains the earlier receiver +checkpoint: this correction changes query/MCP behavior on retained graphs, +not extraction. Concurrent debug replays are not timing evidence. + +## Hub explanations and source-role census + +The next development diagnostic inspects the original 100 MCP hub entries, +50 per tool. `benchmarks/agent_query/hub_role_reviews.json` records manual +source-role judgments, exact graph IDs when recoverable from the response, +pinned source-file hashes, anchors, and excerpts. It deliberately follows +output inspection. It is neither preregistered design-quality evaluation nor a +representative precision sample. Different returned sets prevent a shared +accuracy score. + +The independent `hub_evidence_audit.py` verifies the original capture and source +provenance. It checks 87 reviewed identities against the pinned source; the 13 +ambiguous Graphify labels remain unknown. This verifies where the judgments +came from, not that a source hash can prove a semantic role or design judgment. +The original report is `hub-source-role-audit-01.json`. + +| Reviewed role among returned hubs | Compass | Graphify | +| --- | ---: | ---: | +| Production type declaration | 21 | 19 | +| Production callable | 12 | 4 | +| Test helper callable | 6 | 5 | +| Test suite type | 0 | 3 | +| Whole production source module | 6 | 0 | +| Whole test module | 4 | 0 | +| Example callable | 1 | 1 | +| Benchmark callable | 0 | 1 | +| Generic implementation target | 0 | 2 | +| Trait implementation block | 0 | 2 | +| Unidentified from returned label | 0 | 13 | + +Types include classes, structs, aliases, interfaces, and public testing API +types. “Production” distinguishes the source declaration from repository test +helpers, not its release stability or architectural importance. All ten +Compass Zod results are whole-file module nodes, four spanning test files. +These can be useful file navigation hubs, but do not identify ten god objects. +Graphify's Axum `S` and `T` entries are generic implementation subjects, and +`Router` and `Bytes` refer to trait implementation blocks rather than new +type declarations. Earlier source diagnostics establish two wrong references +to `S`; this census does not extrapolate their frequency. + +### Exposing why a hub is connected + +Both original MCP hub responses primarily state degree. Compass now adds +stored node kind and a bounded relation/direction breakdown, in text and +`connectivity` with schema `compass.hub-connectivity/1`. Analysis lives in +`compass-graph`; MCP projects it. Eligibility, degree, and ranking stay the +same. Undirected ranking metadata is corrected to name its existing policy. +The summary counts all valid incident records, including parallel records, +separately from distinct-pair degree. Directed self-loops count once in the +incident total and once per direction. Undirected records receive no invented +arrow. Sixteen relation categories are shown by descending record count then +name, with omitted category and record totals. + +Concrete observations from the retained Compass graphs illustrate why this +matters: + +- Cobra `Command`: 525 incident records, including 346 incoming references and + 154 outgoing containment records. Its degree is 443, a different quantity. +- Flask `Flask`: 110 records include 38 outgoing containment and 34 incoming + references; several other relation kinds contribute too. +- Gson `JsonReader`: 530 records include 240 incoming instantiations and 97 + outgoing containment records. +- Zod `to-json-schema.test`: 1,156 records include 789 containment, 321 + references, and 46 calls, all outgoing. It is a whole test module. +- Axum `.route()`: 584 records include 306 incoming calls, one outgoing call, + and 272 incoming `tests` records. A high degree does not mean this method + makes hundreds of outgoing calls. + +These counts are observations about the stored graph, not independently +verified counts of source occurrences or evidence of excessive responsibility. +The previous neighbor interface groups by neighbor and can omit parallel +relations; a summary should not be reconstructed from that grouped view. +The native implementation uses complete stored records. No automatic +production/test role classifier or god-object judgment is introduced. + +The summary auditor separately checks numeric types, direction, self-loops, +parallel records, ordering, omission accounting, and each hub's text block. +Original Compass and Graphify responses have no such summary. That absence is +reported as unavailable, not as a wrong answer or lack of another workflow. +Graphify's neighbor and CLI interfaces remain available; this diagnostic does +not measure their multi-step explanation cost or quality. + +### Hub explanation replay and verification + +`mcp-hub-evidence-01` completes all 58 original shared MCP questions on the +same graphs. All original graph-consistency judgments and all returned hub +identity/degree/rank records remain unchanged. The independently verified +`hub-evidence-audit-01.json` checks **50/50 Compass connectivity summaries and +50/50 matching text blocks**. Graphify's direct hub responses offer no such +summary; this is recorded as unavailable, not 50 incorrect explanations. +The latest source-role check (`hub-source-role-audit-02.json`) also verifies +each hub RPC's raw request and response. Graphify's stored graphs are +undirected, so their oracle record counts remain undirected; the summary does +not infer semantic directions from their serialized endpoints. + +For the same five Compass top-ten hub responses, text grows from 9,136 to +26,620 bytes and captured response-wire bytes grow from 24,146 to 75,299. +Graphify remains at 1,489 text / 1,989 wire bytes. This is additional evidence +with a payload cost, not an efficiency win or a controlled multi-step workflow +comparison. Initialization traffic is retained separately. Ranking sets differ +between products, and these runs do not establish comparative design quality. + +The frozen executable in `hub-evidence-provenance` has SHA256 +`5382b51b86ab76032173a17e638a3ad525600ec1726364d3244edddb7abd2c19`; +the collector records the same executable digest. Base commit, source patch, +and changed-source hashes are retained. Native verification passes **1,162 +tests, zero failed, two ignored**, covering the full workspace library/binary +baseline plus `analyze_coverage`, `coverage_paths`, and `compass_product`. +This is a different integration selection from the prior path checkpoint, +whose larger count also included CLI/output path suites. New regressions +cover parallel edges, self-loops, missing endpoints, directed/undirected +records, permutation stability, top-zero, relation omission totals, text +projection, and actual MCP transport. Workspace and selected integration +Clippy pass with warnings denied. All **93 Python tests**, formatting, diff +checks, and product boundary pass. Logs: `hub-evidence-native-04.log`, +`hub-evidence-clippy-03.log`, and `hub-evidence-python-03.log`. + +Earlier development logs preserve a test fixture type mismatch and an expected +legacy-kind mismatch (`symbol`, not `unknown`); both were corrected before the +final checks. Existing core `unused_mut` and macOS linker unwind warnings remain +in test builds. The full extraction fixture gate remains the prior receiver +checkpoint: no extractor, publication, or viewer format changes are made here. +God-object detection, community cohesion, source-edge precision, and explanation +usefulness on held-out tasks remain open. + +## Frozen confirmation panel A: competitor advantages remain + +Inputs were committed as `7c70fbea` before extraction or queries: 55 questions, +21 selected relationship pairs, and ten forward/reverse path witnesses. +Chi (Go), Click (Python), jsoup (Java), Redux (TypeScript), and WalkDir (Rust) +are new repositories for this checkpoint. Both tools use the same five clean, +pinned checkouts. Selection is purposive, not representative. The Compass +executable is the frozen `5382b51b…` hub-evidence build above; Graphify reports +0.9.67. `heldout-a-01` completed all ten builds and 110 question workflows. +Source commits, registered input bytes, captured graph digests, runner digest, +and capture byte totals were rechecked. The CLI records executable hashes; +Graphify's launcher hash does **not** attest to all Python package/dependency +bytes during execution. Do not conflate the separate MCP environment check +with a pre/post CLI package check. + +### Original text-recall scores + +| Surface | Compass | Graphify | +| --- | ---: | ---: | +| Explain | 10/10 | 8/10 | +| Direct callers plus incoming-call ask | 8/10 | 9/10 | +| Callees | 4/5 | 4/5 | +| Symbol paths, both directions | 6/10 | 10/10 | +| File paths | 5/5 | 1/5 | +| Ambiguity | 5/5 | 4/5 | +| Missing symbols | 5/5 | 5/5 | +| Broad natural query | 3/5 | 5/5 | +| Total text matches | 46/55 | 46/55 | + +There are 38 shared passes, eight exclusive passes per tool, and one shared +failure. On shared text passes, median estimated answer tokens are 158 Compass +versus 104 Graphify. The single-run overall wall-time medians are 738 versus +236 ms; these are observations, not a controlled performance benchmark. +Graphify sometimes exceeds the requested text budget (for example the Chi ask +response is 2,744 estimated tokens against a requested 2,000). All consumed +responses and documented follow-ups remain in the cost totals. + +These are **not correctness scores**. Manual response inspection catches four +Compass text passes that do not resolve the requested operation: Redux's +primary explanation, both WalkDir explanations, and WalkDir callees merely +list ambiguity candidates. The registered text criteria find names/lines in +those lists. Graphify's two WalkDir symbol paths also pass by printing the +requested words while selecting same-named **test** functions and walking +through their containing test file. Its stderr warns of ambiguity; the body +still provides a different route. The frozen run is preserved, with these +judgments recorded separately in `heldout_panel_a_review.json`. + +For incoming-call ask, Compass prints the requested callee and incoming +relationships on Chi, Click, jsoup, and Redux; WalkDir remains unresolved. +Compass's usage results include references/imports where explicitly labeled, +not just calls. Graphify's query answers return broader neighborhoods that +contain the selected incoming call; WalkDir combines library and test seeds. +These inspected facts do not establish the precision of every returned edge. + +### Source and identity checks + +The path auditor now retains failed commands as failed rows rather than +aborting and dropping the remaining denominator. Nonzero exit, timeout, and +unsupported multi-response execution cannot pass even if stdout prints a valid +path. Source drift and mismatched graph provenance still abort the audit. +All ten witnesses remain in each tool's denominator. Source-verified paths +are **6/10 Compass versus 8/10 Graphify**: both pass Chi, Click, and jsoup; +Graphify also passes Redux; neither establishes the requested WalkDir route. +Compass refuses WalkDir's genuinely ambiguous unqualified names and Redux's +export/function name collision. An ambiguity refusal is safer than selecting +a wrong declaration, but it is still not a completed path task. + +The initial edge audit also exposed an **oracle mistake**. The registered +Click witness omitted `open_stream`'s second call to `_wrap_io_open` at +`src/click/_compat.py:450`. Compass preserved both calls, while Graphify kept +only line 397. The original witness and audit remain unchanged. A separately +named `edge_witnesses_heldout_click_corrected.json` adds line 450 after reviewing +the entire function; it is an explicitly post-output diagnostic correction. + +| Selected-pair evidence | Compass | Graphify | +| --- | ---: | ---: | +| Unique endpoint identity, original or corrected | 17/21 | 21/21 | +| Relationship/absence matches, original or corrected | 15/21 | 20/21 | +| Full occurrence agreement, registered witness | 14/21 | 18/21 | +| Reviewed positive occurrences, registered witness | 13/18 | 15/18 | +| Full occurrence agreement, corrected diagnostic | 15/21 | 17/21 | +| Reviewed positive occurrences, corrected diagnostic | 14/19 | 15/19 | + +The 21 pairs comprise 16 positive pairs and five direct-edge negatives. +Negatives pass only with both endpoints uniquely identified. Four Compass +Redux pairs fail identity checks because separate export and function nodes +share the exact file/start-line/terminal name; they must not be described as +four missing call edges. The plain-symbol ambiguity is a real workflow issue, +while the source audit cannot choose between those nodes using its registered +identity rule. Compass also misses Chi's source-proven `rctx.URLParam` call. +Both tools miss jsoup's chained `new Cleaner(...).isValidBodyHtml(...)` call. +Graphify loses repeated occurrences in jsoup and WalkDir as well as corrected +Click. This checks selected pairs, not complete callee sets or graph precision. + +Artifacts are `heldout-a-path-audit-01.json`, five +`heldout-a-*-edge-audit-01.json` files, and +`heldout-a-click-edge-audit-corrected-01.json` under the evaluation root. +The checked-in review records their digests, input digests, response-review +digests, and limits. Auditor regressions pass all 95 Python tests, including +unsuccessful execution and source-drift cases (`heldout-a-auditor-tests-01.log`). +This panel contradicts a broad superiority claim. Its first run remains a +confirmation checkpoint; subsequent product tuning on it is development and +requires another independent confirmation panel. MCP/community workflows, +directed or long walks, source-level cohesion, and god-object judgments remain +unproven here. + +### Post-output path selection diagnostics + +Two additional arms use the **original frozen binaries and graphs**, with +source-reviewed callable endpoints prepared symmetrically from the graphs. +They are post-output diagnostics, not node retrieval or workflow-cost scores: +preparing an endpoint from the oracle does not prove that a user found it. +The four questions cover forward/reverse Redux and WalkDir paths only. + +| Prepared endpoint form | Compass source-path matches | Graphify source-path matches | +| --- | ---: | ---: | +| Full stored IDs | 4/4 | 2/4 | +| Exact stored display labels | 0/4 | 2/4 | + +Both graphs contain the selected WalkDir call edges. Full IDs let Compass +navigate those edges and Redux's function declarations. Graphify's CLI path +help describes source/target strings without promising exact-ID semantics; +its stored-ID and display-label attempts still choose different WalkDir +endpoints. For example the full-ID forward request returns a test function, +its containing test file, and an import to `WalkDir`. Compass normalizes display +labels and still detects the export/function or library/test collisions. +Neither arm replaces the original 6/10 versus 8/10 source-path result, and the +ID diagnostic is not a claim that Graphify lacks other disambiguation workflows. +Artifacts: `heldout-a-explicit-path-diagnostic-01` and +`heldout-a-label-path-diagnostic-01`, each retaining prepared inputs, executable +hashes, script, captured streams, and source-witness audit results. + +### Development correction: actionable ambiguity answers + +The frozen panel exposed an unrelated presentation defect: a typed ambiguous +relationship request said “No exact match” and named the first candidate as a +fallback. A typed ambiguous node-trail response could instead claim no directed +path. `compass-output` now handles `needs_resolution` before those answer +branches, asks for exact IDs, and uses the operation as the answer basis. +Every retained ambiguity candidate has its exact ID in paged and full text, +even if qualified labels differ. Candidate selection, raw query results, +relationship resolution, schema majors, and path algorithms are unchanged. +Changed text pages use the existing cursor-prefix rejection rules; restart a +rejected continuation from page one. + +This is **development after observing panel A**, not an improved held-out +score. `heldout-a-ambiguity-replay-01` repeats all 55 Compass questions against +the original hash-verified graphs. Text passes remain **46/55**, with no changed +pass/fail rows. All four inspected Redux/WalkDir ambiguous callers/callees/ask +responses now show exact IDs and the corrected headline. The text-oracle false +positives documented above remain false positives; better ambiguity wording +does not turn an unresolved task into a successful answer. The replay does not +re-extract either graph or rerun Graphify. + +The new frozen binary has SHA256 +`d561d7c762410899cb6039f409d17401239ee26ee525f8bbfd2e95cebcb82857`. +`ambiguity-headline-provenance` records its base commit, patch, and source hashes. +Verification passes **1,155 native tests, zero failed, two ignored**, comprising +workspace library/binary tests plus `agent_query`, `code_query_cli`, and +`compass_product`. The new regressions cover callers, callees, impact, node +trails, candidate permutation, full/paged text, agent JSON, and the actual CLI +callers/callees/ask boundary. Workspace and the same selected integration Clippy +pass with warnings denied. All **95 Python tests**, formatting, diff checks, +and product-boundary checks pass. Logs are `ambiguity-headline-native-02.log`, +`ambiguity-headline-clippy-01.log`, and `ambiguity-headline-python-01.log`. +The first targeted test compile used a nonexistent test-options default; the +retained `ambiguity-headline-targeted-01.log` records that development error. +Explicit options corrected it before the full pass. Existing core unused-mut +and macOS linker warnings remain in build/test logs. Extraction qualification +and JavaScript gates were not rerun: this change only projects query ambiguity +and does not change extraction, publication, or viewer assets. + +### Development correction: Go control initializers and receiver shadowing + +The registered Chi miss at `context.go:18` came from a supported factory return +that was lost in an `if` initializer. The universal Go producer now searches +control initializers and nearer lexical bindings before outer parameter aliases. +Unknown locals, callback factories, closure parameters, and type-switch aliases +must not borrow a same-named outer type or package function. Case-specific +type-switch narrowing remains unsupported. Existing parameter/import evidence +still supports project-wide field and return resolution. Disposable AST cache +semantics advance from 3 to 4; users must rebuild old Go graphs to get these +edges. Published history is unchanged. + +The first frozen development binary is retained under +`go-initializer-provenance`, SHA256 +`bd0168b9d1258199a23820c1888aba577a41869fec820baeb5d9a54db2a4087d`. +Fresh paired runs `go-initializer-chi-01` and `go-initializer-cobra-01` use +unchanged question suites and pinned sources. Text scores remain **Chi 11/11 +versus 10/11**, and **Cobra 10/10 versus 9/10** (Compass versus Graphify). +These scores did not improve. Concurrent builds make these runs unsuitable +for latency claims. The Graphify launcher/package provenance limitation above +still applies. + +Every graph relationship delta was inspected, using source/target declaration +identity, relationship kind, exact site, and multiplicity. Chi adds two calls +and removes no relationships: + +- `URLParamFromCtx` to `Context.URLParam` at `context.go:18`, supported by + `RouteContext`'s declared `*Context` return and the `if` initializer. +- `compressResponseWriter.Flush` to the `compressFlusher.Flush` interface method + at `middleware/compress.go:364`, supported by the type assertion at line 363. + This proves an interface-method target, not the runtime implementation. + +The four original Chi pair/occurrence witnesses now all match both tools; +Compass previously matched three. A separately recorded **post-output** fifth +witness checks the compression interface call: Compass matches it; Graphify +has both unique endpoints but lacks the call. This diagnostic selection is +not an independent precision or recall sample, and does not replace panel A. + +The same complete-delta review caught a regression on Cobra: four new type +references to `Command` at `command.go:479,521,921,1153` came from invoking +callbacks returned by `UsageFunc`, `HelpFunc`, and `FlagErrorFunc`. The outer +invocation has no proven named target. A native regression reproduced the +extra edge (two site edges instead of one). The producer now omits that +unsupported outer call candidate while retaining the separately visited inner +factory call. The intermediate binary and its faulty output remain recorded; +the four references are not counted as gains. + +The checked-in `go_receiver_development_review.json` records intermediate run +digests, every delta, source anchors, and judgments. +`edge_witnesses_go_receiver_chi_diagnostic.json` preserves the expanded diagnostic +separately from the original registered witness file. + +The corrected frozen binary has SHA256 +`bb09a5335c80fd7dd710e008b4a2f30f9403108e4883ed74e7d7c0de1b0aaca9` +under `go-initializer-final-provenance`. Fresh paired repeats +`go-initializer-chi-02` and `go-initializer-cobra-02` complete all 42 requests. +Chi retains exactly the two reviewed additions; Cobra removes exactly the four +intermediate false references and has no relationship delta from its baseline. +Text scores and the five-pair diagnostic result are unchanged. The delta script, +graph/run digests, source excerpts, and both failed/passing callback regression +logs are retained. These are development results after panel A. + +Final-source native checks pass **1,410 tests, zero failed, two ignored**: +workspace library/binary tests plus `universal_evidence`, `universal_resolution`, +`contracts`, and `compass_product`. Workspace and the same integration Clippy +selection pass with warnings denied. All **95 Python tests**, formatting, +product boundary, and diff checks pass. Both full fixture qualification runs +completed with exit zero, including semantic, topology, Markdown, and React +fixture checks. The second run started after the final Go production edit. +These gates do not cover the subsequently discovered Chi route-parent defect +below. Logs use `go-initializer-qualification-02`, `go-initializer-native-03`, +`go-initializer-clippy-02`, and `go-initializer-python-02` prefixes. Existing +core unused-mut and macOS linker warnings remain in build/test logs. + +### Panel A MCP extension: communities, neighbors, and hubs + +Commit `3ec3732a` registered 60 MCP requests before executing them on the original +panel-A graphs and frozen hub-evidence Compass binary. This is a **development +extension after observing CLI output**, not a new independent confirmation panel. +It uses the separate Graphify MCP environment, checking its recorded package +files before and after execution. This does not retroactively attest the CLI +extraction environment. All 60 expected requests completed; raw transcripts, +input digests, and the exact question multiset were checked. + +| Stored-graph diagnostic | Compass | Graphify | +| --- | ---: | ---: | +| Counts match | 5/5 | 5/5 | +| Complete largest-community membership | 5/5 | 5/5 | +| Missing community handled | 5/5 | 5/5 | +| Selected call-neighbor label/direction triples match | 5/5 | 5/5 | +| Ambiguous name remains ambiguous | 5/5 | 4/5 | +| Returned hub identity established | 50/50 | 41/50 | +| Direct hub connectivity summary matches | 50/50 | unavailable | + +Graphify silently selects the Chi `Context.URLParam` method for `URLParam`, +despite the separate top-level declaration. It preserves the other four +ambiguities. Compass preserves all five, but substring matching produces broad +candidate lists, including documentation nodes; this is not a candidate-precision +win. Neighbor consistency also does not establish source-edge correctness: +Compass text omits call-site occurrences, while Graphify prints retained sites. +The frozen Chi graph still has the already-documented receiver miss. + +Largest-community sizes are Chi **96/108**, Click **389/84**, jsoup **752/295**, +Redux **271/71**, and WalkDir **116/47** (Compass/Graphify). These are different +partitions on different extracted graphs, not shared correctness denominators. +The reviewed file distributions include many tests: Compass Redux's largest +community includes 156 nodes from `test/createStore.spec.ts`; Graphify WalkDir's +includes 45 from `src/tests/recursive.rs`. Neither fact alone establishes good +or bad functional cohesion. + +The complete post-output hub-role census verifies 50 Compass and 41 Graphify +source identities; nine Graphify display identities remain unresolved. Compass +uses explicit MCP IDs here; Graphify's CLI JSON can supply IDs, so the nine +unknowns are specific to this MCP display, not missing graph identities. Compass +returns 22 production types, seven production callables, eight test helpers, +two test types, five test modules, two source modules, two documentation-tooling +callables, and two route records from a test/example. The different returned +sets cannot establish a shared design-quality score. The roles, source excerpts, +file hashes, and all unknowns are preserved in `hub_role_reviews_panel_a.json`. + +Full answer text totals **125,033/42,550 bytes**, with **174,128/45,989 actual +response-wire bytes**. Hub responses alone total **24,401/1,473 text bytes** and +**69,504/1,973 wire bytes**. Compass supplies more metadata and different members; +these costs do not prove greater efficiency. Concurrent compilation excludes +latency claims. `mcp_panel_a_review.json` records all denominators and artifact +digests. The collector now accepts safely named repositories from the captured +run instead of a hard-coded five-name list; all **97 benchmark tests** pass, +including duplicate-record and path-escape regressions. + +### Source defect exposed by a consistent hub summary + +Compass's second Chi hub is the route `GET /users/1` inside `TestCleanPath`, +with degree **59** from **68 outgoing containment records** and no other +incident relationship kinds. Its graph-consistent summary faithfully exposes +unsupported hierarchy. For example, it claims to contain `GET /` inside +`TestThrottleBacklog`, although both tests independently construct a local +`r := chi.NewRouter()` and neither mounts the other's route. + +The separately recorded negative witness fails on both the original panel +graph and the newer Go-corrected graph. Graphify has no matching route endpoint +identities, so it cannot receive credit for the negative. The source review +traced the defect to shared publication applying filesystem parent selection +to programmatic receivers named `r`. This can inflate hubs and connect unrelated +tests; passing self-graph consistency and existing fixture gates did not detect +it. The recorded real-source negative is not a population precision estimate. + +A native regression reproduced the defect. Publication now admits only +recognized filesystem-convention facts to that parent-selection step; +programmatic mounts/groups remain owned by framework composition rules. Tests +cover six programmatic frameworks, input-order reversal, a positive filesystem +case, and mismatched origin/rule/framework negatives. All **17 framework-route +tests** pass. Framework-pack semantics advance from 6 to 7 and build-state seals +include that identity. Existing filesystem conventions still +need broader independent semantic review; this correction is not proof of their +complete correctness. + +#### Fresh development comparison after the hierarchy correction + +The frozen `route-hierarchy-provenance` binary has SHA256 +`872aff05f6c1723d27ee96230a4e315d3f0d6e1849387de09530b907f0ff3f40`. +`route-hierarchy-panel-a-01` builds both tools afresh on all five pinned sources +and repeats every original question. All **110 requests ran**, with zero +timeouts; nonzero exits remain in the denominator. Text scores remain **46/55 +for both**, with no changed pass/fail rows. Source-path matches remain **6/10 +versus 8/10**. Corrected selected-pair relationship matches are **16/21 versus +20/21**, and full occurrence agreement is **16/21 versus 17/21**. Compass's +one-pair improvement over the original panel comes from the earlier Go receiver +fix, not the hierarchy correction. Original and corrected Click witnesses are +still separate. + +A complete relationship delta against the Go-corrected Chi graph removes +**88 `contains` records**, adds none, and retains all 729 nodes. The other four +repositories have no relationship changes from the original panel. The recorded +independent-router negative now passes with both Compass endpoints present; +Graphify's endpoints remain unavailable. This is source-backed defect recovery, +not a new broad recall score. + +`mcp-panel-a-02` repeats all **60 MCP requests**, each successfully, against the +fresh graphs. All earlier consistency and ambiguity outcomes are retained. +Compass's two Chi route hubs disappear from the top ten, replaced by the +production type `compressResponseWriter` and test helper `bigMux`; both new +source roles were inspected. The other four hub rankings are unchanged. +`hub_role_reviews_panel_a_after_routes.json` retains all 100 rows and only reuses +earlier judgments after exact identity, anchor, excerpt, and file-hash equality. +Chi's selected largest Compass community changes from 96 to 90 nodes; complete +enumeration still does not prove functional cohesion. Compass/Graphify answer +text totals are **125,192/42,550 bytes**, with **174,698/45,989 wire bytes**. +No latency or efficiency win is claimed. + +Verification passes **1,431 native tests, zero failed, two ignored**, covering +workspace libraries/binaries and the selected universal-evidence, resolver, +cache/contracts, product, framework-route, and framework-qualification tests. +The first expanded Clippy invocation exposed an existing `expect_err` in a +qualification test. An explicit `Err(MissingRoute)` assertion replaced it; +all four qualification tests were rerun and the full selected Clippy invocation +then passed. All **97 benchmark tests**, formatting, diff, and product-boundary +checks pass. The subsequent full fixture qualification **failed** at its topology +floor: 1,270 edges versus a required 1,284. The previous Go fixture pass does not +verify this production change. The follow-up below retains that failure and +finds an additional semantic defect. + +#### Fixture topology review and a remaining false filesystem parent + +The full run passed its native scale checks, source-integrity and repeated-build +comparisons, and existing semantic assertions before stopping at the count +floor. It did not reach the subsequent Markdown and React qualification stages. +Fresh clustered production builds of the identical fixture corpus with the +frozen Go-receiver and route-hierarchy binaries isolate exactly **19 removed +`contains` records, zero added records**, and the same **1,276 nodes**. Node +contents are unchanged except for community assignments. The removed records +represent 18 unique typed endpoint pairs. + +Source inspection covers every removed relationship: + +| Independent fixture groups | Removed records | +| --- | ---: | +| Drupal entity-type hook and YAML routes | 4 | +| Express apps in separate modules | 3 | +| Flask factory and separately instantiated app | 3 | +| Independently instantiated FastAPI apps | 2 | +| Vue Router route arrays in separate modules, both directions | 2 | +| Kotlin and Java Spring controllers in separate packages | 4 | +| TanStack and React Router route modules | 1 | + +The [complete review](../../benchmarks/agent_query/route_hierarchy_fixture_review.json) +records every removed identity, both binary and graph hashes, source hashes, +and every policy adjustment. Each count bound changes by exactly its measured +before/after delta, retaining its previous margin. Community count changes +from 225 to 232 and component count from 221 to 229; neither change establishes +better functional cohesion. + +Count recalibration alone is insufficient. Qualification manifest version 3 +adds eight source-reviewed independent-route assertions. Both endpoint files +must retain route nodes; the specified directed containment must be absent at +every confidence level. The old graph fails all eight groups. The corrected +production graph passes **seven and fails one**: a convention-derived +`react-router::PAGE::/tanstack` still contains `/home`, with the child endpoint +remapped to the AST route. These flat source modules do not declare that +parent-child relationship. + +The remaining resolver helper selects the first other route module found in a +nearby directory. The frontend source oracle's `routeParent` helper uses the +same rule. Their agreement therefore cannot independently validate framework +parentage. **The semantic gate remains failing**; no successful full rerun is +claimed. Fixing this requires framework-specific, source-proven parent rules +and independently specified positive and negative fixtures. + +All **87 Python script tests** pass, including 23 code-graph oracle tests. On a +synthetic graph with the remaining false edge removed solely for oracle +validation, restoring each of the 20 known false records individually fails +the new assertion. This mutation exercise validates the checker; it is not a +production correction. Existing native results describe the unchanged Rust +production code, not a fix for this newly exposed defect. + +#### Framework-specific filesystem parents and independent source review + +The next correction replaces directory-order selection with an indexed lookup +of framework parent roles: Next layouts, the supported Svelte layout facts, +Nuxt parent pages, and default React Router/Remix/TanStack flat-route names. +Pages, standalone HTTP endpoints, and Astro routes no longer establish parents +by proximity. Ambiguous nearest parents remain unresolved. Custom configuration +and extraction gaps are documented in the framework reference; this change does +not claim complete routing support. Framework semantics advance to version 8; +the product version remains 0.3.30 and historical graphs remain immutable. + +The frozen binary SHA256 is +`9efe548537b106c69d1da7a5ac7955e764e43103e0d1e4a754a3c1880c292bea`. +On the **identical original fixture corpus**, it removes exactly **12 more +unsupported containment records**, adds none, and retains all **1,276 nodes** +unchanged except for community assignments. All common edges are unchanged. +The removed records are two React Router sibling links, two Next page-parent +links, five Astro links, one Nuxt endpoint link, and two Svelte page/server +links. The source-reviewed negative manifest now covers **18 file pairs** and +passes on the production graph. Restoring each of these 12 false records +individually makes the checker fail. + +Adding two explicit Next layout fixtures is measured separately: the sources +add 16 nodes and 24 edges to the corrected original graph, including four +expected layout relationships. On identical expanded sources, old versus new +production removes 12 false links and adds the missing root-to-nested-layout +link. No other common edge or node content changes. The frontend fixture gate +requires exactly the four source-specified layout pairs; omitting any one fails +its mutation check. The topology bounds move by the measured original-before to +expanded-after deltas, preserving every previous margin. The +[complete fixture review](../../benchmarks/agent_query/semantic_route_parent_fixture_review.json) +separates the production delta, fixture addition, mutation checks, and each +policy adjustment. Increased fragmentation is not evidence of better cohesion. + +The JavaScript source oracle now uses a separate pairwise convention predicate, +with 15 manually specified cases in both input orders. The native route matrix +contains 23 cases, also in both orders. Agreement is still insufficient by +itself: the historical Next, React Router, and TanStack hierarchy scorecards +are explicitly **invalidated**, retaining their old counts and digests until +their sources are independently reviewed. Pinned hierarchy qualification +cannot use those records as passing evidence. + +A real Next diagnostic uses 273 files (1,398,028 bytes) projected read-only from +shadcn/ui commit `a87a63b2ca25143d26c8bd0903e4e9bc77b3f824`. Four positive and +three negative pairs were recorded before inspecting either graph for this +projection. Old production passes **6/7** and corrected production **7/7**. +The complete graph delta contains **13 removed** links (nine to HTTP handlers, +two page-to-layout reversals, and two loading-to-layout reversals) and **four +added** AppLayout-to-nested-layout links. Every changed pair was source-reviewed; +the 14,762 nodes are unchanged except for communities and all common edges are +unchanged. This is a source-selected development diagnostic over a partial +repository, not held-out evidence or a graph-wide precision estimate. + +Fresh paired builds on the unchanged five-language panel produce byte-identical +Compass graphs to the preceding route correction. The same 110 requests yield: + +| Measure | Compass | Graphify | +| --- | ---: | ---: | +| Query text oracle | 46/55 | 46/55 | +| Source-checked paths | 6/10 | 8/10 | +| Selected source relationships | 16/21 | 20/21 | +| All reviewed occurrences, corrected Click oracle | 16/21 | 17/21 | + +The [development review](../../benchmarks/agent_query/semantic_route_parent_development_review.json) +records pins, binary and graph hashes, source witnesses, and raw-artifact hashes. +This correction does not improve the panel scores or prove superiority. The +shared-machine timing run overlaps other verification and supports no speed +claim. MCP scores from the earlier run are not presented as a fresh rerun. + +Verification: **1,436 native tests passed, zero failed, two ignored** before a +trivial Clippy needless-borrow correction; the final production binary built +successfully. Workspace library/binary and selected-integration Clippy passes. +A broader invocation including the untouched `react_frontend` test failed on +39 existing `unwrap`/`expect` lint violations; its failure log is retained. +All **88 script tests**, **15 JavaScript oracle cases**, and **97 benchmark +tests** pass, as do formatting and the product-boundary check. The first full +fixture invocation stopped because its default parser-source path was absent. +A second invocation uses the existing parser bundle in this worktree's target +directory and completed with exit 0. It passed the scale, semantic, topology, +Markdown, lifecycle determinism, and release frontend qualification stages. +This full pass qualifies production commit `c20db15b`; the pinned hierarchy +scorecards remain invalidated and require separate source review. + +#### Java constructor receiver correction + +The earlier frozen-binary diagnostic and failed native regression reproduced +the jsoup constructor receiver gap. They remain retained, including the initial +graph-review mistake (`relation` versus graph-v1 `kind`). The producer now reads +the constructor's AST type for direct calls and up to seven parenthesis wrappers, +then uses existing qualified-type and overload resolution. It rejects anonymous +and enclosing-instance receiver assumptions. A separate correction retains +`outer.new Cleaner()` as unresolved instead of binding an unrelated imported +`Cleaner`. AST cache semantics advance from 4 to 5; product version, graph and +evidence schemas, and advertised capabilities are unchanged. + +On identical three-file Java diagnostic sources, the old binary produces two +invented external method targets. The correction removes those two nodes and +three false relationships, and adds nine source-supported calls. The native +regression checks exact name spans, repeated occurrences, argument overloads, +type/value namespace distinction, provenance, direction, and reverse-input +determinism. `javac`/`javap` independently corroborate the fixture's target +distinctions; compiled classes were not executed. The deliberately deep receiver +is a real call beyond bounded inference, **not a true absence negative**. A copy +of the old cache rebuilds to a graph byte-identical to a clean extraction. + +Fresh paired builds at the same five repository pins and all 110 unchanged CLI +requests are recorded in `java-constructor-panel-a-01`. The other four Compass +graphs are byte-identical to the preceding checkpoint. jsoup retains all 6,116 +nodes and common edges, except community assignments, and adds **122 call +occurrences** (10 production, 112 test). Complete delta review checks each +receiver, package/import context, target declaration, overload argument types, +source span, and direction. This is static review of a development delta, not a +representative precision sample or proof of runtime calls. It also exposes +existing incomplete varargs display signatures; the exact source declarations +support those edges, while signature completeness remains follow-up work. + +| Measure | Compass | Graphify | +| --- | ---: | ---: | +| Query text oracle | 46/55 | 46/55 | +| Source-checked paths | 6/10 | 8/10 | +| Selected source relationships | 17/21 | 20/21 | +| All reviewed occurrences, corrected Click oracle | 17/21 | 17/21 | + +The one newly matched selected pair is `Jsoup.isValid` to +`Cleaner.isValidBodyHtml`; both tools previously missed it. The +[development review](../../benchmarks/agent_query/java_constructor_development_review.json) +records executable, graph, source and artifact hashes, all added occurrences, +target declarations, and remaining limitations. Reusing these repositories after +they informed the fix is development evidence, even though the suite filename +contains `heldout`. No new MCP or god-object/community quality claim follows. +Timings overlap native verification and support no speed claim. + +Verification: **1,439 native tests passed, zero failed, two ignored**. Clippy first +found redundant error wrapping in the new test; after that test-only correction, +workspace library/binary plus selected integration Clippy and the focused +regression pass. The fixed qualification corpus has zero node/edge changes +excluding communities, so no topology thresholds changed. Full Java fixture +qualification completed with exit 0, including native scale ceilings, semantic +and topology checks, lifecycle determinism, Markdown checks, the release build, +and frontend precedence/positive/negative checks. This pass qualifies Java +production commit `22814e59`; it does not establish comparative superiority. + +#### Export binding query resolution and traversal cache fidelity + +Redux's `miniKindOf` has separate export and function records. The graph already +contains its three reviewed local calls, but ordinary name lookup previously +refused the export/function pair as ambiguous. Lookup now removes a redundant +export candidate only when complete exact, nondeferred `contains` and `exports` +evidence proves one declaration at the binding occurrence. The declaration must +already be a candidate with the same normalized name, nonempty qualified name, +and source file. Genuine competing declarations remain ambiguous; exact export +IDs retain their original meaning. Proof is bounded to 256 candidates and 1,024 +examined edges plus one truncation probe. Exhaustion retains the original +candidates and reports incomplete typed resolution. + +A failed-before regression also exposed the compact traversal reader retaining +only the first evidence confidence and dropping `deferred`. It now retains the +weakest confidence across evidence and the compatibility field, plus deferred +state. Disposable traversal cache magic advances from `TRAILT05` to `TRAILT06`; +published graphs, identities, schemas, and AST cache semantics remain unchanged. + +Fresh paired extraction and all 110 unchanged requests on the same Go, Python, +Java, TypeScript, and Rust pins produce **byte-identical graphs for both tools** +relative to the Java checkpoint. The three newly passing text questions are +Redux callees and the two directions of the undirected `miniKindOf`/`ctorName` +path. Source review confirms the three local callees and the call occurrence; +the reverse traversal does not claim a reversed call. + +| Measure | Compass | Graphify | +| --- | ---: | ---: | +| Query text oracle | 49/55 | 46/55 | +| Source-checked paths | 8/10 | 8/10 | +| Selected source relationships | 17/21 | 20/21 | +| All reviewed occurrences, corrected Click oracle | 17/21 | 17/21 | + +The unchanged relationship oracle still cannot identify four Redux pairs +uniquely because export and function records remain distinct. These failures +are retained; they are neither four missing calls nor recovered extraction +relationships. Both WalkDir ordinary-name path witnesses still fail both tools: +Compass preserves genuine ambiguity, while Graphify returns an unreviewed +route. A separate post-output source census reviews 126 coincident Redux +bindings; this establishes static correspondence, not 126 successful public +queries or representative precision. The +[development review](../../benchmarks/agent_query/export_binding_development_review.json) +records source, executable, graph, oracle, and raw-artifact hashes. + +Verification: **1,180 native tests passed, zero failed, two ignored** across +workspace libraries/binaries and the selected export, cache, traversal, store, +CLI query, and product integration targets. The four export regressions include +direct SQLite, JSON, generic materialized store, cold/warm projection, preserved +ID/ambiguity behavior, and proof exhaustion. The cache regression includes +mixed-confidence order, deferred state, and stale cache rebuilding. Workspace +and selected-integration Clippy pass with warnings denied. Full fixture +qualification for production commit `9b63873a` completed with exit zero, +including native scale ceilings, semantic/topology checks, lifecycle +determinism, Markdown, release compilation, and frontend precedence, +positive/negative, and independent source-anchor checks. The release binary +and qualification log hashes are recorded in the development review. +No MCP rerun, full-answer precision, community cohesion, god-object quality, +directed/long-path, latency, or general superiority claim follows. This reused +panel remains development evidence. + +#### Directed call-path development comparison + +[Five source-reviewed chains](../../benchmarks/agent_query/directed_path_development_registration.json) +were committed as `bc4374a7` before their first execution: Chi registration to +radix-prefix matching (four calls), Click file opening to binary-reader testing +(four), jsoup validation to safe-node copying (two), Redux kind detection to +constructor-name inspection (two), and WalkDir entry handling to loop-error +creation (three). Both tools receive identical short endpoint names and the +same verified stored graphs. Compass uses `node` with depth eight and one path; +Graphify uses `path --directed`. Each command has the same external 60-second +deadline and 16 MiB capture ceiling. Their internal work limits differ. + +All 20 requests completed: five positive requests and five reverse-direction +probes per tool. Positive **source-supported directed call chains score 2/5 +for each tool**, with different failures: + +| Repository | Compass | Graphify | +| --- | --- | --- | +| Chi | Refuses interface/implementation name ambiguity | Returns a five-hop mixed-reference/method route, not a call chain | +| Click | Returns the four-call source chain | Returns the four-call source chain | +| jsoup | Refuses two genuine `isValid` declarations | Reports no directed route | +| Redux | Refuses function/import/module name ambiguity | Returns the two-call source chain | +| WalkDir | Returns the three-call source chain | Returns a seven-hop mixed-reference/method route, not a call chain | + +The Compass Click path selects the second `_is_binary_reader` occurrence at +line 188, while the frozen witness names line 181. Both occurrences were visible +in the source window reviewed before execution. The alternate is explicitly +adjudicated after output; the original witness is unchanged. Literal frozen +occurrence-site agreement is **Compass 1/5, Graphify 2/5**. The separate 2/5 +source-supported figure accepts this valid occurrence under the registered +policy and does not claim complete occurrence recall. + +Compass's ambiguity refusals are safe but do not complete the requested positive +paths. Graphify's mixed routes do not satisfy a call-chain request; this alone +does not establish that every structural relationship in those routes is false. +Neither tool returns a reverse path. Compass reports three ambiguities and two +bounded direction mismatches; Graphify reports five missing directed paths. +These receive **no global unreachability credit**. Forward source witnesses +cannot prove global reverse absence. + +The [review](../../benchmarks/agent_query/directed_path_development_review.json) +retains the executable/graph/registration hashes, raw outputs, identities, +source spans, alternate-occurrence adjudication, and all failures. Its first +audit attempt stopped because it assumed Rust occurrences covered only the +terminal method name; the corrected check requires the exact qualified source +expressions. No graph, request, or witness changed. This is selected development +evidence on reused graphs, with concurrent fixture qualification and no speed +claim. It establishes no directed-navigation lead. + +#### Terminal-cursor harness correction and remaining broad-query gap + +The benchmark previously treated any `next=` token as a continuation, including +the published terminal marker `next=none`. Redux's broad question therefore +received an unnecessary second request and an invalid-cursor error. The harness +now accepts one pagination footer, stops at `none` or a repeated token, and +ignores source/prose occurrences. Regressions cover real cursors, multiple +footers, legacy/discovery/typed footer forms, and LF/CRLF. All **99 benchmark +tests pass**. Graphify's documented budget continuation is unchanged. + +A query-only replay runs all 110 unchanged requests with the same binaries, +graph digests, source pins, and source working directories. Scores remain +**Compass 49/55, Graphify 46/55**. The sole outcome change removes the invalid +Redux follow-up: the question still fails its `miniKindOf` recall requirement, +now with exit zero and zero follow-ups. Every retained Compass capture is +byte-identical to its baseline page. Three Graphify query outputs vary in edge +order/content within their output budgets while scores and byte counts remain +unchanged; no whole-answer equivalence or causal claim follows. + +The first replay used the Compass checkout as its working directory, making +eight source excerpts unavailable. That attempt is explicitly invalidated and +retained, along with its later summary-generation error. No cache defect or +token improvement is inferred from it. The successful second replay preserves +both tools' original working-directory setup. A failed byte-equality assertion +also remains documented; it exposed the three Graphify variations rather than +a scoring change. The +[correction review](../../benchmarks/agent_query/cursor_harness_correction_review.json) +records exact runner, executable, graph, source, and raw-capture provenance. + +A separate post-output diagnostic leaves the product gap open: the original +Redux question reads 431 candidates in 73 probes but admits zero seeds and +reports bounded truncation. Shorter `kind of`, `kindOf`, `miniKindOf`, and +qualified-name questions recover source-located candidates. These are diagnosis +inputs, not replacements for the original failed question or extra comparative +passes. The specificity filter and phrase recall need a native reduction and +broader positive/negative evaluation before changing their behavior. + +During this investigation, help output incorrectly displayed an examined-edge +default of 128 even though runtime JSON and `DiscoveryLimits` use 10,000. A +numeric-prefix replacement intended for the 1,000 returned-edge ceiling also +matched 10,000. The help correction requires the closing delimiter. A native +regression failed before the change and checks both help entry points against +the runtime defaults. Verification passes **1,107 native tests, zero failed, +two ignored** across workspace libraries/binaries and help/product integration +targets. Workspace and help-integration Clippy pass with warnings denied, as do +formatting, diff, and the product boundary. Runtime query limits and graph/query +schemas do not change. Full fixture qualification was not repeated for this +help-only correction; the recorded pass qualifies query/cache commit `9b63873a`. + +#### Java varargs reduction: signature and call recall failures + +A [compiler-valid reduction](../../benchmarks/agent_query/fixtures/java_varargs/VarargsDemo.java) +now isolates the varargs issue found during jsoup review. Expected declarations +and call targets were written before extracting this diagnostic. `javac +17.0.8.1` compiles it, and `javap` descriptors/instructions independently confirm +the target overloads; compiled classes were not executed. + +The frozen export-binding binary preserves only **two of five** reviewed +declaration signatures: the boolean overload and ordinary arrays. Both +varargs-only `join` declarations render `join()`, and the prefixed overload +omits its trailing varargs parameter. More seriously, it preserves only **two +of five** reviewed calls: the boolean call and the uniquely named prefixed call. +Calls with string arguments, integer arguments, and an explicit string array +are missing. This reduction emits no wrong target for those three calls. + +The [diagnostic review](../../benchmarks/agent_query/java_varargs_diagnostic_review.json) +retains exact identities, source and graph hashes, compiler evidence, and the +unfixed failures. Initial inspection looked for a top-level signature; corrected +inspection reads `details.data.signature`. At that checkpoint, code inspection +suggested the producer assumed every spread parameter had a named `type` field; +AST inspection and a failed-before native regression were still required. This +was a post-jsoup-output development reduction. The correction below preserves +that original failure record. + +## Java varargs correction and repeated development comparison + +The native failed-before regressions confirmed the earlier diagnostic: the +pinned Java grammar represents a spread type as an unnamed child and its name +inside a variable declarator. The producer now preserves that type, its array +rank, the spread signature, and parameter references. Explicit array creation +arguments retain their dimensions. The resolver checks strict fixed-arity, +loose fixed-arity, then variable-arity applicability and requires sufficient +evidence for a unique overload. Receiver parameters do not add call arguments; +array parameters do not borrow their element class as a method receiver. +AST cache semantics advance from 5 to 6; the product remains 0.3.30. + +The original five-call reduction now resolves all five calls. A larger, +compiler-checked reduction exposes both missing and wrong targets: + +| Selected source occurrences | Before | After | +| --- | ---: | ---: | +| Correct target | 6/25 | 24/25 | +| Wrong target | 5/25 | 0/25 | +| Missing | 14/25 | 1/25 | + +Four wrong targets treated array arguments as scalar strings; another selected +boxing before primitive widening. `javac`/`javap` confirm the expected targets; +the classes were not executed. The remaining missing call passes a method +result with no proven type in Compass. Its preserved ambiguity is a known +recall gap, not a negative success. These deliberately constructed development +cases do not estimate population precision. + +The fresh paired five-language run `java-varargs-panel-a-02` completed all 110 +requests with the original questions and witnesses. Text checks remain +**49/55 Compass, 46/55 Graphify**; reviewed source paths remain **8/10 each**. +Selected relationship identity checks remain **17/21 versus 20/21**; +all-occurrence checks remain **17/21 each** with the disclosed corrected Click +witness. This repair produced **no score gain on those existing questions**. +All four non-Java Compass graphs and all five Graphify graphs are byte-identical +to the export-binding checkpoint. + +The pinned jsoup graph keeps 6,116 nodes and grows from 21,095 to 21,110 edges: +43 signature corrections, nine added calls (five production, four test), and +six added production type references, with no removed relationships. Every +changed signature and added relationship was reviewed against the pinned +source, including overload sets, receiver declarations, inheritance, and +occurrence spans. This reviews the entire observed delta, not the remaining +graph or community responsibilities. + +An upgrade from copied AST-v5 artifacts extracts both files again; a subsequent +run reuses both AST-v6 entries. Links, node fields excluding community labels, +and community member partitions match a clean build. The initial byte-equality +assertion failed because community numeric IDs are remapped against prior +state. The two upgraded graphs are byte-identical to each other; whole-graph +equality with the clean build is not claimed. + +Verification so far: 1,092 workspace library/binary tests passed with two +ignored; 250 product/cache/resolution contract tests and nine focused tests +passed; workspace and focused-test Clippy passed with `-D warnings`; format, +diff, product-boundary, and all 99 benchmark harness tests passed. The full +fixture qualification passed against final production sources, including release +frontend precedence, activation, determinism, and source-anchor checks. The first +final-source attempt was interrupted during release compilation; its missing +handle and absent process were confirmed before retrying. Its partial log is +retained and is not counted as a full pass. Review found +that a missing optional type vector could incorrectly prove a zero-parameter +declaration; that regression failed before an added exact-match guard and passed +afterward. The earlier fixture run passed but is superseded by that source +change. The second frozen comparison reproduces all ten first-run graph hashes +and the same scores. An additional array-receiver regression passed for spread, +ordinary-array, and trailing-dimension parameters without changing production +code. The first +harness discovery command pointed at the wrong directory and ran zero tests; +the corrected command ran all 99. The +[development review](../../benchmarks/agent_query/java_varargs_development_review.json) +records binaries, sources, graph hashes, all source judgments, cache differences, +and retained failures. No speed, fresh held-out, new MCP/directed-path, community +quality, or god-object diagnosis claim follows from this checkpoint. + +## Responsibility explanation evidence on the five-language panel + +Commit `232608ee` froze five natural-language questions and 20 source-backed +implementation facts before either tool answered those questions. This is a new +development arm on previously evaluated repositories, with the final Java +comparison graphs reused. It is not held-out or representative evidence. +Both tools received the same question, a requested 2,000-token budget, the +source checkout as their working directory, and no follow-up allowance. +All ten requests completed successfully. + +| Complete fact coverage in the returned response | Compass | Graphify | +| --- | ---: | ---: | +| Explicit correct implementation facts | 0/20 | 0/20 | +| Sufficient returned evidence for the full fact | 0/20 | 0/20 | +| Total stdout bytes across five requests | 39,740 | 53,306 | + +These native queries primarily return graph context. Names, navigation anchors, +and partial relationships remain useful, but they do not establish such facts +as shared router state, a file wrapper's exception behavior, listener snapshots, +or symlink-loop conditions. The result does not show fabricated prose answers; +there were no task-level mechanism assertions to score for prose precision. +Four Compass responses request resolution; the Click response returns +candidates. A source-reading/disambiguation workflow remains to be compared. +Compass `explain` advertises verified source; Graphify's other public operations +and a symmetric agent source-reading workflow are not excluded by this arm. + +Graphify's WalkDir response explicitly reports that its complete answer exceeds +the requested budget. All 26,609 bytes were retained, including 244 edge rows; +equal requested budgets did not produce equal answer sizes. No latency claim +is made while compilation shares the machine. + +Post-output inspection identifies one wrong Graphify call target: +`IntoIter::get_deferred_dir` is linked to `IntoIter::pop`, but the receiver at +that source occurrence is the `Vec` field `deferred_dirs`. Compass +keeps the valid call to `skippable` and has no corresponding wrong internal +`pop` edge. That does not recover the external vector call or establish overall +precision. The remaining additional node/edge assertions have not all been +source-reviewed; full response precision remains incomplete. + +The [frozen questions](../../benchmarks/agent_query/responsibility_questions_panel_a.json) +and [fact review](../../benchmarks/agent_query/responsibility_review_panel_a.json) +preserve exact source witnesses, raw-response hashes, all omissions, the budget +discrepancy, and the diagnosed edge. God-object responsibility judgments, +functional community quality and overall superiority remain unproven. + +### Bounded source follow-up for responsibility questions + +The [follow-up protocol](../../benchmarks/agent_query/responsibility_source_followup_panel_a.json) +was frozen in `62f60b29` before the source windows were read. Both sides get +one contiguous window of at most 8,000 bytes, beginning at the earliest exact +subject anchor returned by their initial query. A read requires one unique +file. All matching declaration anchors remain visible; choosing the window +origin does not resolve declaration identity. Oracle witness ranges do not +select the window. + +| Sufficient evidence after query plus source read | Compass | Graphify | +| --- | ---: | ---: | +| Chi | 2/4 | 2/4 | +| Click | 4/4 | 4/4 | +| jsoup | 3/4 | 3/4 | +| Redux | 1/4 | 3/4 | +| WalkDir | 1/4 | 1/4 | +| Total | 11/20 | 13/20 | +| Source payload bytes | 35,692 | 35,692 | +| Initial query plus source payload bytes | 75,432 | 88,998 | + +Graphify's two additional Redux facts concern reducer state updates and the +listener snapshot. Its returned anchor starts at implementation line 86; +Compass also returns overload declarations at lines 41 and 75, so its window +starts earlier and ends before those mechanisms. This is a workflow advantage +under the specified policy. It does not establish that omitting overloads is +universally correct. Compass likewise retains WalkDir's associated type alias +at line 538 and struct at line 566; neither ambiguity is silently resolved. + +The [review](../../benchmarks/agent_query/responsibility_source_followup_review_panel_a.json) +records all 40 evidence judgments and source/response hashes. Strict containment +of every complete frozen witness yields 10/20 and 12/20. Semantic review credits +one additional Chi fact per tool: the complete middleware construction and +shared pool/tree assignments appear before the partial last line, although the +window omits the later return in the witness. jsoup attribute filtering remains +incomplete because the window ends before the destination write and rejection +branch. These distinctions are preserved rather than treating partial ranges +uniformly as successes or failures. + +All ten reads succeeded. Click's window reaches EOF at 3,692 bytes; every other +window returns 8,000 bytes. The collector reads bounded whole files to validate +and hash them before slicing; payload bytes do not measure disk IO. No model +generated an explanation. This development arm measures evidence available to +an agent under one reading policy, with unequal initial query response sizes. +It does not measure best-possible workflows, source-reading latency, native +explanation quality, community quality, or god-object detection. + +### Literal identifiers in natural questions + +The responsibility responses exposed a retrieval gap: Click's question names +`_AtomicFile`, but generic `close` methods occupy all three seed slots. Commits +`090140f5` and `6711e3a3` add bounded declared-name lookup for underscore and +mixed-case compound identifiers embedded in prose. Ordinary words retain their +lexical rank; a missing compound does not turn partial names into exact hits. +All lookups share the existing work bounds, and incomplete name postings or +candidate admission cannot establish uniqueness. + +The first implementation exposed a second problem in the real Redux response: +the top `createStore` seed lacked an ambiguity flag while the other same-name +declarations had one. A regression with same-name declarations of different +kinds failed before correction. Exact source-name collisions now stay ambiguous +across ranking evidence; heuristic ranking orders them without resolving their +identity. Matched identifier components are retained even when later recall +channels cannot admit more candidates. + +The final fixed-graph rerun executes all 110 existing suite requests and the ten +responsibility queries against the same graph files and source pins. The +existing recall proxy remains **49/55 for Compass and 46/55 for Graphify**, with +no verdict changes or timeouts. The responsibility diagnostics show: + +- Click's first seed is now `_AtomicFile`, with exact-name provenance and a + matched identifier component. Generic secondary candidates and partial + coverage remain. +- All three Redux `createStore` declarations are exact-name seeds and all + three carry ambiguity warnings. +- WalkDir's associated alias and `IntoIter` struct are both exact-name seeds + with ambiguity warnings. +- Chi `Mux` and jsoup `Cleaner` outputs remain byte-identical. Single-word + capitalized subjects still use the earlier ranking. + +These are anchor-selection diagnostics on a development panel, not a new +explanation score. The earlier source-follow-up score belongs to its frozen +pre-change workflow. The +[development review](../../benchmarks/agent_query/literal_identifier_development_review.json) +records both candidate runs, failed-before regressions, final verification, +source and binary hashes, and actual response sizes. The first workspace +verification batch was intentionally stopped for the ambiguity correction and +is not counted as a completed baseline. Extraction was not rerun for these +query-only changes. Full response precision, new source-follow-up coverage, +held-out confirmation, god-object diagnosis and community quality remain open. + +### Source-defined community task pairs + +Commit `234753eb` freezes +[30 exact declarations](../../benchmarks/agent_query/community_task_pairs_panel_a.json) +and their source mechanisms before this task-pair membership audit. Earlier +comparisons had already exposed parts of these graphs, so this is a development +diagnostic. The three task pairs per repository yield 15 within-task pairs and +60 cross-task pairs. Both tools use the unchanged captured native graphs. + +All 30 declarations resolve uniquely on both sides. The +[review](../../benchmarks/agent_query/community_task_pairs_review_panel_a.json) +records identities, memberships, source witnesses and whole-community sizes. + +| Repository | Compass collaborator pairs co-located | Graphify collaborator pairs co-located | Compass cross-task pairs co-located | Graphify cross-task pairs co-located | +| --- | ---: | ---: | ---: | ---: | +| Chi | 3/3 | 3/3 | 0/12 | 0/12 | +| Click | 2/3 | 3/3 | 2/12 | 0/12 | +| jsoup | 2/3 | 0/3 | 0/12 | 0/12 | +| Redux | 3/3 | 3/3 | 4/12 | 0/12 | +| WalkDir | 3/3 | 3/3 | 12/12 | 12/12 | +| Total | 13/15 | 12/15 | 18/60 | 12/60 | + +These columns describe different tradeoffs. They are not a combined accuracy +score, and cross-task co-location is not a false-positive count. Only two of +the 15 collaborator pairs cross source files; both tools co-locate those two. +The purposefully small task labels do not partition all source responsibilities. + +Source review of all five split collaborator pairs finds the expected direct +call edge in the corresponding graph: + +- Compass splits Click `term_len` from `strip_ansi`, while placing `term_len` + with help-table layout. The source shows `measure_table` using `term_len`, + so there is a concrete reason for that cross-task grouping. +- Both tools split jsoup `isBlank` from `isWhitespace`. +- Graphify also splits jsoup `clean` from `copySafeNodes`, and + `parseBodyFragment` from the selected three-argument `parseFragment`. + +The five boundaries are not missing-call findings. They motivate testing +navigation to collaborators outside a community. Likewise, both tools place +WalkDir's handle budgeting, deferred-directory output and symlink-loop methods +in one community. Those mechanisms share iterator state; this does not prove +excessive responsibility. Whole-community size comparisons also reflect +different extraction granularity, including fields, parameters and containers. + +The bounded auditor reproduces all 150 tool/pair outcomes after hardening input +validation. All **109 developer-harness tests** pass, including ten new tests +for exact identity, ambiguity, missing assignments, integer-zero communities, +bounds and deterministic pair outcomes. A separate direct recomputation checks +the captured IDs and pairs, but it is not an independent semantic reviewer. +No Rust code or clustering algorithm changed in this iteration. Public +community/navigation workflow costs, broader membership precision, positive +god-object evidence, independent review and fresh confirmation remain open. + +### Public community-to-neighbor workflow + +Commit `7a6d6c97` freezes the +[one-follow-up protocol](../../benchmarks/agent_query/community_navigation_panel_a.json) +before capture. Every task starts at the community containing its first +source-defined declaration, prepared symmetrically from each tool's graph. +Starting-community discovery is not scored. The neighbor selector comes only +from returned member text matching the public seed file and terminal symbol. +Distinct matching labels remain unresolved; no expected ID is substituted. + +The [complete review](../../benchmarks/agent_query/community_navigation_review_panel_a.json) +records all 30 tool/task outcomes and the source-backed failure distinctions. + +| Measure | Compass | Graphify | +| --- | ---: | ---: | +| Community lists matching stored membership | 15/15 | 15/15 | +| Unambiguous follow-up label selected | 13/15 | 15/15 | +| Seed identity supported after one lookup | 5/15 | 9/15 | +| Direct collaborator identity supported | 4/14 | 8/14 | +| Neighbor calls reporting ambiguity | 8 | 6 | +| Required direct-call pairs present in graph | 13/14 | 14/14 | + +All 58 executed tool calls succeeded at the protocol/tool level. Two Compass +lookups were skipped because multiple distinct member labels matched. Successful +seed responses matched their stored displayed adjacency. That consistency does +not establish the precision of every returned edge. Chi's request-ID pair shares +context state and is excluded from the direct-call denominator. + +The failures expose separate improvement opportunities: + +- Compass's `get_neighbors` consumes the full exact/prefix/substring candidate + list from `find_node`. Unique displayed names `RequestID()`, `term_len()` and + `.follow()` still produce ambiguity with broader matches such as + `NextRequestID()`, `test_term_len()` and `.follow_links()`. +- Compass's Redux communities contain several member labels for the same seed + file and terminal symbol. Without declaration lines or IDs in the member + text, this policy cannot select the intended declaration. +- Click's `__exit__` and the selected jsoup names collide in both tools. Their + ambiguity responses often expose candidate IDs, and Graphify suggests + `path::symbol`. A longer disambiguation workflow remains a valid unmeasured + alternative; these failures do not prove navigation is impossible. +- Compass's successful WalkDir `push` response omits the reviewed call to + `DirList.close` at `src/lib.rs:906`. Both declarations are uniquely present, + but the captured Compass graph lacks that edge. Graphify stores and displays + it. This graph gap is separate from community grouping or selector ambiguity. + +Neither tool reaches its split collaborator pairs under this policy: Compass +has two such pairs, Graphify three. The earlier source review found the required +edges in all five cases. These different subsets are not equal denominators. + +The 60-second/1-MiB external response bounds are common, but native controls +are unequal: Graphify receives a generous explicit token budget and Compass +exposes whole results. Actual call text totals are 145,715 versus 51,605 bytes; +call response wire totals are 150,769 versus 55,173. Including initialization, +listing, requests and stderr, the session totals are 238,216 versus 94,443 bytes. +Different community sizes and success counts prevent a matched-success output +or latency efficiency claim. No cap or timeout occurred. + +All **119 developer-harness tests** pass, including ten new tests for selector +ambiguity, duplicate identities, direction and distinct-neighbor multiplicity. +A separate same-agent script checks all saved requests/responses, graph and +support-file hashes and identity/count summaries; it is not an independent +semantic reviewer. No Rust code changed or Rust tests ran in this iteration. +The workflow is development evidence on reused repositories, not a held-out +result, god-object diagnosis or overall superiority claim. + +### Exact-first neighbor lookup correction + +Commit `8f5eb5e5` fixes the broad-match ambiguity demonstrated above. +`get_neighbors` delegates first to the existing `find_exact_nodes` query helper; +only an empty exact candidate set uses the broader lookup. Exact IDs retain +case and precedence. Genuine normalized-name collisions remain ambiguous and +keep the same bounded, stable candidate list. The implementation reuses the +shared evidence-gated export-binding behavior rather than adding a second +resolver. Graphs and clustering do not change. + +The [complete rerun review](../../benchmarks/agent_query/neighbor_exact_match_review_panel_a.json) +uses the same frozen 15 tasks and one-follow-up policy. All ten graph hashes, +source declarations, selected labels and community texts are unchanged. Every +Graphify neighbor response is byte-identical to the baseline. + +| Measure | Compass before | Compass after | Graphify both runs | +| --- | ---: | ---: | ---: | +| Seed identity supported | 5/15 | 8/15 | 9/15 | +| Reviewed direct collaborator supported | 4/14 | 6/14 | 8/14 | +| Neighbor responses reporting ambiguity | 8 | 5 | 6 | + +Chi `RequestID`, Click `term_len` and WalkDir `follow` now resolve their exact +seed. The latter two expose their reviewed direct collaborators; the request-ID +pair has no direct-call requirement. No task loses a previously supported seed +or collaborator. Graphify remains ahead in this specific arm. + +Two Compass Redux member selectors still have multiple distinct labels. Click's +`__exit__`, the three jsoup seeds and Redux's `bindActionCreators` still produce +genuine neighbor ambiguity. WalkDir's `push -> DirList.close` edge remains +missing in the frozen Compass graph. The next navigation arm should use each +tool's documented source-qualified or exact-ID handles and examine whether +neighbor results identify the selected declarations. This label-only arm does +not measure the best possible longer agent workflow. + +All 58 executed tool calls succeed. Call text totals are 139,718 bytes for +Compass and 51,605 for Graphify; complete captured session bytes are 232,183 +and 94,443. Unequal community sizes and success counts still preclude a +matched-success efficiency claim. The public inputs, outputs and product +version remain compatible at 0.3.30. + +Verification: + +- Both failing exact-priority/collision-count regressions are preserved in the + initial log; the four focused neighbor tests then pass. +- All 58 MCP tests pass, including 38 library tests and 20 integration tests. +- Workspace library/binary tests: **1,101 pass, two ignored**. The MCP library + tests are included in this count, not additive. +- Product contract tests: **nine pass**. Workspace formatting, Clippy with + warnings denied, product boundary and the CLI build pass. +- Developer harness: **120 tests pass**. A comparison verifier exposed unstable + ordering in older missing-neighbor diagnostic lists. The auditor now sorts + missing/extra lists; the failing regression and initial capture remain. + Final recapture preserves all public responses and verdicts. Older diagnostic + list ordering is canonicalized only for comparison, not source interpretation. +- The first full MCP run also exposed a stale transport assertion from before + the shared renderer's compact `RESULT` header. Commit `500a4565` updates it + and verifies text equality with the rendered structured Agent View. The + failed run remains recorded; the complete rerun passes. + +Validation logs retain the existing core-test `unused_mut` warning and a macOS +linker unwind-table warning. No extraction, language or viewer code changes, so +those full qualification/JavaScript gates were not rerun. Source assertion +precision, god-object judgments, broader community usefulness, longer walks +and held-out confirmation remain incomplete. + +### Source-coordinate-assisted public navigation + +Commit `f660408b` freezes a stronger +[public resolver workflow](../../benchmarks/agent_query/community_identity_navigation_panel_a.json) +before capture. Both tools receive the exact task seed file, declaration start +line and terminal symbol. Starting communities are still prepared symmetrically. +After finding matching member rows, Compass uses structured `search_symbols` +results and Graphify uses `get_node` with its documented `path::symbol` form. +Only a uniquely source-matched returned ID becomes the next `get_neighbors` +input. The expected collaborator is scoring-only and cannot gate requests. +Each task permits one resolver and one neighbor lookup after the community. + +The [complete review](../../benchmarks/agent_query/community_identity_navigation_review_panel_a.json) +records every task and the provenance of its selected ID. + +| Measure | Compass | Graphify | +| --- | ---: | ---: | +| Correct returned seed ID | 15/15 | 15/15 | +| Completed neighbor lookup with that ID | 15/15 | 15/15 | +| Reviewed outgoing collaborator label present | 13/14 | 14/14 | +| Unambiguous target label after validated seed lookup | 10/14 | 11/14 | + +This is meaningful counterevidence to treating the earlier label-only failures +as inability to navigate. Existing public APIs can resolve all selected seeds +with the additional source-assisted step. No product code changed in this arm, +so the stronger results are not attributed to an extraction improvement. + +A completed lookup here means the returned ID matches the frozen declaration, +the request uses that ID, and the response has the expected successful heading. +It does not mean the legacy neighbor body explicitly reports its seed ID. +Likewise, Click's `close`, jsoup's `parseFragment`, and jsoup's `isWhitespace` +labels each map to multiple target declarations in both graphs. Their displayed +labels are not counted as unique destination identities. The earlier name-only +identity audit remains separately recorded; these different metrics must not +be silently substituted for one another. + +The only reviewed direct pair absent from the frozen Compass graph is still +WalkDir `push -> DirList.close` at `src/lib.rs:906`. Graphify stores and displays +it. All five earlier split-community pairs now expose the collaborator label +(two Compass, three Graphify); these unequal subsets remain descriptive. +All community memberships and displayed neighbor multiplicities agree with +their stored graphs. That does not establish precision for every extra edge. + +All **90 public tool calls succeed** with no timeout or cap failure. Compass +call text totals 156,976 bytes and response-wire totals 694,354; Graphify totals +55,402 and 60,410. Including initialization, listing, requests and stderr, the +session totals are **785,989 versus 102,213 bytes**. These are real costs of this +fixed workflow. Compass search supplies multiple candidates, source anchors and +richer structured evidence, while Graphify's lookup returns one node. Native +limits and semantic payloads differ; these totals are not a universal efficiency +ranking or an equal-token result. + +All **129 developer-harness tests** pass. Eight new resolver tests cover exact +anchors, collisions, truncation, schema errors and returned-ID provenance. A +missing-target-oracle regression ensures seed navigation can still be scored +when no expected destination ID is available. Final recapture after removing +target-oracle availability from workflow control flow retains all 90 response +packets and 30 task audits identically. A separate same-agent verifier checks +raw requests/responses, graph hashes, source-coordinate identity and adjacency; +it is not an independent semantic reviewer. Rust tests were not rerun because +this iteration changes only evaluation code/docs and reuses the validated binary. + +Next work should address the missing Rust indexed-receiver call, exact +destination identities in public call/navigation output, and bounded resolver +cost. Natural-language seed discovery, broader source precision, god-object +responsibility evidence, longer directed walks and held-out confirmation remain +open; the supplied declaration coordinates make this a different task from +unassisted discovery. + +## Rust indexed-receiver recovery + +The development protocol is frozen in +`benchmarks/agent_query/rust_index_receiver_development_registration.json` +(commit `6c70df5e`). Implementation `18bb37ea` follows bounded Rust receiver +syntax through source-proven scalar indexes into standard vectors, arrays and +slices. Field types retain their declaration context; nested qualified names +retain every module segment. Ambiguous imports/layouts, custom containers, +ranges, unknown index types, raw pointers and root-container method fallbacks +cannot establish an element-method target. AST cache semantics advance to 7; +the package stays at 0.3.30 and published graph schemas/history remain unchanged. + +All five Compass graphs were rebuilt from the same pinned source commits with +the original native-only arguments into fresh outputs. The frozen Graphify +graphs were retained byte-for-byte; both public MCP workflows were recaptured. +This arm does not compare extraction timing. The review and artifact hashes are +in `benchmarks/agent_query/rust_index_receiver_development_review.json`; +complete logs, graphs and transcripts are under `rust-index-receiver-03`. + +The complete graph comparison finds **one added call and no removed or changed +existing records**: WalkDir `IntoIter::push` calls `DirList::close` at +`src/lib.rs:906`. Source establishes `stack_list: Vec` and +`oldest_opened: usize`; the target method begins at line 1008. A separate +same-agent verifier checks the full graph-record delta, source bytes, caller +range and target identity. All five node arrays and community assignments are +unchanged; the other four Compass graphs are byte-identical. This is evidence +for the changed call, not precision for every existing graph assertion. + +The original 15 tasks, source witnesses, selectors and limits remain unchanged: + +| Source-assisted navigation measure | Compass before | Compass after | Graphify | +| --- | ---: | ---: | ---: | +| Correct seed ID and completed lookup | 15/15 | 15/15 | 15/15 | +| Reviewed outgoing collaborator label | 13/14 | 14/14 | 14/14 | +| Globally unambiguous target label | 10/14 | 11/14 | 11/14 | + +All 90 public calls succeed. All 45 Graphify response packets are identical to +the prior capture. Compass changes one neighbor text to include `close`; three +WalkDir resolver packets change only graph identity/view digests. The other +41 packets are identical. Compass totals 157,011 call-text bytes, 694,390 wire +response bytes and 786,025 full-session bytes; Graphify remains at 55,402, +60,410 and 102,213. Native payloads and controls differ, so these are actual +workflow costs rather than an equal-token efficiency ranking. + +Three target labels remain ambiguous for both tools: Click `close`, jsoup +`parseFragment`, and jsoup `isWhitespace`. The fix closes a known extraction +gap and produces a tie on this development panel. It does not establish overall +superiority, god-object diagnosis, broad source precision or held-out quality. +Explicit destination identities, source-grounded explanations and longer +source-verified directed walks remain next work. + +Final validation against unchanged implementation `18bb37ea` passed: formatting, +38 Rust language tests, 211 universal resolver tests, workspace Clippy, 1,101 +workspace tests (2 ignored), 9 product tests, the product-boundary check and the +complete production fixture qualification. The Python benchmark harness passed +129 tests. Source hashes remained unchanged before and after each native gate; +the frozen evaluated binary is byte-identical to the final build. Commands, +counts and log hashes are recorded in the review artifact. Broader real-repository +qualification and fresh held-out evaluation were not run in this development arm. + +## Explicit neighbor identities and relationship evidence + +Protocol `bde19bb3` freezes this development arm before implementation +`d51698dc`. It reuses all ten graph artifacts and the same five pinned source +repositories from the Rust recovery arm. All 15 tasks retain their original +community, seed resolver and neighbor calls. A new symmetric arm permits one +additional destination resolver call on each of the 14 direct-call tasks, +gated on an actually returned outgoing collaborator label. Both tools receive +the same target file, declaration start and terminal symbol for that follow-up. +This is source-assisted navigation on reused tasks, not held-out discovery. + +Compass neighbor results now carry `compass.query.neighbors/1`: exact seed and +destination node records and all matching relationship records. The query layer +preserves parallel records, self loops, endpoint direction, source anchors and +provenance under explicit adjacency/record/byte bounds. Text retains compact +neighbor lines and adds escaped identity/source details. The graph artifacts, +extraction, source trees, package version and historical realizations do not +change in this arm. + +A separate same-agent verifier recomputes every request, response, source-anchor +selection and full incident-record multiset. All 15 Compass projections match +their graphs, totaling 181 record appearances across the requests. That includes +records beyond the 14 reviewed source collaborators and is **graph consistency, +not broader source precision**. All 45 prior Graphify payloads and all 30 Compass +community/seed resolver payloads match the baseline, ignoring request IDs that +shift after the extra calls. All 15 Compass neighbor payloads change. + +| Development measure | Compass | Graphify | +| --- | ---: | ---: | +| Correct seed ID and completed neighbor lookup | 15/15 | 15/15 | +| Reviewed outgoing collaborator label | 14/14 | 14/14 | +| Globally unambiguous target label | 11/14 | 11/14 | +| Explicit target ID in direct neighbor response | 14/14 | Unavailable (0/14) | +| Correct target ID after one extra source-anchored resolver | 14/14 | 14/14 | + +Before this change neither tool emitted explicit neighbor IDs. Graphify's +neighbor response still emits labels, relations and source sites; the lack of a +full record projection is not a wrong-edge judgment. Its additional public +`get_node` call resolves all 14 source-matched targets, including the three +ambiguous labels. Compass's richer direct response avoids that extra identity +lookup for these tasks, but the extended workflow remains a tie. The extra +resolver uses supplied target coordinates; it does not autonomously reconstruct +an ambiguous edge from its label. All 14 reviewed pairs on both sides also have +the required directed call in their frozen graph. + +All 118 public calls succeed. With all four steps executed symmetrically, +Compass uses 193,385 text bytes, 1,228,383 response-wire bytes and 1,323,516 +full-session bytes. Graphify uses 57,404, 63,756 and 107,645 respectively. For +just the original three steps, response-wire totals are 1,017,434 versus 60,415 +bytes. These are observed costs with different native payloads and controls; +there is no equal-content efficiency or latency claim. + +Artifact hashes, commands and limitations are recorded in +`benchmarks/agent_query/neighbor_identity_development_review.json`; raw captures +and logs are under `neighbor-identity-02`. Final validation passed: formatting, +3 focused query tests, all 60 MCP tests, workspace Clippy, 1,106 workspace tests +(2 ignored), 9 product tests, the product-boundary check, complete production +fixture qualification and the final CLI build. The Python harness passed all +134 tests. Runtime/test hashes stayed unchanged during validation and match +`d51698dc`; the evaluated binary is byte-identical to the final build. The gate +retains its existing fixture-omission and compiler warnings in the logs. +God-object responsibility judgments, richer source explanations, broader +assertion precision, longer directed walks and fresh held-out confirmation +remain outstanding. + +## Directed endpoint identity and depth-limit correctness + +The registered development replay reuses the five source-reviewed two-to-four +call chains in Chi (Go), Click (Python), jsoup (Java), Redux (TypeScript), and +WalkDir (Rust), with all ten graphs frozen from `rust-index-receiver-03`. +Both tools receive the same endpoint file, start line and symbol. One public +MCP resolver call per endpoint returns candidates; only a unique exact source +match may supply an ID to the directed CLI path request. No graph ID is used to +construct requests. The protocol was committed as `98759ae8`, before capture. +This is source-assisted navigation on known development tasks, not autonomous +endpoint discovery, fresh extraction or held-out evidence. + +A separate native-label control was registered at `2cc02501` after observing +ID-input failures, before executing the control with the final binary. It uses +only the original five short-name pairs, with no retries or candidate changes. +Its results are kept separate: taking the best answer from either arm would +misrepresent both protocols. External deadlines and stream bounds match, but +native internal work limits differ; Graphify exposes no matching CLI depth +control. There is no timing or efficiency ranking. + +| Source-supported directed call chains | Compass | Graphify | +| --- | ---: | ---: | +| Public resolver IDs supplied to CLI | 4/5 | 1/5 | +| Original native short labels | 2/5 | 2/5 | + +The ID workflow resolves four Compass endpoint pairs and all five Graphify +pairs. Compass returns the reviewed chains for Chi, Click, jsoup and WalkDir; +Redux remains unresolved because `search_symbols` returns a function and an +export with the same source line and name. The frozen selector refuses to pick +one. Graphify succeeds for Redux; its Chi route starts at `Mux` rather than the +resolved `MethodFunc` and mixes references/membership with calls. It reports +no path for Click, jsoup and WalkDir with these ID inputs. Inspection of the +pinned Graphify CLI confirms it passes IDs through label scoring without an +exact-ID check. This arm measures endpoint handling across public interfaces +as well as path availability; it is not a pure path-search comparison. + +The native-label control preserves Graphify's Click and Redux successes. +Compass succeeds for Click and WalkDir and refuses three ambiguous requests. +Graphify's Chi and WalkDir routes mix structural relationships with calls; +jsoup reports no directed route. Those structural routes are not credited as +call chains, but this does not establish that the structural edges themselves +are wrong. Every successful chain was checked against exact declarations, +edge orientation, occurrence sites and pinned source. Compass selects a second +valid Click call at line 188 rather than the frozen line 181; literal frozen-site +agreement is therefore 3/5 and 1/5 for its ID and label arms, versus Graphify's +1/5 and 2/5. Conditional static call chains do not imply guaranteed runtime +execution sequences. + +The replay also exposed a correctness defect independent of the paired score: +a failed depth-limited directed search could claim a direction mismatch using +a shorter undirected route, even while a longer forward route existed. A native +regression reproduced that claim before the fix. A second regression reproduced +`explore` dropping incomplete status when no connecting path was returned. +The query layer now checks whether the depth frontier remains open after a +failed bounded search and preserves that status through exploration. Frontier +checks share the work budget and occur after the positive search, so they cannot +consume the budget of a still-viable shorter route. Closed dead ends and cycles +can still prove a complete negative result within the graph. + +All nine registered low-depth requests changed from `truncated: false` to +`truncated: true` with `bounded_truncation`; none now claims `direction_mismatch` +or `no_match`. All four positive Compass ID-path payloads and all ten Graphify +forward/reverse payloads are byte-identical to baseline. The path scores above +were already present before this fix: the improvement is truthful bound reporting. +Reverse probes receive no source-global absence credit. In particular, Chi's +reverse diagnostic combines a closed directed search with an incomplete +undirected search that nevertheless finds a connection; its bounded flag +remains visible. + +A separate same-agent verifier checks saved public request/response transcripts, +source-coordinate selections, CLI arguments, graph/source/binary hashes, full +paths and typed provenance projections. Its first attempt incorrectly required +raw graph and typed query evidence to have identical JSON structure; the retained +failure led to checking their explicit field/anchor projection instead. It is +not independent human adjudication. Raw captures, both native reproductions, +the failed verification attempt and the final verifier are retained under +`directed-identity-01` and `directed-identity-02`; artifact hashes and detailed +outcomes are in `benchmarks/agent_query/directed_identity_development_review.json`. + +Final validation passed: formatting, 24 focused query tests (including the +2,187-request four-node oracle), 38 CLI query tests, 60 MCP tests, workspace +Clippy, 1,106 workspace tests (2 ignored), 9 product tests, product boundary, +complete production fixture qualification and the final CLI build. The Python +harness passed 137 tests. Validated source hashes match implementation +`1ec835bf`; the evaluated binary is byte-identical to the final build. Existing +fixture-omission and compiler warnings remain in the retained logs. No version +or machine-schema bump was made. + +God-object responsibility judgments, richer explanations, broader source +precision, longer walks and fresh held-out confirmation remain unproven. + +## Native responsibility explanations and source verification + +Registration `4e6ccb25` froze a native `explain` comparison for the existing five +responsibility subjects and 20 implementation facts. It reuses the ten graphs +from `rust-index-receiver-03`. Both tools receive the same short subject name +and run in the pinned source checkout. A separate arm supplies the same subject +file, start line and symbol to one public MCP resolver, then passes a unique +source-matched returned ID to `explain`. No graph lookup chooses requests and +there are no retries or external source follow-ups. These are known development +questions, not held-out evaluation or automatic god-object judgments. + +Compass receives a 2,000-token connection budget and an 8,000-byte source cap; +Graphify's native `explain` has no equivalent flags. Both have the same external +120-second timeout and 16 MiB stream caps. Source availability is an observed +capability of these commands, not an equal-I/O or efficiency comparison. + +| Complete responsibility facts in returned evidence | Compass | Graphify | +| --- | ---: | ---: | +| Native short-label `explain` | 7/20 | 0/20 | +| Source-coordinate-assisted `explain` | 7/20 | 0/20 | +| Earlier query plus symmetric bounded source read (separate workflow) | 11/20 | 13/20 | + +Neither native command authors a mechanism explanation: explicit native +responsibility assertions remain **0/20 for both**. Compass's excerpts contain +all four Click `_AtomicFile` facts and three jsoup `Cleaner` facts. Their full +frozen source witnesses are returned, including the otherwise easy-to-misread +Click exception behavior: the `delete` argument is not inspected by `close`. +The Java excerpt ends at a partial line 206, before the attribute write needed +for the remaining cleaning fact; it receives no partial-fact credit. +Graphify returns useful relationships and source anchors, but no source excerpts +sufficient for these complete implementation facts. It can still support an +agent source-reading workflow, as the separate 13/20 result demonstrates. + +Graphify resolves all five subject identities in both arms. Compass resolves +three native subjects and four assisted subjects. Native `createStore` is +ambiguous across 27 source-backed candidates; its assisted search exceeds the +frozen 256-candidate bound and is refused. Native `IntoIter` is ambiguous between +an associated type alias and a struct; the supplied line resolves the struct in +the assisted arm. Go `Mux` and Rust `IntoIter` declaration excerpts include their +fields, but their separately defined methods remain outside those source spans. +Names and method relationships do not establish the missing responsibility +facts. This identifies a concrete next explanation gap: gathering the relevant +implementation evidence beyond the subject's declaration span. + +Native stdout totals are 24,476 bytes for Compass and 6,286 for Graphify; +Compass includes 9,620 raw source bytes. In the assisted arm, the totals are +24,308 and 6,286, with 11,448 Compass source bytes. These totals exclude resolver +traffic, whose raw transcripts are retained. A source excerpt is evidence rather +than an authored answer. Other printed graph relationships have not all received +source review; these fact scores are not full response-precision scores. + +Inspection exposed a separate provenance defect: `explain` labeled every source +excerpt `digest-verified`, including nodes without a stored digest. A native +regression reproduced that label, and checks cover same-length source changes, +matching and mismatching full-span digests, truncated returned prefixes, absent +files, malformed digests and all three CLI output formats. The query layer now +returns an explicit verification flag. A missing digest produces an unverified +current excerpt; malformed or mismatching digests prevent source output. The +existing containment and bounded-read primitives are retained. Verification +matches recorded bytes; it does not authenticate the graph or its semantics. + +A separate post-output Redux diagnostic selects the `kindOf` function from an +already captured public resolver response by its explicit kind and source site. +That diagnostic does **not** change the frozen ambiguous selection policy or any +paired score. The published function has no source digest. Its old explanation +claims verification; the new explanation says `unverified: no recorded source +digest`. All remaining output, graph bytes and source bytes are unchanged. + +All 19 paired explanation payloads and all ten resolver response payloads are +unchanged after the provenance fix: the selected excerpts in the comparison +already had matching digests. Thus the 7/20 evidence result is an observation +about existing native capabilities, not an improvement attributable to this fix. +A separate same-agent verifier checks saved requests/responses, commands, +source/graph/binary hashes, every rendered source line and the full-span digest. +It reuses the frozen resolver helper and separately verifies selected source +anchors; it is not independent human adjudication. + +Implementation `3a58309f` passed formatting, 4 query source tests, 39 CLI query +tests, all 60 MCP tests, workspace Clippy, 1,106 workspace tests (2 ignored), +9 product tests, the product-boundary check and a final CLI build. Validated +source hashes match the commit, and the evaluated binary matches the final +build. Extraction/viewer qualification and JavaScript gates were not rerun: +extraction, resolution, publication and viewer assets are unchanged. No benchmark +library changed, so the Python harness was not rerun; the new external collectors +and evidence verifier completed successfully. The nonfatal macOS linker warning +is retained in the reproduction log. Version remains 0.3.30. + +Detailed judgments and artifact hashes are in +`benchmarks/agent_query/native_explanation_development_review.json`; captures are +under `native-explanation-01` and `native-explanation-02`. God-object diagnosis, +responsibility synthesis, broader source precision, longer walks and fresh +held-out confirmation remain outstanding. + +## Recorded member source and a shared neighbor/source-window control + +Registration `bac936f9` freezes the existing five subjects, 20 responsibility +facts, graph snapshots and ten public endpoint-resolver responses. This is +known development evidence. No selector substitutions rescue Compass's Redux +candidate-limit failure. The opt-in `explain --source-members` implementation +(`6d4df994`) follows recorded outgoing containment through nested types and +returns callable spans in source order under one 8,000-byte source budget. +Default declaration excerpts are unchanged. This new Compass capability has +no claimed equivalent Graphify flag; its feature delta is not a paired win. + +A separate control gives each tool one public `get_neighbors` call with the +previously selected ID. It groups outgoing `contains` / `method` rows by their +returned file/start-line anchors, sorts them, and reads up to the next returned +anchor in that file (at most 4,096 bytes for its final anchor). All windows share +8,000 source bytes per subject. There are no extra pages, retries, fact-guided +selection or end-line advantages. Graphify's displayed relation sites are +checked against source declarations after capture. Windows do not establish +unique target identity. This is one reproducible agent policy, not an optimal +retrieval strategy or an equal-I/O experiment. + +| Subject | Compass member mode | Compass shared control | Graphify shared control | +| --- | ---: | ---: | ---: | +| Chi / Go | 3/4 | 3/4 | 3/4 | +| Click / Python | 3/4 | 4/4 | 4/4 | +| jsoup / Java | 4/4 | 3/4 | 4/4 | +| Redux / TypeScript | 0/4 | 0/4 | 2/4 | +| WalkDir / Rust | 3/4 | 1/4 | 2/4 | +| **Complete facts supported by source** | **13/20** | **11/20** | **15/20** | + +The earlier declaration-only native result remains Compass 7/20, Graphify +0/20; the earlier query-plus-source-read result remains Compass 11/20, +Graphify 13/20. Keep these workflows separate. None of these tools' native +renderings authors the requested mechanism explanations: explicit native +responsibility assertions remain zero. Source evidence is not a synthesized +answer or a god-object defect judgment. + +Member mode gains seven facts and loses one against declaration excerpts. +Separately defined Go and Rust methods become available, and the Java attribute +write now fits. However, Click's recorded getter span excludes `@property`. +The initializer and getter body alone cannot establish property semantics, so +that entire fact is denied. The shared windows retain the decorator and earn +that fact for both tools. Chi's route handler remains outside the native budget; +WalkDir's loop-check body is partial. Redux remains unresolved for Compass. + +Graphify leads the shared control by four facts: one Java, two TypeScript and +one Rust. Compass's returned Java field and Rust field/type anchors consume +window budget before later methods; Graphify exposes fewer such anchors. The +same policy therefore produces different coverage. No missing or partial code +is credited to close the gap. + +Exact literal witness coverage is 4/20 for member mode, 10/20 for Compass's +control and 14/20 for Graphify's control. The semantic scores above separately +allow leading indentation differences at callable-span starts and missing blank +separators between complete bodies. Both controls also omit the Click class +header, whose identity is already supplied by the verified selected owner; +all initialization, decorator and getter code is present. Every exception and +rejected fact is recorded individually. This is same-agent adjudication with a +separate verifier, not independent human review. + +All 54 native member spans match stored full-span digests and pinned source +bytes, including the returned prefixes of truncated members. Seven members are +omitted by the byte budget across Chi and WalkDir; no member source read fails +in this sample. All 130 returned membership anchors (69 Compass, 61 Graphify) +were checked against declaration lines. Nine saved neighbor request/response +pairs and every source window were verified. Compass reports no neighbor or +transport truncation; no Graphify truncation marker was observed. Neither fact +proves complete graph membership or general relationship precision. + +Native member mode returns 23,082 source bytes in 48,177 stdout bytes. The +shared control returns 27,673 source bytes for Compass and 35,673 for Graphify; +Compass's unresolved Redux subject contributes zero. Neighbor text totals are +26,497 versus 6,980 bytes; full MCP responses total 281,242 versus 7,534 bytes. +These figures exclude previously captured resolver traffic and do not measure +latency or equal computational work. + +Validation passed: formatting, 13 focused query tests, 40 CLI query tests, +60 MCP tests, workspace Clippy, 1,106 workspace tests (2 ignored), 9 product +tests, the product boundary and a final CLI build. Recorded Rust source hashes +match `6d4df994`; the final build matches the evaluated binary. JavaScript/viewer +and extraction/resolution publication gates were not rerun because those +surfaces are unchanged. Version remains 0.3.30. Discovery, metadata, source and +verification-work bounds have native regressions; stale or missing source +status remains explicit. + +The first external collector failed before any public request because of an +invalid hash-helper read bound. Its log and script are retained; the corrected +capture uses a fresh directory. A verifier parser initially included the summary +heading as a member; its failed attempt is also retained. The corrected verifier +passes, including byte-to-line consistency checks. Detailed judgments and hashes +are in `benchmarks/agent_query/member_source_development_review.json`; external +artifacts are under `member-source-02`. The next explanation work needs better +source context and selection, actual responsibility synthesis, and fresh +confirmation. This result does not establish overall superiority. + +## Exact source-constrained lookup and the remaining retrieval gap + +Registration `2ef40e95` keeps the same five repositories, graph/source pins and +20 facts, and adds explicit identity constraints: symbol, source file, declaration +start line and stored kind. These are supplied task inputs in a new development +arm; they do not retroactively rescue the old unscoped Redux result. Prior +sources and outputs were known when this arm was designed. + +Implementation `9cc6ba9e` adds `search --exact` and MCP `search_symbols` with +`exact: true`, plus optional file, start-line and kind filters. Exact IDs take +precedence; otherwise the existing normalized name index is read within the +unchanged candidate cap. All matching records survive unless an explicit filter +excludes them. No lexical fallback, inferred ownership, export-binding collapse, +or arbitrary winner is introduced. Filtering happens after the bounded index +read: a truncated singleton or empty result proves neither uniqueness nor +absence. Exact text requests keep the supplied bounds without automatic widening. + +The paired identity control uses the same supplied constraints. Compass receives +its supported fields directly; Graphify receives its existing `file::symbol` +lookup, and its returned source identity and declaration kind are checked against +the constraints afterward. Graphify is not claimed to accept a native kind +filter. Each tool receives one scored lookup, followed by one neighbor request +and the unchanged registered 8,000-byte source-window policy. Diagnostic replays +and negative controls are kept separate from those scored calls. + +Both tools resolve **5/5 subjects**. Compass now reaches the `createStore` +function at `src/createStore.ts:86`. Omitting the explicit `function` kind returns +both its declaration and its coincident export record; neither is silently +removed. Asking for declaration line 87 returns no match with complete lookup. +The original ten unscoped resolver response payloads are unchanged, including +Compass's old candidate-limit failure. All nine previously available neighbor +responses and source-window payloads are also unchanged. + +| Subject | Compass constrained lookup + windows | Graphify constrained lookup + windows | +| --- | ---: | ---: | +| Chi / Go | 3/4 | 3/4 | +| Click / Python | 4/4 | 4/4 | +| jsoup / Java | 3/4 | 4/4 | +| Redux / TypeScript | 3/4 | 2/4 | +| WalkDir / Rust | 1/4 | 2/4 | +| **Complete facts supported by source** | **14/20** | **15/20** | + +The three newly supported Compass facts concern Redux enhancer behavior, +dispatch state/reentrancy, and listener snapshots/unsubscription. Its returned +parameter anchors start early enough to include the enhancer body; Graphify's +first returned member anchor is later. Compass's final window reaches part of +line 312, and the observable/store-API fact remains unavailable. Graphify still +supplies one additional Java fact and one additional Rust fact. Thus the overall +lead in this workflow remains Graphify's, despite Compass's Redux advantage. + +Strict literal witness counts are 13/20 and 14/20. Both semantic scores retain +the prior Click allowance: the missing class-header line is supplied by the +independently verified owner identity, and the initialization, decorator and +getter code are all present. Every other credited fact has complete literal +witnesses. Neither tool authors the mechanism answers; these are source-evidence +scores, not synthesized explanations or god-object judgments. The earlier +11/20 versus 15/20 unscoped-window result and 13/20 native member-mode result +remain separate. + +Both tools now return 35,673 source bytes across the five subjects. Compass's +neighbor responses contain 33,061 text bytes and 372,829 full MCP response bytes; +Graphify's contain 6,980 and 7,534. Scored resolver responses add 3,039 text / +21,983 wire bytes for Compass and 619 / 1,094 for Graphify. This is not equal +compute, latency or response-size superiority. The verifier checks all 32 saved +public calls, pinned inputs, source windows and unchanged earlier payloads. +The additional 23 Redux membership anchors were source-reviewed, bringing the +reviewed membership-site total to 153; other relationship precision is unproven. + +Native checks exposed and corrected two response defects during development: +new exact-mode node limits initially retained excess search hits, and an empty +truncated search failed Agent View validation by claiming `no_match` without a +no-match diagnostic. Exact mode now bounds nodes and hits together; the view +preserves unknown match with partial execution. Search display also uses the +query engine's existing name normalization. Failed fixture construction and +overly strict test assertions are retained separately from these product defects. + +Final validation passed formatting, 37 targeted query/backend/binding tests, +20 output-contract tests, 41 CLI tests, 61 MCP tests, workspace Clippy, +1,106 workspace tests (2 ignored), 9 product tests, the product boundary and +CLI build. Validated source hashes match `9cc6ba9e`; evaluated and final binaries +match. JavaScript/viewer and extraction/publication gates were not rerun because +those surfaces are unchanged. Version stays 0.3.30. The separate same-agent +artifact verifier passes; this is not independent human adjudication. + +Per-fact judgments, command logs, failed attempts and artifact hashes are recorded +in `benchmarks/agent_query/exact_symbol_development_review.json`, with external +artifacts under `exact-symbol-01` through `exact-symbol-08`. Source selection, +responsibility synthesis, actual god-object defect evidence, broader edge +precision, longer walks and fresh confirmation remain unfinished. + +## Shared-state evidence prerequisite for cohesion analysis + +Registration `1c6f2a43` freezes 20 source-selected access sites: two state slots, +each used by two methods, in each of the existing five development repositories. +The subjects and earlier graph inventories were already known; this is not a +blind or held-out evaluation. Java includes `Cleaner.CleaningVisitor`, and Redux +uses closure variables rather than class fields. These are prerequisites for +state-sharing analysis, not equivalent whole-class cohesion samples. + +The diagnostic scans the same complete, hash-pinned frozen graphs for both +tools, with a 512 MiB bound per graph. It identifies endpoints by exact source +file, declaration line and symbol, retaining ambiguity. It separately checks +method-to-state contact records and occurrence provenance at the selected access +line. Calls on a field's type, containment, owner-type references and excerpts do +not count as state-access edges. It does not measure public query retrieval. + +| Subject | Compass state slots represented | Graphify state slots represented | Compass access sites | Graphify access sites | +| --- | ---: | ---: | ---: | ---: | +| Chi / Go | 0/2 | 0/2 | 0/4 | 0/4 | +| Click / Python | 0/2 | 0/2 | 0/4 | 0/4 | +| jsoup / Java | 2/2 | 0/2 | 0/4 | 0/4 | +| Redux / TypeScript | 2/2 | 0/2 | 0/4 | 0/4 | +| WalkDir / Rust | 2/2 | 0/2 | 0/4 | 0/4 | +| **Total** | **6/10** | **0/10** | **0/20** | **0/20** | + +All 20 accessing callable coordinates identify one node in both tools. Compass +has missing state endpoints at eight access sites and represented endpoints +with no connecting records at the other twelve. Graphify has no state endpoint +at any of the ten pinned declaration/introduction coordinates. There are no +connecting records of any kind or direction between any candidate endpoints; +the zero result is not caused by the diagnostic's relation whitelist. The +Graphify containers declare `directed: false`; saved endpoint order must not be +interpreted as native directed path support. The report preserves that flag. + +These results contradict using absent method/state links as evidence of low +cohesion in these subjects. They do not show independent responsibilities, +a god-object defect, poor whole-class cohesion, or overall tool superiority. +The extra six Compass declarations do not supply the missing access evidence. +Python's state coordinates are first assignments to instance attributes, so +those rows specifically test whether the graph represents those introductions. + +Code inspection locates concrete producer gaps at baseline `7aef6a0c`: + +- `walk_rust_evidence` in `compass-languages/src/evidence/build.rs` emits calls, + macro invocations and declaration references, but has no field-expression + access emission arm. The selected Rust field declarations already exist. +- `walk_java_evidence` in that module emits calls, construction, annotations and + type relationships, but has no ordinary field-access emission arm. Both + selected Java field declarations already exist. +- TypeScript identifier traversal calls `emit_callable_reference`; that function + explicitly skips local declarations without proven callable status. The two + Redux closure variables are declared but their ordinary value uses are lost. + Broadening that code requires a truthful value-reference contract, not + relabeling arbitrary state as callable. + +The existing member-access candidate projects to a `references` edge with +member-access provenance, so qualified field-access evidence can use an existing +relationship representation. The next production work belongs in language +fact emission and qualified resolution, with shadowing/ambiguity negatives, +precise occurrence anchors, bounded lookup, cache invalidation and affected +language qualification. Hub ranking cannot reconstruct these missing facts. +No producer, capability, runtime behavior or release version changes in this +checkpoint; the gaps remain open. + +`state_access_audit.py` replays source pins, clean checkout state, exact source +witnesses, graph hashes, candidate sets, all connecting records and its own +script hash. The committed registration and review live under +`benchmarks/agent_query/`; raw development artifacts and logs are under +`state-access-01`. The first collector attempt incorrectly required a directed +container and stopped on Graphify's undirected container; retaining that flag +instead permitted the registered stored-endpoint diagnostic. No partial result +was scored. Before registration, source-coordinate assertions also caught and +corrected off-by-one Redux/Rust anchors. + +The eleven focused auditor tests pass, including positive contact evidence, +shadowed targets, duplicate candidates, wrong relations/directions, occurrence +mismatch, constructor spelling, parallel records and bounded reads. The complete benchmark suite passes 148 tests. The saved +real-repository review replays byte-for-byte. No Rust/JavaScript tests or +extraction gates were rerun for this benchmark/documentation-only checkpoint; +previous production validation remains tied to its earlier commit. + +## Rust field-access correction and paired navigation control + +Registrations `4a1be265` and `56d7d559` fix the production contract, unchanged +20-site comparison and four known-ID-assisted public neighbor requests before +rebuilt graphs or follow-up outputs were inspected. Production commit +`390406c1` emits Rust `MemberAccess` occurrences and qualified `AccessesMember` +candidates for explicit field expressions. It reuses bounded source-type +inference and existing universal resolution, restricts targets to fields, +retains unknown/shadowed receivers as unresolved, and excludes method selectors. +Parallel occurrences keep exact field-identifier anchors. It does not infer +read/write effects, aliasing, independent responsibilities or god-object defects. + +AST cache semantics advance from 7 to 8 so older facts rebuild. Evidence/graph +schemas, advertised producer capabilities and package version stay unchanged; +published historical realizations are immutable. Graphs must be rebuilt to +receive the new evidence. The CI workflow now runs both new integration suites +explicitly because its library/binary test invocations would otherwise skip them. + +All five Compass graphs were rebuilt from the same pinned, read-only sources. +Graphify's frozen native graphs remain unchanged. The original 0/20 versus +0/20 report is preserved; it is not rewritten with the improved graph. + +| Evidence | Compass before | Compass after | Graphify | +| --- | ---: | ---: | ---: | +| Registered state-contact access sites, all five repositories | 0/20 | **4/20** | 0/20 | +| Registered Rust access sites | 0/4 | **4/4** | 0/4 | +| State slots represented, all five repositories | 6/10 | 6/10 | 0/10 | + +The four recovered sites link `IntoIter::handle_entry` and `get_deferred_dir` +to `deferred_dirs`, and `push` and `pop` to `oldest_opened`, at the registered +lines. Java and TypeScript still miss their eight selected contact edges; +Go and Python still lack the four selected state-slot declarations. Both tools +continue to identify all twenty accessing callable coordinates. + +Chi, Click, jsoup and Redux graphs are byte-for-byte identical to their frozen +controls, including all communities. jsoup and Redux still report two omitted +edges each; this checkpoint does not repair those partial publications. WalkDir +keeps all 288 nodes and all 1,206 earlier edge records unchanged, adds 174 +member-access references, and changes 122 node community assignments. It now +has 1,380 edge records. Recomputed clustering is an observable consequence, not +proof of improved communities. The verifier checks every added record's field +target kind, exact identifier bytes, enclosing source extent and provenance; +this is occurrence consistency rather than a compiler/type-resolution oracle +or full semantic precision review of all 174 records. + +The separate public MCP arm provides each tool its own exact callable IDs as +explicit task inputs, then makes one unfiltered `get_neighbors` request per +method. All eight requests succeed. Compass exposes the field identity and the +selected source-line occurrence in **4/4** replies; Graphify exposes neither +in **0/4**. Compass's complete neighbor nodes and records match its new graph. +This is a known-ID retrieval control with native defaults, not natural-language +identity discovery or authored responsibility explanation. It is not held-out. + +Compass returns 10,308 text / 139,303 full response bytes; Graphify returns +1,519 / 1,904. The larger Compass responses retain full records and repeated +occurrences; no token-efficiency or latency advantage is claimed. The scoped +four-site gain must not be substituted for the earlier five-language source +explanation comparison, where Graphify retained a 15/20 versus 14/20 lead. + +All six initial extraction regressions failed before the change. The final +seven extraction tests and three resolver/publication tests cover direct and +nested fields, indexed receivers, lexical shadowing, unknown/raw-pointer +receivers, duplicate fields, ambiguous imports, depth exhaustion, trait impls, +callable fields versus method selectors, cross-file targets, parallel anchors +and input-order determinism. An integration fixture initially lacked physical +source inventory and checked the wrong raw kind key; both were corrected. +Another assertion exposed an audit wording error: `member-access` is retained +in provenance, not necessarily in the optional `context` field. The earlier +wording is corrected. Focused Clippy also caught and corrected a test-helper +type-complexity warning. Failed attempts remain in the external logs. + +Final validation passed formatting, 45 Rust language integration tests, +237 resolver integration tests, 33 cache contracts, workspace and focused-test +Clippy, 1,106 workspace tests (2 ignored), 9 product tests, the product boundary, +full code-graph fixture qualification (including Markdown and the independent +React release-binary fixture gate), and 148 benchmark tests. The new CI command +also passes all ten new integration tests. The evaluated debug binary matches +the qualifying debug binary, and validated source hashes match `390406c1`. +Warnings retained in the logs include fixture publication omissions, a linker +warning and an existing unused-mut test warning; passing does not mean the logs +are warning-free. Hosted platform/packaging/browser matrices are not claimed. + +Verification and artifact hashes are recorded in +`benchmarks/agent_query/rust_state_access_development_review.json`; the complete +capture, fresh graph manifests, graph deltas, raw MCP transcripts, source checks, +verifier and validation logs are under `rust-state-access-01`. Remaining Java, +TypeScript, Go and Python state evidence, actual cohesion/god-object judgments, +authored explanations and fresh held-out confirmation remain unfinished. + +## Java field-scope compiler oracle and baseline + +Before changing Java extraction, commit `d1b701b5` registered a 44-case source +fixture. The prior five-repository registration remains unchanged. This is a +synthetic development challenge motivated by the four missing jsoup accesses, +not a fresh repository sample or a held-out score. + +The existing Java `java_value_types` map is keyed by declaration scope and name; +local declarations are inserted without block lifetimes. Reusing it for field +access would lose distinctions required by Java name scope. Local variables, +loop bindings, resources and catch parameters have different scope boundaries; +pattern scope depends on flow. Field selection also follows the receiver's +compile-time type. These rules are specified in +[JLS scope](https://docs.oracle.com/javase/specs/jls/se21/html/jls-6.html#jls-6.3) +and [field access](https://docs.oracle.com/javase/specs/jls/se21/html/jls-15.html#jls-15.11). + +The installed Amazon Corretto 17.0.8 compiler was invoked with `--release 17`, +`-proc:none`, `-implicit:none` and source/line/local-variable debug tables. +Fixture code was never executed. A bounded class-file reader records declared +fields, descriptors, synthetic flags and superclass/interface links. Captured +`javap -p -c -l -s` output supplies field instructions and source-line tables, +including compiler-generated lambda bodies. Registered expectations agree with +all **44 cases: 36 positive cases, eight negative cases, 45 field occurrences**. +Repeated fields on one line retain multiplicity. Inherited bytecode owners are +resolved to the actual declaring field; enclosing `this$0` instructions remain +visible but their compiler-marked synthetic targets are not source fields. + +Fresh native Compass and Graphify captures use the identical registered source: + +| Evidence | Compass | Graphify | +| --- | ---: | ---: | +| Graph nodes / edges | 53 / 78 | 43 / 62 | +| Registered source field declarations | 12/14 | 0/14 | +| Contacts to any registered field | 0 | 0 | +| Registered occurrence targets recovered | 0/45 | 0/45 | +| Negative lines with a registered field contact | 0/8 | 0/8 | + +Compass's absent declarations are the anonymous-class and local-class fields. +The compiler challenge also proves targets for resource-scope exit, flow-scoped +patterns, inherited fields hiding enclosing fields, typed/cast/array receivers, +and distinct lambda versus anonymous-class `this`. These must be explicit +coverage requirements or documented unsupported cases in the correction; +name-only fallback is not acceptable. + +This inventory does not score source-caller ownership, read/write classification, +positive edge precision, complete Java coverage, cohesion or god-object defects. +With no positive contacts, the empty negative controls provide no positive +precision evidence. Constant folding and arbitrary compiler desugarings make +bytecode unsuitable as an unrestricted source-occurrence oracle; this fixture +uses nonconstant fields and fails when its source inventory, source-line +coverage or expected multiplicity disagrees. No existing real-repository score +is increased by these synthetic results. + +The Compass executable is the same hashed binary as the previous qualified +Rust-field run. Graphify 0.9.67 uses its unmodified installed native extractor; +its existing stale skill-installation warning is retained, and no skill was +installed or used. Graphify's undirected container flag is preserved. This is +an extraction/representation diagnostic, not a build-speed or public-query +comparison. + +`java_state_scope_audit.py` supplies bounded capture and deterministic offline +replay. The 14 new tests exercise bytecode offsets and line boundaries, +multiplicity, lambdas, hiding, hierarchy ambiguity/cycles, synthetic flags, +source drift, missing/duplicate graph endpoints, wrong targets and absent edge +anchors. All **162 benchmark tests pass**. The saved compiler and graph reviews +replay byte-for-byte, and package/binary/source/capture hashes are checked. +No production Rust or JavaScript implementation changed in this checkpoint; +native Rust, browser and packaging gates were not rerun. Java production +field-access extraction and the unchanged five-repository rerun remain next. + +Committed artifacts are `java_state_scope_registration.json`, +`java_state_scope_oracle.json` and `java_state_scope_baseline.json` under +`benchmarks/agent_query`; complete compiler/graph captures, exploratory reports +and verification logs are under external `java-state-scope-01`. The registration +precedes compiler and graph observations. The graph inventory explicitly reports +unscored caller ownership rather than treating a matching target/line as a full +semantic-edge judgment. + +## Java field contacts: correction and unchanged development comparisons + +Registration `5c10c9d4` fixes the same 20 real-repository access sites and all +44 compiler scope cases before production work. Public registration `5548a864` +fixes four known-ID neighbor requests after implementation but before rebuilt +real graphs or responses were inspected. These are development controls, not +held-out questions. Production commits `09ca58e6` and `f2cacfeb` add bounded Java +field evidence and correct two reproduced type-selection defects. + +The extractor now distinguishes lexical values from source-declared fields, +retains block/loop/lambda/catch/resource lifetimes, and records exact field-token +occurrences. Declared nominal receivers, arrays, casts, direct constructors, +source-local field chains and single generic bounds can establish an owner. +Simple flow patterns are supported; unsupported flow masks possibly shadowed +bindings. Unknown receivers, inherited fields, unregistered local/anonymous +owners and exhausted inference do not acquire convenient same-named targets. +The generic graph projection remains `references`, with member-access provenance; +it does not classify reads/writes or establish runtime alias identity. + +Two counterexamples invalidated the initial production capture. An imported +`remote.Cell` incorrectly beat a visible member `Box.Cell`; compiler bytecode +confirms the member type's field. Two files declaring the same receiver type +also allowed field availability to choose one declaration. Failing regressions +are retained. The correction gives visible source types precedence over imports +and package prefixes, and checks nominal receiver ambiguity before field lookup. +Parser-free decisions cover absent/unique/duplicate types, lookup limits and +exact-source precedence. The compiler counterexample now publishes the correct +`p.Box::Cell::value` target. `java-state-access-01` remains superseded evidence; +its interrupted fixture qualification is not counted as passed. + +### Fixed real-source and compiler results + +| Registered evidence | Compass before Java correction | Compass corrected | Graphify | +| --- | ---: | ---: | ---: | +| Five-repository field contacts with selected-line anchors | 4/20 | 8/20 | 0/20 | +| Compiler fixture occurrence targets | 0/45 | 39/45 | 0/45 | +| Compiler fixture field declarations | 12/14 | 12/14 | 0/14 | +| Negative compiler cases with field contacts | 0/8 | 0/8 | 0/8 | + +All four selected jsoup sites now connect the exact callable to `safelist` or +`destination` with selected-line anchors. The four Rust successes remain. +Go/Python lack eight registered state-site declarations; TypeScript has four +state sites without contacts. The original denominator and source hashes are +unchanged. Synthetic misses remain explicit: `super` and inherited fields, +one qualified static-field use, anonymous-class accesses and a local-class +access (six occurrences across five cases). No unexpected registered target was +observed. A separate post-capture check matches all 39 supported contacts to +compiler field/enclosing-method pairs and source ranges; compiler lambda names +map to enclosing source methods. This check assumes the fixture's unambiguous +method names and is not a general overload adapter or blinded precision score. + +Fresh Compass builds use all five pinned read-only repositories; unchanged +Graphify 0.9.67 native graphs are reused. No build-speed comparison is made. +The Chi, Click, Redux and WalkDir graphs are byte-identical to the qualified +Rust-field baseline. jsoup retains all 6,116 nodes and 21,110 previous edges, +adding 3,896 field references for 25,006 edges total. Every added record passes +field-target, exact-identifier, provenance and source-owner checks; 26 initializer +owners require an independent source AST range because the graph's field source +range anchors its declaration token. These are consistency checks, not +compiler-grade target precision across jsoup. The final type correction adds +28 contacts beyond the superseded capture; their receiver declarations and +source expressions were inspected. Existing jsoup/Redux warnings each report +two omitted edges and remain visible. + +### Public retrieval and community impact + +Each tool receives its own exact callable ID and one unfiltered native-default +`get_neighbors` request per Java case, with no retries or source follow-ups. +All eight requests succeed. Compass returns field identity and selected-line +anchors in **4/4**; Graphify returns neither in **0/4**, consistent with its +missing field nodes. Compass's complete nodes and parallel edge records match +the stored graph with no truncation. Aggregate response text is 9,883 versus +3,313 bytes; wire payload is 108,999 versus 3,708 bytes. This is a known-ID +retrieval control, not identity discovery, authored-answer accuracy or an +efficiency win. All 227 Graphify package files verify unchanged. + +jsoup communities change from 41 to 42. Co-member pairs change from 1,110,372 +to 1,077,153: 796,307 retained, 314,065 separated and 280,846 joined. This ignores +numeric community renaming but measures only partition change. Replaying the +unchanged 75 source-selected task pairs gives identical outcomes: within-task +co-location remains Compass 13/15 versus Graphify 12/15; cross-task co-location +remains 18/60 versus 12/60. Cross-task co-location is not automatically wrong. +There is no new community-quality or god-object classification result. + +### Verification and retained evidence + +The final `f2cacfeb` source passes formatting; 27 Java language integration tests; +244 resolver integration tests; 33 cache contracts; workspace and focused-test +Clippy; 1,106 workspace library/binary tests (two ignored); nine CLI product +tests; the product boundary; full production fixture qualification, including +Markdown and the independent React release-binary checks; and all 162 benchmark +tests. The evaluated and qualifying debug binaries match exactly. All validated +production source hashes match the commit. The full fixture gate took 666 +seconds, including a seven-minute release build. Existing fixture omission, +linker and unused-mut warnings remain visible. Hosted CI, full platform, +packaging and browser suites are not claimed. + +AST cache semantics advance from 8 to 9; users rebuild graphs to obtain the +facts. Package version remains 0.3.30; graph/evidence schemas and producer +capabilities are unchanged. Published history is immutable. The committed +`java_state_access_development_review.json` contains result summaries, source +and capture hashes, missing cases and verification commands. External +`java-state-access-02` retains complete graphs, raw public responses, compiler +consistency proofs, failed attempts, deltas and replay scripts. The original +registrations and baseline reports are preserved. Broader target precision, +authored explanations, longer walks, actual god-object judgments and held-out +confirmation remain open. + +## Real Java source-binding census: independent field precision + +The earlier 3,896-record jsoup check established occurrence/endpoint consistency, +not semantic target precision. Registration `2499e927` now fixes all **88 Java 8 +base-source files** (1,150,637 bytes, including examples) before compiler binding +capture. It uses the existing pinned jsoup source and both frozen native graphs. +This is a complete census of that registered source set on a previously observed +development repository, not held-out or cross-language generalization. Java 11 +overlays, separately compiled package metadata and tests remain outside this +build configuration. + +A standalone auditor uses the public JDK +[JavacTask parse/analyze API](https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/source/util/JavacTask.html) +and source-tree bindings. Its +[source positions](https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/source/util/SourcePositions.html) +are converted from Java UTF-16 positions to exact UTF-8 offsets. Corretto +17.0.8.1 runs with `--release 8`, disabled processors, no implicit compilation, +matched cached dependency hashes and no project code generation/execution. +Compiler errors or incomplete/unbounded captures cannot produce a scored oracle. +No dependency is added to Compass execution or native tests. + +The compiler resolves 4,314 internal source references, plus 44 external fields, +55 array-length operations and 31 class literals. javac exposes the latter two +as field-kind elements; round 01 grouped them with non-source targets. Round 02 +retains them as separate intrinsic categories. That correction does not change +the internal denominator or either tool's results. Both rounds are preserved. + +| Source-declared evidence | Compass | Graphify | +| --- | ---: | ---: | +| Ordinary field declarations represented uniquely | 614/616 | 0/616 | +| Ordinary field references with exact target, owner and occurrence | 3,047/3,785 | 0/3,785 | +| Enum-constant declarations represented uniquely | 131/131 | 131/131 | +| Enum-constant references with exact target, owner and occurrence | 0/529 | 0/529 | +| Returned in-scope field contacts agreeing with the compiler | 3,047/3,047 | No contacts; precision unavailable | + +Every in-scope graph `references`/`reads`/`writes` contact to a field or enum +member is inventoried; the scorer retains wrong, unmapped, ambiguous and +unanchored records. All 3,047 Compass contacts match the compiler's source field +declaration, enclosing source owner and exact token span. No missing/ambiguous +identity or anchor failure occurs among these contacts. Graphify has no such +contacts, so an empty result cannot establish its positive precision. The +adapter preserves Graphify's undirected flag and never upgrades a line-only +record into an exact occurrence or directed use. Source-region identity is +checked; this is not a separate audit of every rendered qualified-name string. + +Compass still misses **738 ordinary field references and all 529 enum-constant +references**. Frequent missed targets include `TreeBuilder.stack` (51 uses), +`TokeniserState.nullChar` (47), `TokeniserState.eof` (41), and +`Parser.NamespaceHtml` (32). Source inspection confirms examples of inherited +state (`HtmlTreeBuilder` reading `TreeBuilder.stack`), statically imported +constants (`Jsoup.clean` reading `SharedConstants.DummyUri`), and unrepresented +anonymous-class fields (`expectedSize` and `i` in `Attributes.iterator`). These +examples do not classify every missing case. Missing contacts cannot establish +independent responsibilities or justify a god-object diagnosis. + +Qualification checks the source oracle against all 44 previously registered +scope cases and 45 independently bytecode-checked occurrences. An additional +20-record fixture covers two overloads, field/class initializers, lambdas, +anonymous/local classes, hidden fields, compound uses, folded constants, +external fields, array/class intrinsics, comments and Unicode. Unicode-escaped +identifier anchors remain explicit unsupported cases instead of guessed spans. +Fourteen new tests reject corruption, source drift, wrong targets/owners, +ambiguous identities, missing anchors and inappropriate Graphify span/direction +credit. All **176 benchmark tests and the product boundary pass**. Final whole-source compiler captures +are byte-identical, and both saved reviews replay exactly. + +`java_real_field_review.json` contains summaries, missing-field identities, +frequent missed targets and provenance hashes. Full raw bindings, every returned +contact judgment and all missing occurrences are retained under external +`jsoup-java-field-oracle-02`; `java_field_capture.py` and +`java_source_fields.py` provide reproducible capture and replay. The product +remains at `f2cacfeb`, version 0.3.30; this checkpoint changes only the auditor, +fixtures and documentation. Native Rust, JavaScript, platform and packaging +checks were not rerun. This strengthens semantic precision evidence for one +Java source configuration; authored explanations, longer walks, functional +communities, actual god-object judgments and held-out confirmation remain open. + +## Explanation retrieval: paired source-budget sensitivity + +Registration `35cb4aee` freezes five per-subject source quotas before capture: +2,000, 4,000, 8,000, 16,000 and 32,000 bytes. All 20 existing responsibility +facts, five pinned repositories, exact identity constraints and source-window +rules remain fixed. Both tools receive one public resolver request and one +public neighbor request per subject. Only returned outgoing `contains`/`method` +anchors determine source selection. Sorted windows end at the next returned +anchor; the last window is limited to 4,096 bytes. No witness, source-content +ranking or extra query selects the source. The latest `f2cacfeb` binary and +`java-state-access-02` graphs are used; Graphify's frozen native graphs and +installed package hashes are unchanged. + +This is a known development panel. Earlier questions and failures informed the +choice to examine budget sensitivity. The results are **source-evidence +coverage**, with no authored answers, held-out claim or production change. + +| Source quota per subject | Compass facts | Graphify facts | Compass actual source bytes, five subjects | Graphify actual source bytes, five subjects | +| --- | ---: | ---: | ---: | ---: | +| 2,000 | 8/20 | 8/20 | 10,000 | 10,000 | +| 4,000 | 8/20 | 8/20 | 19,673 | 19,673 | +| 8,000 | 14/20 | 15/20 | 35,673 | 35,673 | +| 16,000 | 19/20 | 18/20 | 59,542 | 53,417 | +| 32,000 | 20/20 | 18/20 | 64,644 | 53,747 | + +Literal-witness counts are one lower for each tool at every quota. The prior +Click allowance remains explicit: the class header alone is absent, while the +source-validated owner and every other required line are present. It cannot be +applied when identity is unverified or another required line is missing. + +At 8,000 bytes, every membership row and retained source interval is unchanged +from the earlier 14/20 versus 15/20 control. Added Java/Rust field contacts do not +help this membership-only policy. Changed jsoup/WalkDir resolver responses carry +new graph/view digests; jsoup neighbor differences are community metadata and +the corresponding serialized-byte requirement. +Full payload differences are retained, not silently discarded. + +The remaining Compass fact at 16,000 bytes is WalkDir's symlink-loop handling. +Earlier fields, methods and intervening comments consume the quota before its +implementation is reached. At 32,000 bytes, all four WalkDir witnesses fit. +Graphify's two remaining facts are Redux enhancer delegation and the complete +observable/store API. Its earliest returned member begins after the enhancer +implementation, and its last-member window reaches only part of the observable +implementation before the fixed 4,096-byte cap. Raising the global quota cannot +repair those intervals. This does not establish that Graphify cannot retrieve +that code with a different workflow. + +Payload costs remain unequal. Across the five subjects, Compass resolver +responses contain 3,039 text / 21,983 wire bytes and neighbor responses contain +33,061 / 372,871 bytes. Graphify returns 619 / 1,094 resolver bytes and +6,980 / 7,534 neighbor bytes. Larger-quota Compass coverage also consumes more +actual source bytes. Equal retained-source ceilings therefore do not imply +equal context, compute or total information cost. + +The reusable `source_windows.py` evaluator bounds files, aggregate source reads, +anchors and quotas; validates every anchor, including omitted ones; preserves +raw byte cuts through UTF-8; and checks source hashes before scoring. Eleven +new tests cover budget exhaustion, deduplication, order, final-window caps, +invalid anchors, path/symlink escapes, corruption, Unicode and the constrained +Click allowance. All **187 benchmark tests and the product boundary pass**. +The separate artifact verifier checks all 20 public calls, 153 membership +anchors and 50 window/scoring arms from raw transcripts and pinned source. +Independent repeated verification is byte-identical. The unchanged historical +8,000-byte policy is also replayed directly against each newly captured response. + +Committed `explanation_budget_registration.json` and +`explanation_budget_review.json` retain the protocol, every budget result, +actual costs, misses and artifact hashes. External `explanation-budget-01` +contains capture/replay scripts, raw calls, literal source windows, payload +deltas and verification logs. No native Rust, JavaScript, platform or packaging +checks were rerun because the product is unchanged; version remains 0.3.30. + +A 20/20 witness score does not establish complete answers to the original +natural-language questions or behavior of unseen callees. The next production +work should improve bounded explanation evidence selection and context costs, +then evaluate authored answers under a separately registered common workflow. +God-object defect judgments, longer-walk quality, functional community quality +and held-out confirmation remain open. + +## Optional member-name focus: bounded native explanation improvement + +Registration `1c80747a` fixes the existing five questions, source pins, exact +root identities, graphs and 8,000-byte source quota before this experiment. +Production commit `293582c3` adds `explain --source-members --member-focus TEXT`. +It uses normalized query terms to count distinct matches in recorded callable +names, prioritizes higher counts, and uses the existing source order for ties. +Snake-case names retain their whole token and components, following the existing +lexical index. No source text is read to rank. Unmatched members remain eligible; +focus neither selects an ambiguous owner nor changes membership or source bounds. +The output discloses normalized terms and the matches behind each retained member. + +The query library owns ranking and validation; the CLI parses and presents it. +Focus accepts at most 4,096 bytes and 32 distinct searchable terms. Empty or +unsearchable input, repeated options and focus without member mode fail explicitly. +All existing discovery, metadata, nesting, source-verification and retained-byte +limits remain in force. Missing digests and failed source reads keep their +individual statuses. Without focus, all five captured stdout and stderr streams +are byte-identical to the frozen baseline executable. + +The experiment passes each **full original question** as focus, without manually +choosing helpful method names or tuning individual questions after capture. + +| Native member evidence, 8,000-byte quota | Without focus | Full-question focus | +| --- | ---: | ---: | +| Chi | 3/4 | 4/4 | +| Click | 3/4 | 3/4 | +| jsoup | 4/4 | 4/4 | +| Redux | 2/4 | 2/4 | +| WalkDir | 2/4 | 2/4 | +| Total | 14/20 | 15/20 | + +There is one gain, `chi-4`, and no lost facts on this panel. Name matches bring +`routeHTTP` and related routing methods ahead of earlier methods without matching names, +so the routing witness fits. Literal coverage, before indentation normalization, +is 5/20 versus 6/20. Recorded callable spans can start at a declaration token +rather than its leading indentation; the independent verifier checks each +returned span against pinned source before normalized evidence scoring. +No missing-class-header allowance is applied to this native arm. + +Both arms retain 28,129 total source bytes. Focus increases stdout from 58,506 +to 60,942 bytes and charged full-span verification work from 28,636 to 29,287 +bytes. Name matches are a heuristic, not behavioral evidence or a general quality +guarantee. Broad or held-out questions may regress even though this panel did not. + +Remaining misses are substantive. Click's class header and `@property` decorator +lie outside callable spans. Redux's enhancer and complete store/observable API +are not fully represented by member excerpts. Six returned Redux callables lack +recorded source digests in both arms; native output correctly marks those +excerpts unverified. The external audit checks current pinned source without +upgrading the native provenance claim. WalkDir still lacks complete symlink-loop +and contents-first witnesses. Moving `check_loop` earlier does not also retrieve +all surrounding evidence required by the loop fact. + +**This is a Compass before/after experiment.** Graphify has no equivalent native +member-source/focus flag in the recorded interface. The separately registered +paired public-neighbor control remains Compass 14/20 versus Graphify 15/20 at +8,000 bytes. Its numbers must not be equated with or replaced by this native arm. +A common focused workflow must be evaluated on both tools before claiming a new +paired improvement. These are source-evidence results, not authored answers. + +Validation passes formatting, workspace Clippy, 19 focused/source integration +tests, all 42 CLI code-query tests, 1,106 workspace library/binary tests (two +existing ignores), nine CLI product tests, the product boundary, the CLI build, +and all 187 benchmark tests. Native tests cover late-member retrieval with the +same quota, duplicate terms, camel/snake case, Unicode, ties and shuffled input, +zero-match/default behavior, stale sources, ambiguous roots, invalid bounds and +CLI output formats. The initial compile failure from a wrong runtime-node +accessor is retained in round 01. The final source hashes match the production +commit and frozen evaluated binary. Existing unused-mut test warnings remain +visible. No JavaScript, browser, platform, packaging or extraction-fixture gate +was rerun because those production surfaces are unchanged. + +External `member-focus-02` retains all 15 CLI calls, source/binary hashes, +independent ordering/span/digest-status verification and identical repeated +replay. Its first verifier incorrectly assumed every source had a digest; that +failure is preserved, and the corrected verifier explicitly validates the six +unverified Redux excerpts. `explanation_focus_review.json` retains every fact, +member order, limit/provenance status, cost and artifact hash. Package version +remains 0.3.30; no graph schema, extraction, cache or history changes occur. +Authored answers, fair common-workflow focus comparison, longer walks, god-object +judgments, functional communities and held-out confirmation remain open. + +## Common member-name focus: paired negative result + +Registration `67e5550b` fixes a symmetric public-interface experiment after the +native-only improvement above. Policy and tests were committed as `6c9876ee` +before fresh captures. Both tools receive the same exact identity constraints, +full questions and five source quotas. Each subject uses one resolver call and +one neighbor call. The same helper ranks returned outgoing `contains`/`method` +labels by distinct normalized question-term matches. A shared file/line group's +score is the maximum score of one of its labels; duplicates and alternative +labels cannot accumulate weight. Source order breaks ties and unmatched groups +remain eligible. Fields, bindings and nested types are retained when returned by +either tool; no Compass-only kind filter or private graph metadata ranks them. + +The source intervals are fixed **before** ranking: next greater returned anchor +in the same file, or the existing 4,096-byte final-window cap. Reranking changes +visit order, never interval ends. The same raw-byte quota applies to both tools. +The original source-order controls are captured alongside the focused arm. + +| Source quota per subject | Source order: Compass | Source order: Graphify | Common focus: Compass | Common focus: Graphify | +| --- | ---: | ---: | ---: | ---: | +| 2,000 | 8/20 | 8/20 | 6/20 | 8/20 | +| 4,000 | 8/20 | 8/20 | 9/20 | 10/20 | +| 8,000 (primary) | 14/20 | 15/20 | 12/20 | 14/20 | +| 16,000 | 19/20 | 18/20 | 19/20 | 18/20 | +| 32,000 | 20/20 | 18/20 | 20/20 | 18/20 | + +**Reject this common name-first window policy as the default explanation +retrieval policy.** Its primary result regresses for both tools, and Compass +still trails Graphify. The favorable 4,000-byte result cannot replace the +registered primary result. This does not invalidate the separate native +callable-span 14/20 to 15/20 experiment; it shows that the improvement does not +transfer reliably to a different evidence layout. Native focus remains optional. + +At 8,000 bytes: + +- Both tools gain Chi routing fact `chi-4` but lose the `With` shared-state fact + `chi-1`. Seven matching routing/middleware anchors move first. The existing + query normalization removes `With` as a stopword in the full question, and its + unmatched window no longer fits. The unchanged total conceals this tradeoff. +- Compass loses Redux enhancer delegation (`redux-1`) and listener snapshot + semantics (`redux-3`). A matching `getState` binding at line 390 promotes a + 3,886-byte final window ending at line 489. Post-capture inspection of the + owner span shows that **3,759 bytes follow the end of `createStore` at line + 395**. That owner metadata was not used to select, clip or score the window. + A name hit can therefore spend most of the quota on subsequent source. +- Graphify loses WalkDir contents-first evidence (`walkdir-4`). Promoting the + 606-byte `check_loop` window leaves the `get_deferred_dir` window partial. + Neither tool gains the complete multi-method loop-handling fact at this quota. +- Click and jsoup have no fact changes at this quota. The existing Click + class-header allowance is preserved; literal totals remain one lower per tool. + +All actual retained-source totals equal the corresponding source-order totals; +no extra source quota explains these changes. At the primary quota each tool +retains 35,673 bytes across five subjects. Public response costs remain unchanged +and unequal: Compass resolver 3,039 text / 21,983 wire bytes and neighbors +33,061 / 372,871; Graphify resolver 619 / 1,094 and neighbors 6,980 / 7,534. +These are source-evidence scores, not authored answers, equal-token comparisons +or a claim of overall superiority. + +All 20 fresh public responses and their 153 membership anchors reproduce the +prior capture. All 50 source-order window/scoring arms match prior results. +A separate same-agent verifier independently checks normalization on this ASCII +question/label panel, every group score, all 100 ordered-window arms, raw source +bytes, transcript costs, witness judgments and historical comparisons. Repeated +verification is byte-identical. The shared helper also has Unicode tests; no +universal cross-runtime normalization equivalence is claimed. + +All **202 benchmark tests and the product boundary pass**. Fifteen new tests +cover frozen lexical constants, prior native question-term agreement, Unicode, +snake/camel case, duplicate terms and labels, maximum-not-union group scores, +source ties, ignored tool metadata, bounds, exact group permutations and fixed +source interval ends. No production code changes in this checkpoint; native +Rust, JavaScript, platform and packaging checks were not rerun. Product commit +remains `293582c3`, package version 0.3.30. + +`paired_member_focus_review.json` publishes every quota, subject, gained/lost +fact, actual cost and provenance hash. External `paired-member-focus-01` retains +fresh MCP transcripts, ranked group traces, 100 source-window arms, the Redux +boundary diagnosis and capture/replay scripts. The next retrieval work needs +accurate available source extents, preservation of explicitly named symbols, +and enough linked implementation evidence for multi-method facts. It must be +qualified under a newly registered common workflow, preserving this negative +result. Longer paths, authored answers, functional communities, actual god-object +judgments and held-out confirmation remain open. + +## Longer directed call paths: route selection remains a gap + +The five new endpoint pairs in `longer_path_witnesses.json` extend the earlier +chains to six calls in Chi, seven in Click (with a registered six-call +alternative), five in jsoup, four in Redux and four in WalkDir. These are +source-selected positive witnesses on known development repositories. They do +not establish shortest paths, unconditional execution or held-out accuracy. +Registration commit `0f3df063` precedes the new endpoint requests. + +Both tools use the same source symbol, file and declaration line. Compass uses +its public exact scoped search; Graphify uses `file::symbol` lookup with the +same source-coordinate check afterward. Each gets one lookup per endpoint, +then one directed CLI request with the returned IDs. All failures remain in the +five-task denominator. A separate native short-name control was registered at +`3eaefede`, after the Chi ID-interface failure was observed. It does not replace +or cherry-pick from the first arm. + +| Workflow | Compass | Graphify | +| --- | ---: | ---: | +| Public source-assisted IDs: supported call chains | 2/5 | 0/5 | +| Native short names: supported call chains | 1/5 | 1/5 | + +Compass's source-assisted successes are Chi and Click, each six calls. Chi uses +another valid `InsertRoute -> addChild` occurrence at `tree.go:234`; the frozen +witness occurrence at line 183 remains distinct. In the native-label control, +both tools succeed only on Click. Compass takes the text-output/writer branch; +Graphify takes the text-input/reader branch. The latter was independently read +from source after capture and accepted as a valid alternative, with no frozen +occurrence credit. Both tools' labels, coordinates, edge direction, provenance +and source anchors are retained in `longer_path_review.json`. + +The remaining results identify concrete gaps: + +- Compass's jsoup route uses instantiation and containment to reach a visitor + method, then calls `appendChild`. Its WalkDir route uses a call, return type + and containment to reach `from_loop`. These structural routes do not answer + a call-chain question. The jsoup depth-eight result is also marked truncated. +- A separate post-capture graph diagnostic finds every registered Compass call + step for Chi, Click, jsoup and WalkDir. The jsoup and WalkDir misses therefore + expose route-selection policy even though the required call edges exist. + Private-graph traversal is not credited as a public answer. +- Neither tool exposes Redux's returned named function `combination` at the + frozen coordinate. Returning that function from `combineReducers` is not a + call edge; substituting the outer function would invalidate the question. +- Graphify's CLI does not preserve the supplied public IDs in these Chi and + jsoup requests. Chi renders different endpoints; jsoup resolves both IDs to + one unintended node and exits with an error. Its WalkDir resolver returns a + different `next` coordinate. The separate label control prevents treating + these interoperability failures as pure path-algorithm quality. + +All 18 Compass depth probes are retained: 13 bounded empty responses, four +mixed-relation routes and one valid Click route at depth six. The empty bounded +responses do not assert complete absence. Reverse requests remain diagnostics, +with no source-global unreachability credit. + +The two arms are not an overall win: native labels tie, identity assistance +has a measurable cost, and unresolved/ambiguous cases remain substantial. +Resolver wire payload totals are 42,349 bytes for Compass and 2,172 for Graphify; +forward ID-arm stdout totals are 64,086 and 258 bytes, with unsuccessful requests +retained. These byte totals are not equal-work or latency measurements. + +All **204 benchmark tests and the product boundary pass**. The separate verifier +checks source pins/hashes, graph and binary hashes, resolver requests and raw +responses, all 42 CLI invocations, path identities, directed edge projection and +source occurrences. Repeated verification is byte-identical. Failed verifier +attempts and a corrected draft occurrence-credit label remain in external +`longer-paths-01`. No production code changed; Rust, JavaScript, platform and +packaging suites were not rerun. Product version remains 0.3.30. + +The next production change should provide an explicit calls-only trail policy +through the typed query and public interfaces, retaining structural defaults, +ambiguity handling, occurrence provenance and bounded-work semantics. Qualify +it against shorter structural shortcuts, missing paths and these frozen real +questions. Named-function-expression identity needs a separate owning-layer +fix. Broader explanation, god-object, community and held-out claims remain open. + +## Explicit calls-only trails: native correction and fixed-graph replay + +Implementation `89916af9` adds an optional `callsOnly` typed request field, +CLI `node --calls-only`, MCP `get_node` parameter `calls_only`, and explicit +`ask` syntax `call path from SOURCE to TARGET` / `call chain from SOURCE to +TARGET`. Structural defaults remain unchanged. The filter applies to endpoint +role probes, traversal, depth-frontier checks and direction diagnostics. +Existing ambiguity, heuristic opt-in, source occurrence and work/response +limits remain in force. Undirected diagnostics charge examined incident edges +before excluding structural relations, so exhausting that budget still cannot +prove absence. + +Registration `4e22e1da` fixes the existing five source questions and frozen +graphs before replay. Its wording correction in `89916af9` precedes capture; +no endpoints or witnesses changed. `calls_only_trails_review.json` retains the +raw-artifact hashes and all outcomes, including unresolved Redux identity. + +| Compass workflow | Source-supported static call paths | +| --- | ---: | +| Old and new structural defaults, source-assisted public IDs | 2/5 | +| Explicit calls-only, source-assisted public IDs | 4/5 | +| Explicit call-path `ask`, same public IDs | 4/5 | +| Native short names, either policy | 1/5 | + +Chi, Click, jsoup and WalkDir return supported call edges. CLI, `ask` and actual +stdio MCP result bodies agree for all four resolved pairs. Twenty fresh public +resolver results remain unchanged, and all nine default stdout/stderr controls +are byte-identical. This is a native before/after correction on known questions. +Graphify's public path interfaces expose no corresponding relation filter; +its earlier ID and native-label controls remain separate, with no equal-feature +or overall superiority claim. + +The jsoup result requires a specific qualification. Its five-call route passes +through `Document.body` and the missing-body `appendElement` fallback. The +caller initializes a document shell containing a body, so execution feasibility +in this context remains unproven. Source review supports the static call edges +only. The initial verifier stopped on this unregistered alternative; the stopped +verification and subsequent source adjudication are retained. The route receives +no frozen-route or runtime-feasibility credit, and the input graph's existing +incomplete-coverage warning remains. No route-selection rule was retuned to +force the registered alternative. + +Validation passes: 56 targeted query tests, 43 CLI tests, 11 MCP tests, 1,106 +workspace library/binary tests (two existing ignored tests), nine product tests, +204 benchmark tests, formatting, workspace Clippy, the product boundary and the +CLI build. The independent calls-only oracle covers 729 four-node DAGs at three +depth bounds; other regressions cover cycles, structural shortcuts, occurrence +ordering, backend parity, limits and invalid inputs. Repeated source/capture +verification is byte-identical. External `calls-only-trails-01` retains logs, +requests, responses and verifiers. JavaScript, packaging, platform matrices, +extraction fixtures and CompassQL suites were not rerun because those surfaces +did not change. Version remains 0.3.30. + +Unscoped name ambiguity, Redux function-expression identity, runtime feasibility, +authored explanations, actual god-object judgments, functional community quality +and held-out confirmation remain open. + +## Shared public-neighbor call-path workflow + +Registration `553d2365` and harness `221e0b3a` fix a common FIFO breadth-first +search over public outgoing `calls` neighbors. The same five source endpoint +pairs, graph snapshots, depth-eight limit, 128-expansion limit, 512-request +limit and 16 MiB workflow response budget apply to both tools. Endpoint lookups +count toward the request and byte budgets. No graph contents or source files +select requests; the verifier reads them only after capture. + +The adapters preserve an interface difference: Compass returns destination +IDs and complete records, while Graphify returns labels. Graphify therefore +needs public `get_node(label)` bridge lookups, cached including failures. +Ambiguity is retained as an incomplete branch; no declaration is guessed from +the caller's file or the call-site location. This measures an identity-preserving +public workflow, not equal internal algorithm work or equal API capabilities. + +| Repository | Compass | Graphify | +| --- | --- | --- | +| Chi | Six supported static calls | Intermediate `Method` label ambiguous | +| Click | Six supported static calls, stdin branch | Intermediate stdin/stdout labels ambiguous | +| jsoup | Five supported static calls, `createShell` route | No outgoing calls at the starting node | +| Redux | Endpoint unresolved | Endpoint unresolved | +| WalkDir | Four supported static calls | Endpoint resolves to the wrong source coordinate | + +The workflow yields **4/5 versus 0/5 source-supported static call paths**. +Graphify's native-label path already succeeds on Click in a separate arm; +this result identifies a public-neighbor identity gap rather than inability to +find that graph path. Empty projections and pruned ambiguous branches receive +no global source-disconnection credit. No run exhausted its workflow budget. + +Every returned Compass parallel call record is source-checked. The Click stdin +alternative was already reviewed in the earlier Graphify native-label arm. +The jsoup node sequence follows the registered `createShell` route, but its +returned `appendElement` occurrences are the head/body calls at lines 70/71, +not frozen line 69. Both shell calls at lines 126/127 are retained. Only Chi +and WalkDir contain a frozen occurrence for every step. Static source support, +exact occurrence credit and runtime feasibility remain distinct. The earlier +native jsoup `Document.body` fallback caveat still applies to that earlier +result; this workflow does not replace it. + +All 110 public requests replay exactly, all 20 endpoint resolver results remain +unchanged, and all 76 neighbor responses match their full graph projections. +Source pins, source/graph/executable hashes, raw transcripts and the 227 installed +Graphify package file hashes are checked. Repeated verification is byte-identical. +`public_neighbor_path_review.json` retains the outcomes and external +`public-neighbor-path-01` artifact hashes. + +Compass used 72 requests and 1,558,220 response bytes; Graphify used 38 requests +and 11,001 bytes. These costs include unsuccessful lookups. Compass explored +more nodes and returned richer records; the totals do not establish an +efficiency advantage. Known jsoup/Redux graph coverage gaps remain explicit. + +All 218 benchmark tests and the product boundary pass. Fourteen new harness +tests include an independent simple-path oracle over all 4,096 four-node +directed graphs at three depth bounds, plus identity, truncation, direction, +cycle, caching, parallel-record and resource-limit cases. The first full suite +attempt hit an existing subprocess `killpg` permission error; the unchanged +repeat passed and both logs are retained. No Rust, JavaScript, packaging or +platform tests were rerun for this evaluation-only change. Product version +remains 0.3.30. Authored explanations, actual god-object judgments, functional +communities and held-out superiority remain unproven. + +## Next evidence to collect + +1. Re-review the invalidated pinned hierarchy scorecards from their sources. + The corrected fixture and selected real-source evidence above do not replace + those broader checks. +2. Extend source-proven loop/result/iterator inference to recover the remaining + fd misses. Evaluate TypeScript identity independently of the bounded query + binding proof above. Extend Java evidence beyond the corrected varargs + cases, including untyped method results and unresolved receiver forms. + Keep exact + build/source provenance for subsequent release comparisons; + the latest query correction has native and fixed-graph regression evidence. +3. Use the source-role census and connectivity breakdowns to review actual + responsibilities and source-edge correctness, including containment-heavy + modules and generic reference targets. Evaluate cluster responsibilities + and cross-community connections separately from graph consistency. +4. Extend the development navigation-path judgments to directed call paths, + longer walks, parallel source occurrences, broader ambiguity/unreachable + cases, and real-repository work exhaustion. A negative or limit outcome + must never count as a path or proof of global disconnection. +5. Use held-out repositories/questions and publish all failures, including + competitor wins. Separate extraction gaps, resolution gaps, retrieval gaps, + rendering gaps and oracle mistakes using actual source evidence. +6. Improve the owning production layer for reproduced failures, retain native + regressions, then rerun equivalent questions. Report category-level evidence + and uncertainty rather than claiming universal dominance. + +## Externally rated Blob cohort: original bounded run + +The first external god-object label panel uses Lech Madeyski and Tomasz +Lewowski's [MLCQ v1.1](https://zenodo.org/records/3666840), CC-BY-4.0, paper +DOI 10.1145/3383219.3383264. The frozen registration selects every repository +revision with at least two multi-reviewer unanimous `none` classes and two +classes whose reviewers all assigned `major` or `critical`. Those are +CloudStack `8d3feb100aab4a45b31a789f444038b892161eec` and Eclipse Platform UI +`e3bbb556534a1fb945e1036948325d14a8dd9c7a`. The obsolete Eclipse repository URL +failed; its current official repository supplied the same exact revision. + +The CSV has 4,019 Blob reviews covering 2,334 classes. All 55 classes and 104 +review rows in the selected revisions are retained. Eight classes form the +primary panel: four positive and four `none`; 47 retain uncertain ratings. +Repeated reviews by one reviewer do not add independent votes. All eight +annotated spans were read in full and pinned before querying. The positive +`DeprecatedUIWizardsAuto` case is a test class and stays in the denominator. +Authored responsibility notes remain separate from developer ratings and tool +answers. This purposive Java sample supplements the existing multilingual +panel; it does not establish population prevalence or cross-language detection. + +### Extraction and artifact admission + +Both tools received the same clean whole-repository source roots and native-only +extraction requests. Limits were registered before execution: 1,200 seconds per +extraction, 16 MiB per output stream and 256 MiB per graph artifact. Tool-native +file discovery and worker counts remain different. Timings below are single-run +operational observations with concurrent repository runs, not a controlled speed +comparison. Compass used the frozen **unoptimized Cargo dev binary**, with debug +information and incremental compilation disabled; Graphify used its installed +0.9.67 Python package. These timeout observations do not establish Compass +release performance. The build-profile disclosure leaves every original graph +hash, size, admission outcome and query result unchanged. + +| Repository/tool | Observation | Admitted for queries | +| --- | --- | --- | +| CloudStack / Compass | Harness timeout at 1,200.258 s; exit -9 | No | +| CloudStack / Graphify | Exit 0 in 88.899 s; 227,334,534-byte graph | Yes | +| Eclipse / Compass | Exit 0 in 671.990 s; 477,211,091-byte graph | No: above registered artifact bound | +| Eclipse / Graphify | Exit 0 in 65.246 s; 189,557,807-byte graph | Yes | + +Compass Eclipse reported 6,162 indexed files, 95,084 nodes, 347,974 edges and +317 communities, **with 62 omitted edges and a partial-graph warning**. Its +exit code is not evidence of complete coverage. Graphify reported 6,775 code +files for CloudStack and 6,162 for Eclipse; its admitted graphs contain +93,793/70,420 nodes and 340,129/258,146 edges, respectively. These counts are +coverage diagnostics, not correctness scores. + +The retained Graphify CloudStack stderr also discloses that **all 119 SQL files +were skipped because `tree_sitter_sql` was not installed**, and three other files +had syntax errors. The frozen installation and graph remain unchanged. The +whole-repository request did not yield equal emitted language coverage, so its +operational timing cannot isolate comparable extraction work. + +### Native ranking and separate source-assisted diagnosis + +The registered request is `god_nodes(top_n=100)`. At each cutoff 10, 50 and 100: + +| Tool | Positive class retrieval | `none` class retrieval | +| --- | --- | --- | +| Compass | Unavailable for all 4 cases | Unavailable for all 4 cases | +| Graphify | 0/4 | 0/4 | + +Compass's original timeout and artifact-limit failures remain explicit. They +are not four negative classification decisions. All eight reviewed classes +exist at the exact coordinates in Graphify's graphs and resolve through its +public `file::symbol` lookup, so their absence from the top 100 is not an +extraction miss. Unlabeled returned hubs cannot establish precision-at-k or a +false-positive rate. + +Across Graphify's 200 returned hub rows, 163 have unique graph label identities +and matching distinct-pair degrees; 37 remain ambiguous. No identity is chosen +using expected degree or the external rating. All eight source-assisted, +unfiltered neighbor calls match stored displayed direction/label/relation +triples (234 rows). They provide graph-consistency evidence, not source edge +precision, direct neighbor IDs or responsibility synthesis. These follow-ups +never replace the native ranking score. + +### Verification and next improvement + +The verifier rechecks raw requests/responses for 18 tool calls, source revisions +and hashes, graph hashes, binary and Graphify installation fingerprints, +registration provenance and class denominators. Its second run is byte-identical +(`420eb2fc950039450f77c0561aea887e905f0c1a80c21de9fc99c95e031c8878`). +All 237 benchmark tests and the product-boundary gate pass. No Rust or JavaScript +production code changed in this checkpoint, so their build/test matrices were +not rerun. Version remains 0.3.30. + +A two-second live sample during CloudStack extraction identifies SQL prefix +scanning as a likely bottleneck. Code inspection shows +`dollar_quote_delimiter_at` calls `statement_start_before` before rejecting +bytes that cannot begin dollar delimiters. Per-byte callers can repeatedly scan +the file prefix. CloudStack's largest SQL file is 411,080 bytes and contains no +dollar signs. This is a measured profiling lead, not a tested optimization or +whole-run attribution. A follow-up must preserve syntax semantics and compare +old/new results on pinned sources. Any larger-artifact query run must be +separately declared and retain the original admission failure. + +`mlcq_god_audit_review.json` records the full results and artifact digests under +external run `mlcq-god-audit-01`; registration, source witnesses, source reviews +and scorer are committed alongside it. This run proves neither Compass +superiority nor a validated god-object classifier. Authored explanations, +functional communities, broader source precision and held-out confirmation also +remain open. + +## SQL prefix guard: matched development-build diagnosis + +The SQL guard in `1a1f6a69` rejects impossible dollar-delimiter syntax before +scanning a statement prefix. Plausible delimiters retain the existing +statement-sensitive identifier handling. It changes no graph schema, producer +version, dependency or public command; Compass remains 0.3.30. + +`sql_prefix_scan_registration.json` froze four complete CloudStack SQL files +before candidate measurements: byte-size quartile indices 29, 59, 89 and the +largest index 118 out of 119 tracked SQL files at the original pinned revision. +Both binaries used the same copied input directory per file. Three runs per +binary alternated order, used fresh output directories and ordinary OS caches, +and retained the 180-second process, 16 MiB stream and 256 MiB graph limits. +No timeout was replaced or excluded. + +The frozen baseline and candidate are **unoptimized development binaries** with +matching explicit settings: debug information disabled, incremental compilation +disabled, two build jobs and the same offline parser bundle. The matching +candidate build is `bbc6a419`. The original default-debug +validation binary remains a separate artifact and was not timed. The host also +ran unrelated work; timestamped load averages are retained and do not prove +isolation. This is development diagnosis, not release-performance qualification. + +| SQL bytes | Baseline completed | Candidate completed | Baseline median | Candidate median | Full old/new graph equality | +| ---: | ---: | ---: | ---: | ---: | --- | +| 938 | 3/3 | 3/3 | 1.010 s | 1.152 s | Yes, all six graphs | +| 1,949 | 3/3 | 3/3 | 1.004 s | 1.077 s | Yes, all six graphs | +| 10,288 | 3/3 | 3/3 | 2.462 s | 2.284 s | Yes, all six graphs | +| 411,080 | 0/3 | 3/3 | unavailable | 174.175 s | Unproven: unavailable baseline output | + +Equality compares complete JSON documents with array order intact and no field +exclusions, alongside exact byte and canonical JSON hashes. All three candidate +graphs on the largest file match, with 1,949 nodes and 3,732 edges. Unavailable +baseline output prevents proving old/new equality for that file. No latency ratio is assigned to +that censored comparison. Small-file timing variation includes regressions; +three observations do not establish a general speed improvement. In particular, +the smallest file's candidate median exceeds the baseline by more than the +performance policy's 10% review threshold, so this run is not promoted as a +qualified performance baseline. + +Verification rechecks the source revision, size-based selection, complete source +hashes and copies, exact commands, binary/build hashes, stream hashes and sizes, +peak-RSS parsing and every successful graph. A second verification is +byte-identical. `sql_prefix_scan_review.json` retains all 24 outcomes, including +timeouts, timings, RSS availability and host-load observations. External raw +artifacts remain under `sql-prefix-scan-01`. + +Passed: four SQL unit tests, 34 SQL domain integration tests, formatting, +workspace Clippy, 1,108 workspace tests with two existing ignored tests, nine CLI +product tests, code-graph fixture qualification, all 237 benchmark tests and the +product-boundary gate. The fixture gate's first attempt failed its missing +parser-bundle preflight; the retry used this worktree's already downloaded bundle +with an identical vendored definitions digest and passed. Both attempts remain +in the report. The matched-build SQL and product checks also pass. Hosted +platform, packaging and the release performance matrix were not run for this +development diagnosis. + +This change does not implement god-object classification. The original MLCQ +whole-repository timeout and artifact-admission failures remain unchanged. The +registered whole-CloudStack follow-up and separately declared 1 GiB Blob query +diagnostic are additional work; sample timing and graph repeatability cannot +stand in for their outcomes or for superiority over Graphify. + +## Larger-artifact Blob follow-up: ranking misses remain + +The separately registered follow-up raises the graph-artifact limit to 1 GiB +for both tools. It preserves the eight source-reviewed classes, native +`god_nodes(top_n=100)` request, cutoffs 10/50/100, 120-second MCP request limit, +16 MiB response limit and 64 MiB session cap. The larger limit was declared after +observing the original failures and Graphify outputs; this is development +evidence. It does not replace the original 256 MiB protocol. + +The SQL-prefix candidate's whole CloudStack extraction also timed out, at +**1,200.448 seconds**, exit -9, with no admitted graph. Its wall time includes +a recorded two-second process sample. The frozen unoptimized binary therefore +remains unavailable for CloudStack. The sample shows repeated fixed SQL regex +compilation in `add_access_matches`; source inspection confirms the patterns +are compiled per statement. A separate release comparison is registered before +any cache implementation or measurement. Neither this profile nor the completed +SQL samples prove that the full-repository bottleneck is solved. + +The 477,211,091-byte Compass Eclipse graph is now admitted under the declared +larger bound. Its **62 omitted edges and partial-graph warning remain explicit**. +Both frozen Graphify graphs are reused. Its CloudStack SQL dependency omission +and three files with syntax errors remain coverage limitations; its package and +graphs are unchanged. + +At every registered cutoff: + +| Tool | Positive classes | `none` classes | +| --- | --- | --- | +| Compass | 0/2 admitted; 2 unavailable | 0/2 admitted; 2 unavailable | +| Graphify | 0/4 | 0/4 | + +Both tools resolve all four Eclipse classes at the exact reviewed source +coordinates. Their absence from the ranking is distinct from extraction absence +or a negative classification. The following unfiltered neighbor observations +also show why connectivity alone does not establish a responsibility defect: + +| Eclipse class | External Blob rating | Compass record appearances | Graphify displayed rows | +| --- | --- | ---: | ---: | +| `BindingModel` | Positive | 36 | 22 | +| `SimpleValueProperty` | `none` | 54 | 52 | +| `CSSValueListImpl` | `none` | 11 | 11 | +| `DeprecatedUIWizardsAuto` | Positive | 21 | 19 | + +The `none`-rated property abstraction has more neighbor records than either +positive class under both tools. These counts include structural relations; +they are not complexity, cohesion, population precision or evidence that any +particular class needs refactoring. The positive wizard class is a test class, +as retained in the source review. + +All 100 Compass hub identities, stored degrees and stored source anchors match +its graph; all 100 connectivity summaries and their text rows match stored +records. Graphify again has 163 uniquely resolved labels with matching degrees +across 200 rows, with 37 ambiguous labels retained. All four Compass unfiltered +neighbor projections match 122 full records, and all eight Graphify projections +match 234 displayed direction/label/relation rows. These are graph-consistency +checks, with different identity exposure, not source-edge precision or an +efficiency comparison. + +The first neighbor audit incorrectly expected `null` for an unfiltered request; +the native typed response uses `relationFilter: ""`. Its mock test repeated the +same mistake, so four successful responses were marked invalid. Two regressions +fail before the auditor fix and pass afterward. The corrected auditor requires +the native string field and rejects missing/null/wrong filters. Raw captures, +the initial invalid verification and its verifier are preserved; no requests or +ranking cutoffs changed. Both corrected verification runs are byte-identical +(`a659988abe0c9e64449b8265f06e066425fb6963e340176ccfde8f0a1e258d3d`). +All 27 tool calls are checked against raw requests/responses. All 238 benchmark +tests and the product-boundary gate pass. This checkpoint changes evaluation +code and documentation; native production code remains the tested prefix guard, +so Rust/JavaScript/platform/packaging gates were not rerun here. + +`mlcq_admission_followup_review.json` retains the results, diagnostic warnings, +auditor correction and artifact digests. Diagnostic text replaces the local home +prefix with ``; hash-bound original logs remain external. The unchanged +release rebuild also confirms the copied regex-comparison baseline byte-for-byte. +Actual god-object classification, authored explanations, functional communities +and broader independent confirmation remain unproven. Version remains 0.3.30. + +## SQL access-regex cache: matching release comparison + +The SQL extractor now compiles its fixed access regexes—one read pattern and five +write patterns—once per process. The patterns, iteration order, captures and alias/CTE handling +are unchanged. A new native regression checks that every pattern is retained in +order and repeated calls reuse the same compiled storage. Public commands, +graph schemas and version 0.3.30 are unchanged. + +The registered diagnosis uses the same four complete CloudStack SQL inputs, +three repetitions per binary, alternating order and fresh outputs. Both binaries +use matching release settings: one codegen unit, thin LTO, abort-on-panic and +stripped symbols. An unchanged release rebuild confirmed the frozen baseline +hash before the cache edit. Build manifests, lockfile, toolchain and repository +configuration are unchanged. Ordinary OS caches and unrelated host work remain +limitations; timestamps, load averages and peak RSS are retained. + +| SQL bytes | Baseline median | Cached-regex median | Candidate / baseline | Full graph equality | +| ---: | ---: | ---: | ---: | --- | +| 938 | 0.596 s | 0.570 s | 0.956 | All six graphs | +| 1,949 | 0.580 s | 0.594 s | 1.024 | All six graphs | +| 10,288 | 0.657 s | 0.666 s | 1.014 | All six graphs | +| 411,080 | 13.121 s | 1.650 s | 0.126 | All six graphs | + +All 24 observations succeeded, and the complete graph JSON is equal across all +six runs of each input, with no excluded fields and preserved array order. +These are four development files selected during an earlier diagnosis. The +observed medians do not establish a confidence interval, whole-product release +qualification, a Graphify speed ranking or independent confirmation. Earlier +unoptimized observations, small-file regressions and whole-repository timeouts +remain unchanged. + +Validation passed: formatting, five SQL unit tests, 34 domain-extraction tests, +workspace Clippy, 1,109 workspace tests (two ignored), nine product tests, the +complete code-graph fixture gate, all 238 benchmark tests, the product boundary +and the matching release build. JavaScript source and viewer assets are +unchanged; standalone npm checks were not rerun. + +The separately registered complete-source CloudStack follow-up uses fresh +outputs, the same frozen release binaries, the original 1,200-second extraction +limit and the declared 1 GiB admission cap. It must preserve each failure and +partial-graph warning. Its result is pending at this checkpoint. Recovering +that graph is a prerequisite for evaluating the unavailable Blob classes; it +does not itself validate source correctness or god-object classification. + +All observations, binary/source digests and repeated verification are recorded in +[`sql_regex_cache_review.json`](../../benchmarks/agent_query/sql_regex_cache_review.json) +under external run `sql-regex-cache-01`. + + +## Complete-source release recovery and the remaining Blob ranking gap + +The registered whole-CloudStack follow-up completed with both frozen release +binaries on the same clean revision and full native discovery scope. Both +indexed 6,783 files and published 173,689 nodes, 502,158 edges and 2,153 +communities. Their 671,502,979-byte graph artifacts are byte-identical, SHA-256 +`b3a2f76d1367b740ae3c8a0ede2402f1f05dd078cdcdc562340c34a7e04e1c69`. +Both report **one omitted node and 45 omitted edges**, with zero quarantined +identity collisions. Preservation of these partial artifacts is not proof of +complete source coverage or relationship correctness. + +| Frozen release binary | Single wall-time observation | Original 256 MiB bound | Follow-up 1 GiB bound | +| --- | ---: | --- | --- | +| Before regex caching | 193.966 s | Exceeded | Admitted | +| With regex caching | 280.053 s | Exceeded | Admitted | + +The candidate took longer in this observation. The cause is unproven. The +four-file SQL improvement cannot establish a whole-repository improvement; +the registered fixed-order single observations are not a speedup experiment. +The baseline already completes in release mode, so recovery cannot be credited +solely to regex caching. The earlier unoptimized timeouts and original +artifact-limit failures remain unchanged. Registration +`sql_regex_cache_whole_repeat_registration.json` freezes three alternating +observations per binary, with CPU time, peak RSS, all failures and full artifact +comparison retained. No approved performance baseline follows from this panel. + +The separately registered release-server audit then made the same native +`god_nodes(top_n=100)` request and source-assisted diagnostic queries for the +same eight externally reviewed classes. CloudStack uses the fresh candidate +graph. Eclipse reuses its original frozen Compass graph, including its 62-edge +omission warning; it is not a fresh candidate extraction. Both Compass graphs +are queried using the same frozen release server. Graphify's original graphs +and environment are unchanged, including its omission of all 119 CloudStack SQL +files. This is development follow-up on known cases, not held-out confirmation. + +| Tool | Positive classes returned at 10 / 50 / 100 | None-rated classes returned at 10 / 50 / 100 | Exact source-assisted class resolution | +| --- | --- | --- | --- | +| Compass | 0/4 / 0/4 / 0/4 | 0/4 / 0/4 / 0/4 | 8/8 | +| Graphify | 0/4 / 0/4 / 0/4 | 0/4 / 0/4 / 0/4 | 8/8 | + +All classes are now admitted for both tools, so the native positive-class +ranking misses are no longer masked by Compass availability failures. Missing +ranking rows are not negative classifier decisions. Four none-rated classes do +not establish a false-positive rate for the many unlabeled returned hubs, and +source-assisted resolution cannot replace the native ranking score. + +Verification covers 36 raw tool calls. All 200 Compass hub rows have explicit +IDs, matching stored degrees and source anchors, and matching connectivity +summaries/text. Graphify resolves 163 of its 200 displayed hub identities +uniquely with matching stored degree; 37 ambiguous displayed labels remain +unresolved. All eight Compass unfiltered neighbor projections match 266 full +record appearances. All eight Graphify projections match 234 displayed triples; +that format does not expose neighbor IDs. These are stored-graph consistency +checks, not source-edge precision or authored explanation scores. + +Both the whole-run verification and the four-session query verification repeat +byte-for-byte. The reports preserve graph warnings, unchanged prior outcomes, +resource/build provenance and the slower full-source candidate observation in +`sql_regex_cache_whole_review.json` and `mlcq_release_followup_review.json`. +No production code changed after the validated cache commit in this checkpoint; +the previous native gates and 238 benchmark tests remain the applicable checks. +Actual god-object diagnosis, authored explanations, functional communities and +independent final confirmation remain open. Version remains 0.3.30. + + +## Registered complete-source timing repeat + +The separately registered alternating CloudStack panel completed all three +observations per frozen release binary. In execution order, wall times were +baseline 235.574 s, candidate 204.082 s, candidate 210.928 s, baseline 215.288 s, +baseline 213.526 s, candidate 203.430 s. Baseline median is 215.288 s; candidate +median is 204.082 s (ratio 0.948). The registered greater-than-10% median +regression flag is false. Median user/system CPU seconds are 260.56/23.68 for +baseline and 227.06/23.12 for candidate. All resource measurements and host-load +observations are retained in +[`sql_regex_cache_whole_repeat_review.json`](../../benchmarks/agent_query/sql_regex_cache_whole_repeat_review.json). + +Both verifier passes checked all six raw streams, resource measurements, +registered command arguments, frozen executable hashes, clean pinned source, +artifact admission and full graph hashes. Their reports are byte-identical. +Every graph is 671,502,979 bytes and matches the original published artifact, +including ordering and metadata. Each run extracts 6,783 files with zero cache +hits, publishes 173,689 nodes and 502,158 edges, and reports one omitted node, +45 omitted edges and zero identity collisions. Equality does not establish +source correctness or complete extraction. + +The initial 193.966 s baseline / 280.053 s candidate observation remains outside +this panel and unchanged. This new panel does not reproduce that slowdown, but +neither its cause nor a general speedup is established. No own compilation, +other extraction, query capture or large-graph verification ran alongside these +timed observations. Unrelated host work and ordinary OS caches were uncontrolled. +The repository was already used for development; this is neither independent +confirmation nor a Graphify speed comparison. Prior timeouts and the original +256 MiB admission failures remain unchanged. No new production code was needed +for this repeat; the candidate remains the previously validated SQL regex cache. + + +## Java enum references: qualified production and full-census follow-up + +Production commit `a8b4a490` adds enum constants to the bounded Java lexical +value index, preserving static value types, parameter/local/type-parameter +shadowing and exact member tokens. Registered constant-specific bodies retain +their method and field owners. Their fields shadow enclosing enum values; +access to a body-specific field requires lexical ownership of that exact enum +member, within the resolver budget. Enum values keep their enclosing enum type. + +Bare enum switch labels derive their target from the selector type. Unknown +selectors remain unresolved, including when a same-named enclosing field exists. +Qualified receiver lookup supports same-package types and preserves source-type +precedence over imports. Unregistered local/anonymous owners, general hierarchy +and cross-file value/type chains remain incomplete. AST cache semantics advance +from 9 to 10; rebuild graphs for the new evidence. Graph/evidence schemas and +package version 0.3.30 remain unchanged; historical realizations are immutable. + +### Compiler census: unchanged source and denominator + +The registered release follow-up uses the complete clean pinned jsoup tree, +the unchanged 88-file Java 8 compiler capture, the frozen pre-enum release binary +and Graphify graph. The candidate executable is bound to its qualified +production/build inputs and corrected test digests. Its SHA-256 is +`28ae29a3141164df250a237e88d8054af1bb00021b1dafd4387b674311b40889`. +The executable was frozen before the production commit was recorded; the +recorded inputs match that commit. + +| Source-reference kind | Pre-enum Compass | Candidate Compass | Frozen Graphify | +| --- | ---: | ---: | ---: | +| Ordinary fields | 3,047 / 3,785 | 3,106 / 3,785 | 0 / 3,785 | +| Enum constants | 0 / 529 | 355 / 529 | 0 / 529 | + +All 3,047 previously verified references are retained; 414 references become +newly verified. All 3,461 returned contacts in the registered cohort agree with +the compiler on target declaration, source owner and UTF-8 occurrence span. +Graphify has no positive-contact precision denominator. The candidate still +misses **679 ordinary and 174 enum references**. Declaration coverage remains +614/616 ordinary fields and 131/131 enum constants. No source or miss was removed +from the denominator. Both independent verifier executions produce identical +reports; they replay the same compiler oracle, not independent human judgments. + +The fresh baseline graph is byte-identical to the preserved original. Both +jsoup graphs retain a two-edge omission warning. The candidate keeps all 6,116 +node identities and all 25,006 original edge records, adding 670 `references`. +Of those additions, 414 are in the compiler cohort and **256 are in test sources +outside it**. All 670 pass source-token, line, provenance and applicable callable +containment checks; these checks do not establish binding correctness for the +256 unscored test references. Full per-contact reviews, misses and source hashes +remain available in the retained artifacts. + +### Other languages and community effects + +Before control extraction, a separate protocol fixed all four other existing +cohort repositories: Chi/Go, Click/Python, Redux/TypeScript and WalkDir/Rust. +All eight fresh-output observations succeed. Each candidate graph equals both +its paired baseline and preserved original byte-for-byte, including metadata +and array order. Warnings remain explicit, including Redux's two omitted edges. +Repeated complete verification reports are identical. These are preservation +controls on known development inputs; they add no new quality or timing score. +All 227 frozen Graphify package files and 58 package versions verify unchanged. + +Only `community` attributes change on 4,111 jsoup nodes. The community count moves +from 42 to 40. A post-change replay of all 75 unchanged source-defined task-pair +outcomes across the five repositories yields identical outcomes, and repeats +byte-identically. This small diagnostic does not establish functional cohesion, +ideal responsibility boundaries or improved communities. + +### Native checks and retained corrections + +Formatting, 38 Java language integration tests, all 533 resolver tests, 33 cache +contracts, focused and workspace Clippy, 1,109 workspace tests (two existing +ignored), nine product tests, complete graph-fixture qualification, 238 benchmark +tests, product boundary and the release build pass. The fixture gate includes +the independent Markdown and React checks. These suites overlap and must not be +summed into a unique-test count. No standalone browser/platform/packaging matrix +was rerun locally. + +The unchanged production baseline first fails seven of eight language tests +and three of six resolver tests. Retained follow-up failures caught constant-body +initializer ownership and an implementation regression in source-type/import +precedence. An initially invalid enum-static initializer fixture was replaced +with a valid own-field initializer that also failed before the ownership fix; +six positive fixture sources compile under javac 17 with `--release 8`. + +The first resolver scope negative looked for a nonexistent `file` scope and +therefore tested a missing scope. It now checks an existing `module` scope +separately, requiring that scope to exist, and retains missing-scope and depth +cases. The full resolver suite and focused Clippy pass after this correction; +the production binary is unchanged by the test-only correction. + +The [complete report](../../benchmarks/agent_query/java_enum_access_review.json) +retains both registrations, native logs and source/binary digests, all original +outcomes, full graph deltas, control results and repeated verification. This is +one previously inspected Java build configuration. Authored answer quality, +query usability, longer walks, functional communities, actual god-object +classification and final independent superiority confirmation remain open. + + +## Java dotted nominal owners: complete registered follow-up + +The resolver now joins an established dotted Java nominal receiver to its +canonical nested declaration. It preserves duplicate receiver/enclosing-owner +and package/type ambiguity before considering member availability. Exact +source declarations retain precedence, target-kind constraints remain enforced, +and nominal-prefix work shares the candidate budget. The implementation does +not infer nominal types from arbitrary value-expression chains. + +Production commit `be2fb542` follows the registration in `c5a94aeb`. The +[review](../../benchmarks/agent_query/java_dotted_owner_review.json) binds the +qualified patch, all 748 build inputs, frozen release binary, commands, outputs +and raw artifact hashes. The unchanged jsoup Java 8 compiler cohort contains +88 source files and 4,314 internal references. + +| Exact occurrence target and owner | Prior candidate | Dotted-owner candidate | Frozen Graphify | +| --- | ---: | ---: | ---: | +| Ordinary fields | 3,106 / 3,785 | 3,115 / 3,785 | 0 / 3,785 | +| Enum constants | 355 / 529 | 368 / 529 | 0 / 529 | + +All 3,461 earlier verified references remain. All 3,483 returned in-cohort +contacts match the compiler; there are 670 ordinary and 161 enum misses. Empty +Graphify contact sets have no positive-contact precision denominator. Both +Compass graphs retain two omitted edges. No denominator, oracle, source commit +or Graphify graph changed. + +All 6,116 nodes and 25,676 earlier edges remain. There are 49 added references: +22 in the compiler cohort, 21 in tests and six in the Java 11 overlay. All 49 +pass token, range, provenance and callable-containment checks. Those checks do +not establish semantic binding precision for the 27 outside-cohort additions. +The only changed node field is community membership, affecting 4,097 nodes; +other top-level graph fields are equal. Community count changes from 40 to 43. +All 75 existing source task-pair outcomes remain unchanged across the five +repositories in a post-change replay. This does not measure functional cohesion. + +All eight fresh Go/Python/TypeScript/Rust control extractions succeed, and each +complete graph equals its paired baseline and preserved original. Redux retains +its two omitted edges. Census, control and community verification reports are +byte-identical on repetition. Repetition checks consistency, not oracle +independence. The frozen Graphify environment still matches all 227 recorded +package files and 58 package versions. + +A separate compiler fixture improves from zero to four supported references +(three enum, one ordinary field). The earlier nested-expression fixture remains +at five of eight enum references and five of five fields. Its three missed +nested type-expression references are retained explicitly. Neither fixture is +included in the real-source denominator. A compatibility diagnostic reuses all +206 baseline version-10 AST cache entries with zero extracted files and produces +a graph byte-identical to the fresh candidate. No extraction, graph schema, +package version or historical realization changes are required; stored graphs +must be rebuilt to apply this resolver correction. + +Native qualification passes formatting, focused and workspace Clippy, all 536 +resolver tests, 1,109 workspace tests (two existing ignored), nine product tests, +the full code-graph fixture gate, 238 benchmark tests, product-boundary checking +and release compilation. These suites overlap. Standalone browser, platform and +packaging matrices were not rerun. The original failing imported-nested test +remains recorded; later budget/ordinary-field extensions pass the full suite. +Extraction durations are retained only as operational observations. This is a +known development census, not independent final confirmation or evidence of +better authored explanations, god-object diagnosis or functional communities. + + +## JSON graph cache coherence and query-cost follow-up + +The standalone JSON query server now derives its compact, full, and typed graph +views from one bounded read of an opened graph artifact. Its cache identity uses +the artifact's content digest. This addresses a reproduced case where a graph +changed while its size and modification time stayed the same: the old server +could answer one request from the old community cache and another from the new +graph. The old on-disk cache headers rebuild under new format markers. This +change does not alter the graph schema, extraction, historical realizations, or +the 0.3.30 package version. + +The [registered review](../../benchmarks/agent_query/graph_cache_coherence_review.json) +binds 749 qualified Rust and manifest inputs, the frozen release binary, native +logs, synthetic replay, and complete source-query controls. Formatting, focused +and workspace Clippy, 1,112 workspace library/binary tests (two existing +ignored), nine product tests, full code-graph fixture qualification, 238 +benchmark tests, product-boundary checking, and release compilation pass. These +suites overlap. Seven separate core integration failures also reproduce on the +unchanged committed baseline; they are recorded, not counted as passing. + +The synthetic panel checks 48 replacement cases across both binaries, two +repeats, legacy and typed graphs, three write modes, and absent/present disk +caches. All 432 raw calls verify against captured requests and responses. The +candidate uses the new graph in all 72 post-replacement observations; the +baseline's preserved-metadata stale-cache outcomes remain in the raw record. +Independent repeated verification is byte-identical. + +The query panel uses five frozen real-repository graphs (Go, Python, Java, +TypeScript, Rust) and a separate complete CloudStack diagnostic. Six fresh +sessions per graph run each fixed question three times. All 828 executed calls +complete with no tool or transport failures. All 46 available questions have +identical **full tool responses** between binaries. The Redux path question has +no exact graph endpoint; its 18 observations remain unavailable without a +substitute. This is unchanged-query preservation evidence, not better source +truth or a Graphify result. + +The correctness change has a measurable cost. Thirty-one warm question medians +regress by more than 10%: all six lightweight questions on each language graph +and CloudStack `graph_stats`. Their absolute medians range from about 1.65 to +19.96 ms on the five language graphs; CloudStack `graph_stats` is 130.17 ms +before and 747.95 ms after. Conversely, the available hub, neighbor, and path +questions improve in this local panel. For example, CloudStack `god_nodes` +falls from 4,320.25 to 1,252.60 ms, and jsoup `god_nodes` from 152.72 to +31.74 ms. Every cold and warm RPC duration, ratio, and response comparison is +in the review. Rehashing the complete graph on each request is a plausible +cause of the lightweight-query cost; the measurement does not isolate it from +other implementation changes. + +The median peak RSS of the mixed-query sessions rises from 78.7 to 120.6 MB +for Chi, 205.9 to 305.7 MB for Click, 527.7 to 730.3 MB for jsoup, 188.7 to +261.7 MB for Redux, and 58.2 to 80.3 MB for WalkDir. CloudStack has only one +baseline memory result (7.13 GB) and no candidate memory result: the timing +wrapper was terminated during teardown in the other five sessions. All five +missing measurements remain explicit; no paired large-graph memory claim is +supported. OS page cache and unrelated host activity remain uncontrolled. + +The correction improves a verified freshness failure and preserves all +available fixed query outputs, while adding memory and lightweight-query cost. +It does not establish better authored explanations, functional communities, +actual god-object classification, or overall superiority to Graphify. + +### Core integration fixture inference policy + +The seven core integration failures in the cache review reproduce on the +unchanged committed baseline. Their fixtures expect inferred semantic residue, +but create `BuildOptions` without an inference level. The public default changed +from `Max` to `Low` earlier; `Low` intentionally excludes inferred edges, so the +fixtures were not exercising their stated semantic-preservation scenario. The +test-only follow-up selects `Max` explicitly in seven tests and all 12 of their +build configurations. It leaves every assertion unchanged and does not change +the public `Low` default or production binary. + +All 13 tests in `loading_coverage` now pass under the pinned offline parser +setup. Formatting, focused core integration Clippy, workspace library/binary +Clippy, and 1,112 workspace library/binary tests (two existing ignored) pass. +The [fixture review](../../benchmarks/agent_query/core_inference_fixture_review.json) +binds the original seven failures, the sole changed Rust test file, the frozen +production binary, and the before/after native logs. This restores the intended +regression coverage; it does not prove any new graph query or god-object quality. + + +## Class-span ranking diagnostic on the labeled Blob cohort + +The [registration](../../benchmarks/agent_query/mlcq_class_span_probe_registration.json) +preceded a read-only, bounded scan of both frozen Compass typed graphs from the +earlier MLCQ release-server follow-up. It fixes an intentionally simple +alternative to topology degree: rank every source-located `class` node by the +inclusive number of lines in its stored source span, breaking ties by exact +node ID. This is a size diagnostic, not a responsibility or defect model. The +scan keeps the same 55 reviewed classes and original four-positive/four-none +primary panel; neither Compass nor Graphify was re-extracted or re-queried. + +The CloudStack graph contains 173,689 nodes and 6,373 admissible class spans; +Eclipse contains 95,084 nodes and 6,628. The preregistered exact file/name/span +join finds 48 of 55 reviewed classes uniquely. Seven uncertain secondary cases +remain unavailable, with no alternate identity selected. All eight primary +cases join uniquely. The four consensus-positive classes rank **131, 411, 426, +and 714** in their respective repository class lists; the four consensus-none +classes rank 3,532, 3,903, 4,333, and 5,692. Thus, size-only ranking retrieves +**0/4 positive and 0/4 none** at each declared cutoff 10, 50 and 100. The +earlier native hub panels also retrieve 0/4 positives for both Compass and +Graphify at 100; those original results remain unchanged. This exploratory +method provides no superiority result and should not be promoted as god-object +detection. + +The first scanner attempt failed because the node array followed more than one +MiB of graph metadata. Its raw failure is retained. A corrected streaming +scanner kept the same registered ranking, labels, graph hashes and byte bounds; +the complete 55-class verification repeats byte-identically. The +[review](../../benchmarks/agent_query/mlcq_class_span_probe_review.json) binds +both runs, all 55 joins, class counts, ranks and original native results. The +cohort is known, purposively consensus-enriched Java development data. Source +span measures neither functional cohesion nor independent responsibilities; +the graph producer versions and CloudStack partial-coverage warning also remain +explicit. + +## Full-class relation evidence inventory + +The [registration](../../benchmarks/agent_query/mlcq_relation_evidence_registration.json) +preceded a bounded, read-only inventory of the same two frozen Java graphs. It +requires direct directed `class --contains--> method/field` edges and a unique +class owner before attributing method `calls` or `references` edges to a class. +It preserves occurrence records separately from distinct targets, and records +relation confidence, exact source anchors, unresolved targets and missing +endpoints. This inventories stored graph facts; it is not an independent source +oracle or a god-object classifier. The all-class raw record includes 13,001 +class IDs and their counts. The [public review](../../benchmarks/agent_query/mlcq_relation_evidence_review.json) +contains graph aggregates and all 55 previously selected reviews, bound to the +raw and verified SHA-256 digests. Two complete verifier runs are byte-identical. + +CloudStack has 173,689 nodes, 502,158 edges and 6,373 class nodes. Its direct +class-member edges yield 84,998 uniquely owned members and zero members with +multiple distinct class owners. Eclipse has 95,084 nodes, 347,974 edges and +6,628 classes, with 69,878 uniquely owned members and zero multiple owners. +Unowned method and field nodes remain explicit (CloudStack: 6,987 methods and +856 fields; Eclipse: 3,824 methods and 2,751 fields). All 55 review rows retain +their original label and exact identity join: 48 unique joins, seven unavailable +uncertain cases, and all eight consensus cases uniquely joined. + +The graphs contain enough links to investigate cohesion in a follow-up, but +their coverage has not been established against source. Of all class nodes, +4,020 CloudStack and 4,176 Eclipse classes have at least one owned method with +an own-field `references` edge; 2,325 and 3,250 have internal method calls. +Only 253 and 653 have an owned method with a foreign-field `references` edge. +Under this **registered `references`-only rule**, all eight consensus cases have +zero observed foreign-field references. This does not imply that their source +methods never access foreign state or that any class is cohesive. CloudStack +also has 1,042 `reads` and 6,161 `writes` edges, which the preregistered field +rule excludes; the older Eclipse producer has no such relation categories. +Combining them requires a separately declared analysis and source checks. + +No WMC, ATFD, TCC, responsibility score, ranking, new Graphify result or +held-out evaluation follows from this inventory. The two producer versions and +CloudStack's earlier partial-coverage warning remain attached to its results. + +### CloudStack `reads` and `writes` relation boundary + +A [separate registration](../../benchmarks/agent_query/mlcq_access_relations_registration.json) +fixed the endpoint-kind and unique-owner census before inspecting CloudStack's +1,042 `reads` and 6,161 `writes` edges. The complete +[review](../../benchmarks/agent_query/mlcq_access_relations_review.json) +accounts for every such edge in five source-kind/target-kind pairs: 863 +database-view reads, 178 query reads and one database-procedure read of a +database table; 6,160 query writes and one database-procedure write of a +database table. There are zero method-to-field `reads` or `writes` edges, zero +missing endpoints, and no exact AST relationship-site anchors in this frozen +graph. The all-55 sample join remains unchanged; the Eclipse rows are marked +as outside this CloudStack-only evaluation. Two verifier runs are byte-identical +and bind the frozen graph and producer hashes. + +These relations describe SQL dependencies and must not be added to Java +foreign-field access. The earlier `references`-only counts therefore remain the +applicable stored Java field-contact evidence for this probe. Their source +coverage and independent target accuracy remain unverified; the eight +consensus classes' zero observed foreign-field references cannot be treated as +zero foreign-state access or a god-object diagnosis. + +## Independent member-declaration check for rated Java classes + +The [registration](../../benchmarks/agent_query/mlcq_member_source_registration.json) +fixed all eight consensus-rated source files and both frozen graph hashes before +a public-JDK-17 syntax parse. The oracle parses those pinned files without +project dependencies or attribution. It selects each class by the previously +witnessed file, name and source line, then lists only its direct method, +constructor and field declarations. Compass's direct `contains` members are +matched by kind, name and overlapping source lines, with no first-candidate +fallback. Source files and graphs remain byte-identical before and after. + +All **95 source methods and 65 source fields** across the eight classes match +exactly one direct Compass member, with no extra graph method or field in those +classes. All 95 method start and end lines match; all 65 field end lines match. +Thirty-eight field start lines differ because the JDK includes preceding +annotations in the declaration start while Compass starts at the field token. +The JDK reports five explicit constructors, which this registered comparison +does not match to graph `constructor` nodes. Full per-member records, source +hashes, roles and both repeated-verification digests are in the +[review](../../benchmarks/agent_query/mlcq_member_source_review.json). + +The first graph comparison wrongly treated Compass's displayed `.name()` as +the source method name and therefore left all 95 methods unmatched; that raw +run is retained. A corrected scanner explicitly removes the display wrapper +before name matching, with the original source set, oracle output, graph hashes +and class IDs unchanged. Independent verifier runs and repeated JDK oracle +outputs are byte-identical. One externally rated positive class is an Eclipse +**test class**, so these eight cases cannot be described as eight production +god-object judgments. + +This establishes direct method/field *declaration coverage for this selected +panel*. It does not validate their `calls` or `references` targets, demonstrate +foreign-state access, measure cohesion, support a classifier, or generalize +beyond these known Java cases. Those relation/source checks remain prerequisites +for any responsibility score. + +### Explicit `this.field` source-token check + +The [registration](../../benchmarks/agent_query/mlcq_explicit_this_field_registration.json) +fixed a syntax-only check on the same eight files. A separate JDK parser +enumerated `this.name` tokens in direct method bodies, skipping nested class +bodies. A token entered the field denominator only if its selected name had +exactly one direct class field and was not a method call. Source UTF-16 offsets +were converted to exact UTF-8 byte positions before comparing directed +method-to-field `references` records and target IDs in both frozen graphs. + +Only **five** tokens met this deliberately narrow rule: four in Eclipse +`BindingModel` and one in CloudStack `DeploymentPlannersResponse`. Every one +has exactly one stored Compass edge from its source-matched method to its +source-matched field at the exact token bytes, with exact AST provenance and +no competing `references` record at that token. The oracle also records four +`this.field` sites inside a constructor and one `this.getClass()` method call; +all five are outside the registered direct-method field denominator. The +[review](../../benchmarks/agent_query/mlcq_explicit_this_field_review.json) +contains all ten source sites, their roles and limits, edge IDs and endpoints, +source and graph hashes, and byte-identical oracle and verifier repeats. + +An initial collector preflight used list comparison instead of set subset +checking for sample IDs and failed before reading either graph; the failed +attempt is retained and the corrected run uses the same registration and +frozen inputs. Five exact matches are useful source-to-graph evidence for +those sites, but far too narrow to validate the remaining field references, +foreign-state access, cohesion or god-object classification. A larger +independent relationship oracle is still needed. + +### Compiler-bound direct-field relationship census + +The [registration](../../benchmarks/agent_query/mlcq_javac_field_binding_registration.json) +expanded the same eight known Java files from explicit `this.field` syntax to +every direct-method field expression that a public JDK 17 compiler could bind +to a field declared directly in the witnessed class. The compiler used an +empty external classpath and no annotation processors, and its missing +dependency diagnostics are preserved. Only `VariableElement` bindings equal +to one direct source field entered the denominator; unresolved or other +bindings were not treated as absent field accesses. + +The JDK reported **265 bound direct-own-field tokens**: 142, 4, 43 and 2 in +the four CloudStack classes, and 55, 0, 4 and 15 in the four Eclipse classes +(in the fixed sample-ID order). It also found three same-named expressions +bound to nonfield symbols. All 65 direct source fields had compiler elements. +For every bound token, the frozen Compass graph has **exactly one** directed +`references` edge from the independently matched method to the matched field +at the exact UTF-8 byte interval, with exact AST provenance and no competing +record at that token. Conversely, all 265 stored method-to-own-field records +in these eight selected classes are represented in this compiler-bound set. +The five earlier explicit `this.field` controls preserve the same edge IDs and +targets. Source files and both graphs remain byte-identical; repeated oracle +and verifier outputs are byte-identical. + +The first compiler capture set a 1,000-error display cap. It is preserved; +the corrected capture raised the cap within the registered 10,000-diagnostic +bound and recorded all **1,047 compiler errors**. Both captures produced the +same 268 candidate bindings. The full errors, source tokens, graph endpoints, +per-case counts and hashes are in the +[review](../../benchmarks/agent_query/mlcq_javac_field_binding_review.json). +This is strong agreement on the selected **direct own-field** relationship +subset despite missing project dependencies. It does not prove recall for +unresolved, inherited or foreign fields; it does not measure ATFD, TCC, +responsibility defects, other languages or Graphify quality. The known rated +panel, including one positive test class, remains development data. + +### Rust `fd` collected-builder receiver replay + +The recorded `fd-shadow-02` failure above is now addressed by source-backed +Rust value flow. A `Result>` collected from a standard vector iterator +and a constructor returning standard `Result` can carry its element type +through the `Ok` arm, whole-value vector loops, and `iter().map` closures. +Custom `Result` or `Vec` aliases and constructors returning a different type +stay unresolved in the native regression. The preceding receiver-shadowing +regression still passes. Disposable AST cache version 11 invalidates older +extraction facts; the Rust producer capability identity remains version 2. + +Fresh run `fd-result-vec-03` reused the registered `fd` suite SHA256 +`34cddd72fb17386bfe29d42e1fd8c3e9f0683a9b16ddd06500492b93cb273721` +and pinned checkout `b422e5d8c9cffaa1ae43ba68e7b97a60fb3e8ae5`. +It rebuilt both tools' graphs in a new output directory. The Compass debug +binary SHA256 is `da2c565517ea7976`; Graphify 0.9.67 retains the recorded +binary SHA256 prefix `a7fdb4ac8985755b`. The run, graph digests, responses, +and commands are under the external evaluation workspace at +`runs/fd-result-vec-03`. The committed +[replay manifest](../../benchmarks/agent_query/fd_result_vec_replay.json) +records graph hashes and reviewed call deltas. Compass now passes **12/12** selected text oracles +versus Graphify **9/12**. Both pass the formerly Graphify-only +`execute_batch` callees row. On the nine shared passes, the median estimated +answer size remains higher for Compass, **288 versus 114 tokens**. These are +text-oracle outcomes on one known Rust repository, not an independent +cross-language superiority result or a speed comparison. + +The new graph has exact `calls` edges from `CommandSet::execute_batch` to +`CommandBuilder::push` at `src/exec/mod.rs:104`, `finish` at line 111, and +`exit_code` at line 116. The three other newly materialized call sites in +that file are source-consistent: `CommandTemplate::generate` at line 86, +`FormatTemplate::generate` at line 267, and the latter method in the test +helper at line 283. No prior call edge disappeared. Another 213 newly +materialized `references` relationship keys, mostly field contacts, have not +received an independent precision census and are excluded from this call +finding. Graphify's earlier wrong constructor target at line 97 remains in +its fresh graph; its registered text pass is preserved. + +Verification for this correction passed the 212-case universal resolver +integration suite, the 13-case Rust language conformance suite, the AST-cache +pruning contract, workspace formatting, workspace library/binary Clippy, +targeted integration-test Clippy, the full workspace library/binary test +baseline, and fixtures-only code-graph qualification including the independent +React frontend gate. The release package version remains 0.3.30. + +### Source-first Go, Python and Rust direct-call questions + +The [registered suite](../../benchmarks/agent_query/source_first_three_language_suite.toml) +fixed 12 selected declaration, callee, caller and one-hop path questions before +either tool queried three previously unused, clean source checkouts: +`benbjohnson/litestream` at `6a71ccd9` (Go), `fastapi/fastapi` at `0c2b6aaf` +(Python), and `denoland/celld` at `10cb1303` (Rust). Registration commit +`ab93cd34` pins the exact suite SHA256 +`13338a37b219b82d6b0a99f5a8b884cc27efa8043b1a38d5a32dcfa88a53da0e`. +The same runner rebuilt both graphs per repository and retained commands, +responses, timings, source and graph hashes under external run +`runs/source-first-3lang-01`. Compass used frozen debug binary SHA256 prefix +`da2c565517ea7976`; Graphify 0.9.67 used prefix `a7fdb4ac8985755b`. +Debug-versus-installed timing is not a fair performance comparison. + +The original registered **text** checks pass **9/12 for Compass and 8/12 for +Graphify**. The separate [source-and-edge review](../../benchmarks/agent_query/source_first_three_language_review.json) +preserves those outcomes and checks the six selected source call sites against +exact caller and callee declarations, relationship direction and site line in +each graph. It additionally requires a rendered one-hop `calls [EXTRACTED]` +edge for each path question. Under that narrower source-supported question +rule the results are **9/12 for Compass and 6/12 for Graphify**. The verifier +pins run, suite, runner, binary, graph, source-file and raw stdout digests; +two verifier executions gave byte-identical review files. + +| Repository | Registered text passes (Compass / Graphify) | Source-supported passes (Compass / Graphify) | Reviewed direct-call facts | +| --- | ---: | ---: | --- | +| Litestream | 4/4 / 2/4 | 4/4 / 1/4 | Compass has one exact call at each of `store.go:721`, `:735` and `:737`; Graphify has none. | +| FastAPI | 1/4 / 2/4 | 1/4 / 1/4 | Both graphs have the exact call at `fastapi/routing.py:1232`. | +| Celld | 4/4 / 4/4 | 4/4 / 4/4 | Both graphs have the exact calls at `peer_auth.rs:145` and `:149`. | + +Two Graphify path outputs met the registered token test while answering a +different question. Its Litestream path is three structural hops through +`Store` and `HeartbeatClient`, rather than the direct call at line 721. Its +FastAPI path is four hops through a test override, `FastAPI` and +`DefaultPlaceholder`, rather than the direct call at line 1232. The corrected +review removes **only** these two path credits; it does not revise the frozen +text score. The Celld path is a one-hop call in both tools. + +FastAPI also exposes an interface limitation. The registered subject names +`APIRoute.get_route_handler`, but each CLI request supplies only the short +method name. Seven declarations have that name in the full checkout. +Compass refuses the ambiguous `explain`, `callees` and `path` requests instead +of choosing one; Graphify refuses the first two and emits an ambiguous-source +warning with its incorrect path. This is a navigation/identity failure for the +registered workflow, not a missing call in either graph. A separate unscored +diagnostic on the same frozen graphs confirms that Compass accepts both exact +node IDs and full `fastapi.routing.APIRoute::get_route_handler` / +`fastapi.routing.get_request_handler` names: `explain` identifies line 1225, +`callees` shows the call at line 1232, and `path` prints one extracted call hop. +Graphify's file-qualified `explain` also identifies the declaration and its +call. Its file-qualified `path` rejects the pair after resolving both names +to an unrelated node; its exact-ID `path` returns an unrelated two-hop import +route with a target-ambiguity warning. The raw diagnostic responses are retained +beside `runs/source-first-3lang-01`. These later probes do not change the +preregistered scores or imply general selector behavior outside this example. + +These are six selected static call sites and 12 source-first development +questions, not independent whole-graph precision, authored explanation +quality, runtime reachability, god-object diagnosis, community quality or a +representative superiority claim. A source-backed edge does not validate all +other claims in the surrounding answer. No production code changed in this +checkpoint; the review ran without a new Cargo build. + +### FastAPI owner-qualified query and navigation correction + +The three-language run exposed a user-intent mismatch: its subject named +`APIRoute.get_route_handler`, while its commands passed only the ambiguous +leaf `get_route_handler`. Seven source-backed declarations share that leaf. +The frozen Compass graph already contains the exact `calls` edge from +`fastapi/routing.py:1225` to `get_request_handler` at line 1232. Before this +correction, typed `ask "what does APIRoute.get_route_handler call?"` reported +`no_match` and fell back to lexical candidates; legacy `explain` and `path` +could not resolve that owner-qualified spelling. + +Typed resolution now checks a dotted owner/member suffix against the bounded +exact leaf-name posting, normalizing stored `::` only for comparison. It uses +the candidate only when the complete posting proves uniqueness. Two matching +owners remain ambiguous with their IDs; an exhausted posting remains +truncated/ambiguous; a nonexistent owner cannot borrow another owner's +same-named method. Exact ID/full-name precedence and the existing typo +fallback for an absent leaf remain intact. The legacy `explain`/`path` exact +selector applies the same suffix comparison after exact names and preserves +its candidate list on ambiguity. Stored graph identities and schemas do not +change. + +The [post-registration replay](../../benchmarks/agent_query/fastapi_owner_suffix_replay.json) +uses the same pinned FastAPI checkout and byte-identical Compass graph SHA256 +`1dc5712533cce50634e91994fb6bf888ea35eb0b6b3818432da69518652ac09a`. +Candidate binary SHA256 is `17620181b2ca2fb051b234fa022c1fe1bd03913fad2246f48b643603fe85c623`. +The owner-qualified `ask` callees response now has the source-backed call +without diagnostics, its call-path form has one directed hop, legacy `explain` +identifies the method and line-1232 call, and legacy `path` renders one +extracted call hop. `MissingRoute.get_route_handler` still fails. Raw command +responses and their hashes are retained beside `runs/source-first-3lang-01`. +This is a development replay of a known failure, **not** a revision of the +registered 9/12 versus 8/12 text or 9/12 versus 6/12 source-supported scores. +Graphify was not rerun for this correction. + +The native query regression covers JSON/store parity, unique/duplicate/missing +owners, a one-hop call path, absent-module owner spelling, candidate truncation +and the existing fuzzy typo case. The CLI regression executes `ask`, `explain` +and `path` and checks the versioned JSON call plus ambiguity/no-match behavior. +Focused suites, workspace library/binary Clippy and tests, CLI product tests, +and the product-boundary check pass. The optional all-target query Clippy run +stops on an existing redundant closure in `tests/explanation_members.rs`, +outside this patch; with only that lint allowed, all targets pass. Package +version remains 0.3.30. This one known Python +case does not establish representative query superiority or explanation +quality, god-object diagnosis, or community quality. + +### Source-first Go/Python/Rust hub retrieval on frozen graphs + +Registration commit `4d5ca44d` and +[the pinned panel](../../benchmarks/agent_query/source_first_hub_three_language_registration.json) +selected six declaration anchors across the same clean Litestream, FastAPI and +Celld source checkouts **before** either public hub request. The panel pins +source and graph hashes, both server environments and the common stdio MCP +`god_nodes(top_n=100)` request. The bounded collector retains six raw requests, +responses and server diagnostics under external run `runs/source-first-hubs-01`; +all six requests succeeded. The +[independent graph review](../../benchmarks/agent_query/source_first_hub_three_language_review.json) +joins each witness by exact file, declaration line and symbol, then checks +returned rows against each tool's own stored graph. Every selected declaration +exists uniquely in both graphs. + +| Source witness | Compass rank / stored degree | Graphify rank / stored degree | +| --- | ---: | ---: | +| Litestream `Store` | 10 / 67 | 13 / 45 | +| Litestream `HeartbeatClient` | outside top 100 / 11 | outside top 100 / 11 | +| FastAPI `FastAPI` | 1 / 1,401 | 1 / 830 | +| FastAPI `DefaultPlaceholder` | 31 / 42 | 31 / 26 | +| Celld `PeerAuth` | outside top 100 / 27 | 55 / 26 | +| Celld `CellActivityGuard` | outside top 100 / 6 | outside top 100 / 9 | + +Compass returns 100 explicit graph IDs and matching source anchors per +repository; its 300 displayed degrees equal recomputed distinct endpoint-pair +degrees. Graphify returns labels and degrees only. Its globally unique labels +identify 75/100 Litestream, 86/100 FastAPI and 86/100 Celld rows; all 247 +identified degrees match its own graph. The remaining label-only rows stay +unresolved, rather than borrowing an identity from rank or source context. +Every returned registered witness is uniquely resolved. + +At the registered cutoffs, Compass retrieves 2/6 witnesses in the top 10, +3/6 in the top 50 and 3/6 in the top 100. Graphify retrieves 1/6, 3/6 and +4/6 respectively. These are selected source roles, not positive or negative +god-object defect labels; the fractions are retrieval counts, not accuracy or +precision. Each tool ranks a different extracted graph, so its degree and +rank cannot be interpreted as a controlled algorithm comparison. In Celld, +Compass's top positions include large JavaScript module nodes; this panel +does not determine whether filtering such nodes would improve useful type +retrieval. No production behavior changed in this checkpoint, and broad hub +or god-object superiority remains unproven. + +### Paired class-only degree diagnostic on rated Java classes + +[Registration](../../benchmarks/agent_query/mlcq_class_degree_registration.json) +commit `3ebdf975` fixed the rule and four frozen graph hashes before the +[read-only scan](../../benchmarks/agent_query/mlcq_class_degree_review.json). +The rule ranks every source-located class by distinct stored endpoint-pair +degree, then exact ID. Compass uses `kind=class`; Graphify uses its +`_callable_class=true` marker. No test or generated class is filtered. This +is an offline, identical rule applied to both graphs; neither public +`god_nodes` call was changed or rerun. The 16 graph IDs for eight externally +rated classes come from the prior source-assisted release follow-up. Every +identity remains present and eligible. The scan processes each graph in a +separate 300-second bounded process and retains graph hashes, pool sizes, +all top-100 IDs and degrees, primary ranks and raw outputs externally under +`mlcq-class-degree-01`. Two runs produce byte-identical review files. + +| Frozen graph | Compass class pool | Compass positive ranks | Graphify class pool | Graphify positive ranks | +| --- | ---: | --- | ---: | --- | +| CloudStack | 6,373 | 340, 999 | 7,700 | 463, 1,315 | +| Eclipse | 6,628 | 728, 1,529 | 7,597 | 1,403, 1,740 | + +Neither tool retrieves a consensus-positive or consensus-none primary class +at cutoffs 10, 50 or 100. The closest consensus-none ranks are 366 for +Compass and 382 for Graphify. All four graphs have zero dangling endpoint +pairs. The stored Compass graphs are directed and the Graphify graphs are +undirected; the registered rule counts ordered endpoint pairs for each, as +the earlier response auditor did. Pool sizes and emitted graph coverage +also differ. Therefore these ranks cannot isolate a better extraction or +ranking algorithm, even though the rule is applied consistently. + +This falsifies class-only raw degree as an immediate repair for the known +Java god-object misses. The cohort is purposively enriched, includes a +positive-rated test class, and is development data. Class status and degree +do not measure responsibilities or cohesion. A supported classifier would +need source-checked method/field access and responsibility evidence with a +separate held-out cohort; no classifier or production code changed here. + +### Paired source-member coverage in the rated Java classes + +[Registration](../../benchmarks/agent_query/mlcq_member_paired_registration.json) +commit `3996067c` fixed the eight-class independent JDK syntax census, source +hashes, class identities, both frozen graph pairs and the exact file/name/span +join before the paired scan. The census has 95 direct methods, 65 direct +fields and five constructors; constructors remain outside this registered +denominator. Overloads remain separate source declarations. A candidate node +must have a compatible kind or callable marker and an anchor within its +source declaration span. The review records direct class ownership separately +from node presence and never substitutes a same-name node on another line. + +| Graph | Direct methods with unique nodes / 95 | Direct fields with unique nodes / 65 | Direct owner links for matched methods / fields | +| --- | ---: | ---: | ---: | +| Compass | 95 | 65 | 95 / 65 | +| Graphify | 90 | 0 | 90 / 0 | + +The [paired review](../../benchmarks/agent_query/mlcq_member_paired_review.json) +retains every source declaration, candidate graph ID, owner relation, missing +or ambiguous result, both graph hashes and source roles. All four graph scans +succeeded under the 1 GiB artifact and 300-second per-graph bounds; two +complete runs produced byte-identical reviews. The five Graphify method +nonmatches are overloads: three in `BindingModel` and two in +`SimpleValueProperty`. Its stored graph has one same-named method node at +the first overload's source line, while class-to-method edges for that ID +can refer to later overload lines. Those edges preserve some declaration +evidence but do not give the later overloads separate node identities. +Compass preserves a unique direct-owned method node for each of the 95. + +Graphify does not provide a typed field declaration node matching any of the +65 source fields in these files under the registered line/name rule. Its +class graph can still contain field-context references to other types; this +result does not mean it extracted no information about fields. Since Graphify +does not expose Compass's typed field kind, even a future matching +noncallable node would be type-unverified under this protocol. This is a +selected declaration-presence comparison, not a field-access correctness, +source responsibility, class cohesion, or god-object classifier score. +The frozen graphs have different direction and coverage, and one positive +rating belongs to a test class. No production code changed in this checkpoint. + +### Stored member evidence in public hub results + +The native graph layer now adds `compass.hub-members/1` observations to +directed typed class and struct hubs. It counts uniquely owned direct +methods/constructors and fields/properties, marks members with more than one +class/struct owner as ambiguous, and reports stored method-to-own-field +`references` records, distinct method-field pairs and participating methods. +Undirected or other node kinds return null member evidence. The text and +structured MCP `god_nodes` results expose the same counts with +`sourceCoverage: "unverified"`; hub eligibility, degree and order do not +change. A zero is an observed graph count, not proof of absence in source. +No god-object label or cohesion score is produced. + +The [two-pass Go/Python/Rust replay](../../benchmarks/agent_query/hub_members_three_language_replay.json) +used the already frozen graphs and compared every new public MCP response +against the previous 100-row result after removing only `memberEvidence`. +All **300 prior IDs, ranks, degrees, source anchors and connectivity objects +remain identical as structured values**; both passes returned identical +new rows. Member evidence appears in 33/100 Litestream, 34/100 FastAPI and +26/100 Celld rows. The returned Litestream `Store` has 27 stored direct +methods and zero direct fields; FastAPI `FastAPI` has 23 methods and zero +fields. Those zeros show why this cannot be treated as a cross-language +source-complete field census. `PeerAuth` remains outside Celld's top 100; +the new evidence does not repair its retrieval miss. Graphify was not rerun +for this additive Compass result. + +A separate bounded public MCP read of the frozen Eclipse graph requested +5,000 hubs and retained raw responses externally. The +[Java replay summary](../../benchmarks/agent_query/hub_members_eclipse_replay.json) +checks three returned rated classes against the earlier independent JDK +member census and compiler-bound direct-own-field subset. `BindingModel` at +rank 1,173 reports 15 methods/constructors, 11 fields and 55 own-field +reference records; the selected source witnesses have exactly those counts. +`DeprecatedUIWizardsAuto`, a positive-rated **test** class at rank 2,641, +reports 15 methods/constructors, five fields and 15 selected field records, +again matching its selected source witnesses. `SimpleValueProperty` at rank +599 reports seven methods and no fields or selected field contacts, matching +the same source checks. The fourth rated Eclipse class was outside the +requested 5,000; no rank or evidence was invented for it. These are known +development cases on unchanged graphs. They do not establish full field-use +coverage, responsibility cohesion, a god-object classifier or broad +superiority. + +Focused graph/MCP tests, workspace formatting, library/binary Clippy and +tests, nine CLI product tests, the product boundary script and the full +fixtures-only code-graph qualification passed using the per-worktree external +Cargo target. The release fixture emitted its existing partial-graph warnings; +no unrelated generated files entered the patch. Package version remains +0.3.30. + +### Go direct struct-field evidence + +The Go universal producer now emits a source-anchored `field` declaration and +direct `contains` relation for each explicitly named field of a named struct. +Grouped names receive separate identities; embedded and blank fields and +fields inside an anonymous nested struct are not credited as direct named +members of the outer struct. Existing type-reference bindings remain. The +disposable AST cache version advances from 11 to 12 so old extractions do not +hide these facts. This changes rebuilt graph nodes, edges, degrees and +communities without changing the graph schema or package version. + +The [selected registration](../../benchmarks/agent_query/go_struct_field_registration.json) +froze two clean Litestream files and both old graphs before a Go standard +parser enumerated all 33 direct named fields across five structs. The first +probe stopped before scoring because Graphify's graph is undirected. The +registered correction uses stored source/target ownership records without +claiming navigable direction. Both frozen graphs have 0/33 exact field +declarations. Graphify has 13 field-type context records on those source +lines; they do not identify named fields. + +The separate [full-file registration](../../benchmarks/agent_query/go_full_field_registration.json) +fixed all 146 tracked Go paths and the preliminary candidate graph before the +wider census. The [full review](../../benchmarks/agent_query/go_full_field_review.json) +reports **993 named fields in 167 structs** and 27 embedded fields kept outside +the denominator. Under one exact file/owner/field/line and unique-ownership +rule, the frozen Compass and Graphify graphs each have **0/993** matching field +declaration nodes; the candidate Compass graph has **993/993**. Graphify has +323 field-type context records, which remain visible as partial type evidence. +An initial 326 tally counted one grouped-name source-line record four times; +the corrected 323 tally counts each stored record once. Declaration outcomes +are unchanged. +All 993 candidate additions are source-matched field nodes, paired with 993 +new containment edges. Every old node and edge persists; 59 existing +publication omissions are unchanged. The full verifier runs twice with +byte-identical reports. A warm extraction reuses 199/199 cached files and +produces the same graph bytes as the cold extraction. + +The public MCP `god_nodes(top_n=500)` candidate response now reports 21 direct +fields for Litestream `Store` (rank 7, formerly rank 10) and six for +`HeartbeatClient` (rank 114, still outside top 100). Both report zero stored +own-field reference records. These are declaration improvements in one known +Go development repository. They do not validate field-access targets, +responsibility cohesion, a god-object classifier, other languages or broad +superiority over Graphify. + +The code-graph fixture adds one source-matched Go `field` node and one direct +ownership edge. Its clustered topology has 1,293 nodes, 1,283 edges, 238 +communities and two exact cross-community edges. The previous policy minima of +239 communities and three exact cross-community edges fail on this valid +addition; the minima now match the observed fixture graph. All other topology +thresholds remain unchanged. The full fixtures-only gate passes after the +policy update, including semantic assertions, cold/warm, rebuild, +alternate-checkout and lifecycle byte comparisons, Markdown quality, and the +independent React frontend qualification. + +## Go receiver-field access follow-up + +The [access registration](../../benchmarks/agent_query/go_field_access_registration.json) +fixed the same pinned Litestream source and frozen graph identities before an +independent Go parser enumerated direct receiver-field selectors. The oracle +found 2,742 accepted source occurrences. The producer now preserves each +selector identifier site; a typed receiver supplies an owner-qualified field +candidate. The resolver checks the exact field before expanding its declared +type alias. Missing, ambiguous and method-call selectors do not acquire a +convenient field target. The disposable AST cache advances from version 12 to +13; graph and evidence schemas and package version stay unchanged. + +The [review](../../benchmarks/agent_query/go_field_access_review.json) +joins **2,742/2,742** accepted contacts to unique directed method-to-field +references at the exact source byte. Both frozen graphs have 0 under the +same exact field-target join. The candidate adds 4,650 member-access links, +all targeting fields, with no removed node identity or old link and no changed +old link payload. The 1,908 new links outside this narrow oracle are retained +in the external raw report and uncredited: 719 on other receiver identifiers, +225 on non-identifier receivers and 964 outside method-body oracle scope. This +audit has not independently established their precision. A cold extraction +processed 199 files; a warm extraction reused 199/199 and produced byte-identical +graph JSON. Two full probe reports are byte identical. + +The candidate graph is 16,902,487 bytes, above the registration's original +16 MiB read cap. The registration transparently amends the read cap to 24 MiB +after capture without excluding records; this makes the bound change +exploratory rather than preregistered. Public `god_nodes(top_n=500)` on the +new graph shows 113 own-field reference records and 23 methods touching own +fields for `Store` (rank 8); `HeartbeatClient` shows 13 and four (rank 164). +These are stored contacts, not a god-object diagnosis. One known Go repository +cannot establish broader graph precision, responsibility cohesion, community +quality or superiority over Graphify. + +Focused Go producer and resolver tests, workspace formatting, workspace +Clippy, workspace library/binary tests, the cache-version contract test and +the product-boundary check pass. +The full fixtures-only code-graph gate passed on revision `c1b0d78f` after +mounted-volume capacity was restored. It covered manifest validation, scale +checks, semantic assertions, cold/warm/rebuild/lifecycle byte comparisons, +topology policy, and the independent React frontend qualification using a +release binary. The first resumed attempt stopped on a missing snapshot file +during the lifecycle phase; the complete diagnostic repeat passed. This +single pass does not establish that the intermittent snapshot failure is +resolved. + +### Explicitly typed Go parameter-field contacts + +The later [parameter registration](../../benchmarks/agent_query/go_parameter_field_registration.json) +fixed all 146 tracked Go paths and the same three frozen graphs after the +receiver-only audit had exposed 1,908 uncredited new links. A separate Go +standard-parser oracle accepts only selectors bound by object identity to an +ordinary method parameter with an explicit local nominal struct type and one +direct named field. Called selectors, shadowed parameters, qualified/imported +types, duplicate structs/fields and unsupported receiver expressions stay out +of the denominator. A synthetic fixture checks parameter binding, shadowing +and call exclusion. + +The [review](../../benchmarks/agent_query/go_parameter_field_review.json) +finds **276/276** exact candidate method-to-field links at the source byte, +versus zero in the frozen pre-access Compass graph. Graphify has no exact +declaration target for these 98 fields, while retaining 19 field-type context +records. All 276 sites were previously classified as `other_receiver` by the +receiver-only oracle, with no overlapping credited edges. The two narrow +oracles therefore credit **3,018 distinct links of 4,650**; **1,632 remain +uncredited**. Both complete source outputs and graph-probe reports are byte +identical across two runs. This expands independently verified coverage on +one known Go repository; it does not establish precision for the remaining +links or broad superiority across the requested tasks and languages. diff --git a/docs/implementation/query-engine.md b/docs/implementation/query-engine.md index 37486f691..6a9000260 100644 --- a/docs/implementation/query-engine.md +++ b/docs/implementation/query-engine.md @@ -246,6 +246,17 @@ semantic inference; a conceptual question can remain under-specified and must not be treated as an authoritative answer without an independently reviewed golden judgment. +Discovery also preserves code-shaped identifiers inside prose. Underscore +spellings and mixed-case internal capitals (such as `_BufferedSink`, +`openSession`, or `PendingQueue`) receive bounded exact-name probes before +generic behavior recall. Only a matching declared name receives exact-name +priority; a partial token or alias does not. Ordinary words such as `close` +retain lexical ranking. Same-name source declarations remain ambiguous even +when their kinds or ranking evidence differ, and a +truncated name lookup cannot establish uniqueness even if only one retained +declaration is in scope. This improves anchor selection without reading source +bodies or synthesizing an explanation. + ### Scoring `score_nodes` retains the established `text-ranker/full-scan-v1` behavior: it diff --git a/docs/reference/commands.md b/docs/reference/commands.md index 28192484f..50bf7f117 100644 --- a/docs/reference/commands.md +++ b/docs/reference/commands.md @@ -421,6 +421,49 @@ compass explore "" ... [--format text|agent-json|json] compass node "" "" [--format text|agent-json|json] ``` +When the symbol name and source location are known, use exact lookup: + +```bash +compass search createStore --exact --file src/createStore.ts --line 86 --kind function --format json +``` + +The file, line and kind constraints are optional and conjunctive. A line requires +a file; all three filters require `--exact`. File paths match the stored +repository-relative spelling. Exact IDs take precedence; names use Compass's +normalized exact comparison. Every matching record is returned, including +overloads and export bindings, with no lexical fallback or guessed winner. +The candidate bound applies before filtering: a truncated one-result response +does not prove uniqueness, and a truncated empty response does not prove +absence. Exact text requests keep the supplied bounds without automatic widening. + +MCP exposes the same operation through `search_symbols` with `exact: true` and +optional `source_file`, `start_line` and `kind` fields. The raw response stays +`compass.query/1`; ordinary ranked search remains the default. + +For typed relationship and trail questions, an owner-qualified operand such as +`APIRoute.get_route_handler` or `APIRoute::get_route_handler` can identify a stored +`fastapi.routing.APIRoute::get_route_handler` without the module prefix. +Compass verifies the suffix against the bounded exact method-name candidates. +If several declarations share that owner/member suffix, retry with the full +qualified name or an exact ID; a truncated candidate set never proves a unique +match. A nonexistent owner does not select another class's same-named method. +This also applies to `ask` questions that route to a typed operation; it does +not change the separate `search --exact` contract. + +Use `compass node SOURCE TARGET --calls-only` to find a directed call chain. +The equivalent natural forms are `compass ask "call path from SOURCE to TARGET"` +and `compass ask "call chain from SOURCE to TARGET"`. MCP `get_node` accepts +boolean `calls_only` (default false). Only stored `calls` relationships qualify; +containment, instantiation, return-type and other structural edges cannot form +shortcuts. All existing limits, ambiguity and heuristic policies still apply. +Call chains may be conditional; their existence does not guarantee execution. +The CLI flag takes no value, may appear once, and is valid only for `node`. + +`node` searches directed, weighted trails within `--max-depth`. It retains +shorter and cheaper prefixes when either can affect reachability within that +hop limit. Node and edge work limits still apply: a truncated result is not +proof that no path exists. + `explore --format text` closes its bounded page with a `SOURCE` section: the recorded line range of each primary anchor, rendered from the digest-verified file the command already reads below `--root`. Blocks are bounded per anchor @@ -540,17 +583,25 @@ compass path "" "" [--max-depth N] [--format text|json|agent-json] [--graph PATH | --at REV] ``` -Resolves both endpoints by exact node ID, name, or qualified name before doing -any graph search; missing and ambiguous endpoints fail explicitly. The text path -search is bounded to eight hops by default and ranks structural relationships +Resolves both endpoints by exact node ID, name, full qualified name, or a +unique owner/member suffix before doing any graph search; missing and ambiguous +endpoints fail explicitly. The text path search is bounded to eight hops by +default and ranks structural relationships such as calls, containment, imports, and dependencies ahead of weak references or documentation links. When a meaningfully weaker route is up to two hops -shorter, Compass shows it separately. Output names the resolved target ID, and +shorter, Compass shows it separately. Output names the resolved target, and an unreachable target is reported as `NO PATH FOUND` with the depth bound and visited-node count. Relationship arrows always preserve their stored direction. Traversal may follow a relationship in either direction; the arrows make that choice visible rather than rewriting the graph. +Costlier, shorter prefixes are retained when they can reach the target within +`--max-depth`. Each weighted or alternative search permits at most 1,000,000 +adjacency entries and 16 MiB of cumulative path-key bytes. Work exhaustion +returns a nonzero error; it is not reported as `NO PATH FOUND`. Retry with a +smaller depth or graph. A depth-bounded no-path result does not prove that no +longer path exists. + Both endpoints accept a file path as well as a symbol. When a language publishes an isolated metadata `file` node beside the `module` node that carries the file's contents, an isolated file endpoint resolves to the single @@ -578,10 +629,11 @@ compass explain "" [--graph PATH | --at REV] ``` -Shows one node and incoming/outgoing connections. An exact node ID or unique -exact qualified name resolves directly. When a label or qualified name names -multiple source-backed declarations, Compass lists the candidates and their -source ranges and asks for the full node ID instead of silently selecting one. +Shows one node and incoming/outgoing connections. An exact node ID, unique +full qualified name, or unique owner/member suffix resolves directly. When a +label or qualified name names multiple source-backed declarations, Compass +lists the candidates and their source ranges and asks for the full node ID +instead of silently selecting one. Connection lines include the stored relationship site; extraction is the graph's default provenance, so `[EXTRACTED]` is stated once in the `Connections (N, extracted unless marked):` header and a line carries a diff --git a/docs/reference/outputs.md b/docs/reference/outputs.md index 735599027..34ba5af1d 100644 --- a/docs/reference/outputs.md +++ b/docs/reference/outputs.md @@ -35,7 +35,7 @@ compass-out/ │ │ ├── graph.json.query-v1.cache │ │ ├── graph.json.affected-v1.cache │ │ ├── graph.json.traversal-v1.cache -│ │ └── graph.json..content-v1.cache +│ │ └── graph.json..content-v2.cache │ └── source-root.txt ├── store/ │ └── store.sqlite3 # with the default SQLite query index @@ -396,7 +396,8 @@ The report can include: - corpus and graph summary; - freshness/build metadata; -- god nodes; +- god nodes (connected source-located hub candidates, ordered by degree and + then stable node ID; a high rank is not proof of a god-object design defect); - communities; - surprising connections; - cycles/diagnostics; @@ -821,6 +822,149 @@ When exact automation is required, use: - diff JSON; - direct graph JSON. +### MCP navigation paths + +After uniquely resolving two distinct endpoints, MCP `shortest_path` adds +`structuredContent.result` with schema `compass.mcp.path/1` inside the existing +`compass.mcp.tool-result/1` transport envelope. Common fields are `source` and +`target` (exact IDs), `direction: "undirected"`, `maxHops`, and +`ranking: "hops-then-structural-cost"`. + +- `status: "found"` adds `hops`, ordered `nodes`, and ordered `steps`. + Nodes carry `id`, `label`, `sourceFile`, `startLine`, and `sourceLocation`. + Each step retains traversal `from`/`to`, stored `source`/`target`, `edgeId` + (null for legacy edges without an ID), `relation`, `confidence`, and + `direction` (`forward` or `reverse`). An absent relation is displayed as + `related`, not invented as a call. +- `status: "depth_limit"` means no path was found before the hop bound left + part of the search unexpanded. `visitedNodes` reports explored identities. +- `status: "disconnected"` means the reachable component was exhausted without + reaching the target; it also includes `visitedNodes`. + +Unresolved, ambiguous, and same-node endpoint diagnostics retain their text +form. No positive path is produced by guessing an endpoint. Work or transport +exhaustion is an explicit error, not a disconnected result. Numeric source +fields and source files can be null; absent textual source locations are empty. +This tool explores undirected graph navigation across stored relation kinds; +it does not establish directed call flow or execution feasibility. + +### MCP hub results + +Each node's additive `connectivity` object uses `compass.hub-connectivity/1`: + +- `directed` reports the stored graph's direction mode. +- `edgeRecords` counts all valid incident records once each, retaining parallel + records. It can differ from the distinct-pair ranking degree. This includes + valid document containment records excluded from topology weighting. +- `selfLoopRecords` counts incident records whose endpoints are the hub itself. +- `relations` contains at most 16 rows, ordered by descending `edgeRecords` + then lexical `relation`. Each row carries `edgeRecords`, `incomingRecords`, + `outgoingRecords`, and `undirectedRecords`. Directed self-loops count once + in each direction but once in the total. An undirected graph contributes + only undirected counts. An absent relation remains an empty string. +- `omittedRelationKinds` and `omittedRelationRecords` account for excluded + relation rows; displayed record counts plus omitted records equal the total. + +Text includes the stored node kind and this breakdown. These observations help +distinguish containment, incoming use, and outgoing dependencies. They do not +infer responsibility count, source correctness, or a god-object design defect. +No test/production role is inferred automatically from a path or label. + +For a typed `class` or `struct` in a directed graph, the additive +`memberEvidence` object uses `compass.hub-members/1`. It reports +`sourceCoverage: "unverified"` because this projection does not compare the +stored graph with current source. It reports +`directMethods` (methods plus constructors), `directFields` (fields plus +properties), and `ambiguousDirectMembers` for direct `contains` targets owned +by more than one typed class or struct. Only uniquely owned members contribute +to the direct counts. `ownFieldReferenceRecords` counts stored directed +`references` records from one uniquely owned method to one uniquely owned +field of that same class; `distinctOwnFieldPairs` collapses parallel records, +and `methodsTouchingOwnFields` counts the participating methods. These are +stored graph observations across all reference confidence states, not a +validation of reference targets, a complete source access census or a cohesion +score. A zero does not prove that source code lacks members or field accesses. +The object is null for other hub kinds and undirected graphs, where ownership +direction is unavailable. + +MCP `god_nodes` returns human-readable text and a structured projection in +`structuredContent.result`, inside `compass.mcp.tool-result/1`: + +```json +{ + "schema": "compass.mcp.hubs/1", + "ranking": "distinct-directed-endpoint-degree", + "interpretation": "topology-candidates", + "requested": 10, + "nodes": [{ + "rank": 1, + "id": "exact-node-id", + "label": "dispatch()", + "degree": 12, + "kind": "method", + "sourceFile": "src/service.rs", + "sourceLocation": "L5", + "startLine": 5, + "endLine": null, + "memberEvidence": null + }] +} +``` + +Ranks are one-based. Degree counts distinct stored directed endpoint pairs; +parallel occurrences collapse and a self-loop contributes two. Eligible hubs +are ordered by descending degree, then exact ID. Eligibility remains the +existing hub-analysis policy; file/concept/JSON-key nodes and isolates are +excluded. This is a topology ranking, not a diagnosis of excessive +responsibility. Review source responsibilities and relationship evidence +before making a design judgment. + +Use `id` as the next `get_neighbors.label` input. Source fields are null when +not present in the graph. A legacy textual location can exist without numeric +line fields; the result preserves it without inventing a line number. The +existing 16 MiB structured-response bound applies and fails explicitly rather +than silently dropping entries. Consumers must check the schema version. + +### MCP neighbor lookup + +`get_neighbors.label` accepts an exact node ID, normalized symbol or qualified +name. Exact IDs preserve case and select that identity directly. Symbol lookup +uses the same exact lookup and evidence-gated export-binding handling as MCP +paths. A unique exact symbol takes precedence over broader names: `term_len()` +resolves independently of `test_term_len()`. If no exact candidate exists, the +legacy prefix/substring lookup remains available. + +Multiple exact candidates produce an ambiguity list instead of neighbors. +Candidates are sorted by exact ID, with at most 20 displayed and an explicit +omission count. Retry using an exact ID to choose a declaration. Multiple fuzzy +candidates are also ambiguous. Input arguments are unchanged. +A successful result keeps the compact incoming/outgoing neighbor text and adds +escaped identity/source lines. Machine consumers use the additive structured +result `compass.query.neighbors/1` in `compass.mcp.tool-result/1`: + +- `seed`: the full node record for the resolved identity; +- `neighbors`: groups ordered by direction (`outgoing`, then `incoming`) and + node ID; each group has `direction`, the full `node` record and all matching + `edges`, ordered by canonical JSON; +- `directionBasis: "stored-endpoints"` and `graphDirected`: distinguish stored + endpoint orientation from the artifact's directed/undirected interpretation; +- `relationFilter`: the case-folded substring filter; `truncated: false` means + the complete filtered adjacency fit all bounds. + +Node records retain their graph source fields; relationship records retain IDs, +occurrence anchors, provenance and unknown attributes. Legacy absent IDs or +anchors are not invented. Parallel records survive; a self loop is represented +in both directions. The text line uses the first canonical edge for its relation +and confidence; consult `edges` for every record. An exact destination ID can be +used as the next `get_neighbors.label` without resolving a display name. + +Hard bounds are 1,000,000 examined adjacency entries, 10,000 matching incident +records (self loops counted once), a 4,096-byte filter and a 1 MiB structured +result. Limit exhaustion returns an error with no partial adjacency. A successful +empty `neighbors` array means no matching records, not a limit failure. Graph +loading and the outer MCP transport retain their existing bounds. This projection +uses one full snapshot rather than the compact traversal cache. + ### Agent Query View The focused query commands and MCP query tools also expose the strict, @@ -855,6 +999,13 @@ anchors, reports `status.matchState = ambiguous`, and emits instead of issuing a broad search. Primary results are deduplicated by node ID, including when a real self-edge names the same node twice. +Ambiguous typed answers explicitly ask for an exact node ID and use the query +operation as their answer basis. They do not attribute an answer to the first +candidate, claim the symbol is missing, or infer that a path does not exist. +Text pages include IDs for every retained ambiguity candidate, even when their +qualified labels differ. Select the intended declaration by its source anchor +and retry with its ID. + Typed text output is paged. Each page carries a `Pagination: page=N range=A-B of T next=` footer; `--cursor` continues the same ledger at the same `--text-budget`. The cursor is a checksummed @@ -1215,3 +1366,70 @@ allocating an unbounded JSON graph. **Next step:** identify the most structured available output for your consumer and validate its major version/direction/multiplicity before reading values. + +### Calls-only directed trails + +`node --calls-only` and MCP `get_node` with `calls_only: true` return the same +`compass.query/1` response schema, restricted to directed `calls` edges. Typed +`NodeTrailRequest` accepts optional `callsOnly: true`; omission preserves the +structural default. CLI Agent View and MCP metadata retain a call-path question. +The `ask` forms `call path from SOURCE to TARGET` and `call chain from SOURCE to +TARGET` select the same policy. Unknown/nonboolean policy values fail explicitly. + +Direction-mismatch and depth-frontier checks use the same call restriction. +Provenance, parallel occurrence identity, ambiguity and incomplete graph/work +status remain explicit. A structural connection cannot prove a call connection; +a static call chain is not a runtime trace. + +### Directed trail depth limits + +For typed `node` and MCP `get_node`, an unsuccessful search that leaves an open +depth frontier returns `truncated: true` and `bounded_truncation`. An undirected +shortcut is not proof that no longer directed route exists. Frontier checks use +the same edge budget and run after the search for a bounded positive path. +Closed dead ends and cycles can return complete negative results; increasing +`max_depth` may resolve an incomplete result. The machine schema remains +`compass.query/1`. + +`explore` / `explore_code` also retain incomplete-search status when no connecting +path was found; previously that status could be lost with the absent path. + +### Explanation source verification status + +An `explain` source header says `digest-verified` only after the complete recorded +symbol span matches a stored digest. Without a stored digest it says +`unverified: no recorded source digest`; the excerpt is current file content at +the recorded anchor, whose freshness cannot be established. Malformed or +mismatching digests produce `SOURCE unavailable` without source text. Truncating +the returned excerpt does not truncate digest verification. The same status +appears in text carried by shared JSON output envelopes. + +### Member implementation excerpts + +Use `compass explain OWNER --source-members --max-source-bytes 8000` to inspect +recorded callable implementations, including methods defined outside a type's +declaration span. The optional mode replaces the declaration excerpt. It follows +outgoing containment through nested types and orders members by source location; +it does not choose members based on an inferred responsibility. + +To prioritize a topic within that recorded membership, add +`--member-focus "symlink loops"`. Members whose names contain more distinct +normalized query terms appear first; source order breaks ties. Unmatched members +remain eligible and source reads still share one byte budget. This is a lexical +name hint, not a synthesized answer. The text reports the normalized focus and +matches per retained member. Focus requires `--source-members`, accepts at most +4,096 bytes / 32 distinct searchable terms, and never disambiguates an owner. +Without focus, the existing source order and output remain unchanged. + +`MEMBER SOURCES` reports retained, omitted and unavailable members, total source +bytes, and truncation. Each `MEMBER` has an exact ID followed by its source and +verification status, or an explicit source error. The byte budget is shared +across excerpts; it is not a separate allowance for each member. Discovery and +verification-work limits can also make source unavailable or incomplete. A +complete membership listing establishes what the selected graph records, not +that the source has excessive responsibilities or that every graph edge is true. + +Excerpts use the graph's recorded callable spans. An annotation or decorator +outside those spans, such as Python's `@property`, may be absent even when a +member is fully returned. Use the declaration excerpt when that surrounding +context is needed; member mode does not guarantee more evidence for every fact. diff --git a/docs/reference/react-framework-graph.md b/docs/reference/react-framework-graph.md index ac9a7fa57..966e2f306 100644 --- a/docs/reference/react-framework-graph.md +++ b/docs/reference/react-framework-graph.md @@ -117,6 +117,39 @@ component, or fabricates an external endpoint. A limit error is not an empty successful result. Every published relationship must retain a valid source range, bounded provenance, and a source path contained by the repository root. +Filesystem route-parent inference requires a recognized convention fact from +the owning file-route producer. Programmatic router variables such as `r` or +`app` do not establish a filesystem hierarchy across source files; their mounts +and groups require framework composition evidence. This boundary also applies +to programmatic registrations using a framework that supports file routes. + +Parent selection uses framework-specific source identities, not normalized URL +prefixes or whichever filename sorts first: + +| Framework | File-parent rule | +| --- | --- | +| Next App Router | The nearest unique `layout` module in the same or an ancestor directory; a nested layout starts searching above itself. HTTP route handlers and `global-error` do not inherit this UI layout relationship. | +| React Router / Remix flat routes | The nearest declared dot-segment prefix. Pathless prefixes remain identities, index files cannot parent siblings, and trailing-underscore opt-outs do not match the ordinary parent. A route folder exposes `route.tsx`; colocated helpers are not nested routes. | +| TanStack default file routes | Dot and directory segments, `route`, `index`, `__root`, pathless names, route groups, and trailing-underscore identities are distinguished. Ignored and lazy companion files do not define parent candidates. | +| Nuxt page routes | `parent.vue` can parent `parent/child.vue`; a sibling or `index.vue` cannot substitute for that declaration. | +| SvelteKit | Only an explicitly published `+layout.svelte` route fact can parent UI files. The current producer does not publish these layout facts, so this rule alone does not add layout coverage. `+server` remains separate. | +| Next Pages Router / Astro / standalone API routes | A source directory or URL prefix establishes no automatic layout parent. Explicit composition remains separate evidence. | + +Multiple candidates for the nearest parent key produce an ambiguity diagnostic +and no containment edge. They do not select the first file or fall back to a +more distant layout. Root scopes separate independent project trees. Custom +route tokens/configuration, unrepresented root modules, and advanced layout +resets require additional evidence; these defaults do not claim full runtime +routing equivalence. + +The naming semantics are documented by +[Next.js](https://nextjs.org/docs/app/getting-started/layouts-and-pages), +[React Router](https://reactrouter.com/how-to/file-route-conventions), +[TanStack Router](https://tanstack.com/router/latest/docs/routing/file-based-routing), +[Nuxt](https://nuxt.com/docs/3.x/directory-structure/pages/), +[SvelteKit](https://svelte.dev/docs/kit/routing), and +[Astro](https://docs.astro.build/en/basics/layouts/). + Generated files, symlinks that escape the owning root, malformed syntax, dynamic imports, computed configuration, and conditional values remain unsupported or incomplete unless a framework pack has independently qualified diff --git a/docs/reference/universal-semantic-evidence.md b/docs/reference/universal-semantic-evidence.md index cd23aaa2a..b807352a9 100644 --- a/docs/reference/universal-semantic-evidence.md +++ b/docs/reference/universal-semantic-evidence.md @@ -43,6 +43,18 @@ turns those cases into inferred relationships. A producer-version or capability change invalidates this decision and must return the affected entry to `Qualifying` until a new release decision is reviewed. +The Go producer emits exact named direct struct-field declarations and +ownership candidates, including each name in a grouped declaration. This +does not include embedded, blank, or nested anonymous-struct fields as direct +named members of the outer struct. Go selector expressions outside direct call +targets also emit exact `MemberAccess` occurrences. A receiver with a bounded +source type emits an `AccessesMember` candidate constrained to the exact +owner-qualified field declaration. Missing or ambiguous fields remain +unresolved; method selectors are excluded. Resolved graph v1 contacts appear +as `references` with member-access provenance. These are structural contacts, +not read/write or runtime-alias conclusions. Disposable AST cache version 13 +invalidates older extraction facts. + ## Evidence contract The serialized evidence schema is `compass.languages.evidence/2`. The @@ -118,7 +130,12 @@ collections: boxing/unboxing, array, complete source-hierarchy, and stable core-Java conversions, but only when one applicable vector is more specific than all other applicable vectors. Unknown hierarchy or a competing conversion - remains unresolved. + remains unresolved. Java checks strict fixed-arity applicability before + boxing/unboxing, and both fixed-arity phases before varargs expansion. A + spread declaration participates in fixed-arity phases with its declared + array type. Expanded specificity requires comparable parameter vectors; + differing fixed-prefix lengths remain ambiguous. This bounded source model + does not implement compiler-level generic inference. The TypeScript/JavaScript producer represents a tagged template (``tag`text ${value}``) as a call with occurrence context `tagged_template` (or `tagged_member` for a member tag). Its bounded argument @@ -193,6 +210,38 @@ proves that ownership. Unshadowed `Option` and `Result` use their canonical standard-library identities; other unproven spellings remain unresolved rather than becoming crate-qualified placeholders. +Rust value lookup preserves unknown local bindings as shadowing boundaries. +Loop patterns, closure parameters, match patterns/guards, and conditional-let +bindings cannot reuse an outer parameter alias. Let initializers retain the +previous binding, and condition bindings end before an else branch. An unknown +inner receiver retains its source occurrence and unresolved candidate instead +of acquiring an invented target. This correctness correction keeps the existing +producer capability contract; AST cache semantics version 3 prevents reuse of +facts produced before it. + +For an explicitly typed standard `Result>`, Rust evidence can infer the +vector element from a direct `collect()` over a standard vector `iter().map` +closure whose associated constructor declares standard `Result`. A +matching unshadowed `Ok` arm then carries that vector type into whole-value +loop bindings and standard `iter().map` closure parameters. Each method call +still requires a unique source owner. Custom collection aliases, unsupported +iterator shapes, and ambiguous methods retain unresolved occurrences. AST +cache version 11 refreshes earlier facts without changing the producer's +version-2 capability identity. + +Java method-call candidates can derive their receiver from direct named object +creation, including fully qualified types and parenthesized forms. The method +occurrence remains the exact method-name span, and the existing argument vector +selects among overloads. The producer unwraps at most seven parenthesis levels; +deeper forms retain an unresolved candidate. This bounded inference limit is +not evidence that no call exists. Anonymous classes, enclosing-instance +creation, arrays, casts, and unproven chained results do not acquire a target +from punctuation-stripped expression text. Enclosing-instance construction +retains its receiver qualifier and stays unresolved without owner evidence, +even if a same-named class is imported. AST cache semantics version 5 prevents +reuse of the previous extraction; producer capabilities and schemas are +unchanged. + Rust producer version 2 follows fields through source-proven standard-library `Arc`, `Rc`, and `Box` dereference wrappers and carries a unique source-visible call-result type into the next member call. It also inspects a local @@ -451,6 +500,19 @@ or file; publishing such an edge would invent a return contract and can create an invalid file-to-type relationship. Named functions, methods, and interface methods continue to publish their result types as `returns` evidence. +Go selector receivers follow the nearest supported lexical binding, including +`if`, expression-switch, and loop initializers, block variables, range values, +and closure parameters. Initializers are visible only after their declaration; +control bindings do not escape their statement. An unknown nearer type blocks +an outer parameter alias. Factory results require a source-resolved callable; +a local callback or shadowed import cannot borrow a same-named global factory. +Parameter/import bindings still carry project evidence for cross-file fields +and return contracts. Type-switch aliases block outer types but case-specific +narrowing remains unsupported. In `factory()()`, only the named inner factory +call is eligible for resolution; the unnamed returned callback cannot borrow +the factory receiver's type as its target. Receiver inference keeps its bounded +depth and does not select methods solely because their terminal names match. + Python file imports are visible at module scope. Function- and class-local imports are indexed only in their owning lexical scope, so they cannot leak to sibling functions or become file-owned facts. Each imported item retains its @@ -824,3 +886,65 @@ source-proven inherited members. Parser recovery diagnostics use bounded, nonempty source ranges even when Tree-sitter reports a zero-width missing token. Do not infer support for another language or framework from file extensions, raw graph output, or total node and edge counts. + + +### Java field contacts + +Java fields and enum constants use the existing `MemberAccess` / `AccessesMember` +contract. Qualified expressions allow field or enum-member targets; known +unqualified values retain their declaration kind. Exact member-token ranges +retain repeated uses. Unqualified names require a source-declared value after +lexical lookup. The extraction index tracks block and loop exit, declaration order, +parameters, lambda/catch/resource bindings, and local type-name shadowing. +Declared nominal receivers, source-local field chains, arrays, casts, direct +construction and single generic bounds may establish a target. Visible source +types shadow imports and package prefixes, including nested type syntax. +Qualified Java field lookup stops on absent or ambiguous receiver types before +considering member availability; exact declaration evidence retains precedence. Simple pattern +branches and abrupt guards retain proven scope; unsupported pattern flow masks +possibly shadowed names. Scope traversal is capped at 64 ancestors and receiver +inference at 16 steps. Lexical records use the existing binding capacity; crowded +same-name scopes become unknown rather than requiring unbounded lookup. + +Graph v1 projects these contacts as `references` with member-access provenance. +They are not read/write effects, runtime identities or cohesion judgments. +Inherited fields, general access checking, cross-file field-type chains and +unregistered local/anonymous class ownership remain unsupported. Unknown +qualified receivers never select a same-named field. Schema and producer +capabilities are unchanged; AST cache semantics version 10 rebuilds prior facts. + +Enum constants retain their enclosing enum as their nominal value type, even +when they own a constant-specific body. Registered body methods and field +initializers retain their declaration owners; body fields shadow the enclosing +enum's values. The resolver admits a body-specific field only when the candidate +scope descends from that exact enum-member owner, within the lookup budget. +External enum values and static imports cannot select a body-specific field by +its qualified spelling alone. Duplicate receiver declarations remain ambiguous. + +The Java resolver indexes nominal owners under their complete dotted source +spelling as well as their canonical declaration identity. A dotted nominal +receiver must identify one owner before member lookup; duplicate receiver or +enclosing type declarations and package/type spelling collisions cannot be +disambiguated by member availability. Owner candidates and enclosing-type +lookups share a bounded nominal lookup budget. Exact source declaration evidence +still takes precedence. This joins already established nominal types; it does +not reinterpret value-expression chains as type names. Existing extraction facts +and schema versions remain unchanged; stored graphs require rebuilding. + +Bare enum switch labels derive their target from the selector's nominal type, +not a same-named field of the enclosing class. Candidates allow only enum-member +targets; unknown selectors retain unresolved occurrences. This does not add +integer-switch constant evaluation or general expression-result inference. +Type parameters shadow same-named receiver types; visible source types retain +precedence over imports. Unregistered local/anonymous bodies remain unsupported. + +### Rust field contacts + +Rust field expressions now emit `MemberAccess` occurrences and `AccessesMember` +candidates under the existing `Members` capability. Candidates preserve the +field identifier range, source owner, receiver spelling and bounded qualified +receiver type when available. Targets are restricted to field declarations; +unknown receivers remain unresolved, and method call selectors do not become +field contacts. The existing graph projection emits `references` with +member-access provenance. This is state-contact evidence, not read/write or alias +analysis. Disposable AST semantics version 8 invalidates pre-access facts. diff --git a/fixtures/code-graph/frontend-react/src/app/admin/layout.tsx b/fixtures/code-graph/frontend-react/src/app/admin/layout.tsx new file mode 100644 index 000000000..31e11d04e --- /dev/null +++ b/fixtures/code-graph/frontend-react/src/app/admin/layout.tsx @@ -0,0 +1,3 @@ +export default function AdminLayout({ children }: { children: React.ReactNode }) { + return
{children}
; +} diff --git a/fixtures/code-graph/frontend-react/src/app/layout.tsx b/fixtures/code-graph/frontend-react/src/app/layout.tsx new file mode 100644 index 000000000..b3b059dab --- /dev/null +++ b/fixtures/code-graph/frontend-react/src/app/layout.tsx @@ -0,0 +1,3 @@ +export default function RootLayout({ children }: { children: React.ReactNode }) { + return {children}; +} diff --git a/scripts/check_code_graph_v1_coverage.py b/scripts/check_code_graph_v1_coverage.py index 7fe028c59..4f86d67b2 100755 --- a/scripts/check_code_graph_v1_coverage.py +++ b/scripts/check_code_graph_v1_coverage.py @@ -88,6 +88,7 @@ def main() -> int: "fixtureManifestFingerprint": fingerprint, "flows": len(manifest["flows"]), "negatives": len(manifest["negatives"]), + "routeContainmentNegatives": len(manifest["routeContainmentNegatives"]), "nodeKinds": len(manifest["nodeProducers"]), "edgeKinds": len(manifest["edgeProducers"]), "languages": len(manifest["_languageExpectations"]), diff --git a/scripts/code_graph_v1_oracle.py b/scripts/code_graph_v1_oracle.py index 6c0b36b85..6c5c77ec0 100755 --- a/scripts/code_graph_v1_oracle.py +++ b/scripts/code_graph_v1_oracle.py @@ -11,9 +11,9 @@ from typing import Any, Iterable # The graph wire contract remains compass.graph/1. This expectation schema is -# independently versioned so adding frontend vocabulary cannot make an older -# oracle silently accept a newer manifest. -SCHEMA = "compass.code-graph-qualification/2" +# independently versioned so an older oracle cannot silently omit newly +# required semantic assertions. +SCHEMA = "compass.code-graph-qualification/3" GRAPH_SCHEMA = "compass.graph/1" TOPOLOGY_POLICY_SCHEMA = "compass.code-graph-topology-policy/1" TOPOLOGY_REPORT_SCHEMA = "compass.code-graph-topology-report/1" @@ -163,7 +163,7 @@ def load_manifest( fail("manifest_schema", str(path), f"expected {SCHEMA}") allowed = { "schema", "flows", "negatives", "nodeProducers", "edgeProducers", - "languages", "occurrences", "coverage", "limits", + "languages", "occurrences", "coverage", "limits", "routeContainmentNegatives", } unknown = sorted(set(manifest) - allowed) if unknown: @@ -217,6 +217,28 @@ def load_manifest( _unique_id(ids, identity) _source_exists(fixture_root, item["source"], identity, declared_sources) + containment_fields = {"id", "sourceFile", "targetFile", "reason"} + containment_selectors: set[tuple[str, str]] = set() + if not isinstance(manifest["routeContainmentNegatives"], list): + fail("manifest_route_containment", str(path), "expectations must be a list") + for item in manifest["routeContainmentNegatives"]: + if not isinstance(item, dict): + fail("manifest_route_containment", str(path), "each expectation must be an object") + identity = str(item.get("id", "")) + _require(item, containment_fields, identity) + if set(item) != containment_fields: + fail("manifest_unknown_field", identity, "route containment fields differ from contract") + for key in sorted(containment_fields): + if not isinstance(item[key], str) or not item[key].strip(): + fail("manifest_route_containment", identity, f"{key} must be a nonempty string") + _unique_id(ids, identity) + selector = (item["sourceFile"], item["targetFile"]) + if selector in containment_selectors or selector[0] == selector[1]: + fail("manifest_route_containment", identity, "duplicate or same-file selector") + containment_selectors.add(selector) + for source in selector: + _source_exists(fixture_root, source, identity, declared_sources) + producer_fields = { "id", "kind", "source", "qualifiedName", "producer", "origins", "detailType", @@ -1065,6 +1087,28 @@ def assert_negatives(graph: dict[str, Any], manifest: dict[str, Any]) -> dict[st return {"negatives": count} +def assert_route_containment_negatives(graph: dict[str, Any], manifest: dict[str, Any]) -> dict[str, int]: + routes_by_file: dict[str, set[str]] = defaultdict(set) + for node in graph["nodes"]: + if node.get("kind") == "route": + routes_by_file[(node.get("source") or {}).get("file", "")].add(node["id"]) + passed = 0 + for item in manifest["routeContainmentNegatives"]: + source_ids = routes_by_file[item["sourceFile"]] + target_ids = routes_by_file[item["targetFile"]] + if not source_ids or not target_ids: + fail("route_containment_missing_endpoint", item["id"], "both files must retain route nodes") + forbidden = [ + edge["id"] for edge in graph["links"] + if edge["kind"] == "contains" + and edge["source"] in source_ids and edge["target"] in target_ids + ] + if forbidden: + fail("route_containment_negative", item["id"], f"unsupported edges {sorted(forbidden)}") + passed += 1 + return {"route_containment_negatives": passed} + + def assert_vocabulary(graph: dict[str, Any], manifest: dict[str, Any]) -> dict[str, int]: counts = {} for group, records, key in ( @@ -1192,6 +1236,7 @@ def qualify_graph(graph: dict[str, Any], manifest: dict[str, Any], fixture_root: summary: dict[str, Any] = {} summary.update(assert_flows(graph, manifest, fixture_root)) summary.update(assert_negatives(graph, manifest)) + summary.update(assert_route_containment_negatives(graph, manifest)) summary.update(assert_vocabulary(graph, manifest)) summary.update(assert_languages(graph, manifest)) summary.update(assert_occurrences(graph, manifest)) diff --git a/scripts/qualify_react_frontend_graph.py b/scripts/qualify_react_frontend_graph.py index 54a58bb63..2eab5f1db 100755 --- a/scripts/qualify_react_frontend_graph.py +++ b/scripts/qualify_react_frontend_graph.py @@ -880,6 +880,23 @@ def capability_fact_matches(candidate: dict[str, Any], fact: dict[str, Any], cap } +def assert_fixture_route_hierarchy(nodes: list[dict[str, Any]], edges: list[dict[str, Any]]) -> None: + """Hand-reviewed Next layout composition in the checked-in fixture source.""" + index = {node["id"]: node for node in nodes} + actual = { + (value(index[edge["source"]], "framework"), source_file(index[edge["source"]]), source_file(index[edge["target"]])) + for edge in edges + } + expected = { + ("next", "src/app/layout.tsx", "src/app/page.tsx"), + ("next", "src/app/layout.tsx", "src/app/admin/layout.tsx"), + ("next", "src/app/admin/layout.tsx", "src/app/admin/page.tsx"), + ("next", "src/app/admin/layout.tsx", "src/app/admin/settings/page.tsx"), + } + if actual != expected or len(edges) != len(expected): + fail(f"fixture route hierarchy differs from source layout roles: missing={sorted(expected - actual)} unexpected={sorted(actual - expected)} records={len(edges)} expectedRecords={len(expected)}") + + def load_expectations(path: Path | None = None) -> dict[str, Any]: expectations = load(path or EXPECTATIONS) if expectations.get("schema") != "compass.framework-evidence/1": @@ -978,8 +995,7 @@ def check_positive(graph: dict[str, Any], expectations: dict[str, Any]) -> dict[ and edge.get("source") in route_ids and edge.get("target") in route_ids ] - if not hierarchy_edges: - fail("frontend route hierarchy did not publish a route-to-route contains edge") + assert_fixture_route_hierarchy(nodes, hierarchy_edges) if not all( value(edge, "_origin") == "convention" or any( diff --git a/scripts/qualify_react_frontend_graph.sh b/scripts/qualify_react_frontend_graph.sh index 9c33d522b..f5453c5a7 100755 --- a/scripts/qualify_react_frontend_graph.sh +++ b/scripts/qualify_react_frontend_graph.sh @@ -59,6 +59,7 @@ fi } cd "$ROOT" +node --test "$ROOT/scripts/tests/react_route_hierarchy_oracle.test.mjs" BUILD_REVISION="$(git rev-parse HEAD)" echo "[react-frontend] build release production binary ($MODE mode)" PROJECT_ROOT="$PARSER_ROOT" TSLP_OFFLINE=1 CARGO_TARGET_DIR="$TARGET" \ diff --git a/scripts/react_frontend_source_oracle.mjs b/scripts/react_frontend_source_oracle.mjs index 4ca8457bf..bcad61e3c 100644 --- a/scripts/react_frontend_source_oracle.mjs +++ b/scripts/react_frontend_source_oracle.mjs @@ -16,6 +16,7 @@ import process from "node:process"; import { spawnSync } from "node:child_process"; import { fileURLToPath } from "node:url"; import ts from "typescript"; +import { HIERARCHY_SEMANTICS, sourceRouteParent, sourceRouteScope } from "./react_route_hierarchy_oracle.mjs"; const SCHEMA = "compass.react-frontend-source-oracle/1"; const PROVIDER = "typescript_compiler_api_5_9_3_frontend_projection"; @@ -821,37 +822,6 @@ function sourceFacts(root, framework, records) { if (framework === "tanstack-router") return /(^|\/)src\/routes\/.+\.[cm]?[jt]sx?$/u.test(file); return false; }; - const routeParent = (file, candidates) => { - const parts = file.replaceAll("\\", "/").split("/"); - for (let index = parts.length - 1; index > 0; index -= 1) { - const parentDirectory = parts.slice(0, index).join("/"); - // Do not select the child itself as its own parent. A route module is - // always a candidate in its own directory, so omitting this identity - // guard would make the loop stop at the first iteration and silently - // drop every ancestor hierarchy relationship. - const parent = candidates.find((candidate) => candidate !== file && candidate.split("/").slice(0, -1).join("/") === parentDirectory); - if (parent) return parent; - } - return null; - }; - const routeHierarchyScope = (file) => { - const normalized = file.replaceAll("\\", "/").replace(/^\/+|\/+$/gu, ""); - for (const marker of [ - "src/app/", - "app/", - "src/pages/", - "pages/", - "app/routes/", - "src/routes/", - "routes/", - ]) { - const index = normalized.indexOf(marker); - if (index >= 0 && (index === 0 || normalized[index - 1] === "/")) { - return `${normalized.slice(0, index)}${marker.slice(0, -1)}`; - } - } - return ""; - }; const resolveSourceFile = (file, moduleSpecifier) => { if (typeof moduleSpecifier !== "string" || !moduleSpecifier || moduleSpecifier.startsWith("@")) return null; const clean = moduleSpecifier.replace(/^\.\//u, ""); @@ -1070,8 +1040,7 @@ function sourceFacts(root, framework, records) { } } - // Compass uses bytewise portable-path ordering at the resolver boundary; - // avoid locale-dependent ordering when selecting a same-directory parent. + // Sort output deterministically; ordering is never evidence of parentage. routeFiles.sort(); const hierarchyCapability = { "next-app": "next.app.hierarchy", @@ -1083,14 +1052,15 @@ function sourceFacts(root, framework, records) { if (hierarchyCapability) { const groups = new Map(); for (const file of routeFiles) { - const scope = routeHierarchyScope(file); + const scope = sourceRouteScope(file, framework); + if (!scope) continue; if (!groups.has(scope)) groups.set(scope, []); groups.get(scope).push(file); } for (const candidates of groups.values()) { candidates.sort(); for (const file of candidates) { - const parent = routeParent(file, candidates); + const parent = sourceRouteParent(file, candidates, framework); if (parent) addHierarchyFact(hierarchyCapability, parent, file); } } @@ -1206,6 +1176,7 @@ function main() { const document = { schema: SCHEMA, provider: PROVIDER, + hierarchySemantics: HIERARCHY_SEMANTICS, toolchain: `node-${process.versions.node.split(".")[0]};typescript-${oracle.header.metadata?.compilerVersion ?? "5.9.3"}`, rootRelative: true, framework, diff --git a/scripts/react_route_hierarchy_oracle.mjs b/scripts/react_route_hierarchy_oracle.mjs new file mode 100644 index 000000000..c7ef7bafd --- /dev/null +++ b/scripts/react_route_hierarchy_oracle.mjs @@ -0,0 +1,79 @@ +/** + * Source-only route-parent oracle. Compare candidate/child relationships from + * documented framework conventions; no Compass records or resolver indexes. + * + * Next: https://nextjs.org/docs/app/getting-started/layouts-and-pages + * Flat routes: https://reactrouter.com/how-to/file-route-conventions + * TanStack: https://tanstack.com/router/latest/docs/routing/file-based-routing + */ + +export const HIERARCHY_SEMANTICS = 2; + +export function sourceRouteScope(file, framework) { + file = file.replaceAll("\\", "/"); + const markers = framework === "next-app" + ? ["src/app/", "app/"] + : framework === "tanstack-router" + ? ["src/routes/", "routes/"] + : ["app/routes/", "src/routes/", "routes/"]; + for (const marker of markers) { + let offset = 0; + while (offset < file.length) { + const index = file.indexOf(marker, offset); + if (index < 0) break; + if (index === 0 || file[index - 1] === "/") return file.slice(0, index + marker.length); + offset = index + 1; + } + } + return null; +} + +function description(file, framework) { + const portable = file.replaceAll("\\", "/"); + const root = sourceRouteScope(portable, framework); + if (!root) return null; + const relative = portable.slice(root.length).replace(/\.[cm]?[jt]sx?$/u, ""); + if (relative === portable.slice(root.length)) return null; + if (framework === "next-app") { + const components = relative.split("/"); + const role = components.pop(); + if (!["layout", "page", "template", "error", "loading", "not-found", "default"].includes(role)) return null; + return { root, parts: components, parent: role === "layout", layout: true }; + } + let identifier = relative; + if (framework !== "tanstack-router" && identifier.includes("/")) { + const components = identifier.split("/"); + if (components.length !== 2 || components[1] !== "route") return null; + identifier = components[0]; + } + // Bracket escapes remain opaque, so a literal dot cannot create nesting. + if (!/^(?:\[[^\[\]]*\]|[^\[\]])+$/u.test(identifier)) return null; + let parts = identifier.match(/(?:\[[^\[\]]*\]|[^./])+/gu) ?? []; + if (framework === "tanstack-router") { + if (parts.some((part) => part.startsWith("-")) || parts.at(-1) === "lazy") return null; + parts = parts.filter((part) => !/^\(.*\)$/u.test(part)); + if (parts.at(-1) === "route") parts.pop(); + if (parts.length === 1 && parts[0] === "__root") return { root, parts: [], parent: true, layout: false }; + } + if (!parts.length) return null; + const index = framework === "tanstack-router" ? "index" : "_index"; + return { root, parts, parent: parts.at(-1) !== index && !parts.at(-1).endsWith("_"), layout: false }; +} + +export function sourceRouteParent(file, candidates, framework) { + if (!["next-app", "react-router", "remix", "tanstack-router"].includes(framework)) return null; + const child = description(file, framework); + if (!child) return null; + const matches = []; + for (const candidate of new Set(candidates)) { + if (candidate.replaceAll("\\", "/") === file.replaceAll("\\", "/")) continue; + const parent = description(candidate, framework); + if (!parent?.parent || parent.root !== child.root) continue; + const strict = !parent.layout || child.parent; + if (parent.parts.length > child.parts.length || (strict && parent.parts.length === child.parts.length)) continue; + if (parent.parts.every((part, index) => part === child.parts[index])) matches.push({ file: candidate, depth: parent.parts.length }); + } + const deepest = matches.reduce((depth, match) => Math.max(depth, match.depth), -1); + const closest = matches.filter((match) => match.depth === deepest); + return closest.length === 1 ? closest[0].file : null; +} diff --git a/scripts/tests/react_route_hierarchy_oracle.test.mjs b/scripts/tests/react_route_hierarchy_oracle.test.mjs new file mode 100644 index 000000000..223d79f1d --- /dev/null +++ b/scripts/tests/react_route_hierarchy_oracle.test.mjs @@ -0,0 +1,43 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { sourceRouteParent } from "../react_route_hierarchy_oracle.mjs"; + +// Expected parentage is written from the framework examples and source-file +// roles. These fixtures do not invoke the production resolver or read a graph. +const cases = [ + ["next-app", ["app/page.tsx", "app/admin/page.tsx", "app/admin/settings/page.tsx"], []], + ["next-app", ["app/layout.tsx", "app/page.tsx", "app/blog/layout.tsx", "app/blog/page.tsx", "app/blog/post/page.tsx", "app/api/route.ts", "app/global-error.tsx"], [ + ["app/layout.tsx", "app/page.tsx"], ["app/layout.tsx", "app/blog/layout.tsx"], ["app/blog/layout.tsx", "app/blog/page.tsx"], ["app/blog/layout.tsx", "app/blog/post/page.tsx"], + ]], + ["next-app", ["app/layout.tsx", "app/layout.js", "app/page.tsx"], []], + ["next-app", ["one/app/layout.tsx", "two/app/page.tsx"], []], + ["next-pages", ["pages/index.tsx", "pages/blog.tsx", "pages/blog/post.tsx"], []], + ["react-router", ["src/routes/home.tsx", "src/routes/tanstack.tsx"], []], + ["react-router", ["app/routes/concerts.tsx", "app/routes/concerts.$city.tsx", "app/routes/concerts._index.tsx", "app/routes/concerts_.mine.tsx"], [ + ["app/routes/concerts.tsx", "app/routes/concerts.$city.tsx"], ["app/routes/concerts.tsx", "app/routes/concerts._index.tsx"], + ]], + ["react-router", ["app/routes/_auth.tsx", "app/routes/_auth.login.tsx", "app/routes/_index.tsx", "app/routes/about.tsx"], [["app/routes/_auth.tsx", "app/routes/_auth.login.tsx"]]], + ["remix", ["app/routes/concerts/route.tsx", "app/routes/concerts.$city.tsx", "app/routes/concerts/helper.tsx"], [["app/routes/concerts/route.tsx", "app/routes/concerts.$city.tsx"]]], + ["remix", ["app/routes/concerts.tsx", "app/routes/concerts/route.tsx", "app/routes/concerts.$city.tsx"], []], + ["react-router", ["app/routes/a.tsx", "app/routes/a.b.tsx", "app/routes/a.b_.c.tsx"], [["app/routes/a.tsx", "app/routes/a.b.tsx"], ["app/routes/a.tsx", "app/routes/a.b_.c.tsx"]]], + ["react-router", ["app/routes/foo[.]bar.tsx", "app/routes/foo[.]bar.child.tsx", "app/routes/foo.tsx"], [["app/routes/foo[.]bar.tsx", "app/routes/foo[.]bar.child.tsx"]]], + ["tanstack-router", ["src/routes/__root.tsx", "src/routes/index.tsx", "src/routes/posts.tsx", "src/routes/posts.index.tsx", "src/routes/posts.$id.tsx", "src/routes/posts_.$id.edit.tsx"], [ + ["src/routes/__root.tsx", "src/routes/index.tsx"], ["src/routes/__root.tsx", "src/routes/posts.tsx"], ["src/routes/posts.tsx", "src/routes/posts.index.tsx"], ["src/routes/posts.tsx", "src/routes/posts.$id.tsx"], ["src/routes/__root.tsx", "src/routes/posts_.$id.edit.tsx"], + ]], + ["tanstack-router", ["src/routes/account/route.tsx", "src/routes/account/overview.tsx", "src/routes/account/index.tsx", "src/routes/account/-helper.tsx", "src/routes/account/route.lazy.tsx"], [ + ["src/routes/account/route.tsx", "src/routes/account/overview.tsx"], ["src/routes/account/route.tsx", "src/routes/account/index.tsx"], + ]], + ["tanstack-router", ["src/routes/index.tsx", "src/routes/about.tsx"], []], +]; + +for (const [index, [framework, files, expected]] of cases.entries()) { + test(`source parent case ${index + 1}: ${framework}`, () => { + for (const candidates of [files, [...files].reverse()]) { + const actual = candidates.flatMap((file) => { + const parent = sourceRouteParent(file, candidates, framework); + return parent ? [[parent, file]] : []; + }); + assert.deepEqual(actual.sort(), [...expected].sort()); + } + }); +} diff --git a/scripts/tests/test_code_graph_v1_oracle.py b/scripts/tests/test_code_graph_v1_oracle.py index 54401a328..a6f1c8b39 100644 --- a/scripts/tests/test_code_graph_v1_oracle.py +++ b/scripts/tests/test_code_graph_v1_oracle.py @@ -18,6 +18,7 @@ assert_coverage, assert_flows, assert_negatives, + assert_route_containment_negatives, assert_topology, canonical_bytes, endpoint_allowed, @@ -248,6 +249,60 @@ def test_coverage_rejects_false_complete(self) -> None: with self.assertRaisesRegex(QualificationError, "false_coverage"): assert_coverage(graph, manifest) + def test_route_containment_negatives_require_present_endpoints_and_direction(self) -> None: + source, target = node("route:a", "route"), node("route:b", "route") + source["source"]["file"] = "a.py" + target["source"]["file"] = "b.py" + manifest = {"routeContainmentNegatives": [{ + "id": "independent", "sourceFile": "a.py", "targetFile": "b.py", + "reason": "Independent apps; neither imports or mounts the other.", + }]} + graph = self.graph([source, target]) + self.assertEqual(assert_route_containment_negatives(graph, manifest), { + "route_containment_negatives": 1, + }) + for endpoints in ([source], [target], []): + with self.subTest(endpoints=endpoints), self.assertRaisesRegex( + QualificationError, "route_containment_missing_endpoint" + ): + assert_route_containment_negatives(self.graph(endpoints), manifest) + edge = {"id": "false-parent", "kind": "contains", "source": source["id"], "target": target["id"]} + with self.assertRaisesRegex(QualificationError, "route_containment_negative"): + assert_route_containment_negatives(self.graph([source, target], [edge]), manifest) + edge["source"], edge["target"] = edge["target"], edge["source"] + assert_route_containment_negatives(self.graph([source, target], [edge]), manifest) + edge["source"], edge["target"] = edge["target"], edge["source"] + edge["kind"] = "references" + assert_route_containment_negatives(self.graph([source, target], [edge]), manifest) + + def test_route_containment_manifest_rejects_duplicate_or_unexplained_pairs(self) -> None: + declared_sources = { + item["path"] for item in load_json(ROOT / "tests/qualification/code-graph-v1-corpus.json")["files"] + } + load_manifest(ROOT / "tests/qualification/code-graph-v1-semantic.json", ROOT, declared_sources) + for mutation in ("duplicate", "empty_reason", "unknown_field", "same_file", "non_list", "non_object"): + with self.subTest(mutation=mutation), tempfile.TemporaryDirectory() as directory: + manifest = copy.deepcopy(self.manifest) + item = manifest["routeContainmentNegatives"][0] + if mutation == "duplicate": + duplicate = dict(item, id="different-id-same-pair") + manifest["routeContainmentNegatives"].append(duplicate) + elif mutation == "empty_reason": + item["reason"] = "" + elif mutation == "unknown_field": + item["typo"] = "" + elif mutation == "non_list": + manifest["routeContainmentNegatives"] = None + elif mutation == "non_object": + manifest["routeContainmentNegatives"] = [None] + else: + item["targetFile"] = item["sourceFile"] + path = Path(directory) / "manifest.json" + path.write_text(json.dumps(manifest), encoding="utf-8") + expected_error = "manifest_unknown_field" if mutation == "unknown_field" else "manifest_route_containment" + with self.assertRaisesRegex(QualificationError, expected_error): + load_manifest(path, ROOT, declared_sources) + def test_topology_separates_occurrences_from_unique_typed_connections(self) -> None: first = node("function:first", "function") second = node("function:second", "function") diff --git a/scripts/tests/test_react_frontend_qualification.py b/scripts/tests/test_react_frontend_qualification.py index 0b565f9f3..33019fcb9 100644 --- a/scripts/tests/test_react_frontend_qualification.py +++ b/scripts/tests/test_react_frontend_qualification.py @@ -19,6 +19,19 @@ class ReactFrontendQualificationTests(unittest.TestCase): + def test_fixture_hierarchy_requires_layout_parents_and_rejects_page_parents(self) -> None: + files = ["src/app/layout.tsx", "src/app/page.tsx", "src/app/admin/layout.tsx", "src/app/admin/page.tsx", "src/app/admin/settings/page.tsx"] + nodes = [{"id": name, "kind": "route", "framework": "next", "source": {"file": name}} for name in files] + pairs = [(0, 1), (0, 2), (2, 3), (2, 4)] + edges = [{"source": files[a], "target": files[b]} for a, b in pairs] + MODULE.assert_fixture_route_hierarchy(nodes, edges) + with self.assertRaisesRegex(SystemExit, "source layout roles"): + MODULE.assert_fixture_route_hierarchy(nodes, edges[:-1]) + with self.assertRaisesRegex(SystemExit, "source layout roles"): + MODULE.assert_fixture_route_hierarchy(nodes, edges + [{"source": files[3], "target": files[4]}]) + with self.assertRaisesRegex(SystemExit, "source layout roles"): + MODULE.assert_fixture_route_hierarchy(nodes, edges + [edges[0]]) + def test_capability_matching_preserves_duplicate_occurrences(self) -> None: graph = { "nodes": [ @@ -155,11 +168,14 @@ def test_expectation_policy_is_manifest_bound_and_reviewed(self) -> None: manifest_path = PINNED.ROOT / "tests/qualification/react-frontend-repositories.toml" manifest = PINNED.load_manifest(manifest_path) policy_path = PINNED.ROOT / manifest["expectationPolicy"] - policy = PINNED.load_expectation_policy( - policy_path, - manifest, - PINNED.digest_file(manifest_path), - ) + # Historical hierarchy rows are deliberately invalidated after source + # review. They must block pinned qualification until re-reviewed. + with self.assertRaisesRegex(PINNED.QualificationError, "record is not reviewed"): + PINNED.load_expectation_policy(policy_path, manifest, PINNED.digest_file(manifest_path)) + policy = json.loads(policy_path.read_text(encoding="utf-8")) + invalidated = [record for repository in policy["repositories"] for record in repository["capabilities"].values() if record["reviewStatus"] == "invalidated"] + self.assertEqual(len(invalidated), 3) + self.assertTrue(all(record.get("invalidationReason") for record in invalidated)) self.assertEqual(policy["schema"], PINNED.EXPECTATION_POLICY_SCHEMA) self.assertEqual( {item["id"] for item in policy["repositories"]}, diff --git a/tests/qualification/code-graph-v1-semantic.json b/tests/qualification/code-graph-v1-semantic.json index 6df40d541..5741e826e 100644 --- a/tests/qualification/code-graph-v1-semantic.json +++ b/tests/qualification/code-graph-v1-semantic.json @@ -1,5 +1,5 @@ { - "schema": "compass.code-graph-qualification/2", + "schema": "compass.code-graph-qualification/3", "flows": [ { "id": "flow-django", @@ -1798,5 +1798,115 @@ ], "limits": { "maxDiagnostics": 64 - } + }, + "routeContainmentNegatives": [ + { + "id": "route-containment-independent-1", + "sourceFile": "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx", + "targetFile": "fixtures/code-graph/frontend-react/src/routes/home.tsx", + "reason": "The TanStack createFileRoute /tanstack and React Router /home belong to different route libraries. A shared source directory provides no cross-framework parentage." + }, + { + "id": "route-containment-independent-2", + "sourceFile": "fixtures/code-graph/routes/jvm/SpringController.kt", + "targetFile": "fixtures/code-graph/routes/jvm/SpringController.java", + "reason": "Independent annotated controllers in different packages declare /kotlin and /api mappings. The Kotlin method is not a containing route for Java endpoints." + }, + { + "id": "route-containment-independent-3", + "sourceFile": "fixtures/code-graph/routes/php/drupal.module", + "targetFile": "fixtures/code-graph/routes/php/drupal.routing.yml", + "reason": "The entity-type hook has an empty body. The YAML routes independently declare controllers and forms; the hook does not contain those routes." + }, + { + "id": "route-containment-independent-4", + "sourceFile": "fixtures/code-graph/routes/python/fastapi_models.py", + "targetFile": "fixtures/code-graph/routes/python/fastapi_app.py", + "reason": "The modules instantiate separate FastAPI apps. The models app does not include the other app or its router." + }, + { + "id": "route-containment-independent-5", + "sourceFile": "fixtures/code-graph/routes/python/flask_factory.py", + "targetFile": "fixtures/code-graph/routes/python/flask_app.py", + "reason": "The factory registers its own root and nested blueprints. flask_app.py creates a separate app and blueprint; no cross-module registration exists." + }, + { + "id": "route-containment-independent-6", + "sourceFile": "fixtures/code-graph/routes/typescript/owner-mismatch.ts", + "targetFile": "fixtures/code-graph/routes/typescript/express.ts", + "reason": "Each module creates its own Express app; neither imports or mounts the other. A route with an unresolved controller is not a parent router." + }, + { + "id": "route-containment-independent-7", + "sourceFile": "fixtures/code-graph/routes/typescript/vue-router-qualified.ts", + "targetFile": "fixtures/code-graph/routes/typescript/vue-router.ts", + "reason": "Both modules independently call createRouter. Neither route array declares the other route as a child or imports the other router." + }, + { + "id": "route-containment-independent-8", + "sourceFile": "fixtures/code-graph/routes/typescript/vue-router.ts", + "targetFile": "fixtures/code-graph/routes/typescript/vue-router-qualified.ts", + "reason": "Both modules independently call createRouter. Neither route array declares the other route as a child or imports the other router." + }, + { + "id": "route-containment-independent-9", + "sourceFile": "fixtures/code-graph/frontend-react/src/routes/home.tsx", + "targetFile": "fixtures/code-graph/frontend-react/src/routes/tanstack.tsx", + "reason": "These flat modules declare separate React Router and TanStack routes. Neither declares the other as a child." + }, + { + "id": "route-containment-independent-10", + "sourceFile": "fixtures/code-graph/frontend-react/src/app/page.tsx", + "targetFile": "fixtures/code-graph/frontend-react/src/app/admin/page.tsx", + "reason": "Next page modules are leaves. An ancestor page is not the layout wrapping the nested page." + }, + { + "id": "route-containment-independent-11", + "sourceFile": "fixtures/code-graph/frontend-react/src/app/admin/page.tsx", + "targetFile": "fixtures/code-graph/frontend-react/src/app/admin/settings/page.tsx", + "reason": "Next nesting is established by layout modules, not an ancestor page module." + }, + { + "id": "route-containment-independent-12", + "sourceFile": "fixtures/code-graph/routes/typescript/nuxt/server/api/users.get.ts", + "targetFile": "fixtures/code-graph/routes/typescript/nuxt/server/api/users/[id].post.ts", + "reason": "Independent Nitro HTTP handlers share a URL prefix but do not form a page or layout hierarchy." + }, + { + "id": "route-containment-independent-13", + "sourceFile": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+page.svelte", + "targetFile": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+server.ts", + "reason": "A SvelteKit page and its colocated HTTP server endpoint are separate entry points; the page is not the endpoint parent." + }, + { + "id": "route-containment-independent-14", + "sourceFile": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+server.ts", + "targetFile": "fixtures/code-graph/routes/typescript/sveltekit/src/routes/users/[id]/+page.svelte", + "reason": "A colocated HTTP server endpoint is not a SvelteKit layout and cannot contain the page." + }, + { + "id": "route-containment-independent-15", + "sourceFile": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "targetFile": "fixtures/code-graph/routes/typescript/astro/src/pages/api/items/[id].ts", + "reason": "The About page only renders an h1. Astro layouts require explicit component composition; directory proximity establishes no parent for these independent routes." + }, + { + "id": "route-containment-independent-16", + "sourceFile": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "targetFile": "fixtures/code-graph/routes/typescript/astro/src/pages/users/[id].ts", + "reason": "The About page only renders an h1. Astro layouts require explicit component composition; directory proximity establishes no parent for these independent routes." + }, + { + "id": "route-containment-independent-17", + "sourceFile": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "targetFile": "fixtures/code-graph/routes/typescript/astro/src/pages/blog/[slug].astro", + "reason": "The About page only renders an h1. Astro layouts require explicit component composition; directory proximity establishes no parent for these independent routes." + }, + { + "id": "route-containment-independent-18", + "sourceFile": "fixtures/code-graph/routes/typescript/astro/src/pages/about.astro", + "targetFile": "fixtures/code-graph/routes/typescript/astro/src/pages/files/[...rest].astro", + "reason": "The About page only renders an h1. Astro layouts require explicit component composition; directory proximity establishes no parent for these independent routes." + } + ] } diff --git a/tests/qualification/code-graph-v1-topology.json b/tests/qualification/code-graph-v1-topology.json index 81174513e..3e03e2bc6 100644 --- a/tests/qualification/code-graph-v1-topology.json +++ b/tests/qualification/code-graph-v1-topology.json @@ -2,45 +2,45 @@ "schema": "compass.code-graph-topology-policy/1", "topology": { "minimums": { - "communities": 225, - "edges": 1284, - "exactCrossCommunityEdges": 5, - "exactCrossFileEdges": 81, - "exactCrossFileEdgesPerThousandNodes": 63, - "exactEdgeBearingNodePermille": 711, - "exactEdgeBearingNodes": 908, - "exactEdges": 965, + "communities": 238, + "edges": 1277, + "exactCrossCommunityEdges": 2, + "exactCrossFileEdges": 56, + "exactCrossFileEdgesPerThousandNodes": 43, + "exactEdgeBearingNodePermille": 710, + "exactEdgeBearingNodes": 918, + "exactEdges": 956, "exactLargestComponentNodes": 54, - "exactUniqueTypedEndpointPairs": 956, - "exactUniqueTypedEndpointPairsPerThousandNodes": 749, - "nodes": 1276, - "uniqueTypedEndpointPairs": 1261 + "exactUniqueTypedEndpointPairs": 948, + "exactUniqueTypedEndpointPairsPerThousandNodes": 733, + "nodes": 1292, + "uniqueTypedEndpointPairs": 1255 }, "maximums": { - "communities": 226, - "connectedComponents": 222, - "exactConnectedComponents": 496, - "exactIsolatedNodes": 368, + "communities": 240, + "connectedComponents": 237, + "exactConnectedComponents": 513, + "exactIsolatedNodes": 374, "exactSelfLoops": 0, - "isolatedNodes": 96, + "isolatedNodes": 100, "selfLoops": 0, - "singletonCommunities": 96 + "singletonCommunities": 100 }, "relationshipMinimums": { "calls": { "exactUniqueEndpointPairs": 13 }, "contains": { - "exactCrossFileEdges": 31, - "exactUniqueEndpointPairs": 624 + "exactCrossFileEdges": 4, + "exactUniqueEndpointPairs": 606 }, "documents": { "exactCrossFileEdges": 3, "exactUniqueEndpointPairs": 3 }, "imports": { - "exactCrossFileEdges": 12, - "exactUniqueEndpointPairs": 29 + "exactCrossFileEdges": 14, + "exactUniqueEndpointPairs": 31 }, "maps_to": { "exactCrossFileEdges": 10, @@ -48,7 +48,7 @@ }, "references": { "exactCrossFileEdges": 7, - "exactUniqueEndpointPairs": 49 + "exactUniqueEndpointPairs": 51 }, "renders": { "exactCrossFileEdges": 4, @@ -56,7 +56,7 @@ }, "routes_to": { "exactCrossFileEdges": 14, - "exactUniqueEndpointPairs": 111 + "exactUniqueEndpointPairs": 113 } } } diff --git a/tests/qualification/react-frontend-expectation-policy.json b/tests/qualification/react-frontend-expectation-policy.json index 8619413c7..cdc3bb433 100644 --- a/tests/qualification/react-frontend-expectation-policy.json +++ b/tests/qualification/react-frontend-expectation-policy.json @@ -101,7 +101,7 @@ "recordDigest": "a87ae41e5acfff91e08bd80515e6fcfdf4f1766bc182dd91d8d797f5cedb609e" }, "next.app.hierarchy": { - "reviewStatus": "reviewed", + "reviewStatus": "invalidated", "recordCount": 4548, "counts": { "exact": 4548, @@ -109,7 +109,8 @@ "ambiguous": 0, "unsupported": 0 }, - "recordDigest": "0f7785a4937bd933b8b6ac802bf820280d474ec799fe499c543862789bb92d5a" + "recordDigest": "0f7785a4937bd933b8b6ac802bf820280d474ec799fe499c543862789bb92d5a", + "invalidationReason": "2026-09-26 source audit found that the production resolver and source oracle both selected the first nearby file as a parent. These historical counts/digests are retained, but cannot establish framework nesting. Re-review against documented semantic parent rules before restoring reviewed status." }, "react.render.jsx": { "reviewStatus": "reviewed", @@ -222,7 +223,7 @@ "recordDigest": "4b3dbc677902c1e9339a25b1067dd6b42226f0f1a568dacbefe899c4132f8d7d" }, "react-router.hierarchy": { - "reviewStatus": "reviewed", + "reviewStatus": "invalidated", "recordCount": 175, "counts": { "exact": 175, @@ -230,7 +231,8 @@ "ambiguous": 0, "unsupported": 0 }, - "recordDigest": "0e97550a986d056027a82ec323ef168f5b47ee7ccf22c6a236bd790f62c28324" + "recordDigest": "0e97550a986d056027a82ec323ef168f5b47ee7ccf22c6a236bd790f62c28324", + "invalidationReason": "2026-09-26 source audit found that the production resolver and source oracle both selected the first nearby file as a parent. These historical counts/digests are retained, but cannot establish framework nesting. Re-review against documented semantic parent rules before restoring reviewed status." }, "react.render.jsx": { "reviewStatus": "reviewed", @@ -310,7 +312,7 @@ "recordDigest": "c597d2c919d2d9ba8d4ffc44bf5f3a8fe5ae38b5c1d39f4c2e907534d7f877a9" }, "tanstack.route.hierarchy": { - "reviewStatus": "reviewed", + "reviewStatus": "invalidated", "recordCount": 224, "counts": { "exact": 224, @@ -318,7 +320,8 @@ "ambiguous": 0, "unsupported": 0 }, - "recordDigest": "75311e05f35af3346d28f8f36651bb8f1bb72345c87a02518b429f3dc8554344" + "recordDigest": "75311e05f35af3346d28f8f36651bb8f1bb72345c87a02518b429f3dc8554344", + "invalidationReason": "2026-09-26 source audit found that the production resolver and source oracle both selected the first nearby file as a parent. These historical counts/digests are retained, but cannot establish framework nesting. Re-review against documented semantic parent rules before restoring reviewed status." }, "tanstack.loader": { "reviewStatus": "reviewed",