Receiver Traversal
Receiver-bearing structural sites can expose Bifrost’s bounded, demand-driven receiver facts. The three terminal steps preserve uncertainty explicitly:
points_todescribes the value denoted by an expression.receiver_targetsdescribes the possible receiver values at a call or member access.member_targetsreturns exact workspace or semantic-model members together with the receiver owner that justified each target.
Every analyzed input produces a typed outcome row. points_to and receiver_targets emit receiver_analysis; member_targets emits member_target_analysis with explicit coverage and exact receiver/member identities. Read outcome before using candidates: precise, ambiguous, unknown, unsupported, and exceeded_budget are distinct states. This is not whole-program points-to, general alias analysis, path-sensitive control flow, taint, or data-flow analysis.
Last verified end to end: 2026-08-31 (
query_codeschema version 1).
Fixture
Section titled “Fixture”All examples on this page execute against this file.
class Service { run() {}}
class Other { run() {}}
function makeService() { return new Service();}
function consume(value: Service) { value.run();}
export function caller(flag: boolean) { const direct = new Service(); direct.run();
const factory = makeService(); factory.run();
const ambiguous = flag ? new Service() : new Other(); ambiguous.run();
consume(new Service());}Direct Allocation
Section titled “Direct Allocation”capture on a receiver step is valid only when the preceding domain is a structural match, and the name must identify a positive capture in the pattern. Every unique range bound to that capture is analyzed.
(points-to :capture receiver (language typescript (call :callee "run" :receiver (identifier :name "direct" :capture "receiver")))){"languages":["typescript"],"match":{"kind":"call","callee":{"name":"run"},"receiver":{"kind":"identifier","name":"direct","capture":"receiver"}},"steps":[{"op":"points_to","capture":"receiver"}]}{"results":[{"analysis_kind":"points_to","capture":"receiver","input_kind":"identifier","language":"typescript","outcome":"precise","path":"receiver.ts","provenance":[{"seed":{"end_line":19,"kind":"call","path":"receiver.ts","result_type":"structural_match","start_line":19},"steps":[{"op":"points_to","result":{"analysis_kind":"points_to","capture":"receiver","outcome":"precise","path":"receiver.ts","range":{"end_column":9,"end_line":19,"start_column":3,"start_line":19},"result_type":"receiver_analysis"}}]}],"range":{"end_column":9,"end_line":19,"start_column":3,"start_line":19},"result_type":"receiver_analysis","site_ast_id":"d30a656bec6f731dff30e4c6f3b1ba6c8f37c6c705929bd92adfecd0d3850a06","site_id":"747fe544c97ced0ee644792ffa6320d73c729fcc91886a218c6ca9e205d0971e","text":"direct","values":[{"allocation_site":{"path":"receiver.ts","range":{"end_column":31,"end_line":18,"start_column":18,"start_line":18}},"receiver_value_kind":"allocation_site","type_declaration":{"end_line":3,"fq_name":"Service","kind":"class","language":"typescript","path":"receiver.ts","signature":"class Service {","start_line":1}}]}],"truncated":false}Factory Return Provenance
Section titled “Factory Return Provenance”A factory result retains both the exact factory declaration and the nested value it returned. Here that nested value terminates at the exact Service allocation site.
(points-to :capture receiver (language typescript (call :callee "run" :receiver (identifier :name "factory" :capture "receiver")))){"languages":["typescript"],"match":{"kind":"call","callee":{"name":"run"},"receiver":{"kind":"identifier","name":"factory","capture":"receiver"}},"steps":[{"op":"points_to","capture":"receiver"}]}{"results":[{"analysis_kind":"points_to","capture":"receiver","input_kind":"identifier","language":"typescript","outcome":"precise","path":"receiver.ts","provenance":[{"seed":{"end_line":22,"kind":"call","path":"receiver.ts","result_type":"structural_match","start_line":22},"steps":[{"op":"points_to","result":{"analysis_kind":"points_to","capture":"receiver","outcome":"precise","path":"receiver.ts","range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"receiver_analysis"}}]}],"range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"receiver_analysis","site_ast_id":"9218d24672d364d35f0192fa68014ebec561c2c259231819235210b1a8d03f35","site_id":"b11939a3de8d043c2258aae65e077776e6e04cd3668e54e74a9619a5dfd33f22","text":"factory","values":[{"factory":{"end_line":11,"fq_name":"makeService","kind":"function","language":"typescript","path":"receiver.ts","signature":"function makeService() { ... }","start_line":9},"receiver_value_kind":"factory_return","returned_value":{"allocation_site":{"path":"receiver.ts","range":{"end_column":23,"end_line":10,"start_column":10,"start_line":10}},"receiver_value_kind":"allocation_site","type_declaration":{"end_line":3,"fq_name":"Service","kind":"class","language":"typescript","path":"receiver.ts","signature":"class Service {","start_line":1}}}]}],"truncated":false}Exact Member Target, Not Same-Name Guessing
Section titled “Exact Member Target, Not Same-Name Guessing”Both classes declare run, but the direct receiver is a Service. member_targets returns only that owner’s declaration; it never falls back to an unrelated same-name member.
(member-targets (language typescript (call :callee "run" :receiver "direct"))){"languages":["typescript"],"match":{"kind":"call","callee":{"name":"run"},"receiver":{"name":"direct"}},"steps":[{"op":"member_targets"}]}{"results":[{"coverage":"exhaustive","input_kind":"receiver","language":"typescript","member_range":{"end_column":13,"end_line":19,"start_column":10,"start_line":19},"member_targets":[{"declaration":{"end_line":2,"fq_name":"Service.run","kind":"function","language":"typescript","path":"receiver.ts","signature":"run() { ... }","start_line":2},"end_line":2,"fq_name":"Service.run","id":"decl:v1:086a906933d15e9714fc034c3f11f6e9363a0d0c545f73fe5db0ab992fbae19e","kind":"function","language":"typescript","name":"run","path":"receiver.ts","receiver_declaration":{"end_line":3,"fq_name":"Service","kind":"class","language":"typescript","path":"receiver.ts","signature":"class Service {","start_line":1},"receiver_fq_name":"Service","receiver_id":"decl:v1:441a4f4afe3383243aaa9a0e3e464f314d42120410cd2a8f3d4113667ff9ee99","receiver_kind":"class","signature":"run() { ... }","start_line":2}],"outcome":"precise","path":"receiver.ts","provenance":[{"seed":{"end_line":19,"kind":"call","path":"receiver.ts","result_type":"structural_match","start_line":19},"steps":[{"op":"member_targets","result":{"coverage":"exhaustive","outcome":"precise","path":"receiver.ts","receiver_range":{"end_column":9,"end_line":19,"start_column":3,"start_line":19},"result_type":"member_target_analysis","site_id":"bdfe81a1b0bccb0de4c0002130f09ee83c239843e8768962e8a60cdb16de3a4d"}}]}],"range":{"end_column":9,"end_line":19,"start_column":3,"start_line":19},"result_type":"member_target_analysis","site_ast_id":"d30a656bec6f731dff30e4c6f3b1ba6c8f37c6c705929bd92adfecd0d3850a06","site_id":"bdfe81a1b0bccb0de4c0002130f09ee83c239843e8768962e8a60cdb16de3a4d","text":"direct"}],"truncated":false}Bounded Ambiguity
Section titled “Bounded Ambiguity”The conditional initializer has two bounded candidates. The row remains ambiguous and retains both allocation/type candidates; neither is silently upgraded to precise.
(receiver-targets (language typescript (call :callee "run" :receiver "ambiguous"))){"languages":["typescript"],"match":{"kind":"call","callee":{"name":"run"},"receiver":{"name":"ambiguous"}},"steps":[{"op":"receiver_targets"}]}{"results":[{"analysis_kind":"receiver_targets","input_kind":"identifier","language":"typescript","outcome":"ambiguous","path":"receiver.ts","provenance":[{"seed":{"end_line":25,"kind":"call","path":"receiver.ts","result_type":"structural_match","start_line":25},"steps":[{"op":"receiver_targets","result":{"analysis_kind":"receiver_targets","outcome":"ambiguous","path":"receiver.ts","range":{"end_column":12,"end_line":25,"start_column":3,"start_line":25},"result_type":"receiver_analysis"}}]}],"range":{"end_column":12,"end_line":25,"start_column":3,"start_line":25},"result_type":"receiver_analysis","site_ast_id":"83c828f8a8013c5d1266eb54f28c624eb5949b93a7d77ae90fdb61d36b74fa49","site_id":"cd48f82325900d406677e5217506fa5f62aebf3d7ae1b4096f0fa625f11eb04e","text":"ambiguous","values":[{"allocation_site":{"path":"receiver.ts","range":{"end_column":41,"end_line":24,"start_column":28,"start_line":24}},"receiver_value_kind":"allocation_site","type_declaration":{"end_line":3,"fq_name":"Service","kind":"class","language":"typescript","path":"receiver.ts","signature":"class Service {","start_line":1}},{"allocation_site":{"path":"receiver.ts","range":{"end_column":55,"end_line":24,"start_column":44,"start_line":24}},"receiver_value_kind":"allocation_site","type_declaration":{"end_line":7,"fq_name":"Other","kind":"class","language":"typescript","path":"receiver.ts","signature":"class Other {","start_line":5}}]}],"truncated":false}Compose From A Reference Site
Section titled “Compose From A Reference Site”references_of produces exact reference-site rows. member_targets can consume them and reuses the same receiver-qualified member resolution used by definition and usage analysis.
(member-targets (references-of :proof proven (enclosing-decl (language typescript (inside (class :name "Service") (method :name "run")))))){"languages":["typescript"],"match":{"kind":"method","name":"run"},"inside":{"kind":"class","name":"Service"},"steps":[{"op":"enclosing_decl"},{"op":"references_of","proof":"proven"},{"op":"member_targets"}]}{"results":[{"coverage":"exhaustive","input_kind":"receiver","language":"typescript","member_range":{"end_column":12,"end_line":14,"start_column":9,"start_line":14},"member_targets":[{"declaration":{"end_line":2,"fq_name":"Service.run","kind":"function","language":"typescript","path":"receiver.ts","signature":"run() { ... }","start_line":2},"end_line":2,"fq_name":"Service.run","id":"decl:v1:086a906933d15e9714fc034c3f11f6e9363a0d0c545f73fe5db0ab992fbae19e","kind":"function","language":"typescript","name":"run","path":"receiver.ts","receiver_declaration":{"end_line":3,"fq_name":"Service","kind":"class","language":"typescript","path":"receiver.ts","signature":"class Service {","start_line":1},"receiver_fq_name":"Service","receiver_id":"decl:v1:441a4f4afe3383243aaa9a0e3e464f314d42120410cd2a8f3d4113667ff9ee99","receiver_kind":"class","signature":"run() { ... }","start_line":2}],"outcome":"precise","path":"receiver.ts","provenance":[{"seed":{"end_line":2,"kind":"method","path":"receiver.ts","result_type":"structural_match","start_line":2},"steps":[{"op":"enclosing_decl","result":{"end_line":2,"fq_name":"Service.run","kind":"method","path":"receiver.ts","result_type":"declaration","start_line":2}},{"op":"references_of","result":{"path":"receiver.ts","proof":"proven","range":{"end_column":12,"end_line":14,"start_column":9,"start_line":14},"reference_kind":"method_call","result_type":"reference_site","target_fq_name":"Service.run"}},{"op":"member_targets","result":{"coverage":"exhaustive","outcome":"precise","path":"receiver.ts","receiver_range":{"end_column":8,"end_line":14,"start_column":3,"start_line":14},"result_type":"member_target_analysis","site_id":"df0e9f4bf510efeb6c0c37365e0424af81b20d18da1631834408a519d45e5acc"}}]}],"range":{"end_column":8,"end_line":14,"start_column":3,"start_line":14},"result_type":"member_target_analysis","site_ast_id":"26076d2185a529f34c83122279920e67cbb1409744865acf61bd3ab8c55df949","site_id":"df0e9f4bf510efeb6c0c37365e0424af81b20d18da1631834408a519d45e5acc","text":"value"},{"coverage":"exhaustive","input_kind":"receiver","language":"typescript","member_range":{"end_column":13,"end_line":19,"start_column":10,"start_line":19},"member_targets":[{"declaration":{"end_line":2,"fq_name":"Service.run","kind":"function","language":"typescript","path":"receiver.ts","signature":"run() { ... }","start_line":2},"end_line":2,"fq_name":"Service.run","id":"decl:v1:086a906933d15e9714fc034c3f11f6e9363a0d0c545f73fe5db0ab992fbae19e","kind":"function","language":"typescript","name":"run","path":"receiver.ts","receiver_declaration":{"end_line":3,"fq_name":"Service","kind":"class","language":"typescript","path":"receiver.ts","signature":"class Service {","start_line":1},"receiver_fq_name":"Service","receiver_id":"decl:v1:441a4f4afe3383243aaa9a0e3e464f314d42120410cd2a8f3d4113667ff9ee99","receiver_kind":"class","signature":"run() { ... }","start_line":2}],"outcome":"precise","path":"receiver.ts","provenance":[{"seed":{"end_line":2,"kind":"method","path":"receiver.ts","result_type":"structural_match","start_line":2},"steps":[{"op":"enclosing_decl","result":{"end_line":2,"fq_name":"Service.run","kind":"method","path":"receiver.ts","result_type":"declaration","start_line":2}},{"op":"references_of","result":{"path":"receiver.ts","proof":"proven","range":{"end_column":13,"end_line":19,"start_column":10,"start_line":19},"reference_kind":"method_call","result_type":"reference_site","target_fq_name":"Service.run"}},{"op":"member_targets","result":{"coverage":"exhaustive","outcome":"precise","path":"receiver.ts","receiver_range":{"end_column":9,"end_line":19,"start_column":3,"start_line":19},"result_type":"member_target_analysis","site_id":"bdfe81a1b0bccb0de4c0002130f09ee83c239843e8768962e8a60cdb16de3a4d"}}]}],"range":{"end_column":9,"end_line":19,"start_column":3,"start_line":19},"result_type":"member_target_analysis","site_ast_id":"d30a656bec6f731dff30e4c6f3b1ba6c8f37c6c705929bd92adfecd0d3850a06","site_id":"bdfe81a1b0bccb0de4c0002130f09ee83c239843e8768962e8a60cdb16de3a4d","text":"direct"},{"coverage":"exhaustive","input_kind":"receiver","language":"typescript","member_range":{"end_column":14,"end_line":22,"start_column":11,"start_line":22},"member_targets":[{"declaration":{"end_line":2,"fq_name":"Service.run","kind":"function","language":"typescript","path":"receiver.ts","signature":"run() { ... }","start_line":2},"end_line":2,"fq_name":"Service.run","id":"decl:v1:086a906933d15e9714fc034c3f11f6e9363a0d0c545f73fe5db0ab992fbae19e","kind":"function","language":"typescript","name":"run","path":"receiver.ts","receiver_declaration":{"end_line":3,"fq_name":"Service","kind":"class","language":"typescript","path":"receiver.ts","signature":"class Service {","start_line":1},"receiver_fq_name":"Service","receiver_id":"decl:v1:441a4f4afe3383243aaa9a0e3e464f314d42120410cd2a8f3d4113667ff9ee99","receiver_kind":"class","signature":"run() { ... }","start_line":2}],"outcome":"precise","path":"receiver.ts","provenance":[{"seed":{"end_line":2,"kind":"method","path":"receiver.ts","result_type":"structural_match","start_line":2},"steps":[{"op":"enclosing_decl","result":{"end_line":2,"fq_name":"Service.run","kind":"method","path":"receiver.ts","result_type":"declaration","start_line":2}},{"op":"references_of","result":{"path":"receiver.ts","proof":"proven","range":{"end_column":14,"end_line":22,"start_column":11,"start_line":22},"reference_kind":"method_call","result_type":"reference_site","target_fq_name":"Service.run"}},{"op":"member_targets","result":{"coverage":"exhaustive","outcome":"precise","path":"receiver.ts","receiver_range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"member_target_analysis","site_id":"19d81f677c0894963a7ff10b8a29e6b83bc4aa57769aab201360306f4917da6e"}}]}],"range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"member_target_analysis","site_ast_id":"9218d24672d364d35f0192fa68014ebec561c2c259231819235210b1a8d03f35","site_id":"19d81f677c0894963a7ff10b8a29e6b83bc4aa57769aab201360306f4917da6e","text":"factory"}],"truncated":false}Compose From A Call Input
Section titled “Compose From A Call Input”call_input preserves the exact expression written for a resolved formal parameter. points_to then analyzes that expression without pretending it followed assignments or general interprocedural data flow. Here the exact allocation is retained, while an omitted unresolved call candidate keeps the receiver row ambiguous instead of silently claiming whole-program precision.
(points-to (call-input :parameter-index 0 (call-sites-to :proof proven (enclosing-decl (language typescript (function :name "consume")))))){"languages":["typescript"],"match":{"kind":"function","name":"consume"},"steps":[{"op":"enclosing_decl"},{"op":"call_sites_to","proof":"proven"},{"op":"call_input","parameter_index":0},{"op":"points_to"}]}{"diagnostics":[{"code":"call_relation_candidates_omitted","impact":"incomplete","language":"typescript","message":"omitted 1 unresolved call candidate for consume"}],"results":[{"analysis_kind":"points_to","input_kind":"new_expression","language":"typescript","outcome":"ambiguous","path":"receiver.ts","provenance":[{"seed":{"end_line":15,"kind":"function","path":"receiver.ts","result_type":"structural_match","start_line":13},"steps":[{"op":"enclosing_decl","result":{"end_line":15,"fq_name":"consume","kind":"function","path":"receiver.ts","result_type":"declaration","start_line":13}},{"op":"call_sites_to","result":{"callee_fq_name":"consume","caller_fq_name":"caller","path":"receiver.ts","proof":"proven","range":{"end_column":25,"end_line":27,"start_column":3,"start_line":27},"result_type":"call_site"}},{"op":"call_input","result":{"input_kind":"parameter","parameter_index":0,"parameter_name":"value","path":"receiver.ts","range":{"end_column":24,"end_line":27,"start_column":11,"start_line":27},"result_type":"expression_site"}},{"op":"points_to","result":{"analysis_kind":"points_to","outcome":"ambiguous","path":"receiver.ts","range":{"end_column":24,"end_line":27,"start_column":11,"start_line":27},"result_type":"receiver_analysis"}}]}],"range":{"end_column":24,"end_line":27,"start_column":11,"start_line":27},"result_type":"receiver_analysis","site_ast_id":"0592c06ab7952a4dd47db2a7a5d7bd5879b743d6fa55bd850c35e87ade3e0fa8","site_id":"423d0e474a2c4b918970d404b5c661a7ac9c3637218eac76bcb27a18fa25b560","text":"new Service()","values":[{"allocation_site":{"path":"receiver.ts","range":{"end_column":24,"end_line":27,"start_column":11,"start_line":27}},"receiver_value_kind":"allocation_site","type_declaration":{"end_line":3,"fq_name":"Service","kind":"class","language":"typescript","path":"receiver.ts","signature":"class Service {","start_line":1}}]}],"truncated":false}Typed Receiver Rows
Section titled “Typed Receiver Rows”The nested report above is the compatibility projection. Policy evaluation and relational assertions consume the same analysis as flat typed rows instead:
receiver_outcomeprojects the mandatory terminal row for each analyzed site. It always exists, even when the site is unknown, unsupported, or over budget, and it statescoverageexplicitly so an empty evidence set can never masquerade as a proven-empty value set.receiver_evidenceprojects one row per retained receiver observation. Rows carry stablesite_id/idkeys, so a policy joins evidence to its outcome (and to occurrence rows viasite_ast_id) by identity, never by range or spelling. Each row also carries the analyzed receiverrangeso a finding can anchor its source location after identity-based selection.
(receiver-outcome (points-to :capture receiver (language typescript (call :callee "run" :receiver (identifier :name "direct" :capture "receiver"))))){"languages":["typescript"],"match":{"kind":"call","callee":{"name":"run"},"receiver":{"kind":"identifier","name":"direct","capture":"receiver"}},"steps":[{"op":"points_to","capture":"receiver"},{"op":"receiver_outcome"}]}{"results":[{"analysis_kind":"points_to","candidate_count":1,"candidates_truncated":false,"coverage":"exhaustive","id":"747fe544c97ced0ee644792ffa6320d73c729fcc91886a218c6ca9e205d0971e","language":"typescript","outcome":"precise","path":"receiver.ts","provenance":[{"seed":{"end_line":19,"kind":"call","path":"receiver.ts","result_type":"structural_match","start_line":19},"steps":[{"op":"points_to","result":{"analysis_kind":"points_to","capture":"receiver","outcome":"precise","path":"receiver.ts","range":{"end_column":9,"end_line":19,"start_column":3,"start_line":19},"result_type":"receiver_analysis"}},{"op":"receiver_outcome","result":{"coverage":"exhaustive","id":"747fe544c97ced0ee644792ffa6320d73c729fcc91886a218c6ca9e205d0971e","outcome":"precise","path":"receiver.ts","range":{"end_column":9,"end_line":19,"start_column":3,"start_line":19},"result_type":"receiver_outcome","site_id":"747fe544c97ced0ee644792ffa6320d73c729fcc91886a218c6ca9e205d0971e"}}]}],"range":{"end_column":9,"end_line":19,"start_column":3,"start_line":19},"result_type":"receiver_outcome","scope_nodes":1852,"setup_nodes":94,"site_ast_id":"d30a656bec6f731dff30e4c6f3b1ba6c8f37c6c705929bd92adfecd0d3850a06","site_id":"747fe544c97ced0ee644792ffa6320d73c729fcc91886a218c6ca9e205d0971e","summary_expansions":15}],"truncated":false}A factory receiver’s evidence is a parent-linked chain: the factory_return row is hop zero, and the value it returned links back through parent_evidence_id.
(receiver-evidence (points-to :capture receiver (language typescript (call :callee "run" :receiver (identifier :name "factory" :capture "receiver"))))){"languages":["typescript"],"match":{"kind":"call","callee":{"name":"run"},"receiver":{"kind":"identifier","name":"factory","capture":"receiver"}},"steps":[{"op":"points_to","capture":"receiver"},{"op":"receiver_evidence"}]}{"results":[{"chain_hop":0,"completeness":"exhaustive","evidence_kind":"factory_return","factory_id":"receiver.ts:function:makeService:58-108","id":"0ee4afdbb0b506ed500bbb6a68041b9fd849dd45f8f22ab13478f436dd4b3d81","ordinal":0,"path":"receiver.ts","proof":"precise","provenance":[{"seed":{"end_line":22,"kind":"call","path":"receiver.ts","result_type":"structural_match","start_line":22},"steps":[{"op":"points_to","result":{"analysis_kind":"points_to","capture":"receiver","outcome":"precise","path":"receiver.ts","range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"receiver_analysis"}},{"op":"receiver_evidence","result":{"evidence_kind":"factory_return","id":"0ee4afdbb0b506ed500bbb6a68041b9fd849dd45f8f22ab13478f436dd4b3d81","path":"receiver.ts","range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"receiver_evidence","site_id":"b11939a3de8d043c2258aae65e077776e6e04cd3668e54e74a9619a5dfd33f22"}}]}],"range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"receiver_evidence","site_ast_id":"9218d24672d364d35f0192fa68014ebec561c2c259231819235210b1a8d03f35","site_id":"b11939a3de8d043c2258aae65e077776e6e04cd3668e54e74a9619a5dfd33f22"},{"chain_hop":1,"completeness":"exhaustive","declaration_fq_name":"Service","declaration_id":"receiver.ts:class:Service:0-28","declaration_kind":"class","evidence_kind":"allocation_site","id":"9f86031ff1c1abb2afa89aea90aff62064dbe8e31ade74ab16d4bf76ebf3670b","ordinal":0,"parent_evidence_id":"0ee4afdbb0b506ed500bbb6a68041b9fd849dd45f8f22ab13478f436dd4b3d81","path":"receiver.ts","proof":"precise","provenance":[{"seed":{"end_line":22,"kind":"call","path":"receiver.ts","result_type":"structural_match","start_line":22},"steps":[{"op":"points_to","result":{"analysis_kind":"points_to","capture":"receiver","outcome":"precise","path":"receiver.ts","range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"receiver_analysis"}},{"op":"receiver_evidence","result":{"evidence_kind":"allocation_site","id":"9f86031ff1c1abb2afa89aea90aff62064dbe8e31ade74ab16d4bf76ebf3670b","path":"receiver.ts","range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"receiver_evidence","site_id":"b11939a3de8d043c2258aae65e077776e6e04cd3668e54e74a9619a5dfd33f22"}}]}],"range":{"end_column":10,"end_line":22,"start_column":3,"start_line":22},"result_type":"receiver_evidence","site_ast_id":"9218d24672d364d35f0192fa68014ebec561c2c259231819235210b1a8d03f35","site_id":"b11939a3de8d043c2258aae65e077776e6e04cd3668e54e74a9619a5dfd33f22"}],"truncated":false}Capability And Safety Boundary
Section titled “Capability And Safety Boundary”The Java tutorial executes a typed receiver example; this page exercises the same public contract with JavaScript/TypeScript allocation, factory, ambiguity, exact-member, reference-site, and call-input behavior. Those examples illustrate the adapter-neutral contract rather than define its coverage. Each selected adapter contributes structured facts and exact resolver evidence when available; virtual or dynamic dispatch, metaprogramming, unsupported syntax, and source forms without receiver semantics remain explicit uncertainty boundaries rather than masquerading as zero matches.
Candidate-cap truncation and receiver budget exits set top-level truncated, identify the exhausted limit, and emit a diagnostic. Ordinary bounded ambiguity does not set truncated. For a completeness-sensitive decision, require truncated: false, inspect every outcome, reject or account for diagnostics whose impact is incomplete or invalid, and check provenance_truncated as described in Agent Result Safety.