mustflow 2.116.1 → 2.116.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/package.json +1 -1
  2. package/templates/default/i18n.toml +72 -6
  3. package/templates/default/locales/en/.mustflow/skills/INDEX.md +37 -11
  4. package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/SKILL.md +477 -0
  5. package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/compiler-diagnostics-abi-linker-checklist.md +778 -0
  6. package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/compiler-generators-properties-checklist.md +501 -0
  7. package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/compiler-test-strategy-differential-checklist.md +498 -0
  8. package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/debug-symbol-symbolication-checklist.md +412 -0
  9. package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/ir-design-ssa-pass-pipeline-checklist.md +759 -0
  10. package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/miscompile-reduction-ir-checklist.md +434 -0
  11. package/templates/default/locales/en/.mustflow/skills/cross-platform-filesystem-safety/SKILL.md +55 -36
  12. package/templates/default/locales/en/.mustflow/skills/cross-platform-filesystem-safety/references/path-containment-handle-checklist.md +251 -0
  13. package/templates/default/locales/en/.mustflow/skills/file-upload-security-review/SKILL.md +133 -32
  14. package/templates/default/locales/en/.mustflow/skills/file-upload-security-review/references/file-upload-parser-ssrf-resource-checklist.md +306 -0
  15. package/templates/default/locales/en/.mustflow/skills/formal-verification-review/SKILL.md +310 -0
  16. package/templates/default/locales/en/.mustflow/skills/formal-verification-review/references/formal-concurrency-model-checking-smt-checklist.md +457 -0
  17. package/templates/default/locales/en/.mustflow/skills/formal-verification-review/references/formal-contracts-modeling-checklist.md +434 -0
  18. package/templates/default/locales/en/.mustflow/skills/formal-verification-review/references/formal-memory-bounds-ci-checklist.md +509 -0
  19. package/templates/default/locales/en/.mustflow/skills/fuzz-harness-review/SKILL.md +439 -0
  20. package/templates/default/locales/en/.mustflow/skills/fuzz-harness-review/references/fuzz-harness-campaign-checklist.md +379 -0
  21. package/templates/default/locales/en/.mustflow/skills/fuzz-harness-review/references/fuzz-oracle-triage-ci-checklist.md +307 -0
  22. package/templates/default/locales/en/.mustflow/skills/idempotency-integrity-review/SKILL.md +48 -28
  23. package/templates/default/locales/en/.mustflow/skills/idempotency-integrity-review/references/operation-ordering-stale-write-checklist.md +259 -0
  24. package/templates/default/locales/en/.mustflow/skills/input-boundary-validation-review/SKILL.md +329 -0
  25. package/templates/default/locales/en/.mustflow/skills/input-boundary-validation-review/references/input-boundary-security-checklist.md +319 -0
  26. package/templates/default/locales/en/.mustflow/skills/input-event-synchronization-review/SKILL.md +306 -0
  27. package/templates/default/locales/en/.mustflow/skills/input-event-synchronization-review/references/input-session-state-checklist.md +298 -0
  28. package/templates/default/locales/en/.mustflow/skills/input-event-synchronization-review/references/remote-input-transport-interaction-checklist.md +328 -0
  29. package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/SKILL.md +353 -0
  30. package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/references/interpreter-diagnostics-recovery-checklist.md +267 -0
  31. package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/references/interpreter-execution-closure-performance-checklist.md +428 -0
  32. package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/references/interpreter-gc-verification-checklist.md +457 -0
  33. package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/references/interpreter-semantics-runtime-checklist.md +391 -0
  34. package/templates/default/locales/en/.mustflow/skills/modal-loop-reentrancy-review/SKILL.md +294 -0
  35. package/templates/default/locales/en/.mustflow/skills/modal-loop-reentrancy-review/references/modal-loop-reentrancy-checklist.md +290 -0
  36. package/templates/default/locales/en/.mustflow/skills/modal-loop-reentrancy-review/references/nested-modal-state-lifetime-checklist.md +297 -0
  37. package/templates/default/locales/en/.mustflow/skills/name-resolution-integrity-review/SKILL.md +252 -0
  38. package/templates/default/locales/en/.mustflow/skills/name-resolution-integrity-review/references/dns-network-resolution-checklist.md +394 -0
  39. package/templates/default/locales/en/.mustflow/skills/name-resolution-integrity-review/references/language-symbol-resolution-checklist.md +282 -0
  40. package/templates/default/locales/en/.mustflow/skills/name-resolution-integrity-review/references/module-package-loader-resolution-checklist.md +352 -0
  41. package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/SKILL.md +103 -17
  42. package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/references/cst-ast-lowering-checklist.md +260 -0
  43. package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/references/lexer-tokenization-checklist.md +397 -0
  44. package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/references/tree-serialization-compatibility-checklist.md +164 -0
  45. package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/references/tree-traversal-rewrite-checklist.md +209 -0
  46. package/templates/default/locales/en/.mustflow/skills/race-condition-review/SKILL.md +68 -11
  47. package/templates/default/locales/en/.mustflow/skills/race-condition-review/references/race-reproduction-memory-model-checklist.md +268 -0
  48. package/templates/default/locales/en/.mustflow/skills/routes.toml +151 -0
  49. package/templates/default/locales/en/.mustflow/skills/session-handoff-integrity-review/SKILL.md +343 -0
  50. package/templates/default/locales/en/.mustflow/skills/session-handoff-integrity-review/references/session-auth-stream-resume-checklist.md +413 -0
  51. package/templates/default/locales/en/.mustflow/skills/session-handoff-integrity-review/references/session-handoff-protocol-checklist.md +485 -0
  52. package/templates/default/locales/en/.mustflow/skills/two-phase-transition-integrity-review/SKILL.md +267 -0
  53. package/templates/default/locales/en/.mustflow/skills/two-phase-transition-integrity-review/references/admission-decision-recovery-checklist.md +308 -0
  54. package/templates/default/locales/en/.mustflow/skills/two-phase-transition-integrity-review/references/two-phase-transition-checklist.md +229 -0
  55. package/templates/default/locales/en/.mustflow/skills/ui-dispatch-lifecycle-review/SKILL.md +300 -0
  56. package/templates/default/locales/en/.mustflow/skills/ui-dispatch-lifecycle-review/references/ui-affinity-event-loop-checklist.md +277 -0
  57. package/templates/default/locales/en/.mustflow/skills/ui-dispatch-lifecycle-review/references/ui-dispatch-lifecycle-checklist.md +292 -0
  58. package/templates/default/manifest.toml +115 -1
@@ -0,0 +1,394 @@
1
+ # DNS and Network Resolution Checklist
2
+
3
+ Use this checklist when hostnames resolve differently across applications, containers, VPNs,
4
+ proxies, browsers, operating-system resolvers, recursive resolvers, or network locations.
5
+
6
+ ## Contents
7
+
8
+ 1. [Execution-space capsule](#execution-space-capsule)
9
+ 2. [Resolver API and runtime behavior](#resolver-api-and-runtime-behavior)
10
+ 3. [Resolver stack](#resolver-stack)
11
+ 4. [Query transformation](#query-transformation)
12
+ 5. [Split DNS and route selection](#split-dns-and-route-selection)
13
+ 6. [Recursive, authoritative, and delegation boundaries](#recursive-authoritative-and-delegation-boundaries)
14
+ 7. [Proxy and application resolution ownership](#proxy-and-application-resolution-ownership)
15
+ 8. [Local name sources](#local-name-sources)
16
+ 9. [Cache and freshness ledger](#cache-and-freshness-ledger)
17
+ 10. [Response taxonomy](#response-taxonomy)
18
+ 11. [Transport and message size](#transport-and-message-size)
19
+ 12. [DNSSEC and validation](#dnssec-and-validation)
20
+ 13. [CDN and resolver location](#cdn-and-resolver-location)
21
+ 14. [Alias and service records](#alias-and-service-records)
22
+ 15. [Container and cluster name scopes](#container-and-cluster-name-scopes)
23
+ 16. [Address selection, connection reuse, and routing](#address-selection-connection-reuse-and-routing)
24
+ 17. [Evidence matrix](#evidence-matrix)
25
+ 18. [Failure matrix](#failure-matrix)
26
+ 19. [Invariants](#invariants)
27
+ 20. [Skill handoffs](#skill-handoffs)
28
+
29
+ ## Execution-space capsule
30
+
31
+ Capture the failing request where it actually runs. Record:
32
+
33
+ - executable and runtime identity;
34
+ - host, container, pod, network namespace, service manager, user, and security context;
35
+ - interface and route table visible to the process;
36
+ - resolver configuration files and generated ownership of those files;
37
+ - hosts, name-service switch, search-domain, and local discovery configuration;
38
+ - VPN, proxy, browser, runtime, and enterprise policy state;
39
+ - request time, monotonic sequence, and relevant configuration generation;
40
+ - exact hostname spelling, trailing-dot state, record kind, address family, and API used.
41
+
42
+ A query from the host shell is a control, not evidence about a process in another namespace. Capture
43
+ the pre-change state before restarting a pod, reconnecting a VPN, replacing a generated resolver
44
+ file, or flushing any cache.
45
+
46
+ ## Resolver API and runtime behavior
47
+
48
+ Name the exact application API before comparing results. On one host, one runtime API can delegate
49
+ to the operating-system name-service path while another sends DNS questions directly. A runtime may
50
+ also select a native or built-in resolver by build mode, environment, callback injection, or startup
51
+ configuration. Record:
52
+
53
+ - API and call-site identity, including address-family and canonical-name options;
54
+ - native, built-in, browser, proxy, or custom resolver mode;
55
+ - whether hosts, name-service switch, local discovery, split-DNS routing, and OS policy apply;
56
+ - runtime-local positive, negative, failure, and stale-cache behavior;
57
+ - configuration snapshot and process start generation that selected the mode.
58
+
59
+ A direct DNS protocol probe proves one server's response to one QNAME and record kind. It does not
60
+ prove that the application generated that question, used that server, accepted that response, or
61
+ selected an address from it. Compare controls through the same API and process boundary first.
62
+
63
+ ## Resolver stack
64
+
65
+ Draw the actual stack rather than assuming one system resolver:
66
+
67
+ 1. application literal, internal host map, or connection pool;
68
+ 2. application or language-runtime resolver and cache;
69
+ 3. browser secure resolver, proxy resolver, or custom client library;
70
+ 4. hosts, name-service switch, mDNS, LLMNR, and operating-system stub;
71
+ 5. local forwarding or caching daemon;
72
+ 6. node-local, cluster, VPN, enterprise, or ISP recursive resolver;
73
+ 7. authoritative DNS, CDN steering, and delegated providers;
74
+ 8. address selection, kernel routing, proxy connection, and transport handshake.
75
+
76
+ For each layer, record whether it received the request, transformed it, answered from cache, forwarded
77
+ it, rejected it, or never saw it. A missing packet on the ordinary DNS port does not prove the
78
+ application made no DNS request; the request may have hit a cache or used an encrypted transport.
79
+
80
+ ## Query transformation
81
+
82
+ Preserve the difference between the user-visible input and transmitted questions:
83
+
84
+ - relative versus absolute hostname;
85
+ - trailing dot present or absent;
86
+ - dot-count or other search-trigger rule;
87
+ - ordered search suffixes and generated candidate names;
88
+ - record kinds requested separately or in parallel;
89
+ - canonicalization, case, internationalized-name conversion, and escape handling;
90
+ - alias following, retry, fallback, and alternate service-name generation.
91
+
92
+ Record every QNAME and record kind in order. A short name, a multi-label relative name, and an
93
+ absolute fully qualified name can enter different search paths. An internal wildcard may turn a
94
+ wrong search candidate into a successful but incorrect endpoint.
95
+
96
+ ## Split DNS and route selection
97
+
98
+ Treat split DNS as a routing table for queries, not as a flat server list. Record:
99
+
100
+ - link or interface owning each resolver;
101
+ - route-only and search domains;
102
+ - longest or otherwise most-specific domain match;
103
+ - default-route eligibility;
104
+ - resolver and link priority, including policies that exclude lower-priority links;
105
+ - catch-all routes;
106
+ - VPN connection generation and stale routes after reconnect;
107
+ - fallback behavior when the selected link times out or rejects the query.
108
+
109
+ Prove which link and server were selected for the exact candidate name. A stub address in a generated
110
+ resolver file only identifies the next local hop; it does not reveal upstream selection.
111
+
112
+ Do not model several configured servers as equivalent load-balancing targets. A resolver may prefer
113
+ one server until timeout, remember a working server, or fail over differently by link or query scope.
114
+ Record selection state, retry order, timeout class, and whether every candidate server serves the same
115
+ zones and policy. Inconsistent primary and fallback servers create stable per-process disagreement,
116
+ not harmless redundancy.
117
+
118
+ ## Recursive, authoritative, and delegation boundaries
119
+
120
+ Keep these observations separate:
121
+
122
+ - the response used by the failing application or its recursive resolver;
123
+ - each authoritative server's non-recursive answer and zone generation;
124
+ - parent delegation NS and glue needed to reach the child zone;
125
+ - child-zone NS, address records, aliases, and service records;
126
+ - DS, DNSKEY, signatures, and denial-of-existence proofs when validation applies.
127
+
128
+ A fresh authoritative record does not invalidate an older recursive cache. A recursive cache hit does
129
+ not prove the authoritative path still works. Public trace-style delegation walks can bypass private
130
+ forwarders, split DNS, search expansion, and policy, so use them only for the delegation boundary they
131
+ actually traverse.
132
+
133
+ Compare all authoritative servers when answers are intermittent. Record zone generation, authority
134
+ flags, record sets, and transfer or publication state; do not collapse mixed old and new authoritative
135
+ answers into a client-cache diagnosis. Parent delegation, glue, child NS, service data, and validation
136
+ records have independent freshness windows. Lowering a leaf address TTL does not accelerate repair of
137
+ stale delegation, glue, or validation data.
138
+
139
+ ## Proxy and application resolution ownership
140
+
141
+ Name who converts a hostname to an address:
142
+
143
+ - client before connecting to a proxy;
144
+ - proxy after receiving the unresolved hostname;
145
+ - tunnel or VPN endpoint;
146
+ - browser or runtime secure resolver;
147
+ - service mesh sidecar, gateway, or connection broker;
148
+ - remote execution or sandbox host.
149
+
150
+ Two proxy configurations that target the same proxy address can differ only in resolution ownership
151
+ and therefore see different private zones, CDN regions, hosts files, caches, or policies. Capture
152
+ whether the proxy request carried a hostname or an address and whether the client emitted a local
153
+ DNS request.
154
+
155
+ Keep resolution location separate from traffic egress. DNS may occur outside the tunnel while the
156
+ connection uses it, or the reverse.
157
+
158
+ ## Local name sources
159
+
160
+ Before blaming authoritative DNS, inspect earlier sources and protocol namespaces:
161
+
162
+ - hosts files and managed host maps;
163
+ - name-service switch order;
164
+ - mDNS-reserved names and multicast routing;
165
+ - LLMNR or single-label discovery;
166
+ - container, cluster, service-mesh, and platform-generated names;
167
+ - application aliases, service registries, and hard-coded endpoints.
168
+
169
+ There is no universal `hosts -> DNS -> mDNS -> LLMNR` order. A name-service switch is a state machine,
170
+ not merely an ordered list: each module returns a status such as success, not found, unavailable, or
171
+ retryable failure, and status-specific actions decide whether lookup stops or continues. Capture the
172
+ module order, returned status, action modifier, and selected result from the failing namespace.
173
+
174
+ The same suffix can be interpreted by unicast DNS, multicast discovery, or a platform registry.
175
+ Single-label names and locally reserved suffixes can enter interface-scoped discovery or multiple
176
+ protocols in parallel. Record the protocol selected, interface scope, and rule that selected it.
177
+ Hosts files are inputs only to resolver paths that consult them; direct DNS APIs can bypass them.
178
+ Stale local entries can shadow correct DNS indefinitely because they do not obey authoritative TTLs.
179
+
180
+ ## Cache and freshness ledger
181
+
182
+ Map caches from nearest to farthest:
183
+
184
+ - connection and endpoint pools;
185
+ - application and runtime caches;
186
+ - browser host and secure-DNS caches;
187
+ - operating-system stub and local forwarder caches;
188
+ - node-local and cluster DNS caches;
189
+ - recursive resolver caches;
190
+ - provider or authoritative synthesis caches.
191
+
192
+ For each cache, record key dimensions, positive or negative value, record kind, canonical name,
193
+ source, insertion time, original TTL or freshness rule, remaining lifetime, stale-serving policy,
194
+ validation state, and invalidation mechanism.
195
+
196
+ TTL is a per-entry upper freshness bound that begins when each cache inserts the record, not a global
197
+ propagation countdown. A safe planned cutover lowers freshness before changing the target and allows
198
+ previously inserted entries to expire under their old lifetime. Lowering TTL after the target changes
199
+ cannot shorten entries already cached with the old value.
200
+
201
+ Negative and failure results are cacheable under bounded policies. Distinguish name error from no
202
+ data: name error can cover the name across record kinds, while no data is tied to a present name and
203
+ requested kind. Also account for cached authenticated denial ranges that can synthesize negative
204
+ answers for names not previously queried. Stale-answer, prefetch, minimum-TTL, maximum-TTL, and
205
+ failure-cache policies can make observed lifetime differ from the authoritative value.
206
+
207
+ Track alias and target record sets independently because each has its own key and freshness. Treat all
208
+ members of one name, class, and record-kind set as one atomic record set; per-address expiry inside the
209
+ same set is not a sound traffic-weighting mechanism. Do not flush until the layer and entry have been
210
+ captured.
211
+
212
+ ## Response taxonomy
213
+
214
+ Do not compress all resolver failures into "DNS failed":
215
+
216
+ | Outcome | Meaning to preserve |
217
+ | --- | --- |
218
+ | Name error | The queried name is reported not to exist in the relevant authority context. |
219
+ | No data | The name exists but no record of the requested kind is available. |
220
+ | Server failure | Processing or validation did not complete; the name may still exist. |
221
+ | Refused or policy blocked | A server or policy declined the operation. |
222
+ | Timeout or transport failure | No qualifying DNS response was observed before the client stopped. |
223
+ | Bogus validation | Data was received but failed the selected authenticity chain or policy. |
224
+ | Stale answer | Expired data was deliberately served under a resilience policy. |
225
+ | Successful wrong answer | Resolution completed but selected an unintended zone, alias, region, or address. |
226
+
227
+ Preserve response code, authoritative and recursion flags, validation and checking flags, truncation,
228
+ TTL, authority proof, extended error details, server address, transport, and retry history.
229
+
230
+ ## Transport and message size
231
+
232
+ DNS support is not equivalent to allowing one small datagram. Test the contract across:
233
+
234
+ - datagram and stream transports;
235
+ - truncation followed by stream retry;
236
+ - negotiated extension payload size;
237
+ - path MTU and fragmentation behavior;
238
+ - larger DNSSEC, address, service, and alias responses;
239
+ - encrypted DNS transports used by the actual client;
240
+ - middleboxes that rewrite, drop, or synthesize replies.
241
+
242
+ Keep the server, question, and resolver path fixed while varying one transport dimension. A small
243
+ address response succeeding does not cover a larger signed response or a long alias chain.
244
+
245
+ ## DNSSEC and validation
246
+
247
+ Separate answer retrieval from validation. Record:
248
+
249
+ - whether the selected resolver validates;
250
+ - trust-anchor and policy source;
251
+ - signed, unsigned, insecure, or bogus state;
252
+ - public delegation and private-zone overlap;
253
+ - negative trust policy and its exact scope;
254
+ - whether a forwarder preserves required validation data;
255
+ - clock and signature-validity assumptions;
256
+ - validation flags and extended failure reason returned to the client.
257
+
258
+ Do not disable validation globally to hide one private-zone conflict. Prove the zone and trust
259
+ boundary that requires repair or an explicitly scoped policy exception.
260
+
261
+ ## CDN and resolver location
262
+
263
+ CDN answers may depend on the recursive resolver, client-subnet hints, request family, service
264
+ records, and provider policy. Record:
265
+
266
+ - client location and connection egress;
267
+ - recursive resolver location and operator;
268
+ - subnet information forwarded or suppressed;
269
+ - authoritative server and answer set;
270
+ - TTL, region, and address family;
271
+ - endpoint actually attempted by the client.
272
+
273
+ One workstation answer is not a global truth. Compare controlled resolvers and locations without
274
+ assuming that different valid answers are inconsistent. The defect may be a wrong resolver route or
275
+ unreachable selected region rather than an incorrect authoritative record.
276
+
277
+ ## Alias and service records
278
+
279
+ Inspect more than address records:
280
+
281
+ - alias chain and delegation boundaries;
282
+ - provider-side alias flattening or synthesis;
283
+ - text records used for ownership or service validation;
284
+ - service-binding records that select another target, port, protocol, or address hint;
285
+ - mandatory parameters and client support;
286
+ - canonical name exposed or hidden by the provider;
287
+ - alias-target failure translated into no-data or synthesized behavior.
288
+
289
+ A flattened address answer does not prove that an alias record is visible to systems that validate
290
+ the alias itself. A browser supporting service-binding records may contact a different target or
291
+ protocol from an older command-line client.
292
+
293
+ ## Container and cluster name scopes
294
+
295
+ Treat container and cluster names as scoped resolver contracts, not host-global DNS:
296
+
297
+ - loopback, hosts files, resolver files, and network namespaces belong to the container or pod that
298
+ uses them;
299
+ - service names and aliases are visible only on owning networks and can be ambiguous when reused;
300
+ - short service names can be namespace-relative and expand through several search candidates;
301
+ - stable service names can map to changing instance addresses, so clients must detect failed
302
+ connections, re-resolve, and reconnect under an explicit policy;
303
+ - virtual-address services and direct endpoint-set or headless services assign address selection and
304
+ failover to different owners;
305
+ - newly created names can remain hidden behind negative caches inserted before publication;
306
+ - alias-only external-service records do not proxy traffic or rewrite HTTP and TLS authority names;
307
+ - the real path can include a virtual service address, node data plane, node-local cache, cluster
308
+ resolver, upstream forwarder, and authoritative provider.
309
+
310
+ Capture resolver files and queries inside the failing namespace. Prove shared network membership,
311
+ namespace and search expansion, service and endpoint readiness, resolver-service reachability, cache
312
+ state, and the endpoint actually selected. A healthy resolver process or service object alone does
313
+ not prove that the failing pod reached it or received current data.
314
+
315
+ ## Address selection, connection reuse, and routing
316
+
317
+ Treat name-to-address and address-to-route as adjacent contracts:
318
+
319
+ - requested and returned IPv4 and IPv6 records;
320
+ - synthesized address records and their prefix;
321
+ - existing but unusable native IPv6 records;
322
+ - VPN routes for private IPv4, IPv6, or translation prefixes;
323
+ - client address sorting, connection racing, and fallback;
324
+ - proxy address-family support;
325
+ - endpoint actually attempted and endpoint that won a race;
326
+ - reused connection, pool generation, idle and maximum lifetime, and re-resolution trigger;
327
+ - final kernel route, source address, HTTP authority, TLS server name, and peer identity.
328
+
329
+ Resolution can be correct while the chosen address is unreachable. A client with address-family
330
+ racing can mask the same broken candidate that a single-family runtime exposes.
331
+ DNS TTL expiry does not close an established transport, multiplexed session, or connection-pool entry. During failover,
332
+ separate fresh lookup from traffic still carried by older connections and prove when reconnect causes
333
+ another lookup.
334
+
335
+ ## Evidence matrix
336
+
337
+ Collect complementary evidence without treating one layer as an oracle for another:
338
+
339
+ | Evidence | Proves | Does not prove |
340
+ | --- | --- | --- |
341
+ | Direct query to a named server | That server's response to that exact question. | Application, search, hosts, proxy, or cache behavior. |
342
+ | System name-service query | The selected system lookup path for that process context. | Browser or custom resolver behavior. |
343
+ | Application trace | What the application reports or requests. | The upstream packet actually sent after local caching or transformation. |
344
+ | Local stub capture | Application-to-stub traffic. | Upstream link and resolver selection. |
345
+ | Upstream capture | External DNS traffic on that interface. | Cache hits, other namespaces, or encrypted payload meaning. |
346
+ | Resolver route dump | Configured selection policy and state. | That a specific packet reached the named upstream. |
347
+ | Cache dump | Entries visible at one layer. | Entries in browser, application, proxy, or upstream caches. |
348
+ | Authoritative-server comparison | Each server's zone generation and answer at the capture time. | The recursive or application answer already cached. |
349
+ | Application connection trace | Candidate addresses, actual connection target, reuse state, and next-boundary identity. | That every returned address or future reconnect is healthy. |
350
+ | Forced endpoint with original authority identity | Behavior when DNS selection is bypassed while higher-layer identity stays intact. | That every route, address family, or resolver answer is healthy. |
351
+
352
+ Align evidence on one timeline and stable request fingerprint. Preserve privacy by redacting private
353
+ names and addresses consistently without erasing candidate relationships.
354
+
355
+ ## Failure matrix
356
+
357
+ | Symptom | Resolver evidence to require |
358
+ | --- | --- |
359
+ | Direct query succeeds but application fails. | Application resolver, search expansion, local sources, secure resolver, proxy ownership, cache, and selected address. |
360
+ | Browser succeeds but runtime fails. | Separate resolver mode, service-record support, address selection, proxy, and cache identities. |
361
+ | VPN makes one suffix fail. | Link-specific route, longest-match decision, catch-all route, DNS server, and traffic route. |
362
+ | Only some long or signed names fail. | Truncation, stream retry, extension size, fragmentation, and middlebox behavior. |
363
+ | Record was fixed but old failure persists. | Negative or failure cache layer, key, insertion time, remaining lifetime, and stale policy. |
364
+ | A new name exists but remains absent. | Name-error versus no-data scope, denial proof, negative-cache owner, and publication order. |
365
+ | Old and new answers alternate. | Every authoritative server's zone generation, delegation and glue, recursive cache provenance, and resolver server-selection state. |
366
+ | Same name returns a remote region. | Recursive location, subnet hint, VPN egress, authoritative answer, and endpoint route. |
367
+ | Address records look right but browser reaches another target. | Service-binding target, port, protocol, address hints, and mandatory parameters. |
368
+ | Name resolves but connection fails. | Address-family selection, route, proxy, TLS authority identity, and endpoint reachability. |
369
+ | DNS changed but traffic stays on the old endpoint. | Runtime cache, actual selected address, connection pool generation, lifetime, reconnect, and re-resolution trigger. |
370
+ | Host lookup succeeds but a container or pod fails. | In-namespace resolver files, search expansion, local sources, network membership, cluster resolver path, and endpoint readiness. |
371
+
372
+ ## Invariants
373
+
374
+ - Every DNS claim names the failing execution space and resolver path.
375
+ - Every query claim preserves actual QNAME, record kind, transport, server, time, and response class.
376
+ - Every split-DNS claim identifies the selected route and why it outranked alternatives.
377
+ - Every proxy claim identifies which side resolved the hostname.
378
+ - Every cache claim identifies one layer, key, value, age, and freshness policy before invalidation.
379
+ - Every recursive-versus-authoritative claim identifies the observation point and cache boundary.
380
+ - Every delegation claim keeps parent NS, glue, child NS, service data, and validation records separate.
381
+ - Every success claim distinguishes returned addresses, selected address, actual connection, reused
382
+ connection, reachability, and correct service identity.
383
+ - Every comparison holds requester, name form, record kind, and resolver path constant except for the
384
+ isolated dimension.
385
+
386
+ ## Skill handoffs
387
+
388
+ - Use `name-resolution-integrity-review` for the cross-layer resolver and identity trace.
389
+ - Use `incident-triage-review` when the outage boundary is broader than name resolution.
390
+ - Use `observability-debuggability-review` when durable resolver signals, metrics, or traces change.
391
+ - Use `cache-integrity-review` when resolver cache implementation, freshness, or invalidation changes.
392
+ - Use `docker-runtime-triage` for container runtime and daemon networking after DNS localization.
393
+ - Use the matching SSRF, file-upload, or network security skill for rebinding and authorization.
394
+ - Use `config-env-change` or `structured-config-change` for proven resolver configuration edits.
@@ -0,0 +1,282 @@
1
+ # Language and Symbol Resolution Checklist
2
+
3
+ Use this checklist when variables, functions, methods, types, macros, labels, imports, or generated
4
+ names resolve differently because of scope, namespace, phase, receiver, or candidate precedence.
5
+
6
+ ## Contents
7
+
8
+ 1. [Resolution contract](#resolution-contract)
9
+ 2. [Binding and initialization](#binding-and-initialization)
10
+ 3. [Namespaces and syntactic position](#namespaces-and-syntactic-position)
11
+ 4. [Candidate collection and selection](#candidate-collection-and-selection)
12
+ 5. [Delayed and multi-phase lookup](#delayed-and-multi-phase-lookup)
13
+ 6. [Generated-code and macro hygiene](#generated-code-and-macro-hygiene)
14
+ 7. [Language-specific traps](#language-specific-traps)
15
+ 8. [Runtime identity after lookup](#runtime-identity-after-lookup)
16
+ 9. [Resolution diagnostics](#resolution-diagnostics)
17
+ 10. [Test matrix](#test-matrix)
18
+ 11. [Failure matrix](#failure-matrix)
19
+ 12. [Invariants](#invariants)
20
+ 13. [Skill handoffs](#skill-handoffs)
21
+
22
+ ## Resolution contract
23
+
24
+ For every reference, record:
25
+
26
+ - source spelling and source range;
27
+ - syntactic position and expected namespace;
28
+ - lexical and dynamic context;
29
+ - declaration candidates and their source origins;
30
+ - lookup phase and whether the name is dependent, deferred, or generated;
31
+ - qualification, receiver, imports, aliases, and implicit scopes;
32
+ - visibility, accessibility, and applicability filters;
33
+ - precedence or overload selection rule;
34
+ - selected declaration and stable symbol identity;
35
+ - initialization state, storage location, runtime value, and dispatch target.
36
+
37
+ Keep these outcomes separate:
38
+
39
+ - no binding exists;
40
+ - a binding exists but is not initialized;
41
+ - candidates exist but none are applicable or accessible;
42
+ - several candidates remain ambiguous;
43
+ - a different declaration wins;
44
+ - the intended declaration wins but produces another runtime object;
45
+ - compilation and runtime use different resolution or dispatch products.
46
+
47
+ ## Binding and initialization
48
+
49
+ Binding selection can occur before execution reaches a declaration. Record:
50
+
51
+ - scope creation boundary;
52
+ - declarations that reserve or classify names for the whole scope;
53
+ - declaration, initialization, mutation, and destruction points;
54
+ - whether an inner declaration shadows an outer one before initialization;
55
+ - explicit nonlocal or global rebinding declarations;
56
+ - capture by value, reference, cell, slot, or upvalue;
57
+ - branch, exception-handler, loop, pattern, and comprehension scopes;
58
+ - class or type body namespace versus method lexical scope;
59
+ - import forms that also create local bindings.
60
+
61
+ Do not interpret a read before assignment as automatic fallback to an outer name. Some languages
62
+ classify the name as local for the whole function or block, while keeping it unavailable until its
63
+ initializer runs.
64
+
65
+ ## Namespaces and syntactic position
66
+
67
+ One spelling may legally identify several entities when namespaces are separate. Model at least:
68
+
69
+ - values and variables;
70
+ - functions, methods, and overload sets;
71
+ - types, classes, traits, and interfaces;
72
+ - modules, packages, and namespaces;
73
+ - macros and generated syntax;
74
+ - lifetimes, labels, fields, properties, and members where the language separates them.
75
+
76
+ The syntactic position determines which namespace is queried. Record constructors or declarations
77
+ that bind more than one namespace and imports that introduce several related bindings. Diagnostics
78
+ should say which namespace was searched rather than only that a spelling was duplicated or absent.
79
+
80
+ ## Candidate collection and selection
81
+
82
+ Separate candidate discovery from selection:
83
+
84
+ 1. collect lexical, imported, inherited, receiver, associated, extension, or prelude candidates;
85
+ 2. apply visibility and accessibility;
86
+ 3. apply arity, type, generic, receiver, and contextual applicability;
87
+ 4. rank specificity, conversion cost, scope distance, import strength, or language-defined priority;
88
+ 5. report ambiguity or select one declaration;
89
+ 6. preserve the complete candidate and rejection ledger for diagnostics.
90
+
91
+ Qualification can suppress associated or extension lookup, while unqualified syntax can add hidden
92
+ friends, implicit receivers, preludes, or imported candidates. A new library member can silently
93
+ out-rank a previously selected extension or make an old call ambiguous without changing the call
94
+ spelling.
95
+
96
+ ## Delayed and multi-phase lookup
97
+
98
+ Record when each part of a name is resolved:
99
+
100
+ - parse or macro-expansion time;
101
+ - declaration or template-definition time;
102
+ - type checking or generic constraint solving;
103
+ - instantiation or monomorphization;
104
+ - module linking or class loading;
105
+ - runtime dynamic dispatch or reflection.
106
+
107
+ For dependent or deferred names, preserve the point of definition, point of instantiation, available
108
+ imports, associated namespaces, constraints, and generated substitutions. Do not assume an overload
109
+ declared later or included in another translation unit becomes visible at every instantiation point.
110
+
111
+ Store resolved symbol identity in typed IR or bytecode when the language contract requires it. An
112
+ evaluator and bytecode engine that independently re-run lookup can choose different candidates after
113
+ environment or module state changes.
114
+
115
+ ## Generated-code and macro hygiene
116
+
117
+ Generated syntax needs an explicit name-origin contract:
118
+
119
+ - definition-site, call-site, mixed-site, or unhygienic lookup;
120
+ - syntax context or expansion mark;
121
+ - absolute versus relative paths generated by the macro;
122
+ - internal-name collision policy;
123
+ - import requirements imposed on the caller;
124
+ - namespace and phase of generated references;
125
+ - source provenance for diagnostic spans;
126
+ - deterministic expansion across file and declaration order.
127
+
128
+ Do not assume every macro system protects generated names. Use qualified standard or runtime paths
129
+ where the language supports them, generate collision-resistant internal bindings, and test callers
130
+ that shadow common prelude and library names.
131
+
132
+ Keep grammar ambiguity separate from name capture. A macro invocation can be rejected before name
133
+ resolution because several token interpretations remain locally valid.
134
+
135
+ ## Language-specific traps
136
+
137
+ ### Python-like binding
138
+
139
+ - Treat assignment, loop targets, imports, exception targets, and similar binders as scope-defining
140
+ operations according to the language execution model.
141
+ - Distinguish function-local classification from the runtime point where a value is initialized.
142
+ - Treat class-body namespace population separately from method closure capture.
143
+ - Record comprehension and annotation-like scope rules from the supported language version instead
144
+ of extrapolating ordinary block scope.
145
+ - Treat import as both module resolution and a binding operation whose alias form changes the local
146
+ name introduced.
147
+
148
+ ### JavaScript-like lexical bindings
149
+
150
+ - Record block start, binding creation, initialization point, and temporal unavailability.
151
+ - Do not treat a pre-initialization read as an outer-scope lookup or assume a type-query operator is
152
+ harmless inside the temporal dead zone.
153
+ - Distinguish lexical bindings from function or legacy variable hoisting and from module live
154
+ bindings.
155
+
156
+ ### C++-like lookup
157
+
158
+ - Separate ordinary unqualified lookup from argument-dependent candidate addition.
159
+ - Preserve hidden-friend and associated namespace or class evidence.
160
+ - Separate non-dependent definition-time names from dependent instantiation-time names.
161
+ - Require explicit dependent-type, member, and template disambiguation where the grammar needs it.
162
+ - Test whether qualification intentionally disables argument-dependent lookup at a stable API
163
+ boundary.
164
+
165
+ ### Rust-like namespaces and macros
166
+
167
+ - Record type, value, macro, lifetime, and label namespaces independently.
168
+ - Remember that some declarations introduce both a type and a value-like constructor.
169
+ - Treat declarative macro hygiene and procedural macro output as different contracts.
170
+ - Test generated paths and common names against caller shadowing, imported preludes, and crate
171
+ renaming under the supported contract.
172
+
173
+ ### Go-like short declarations
174
+
175
+ - Record the exact block owning every name on the left side.
176
+ - Distinguish same-block redeclaration from a new inner binding.
177
+ - For mixed declaration and assignment, identify which names are new and which storage locations are
178
+ updated.
179
+ - Add a fixture where a common error or result name is accidentally shadowed in a nested branch.
180
+
181
+ ### Java-like names
182
+
183
+ - Classify the name as package, type, expression, method, or module before applying precedence.
184
+ - Keep shadowing, hiding, and obscuring as distinct relationships.
185
+ - Record single-name imports, on-demand imports, inherited members, local variables, and qualified
186
+ forms separately.
187
+ - Generated code should qualify collision-prone public types and avoid relying on wildcard imports.
188
+
189
+ ### Kotlin-like and C#-like extensions
190
+
191
+ - Treat extensions as statically selected helpers, not injected members of the runtime type.
192
+ - Record member candidates before extension candidates.
193
+ - Preserve implicit receiver stack, local and imported extension scope, package or namespace
194
+ distance, aliases, and DSL receiver restrictions.
195
+ - Add a compatibility fixture where a library version introduces a real member with the same name as
196
+ an existing extension.
197
+
198
+ ## Runtime identity after lookup
199
+
200
+ Source-level symbol selection is not the end of the chain. Record:
201
+
202
+ - captured cell, slot, field, property, or module binding used at runtime;
203
+ - virtual, interface, extension, overload, or dynamic dispatch target;
204
+ - class loader or module instance owning the selected type;
205
+ - inline, generic, or compiled-code cache key;
206
+ - rebinding, hot reload, module replacement, or reflection that can change runtime identity;
207
+ - equality, type identity, and singleton expectations.
208
+
209
+ A compiler can select the intended declaration while a loader supplies another class or module
210
+ instance. Hand off to the module and loader checklist when physical or runtime identity diverges.
211
+
212
+ ## Resolution diagnostics
213
+
214
+ Structured diagnostics should expose:
215
+
216
+ - stable diagnostic category;
217
+ - queried namespace and lookup phase;
218
+ - selected scope or receiver chain;
219
+ - candidate declarations with origin;
220
+ - visibility, applicability, and ranking rejection reasons;
221
+ - shadowing declaration and hidden outer declaration;
222
+ - required qualification, alias, or dependent-name marker;
223
+ - generated expansion provenance;
224
+ - selected declaration identity when behavior changed without an error.
225
+
226
+ Rendered candidate lists may be truncated, but machine-readable evidence should retain the owning
227
+ reason for every omitted or rejected candidate under a bounded policy.
228
+
229
+ ## Test matrix
230
+
231
+ Vary one dimension at a time:
232
+
233
+ - outer, same-block, and nested shadowing;
234
+ - read before and after initialization;
235
+ - branch never taken but binder still present;
236
+ - explicit qualification versus unqualified lookup;
237
+ - import alias, wildcard or on-demand import, and fully qualified name;
238
+ - member versus extension or associated function;
239
+ - definition-time versus instantiation-time visibility;
240
+ - generated caller shadowing and absolute paths;
241
+ - separate namespace positions for the same spelling;
242
+ - evaluator, bytecode, optimized, and cached execution paths;
243
+ - file, declaration, import, and module order perturbation;
244
+ - library version adding a candidate without changing the call site.
245
+
246
+ Assert selected symbol identity and candidate rejection reasons, not only final value. Two candidates
247
+ can currently return the same value and hide a resolution regression.
248
+
249
+ ## Failure matrix
250
+
251
+ | Symptom | Evidence to require |
252
+ | --- | --- |
253
+ | Outer value exists but read fails before an inner declaration. | Scope-wide binding classification and initialization state. |
254
+ | Unqualified call changes after adding a library overload. | Ordinary and associated candidate sets, applicability, ranking, and selected symbol. |
255
+ | Generic code fails only for one type. | Dependent classification, definition context, instantiation context, and substitutions. |
256
+ | Generated code cannot find a common library name. | Hygiene mode, call-site bindings, generated path, and expansion provenance. |
257
+ | Nested block returns success but outer result stays unchanged. | Block owner and storage identity for each same-spelled binding. |
258
+ | Extension call silently changes to a member. | Member-first candidate rule and compatibility fixture across library versions. |
259
+ | Interpreter and compiled path disagree. | Persisted resolved identity versus independent runtime re-resolution. |
260
+ | Same class name cannot be cast to itself. | Source symbol, physical class bytes, defining loader, and runtime type identity. |
261
+
262
+ ## Invariants
263
+
264
+ - Every reference identifies a namespace, syntactic position, scope, phase, and source range.
265
+ - Every candidate set distinguishes collection, filtering, ranking, and final selection.
266
+ - Every shadowing claim names both bindings and their storage or symbol identities.
267
+ - Every deferred lookup claim preserves definition and instantiation contexts.
268
+ - Every generated name records hygiene and source provenance.
269
+ - Every resolution regression asserts selected symbol identity even when behavior currently matches.
270
+ - Every runtime claim distinguishes source declaration from loaded type or module identity.
271
+
272
+ ## Skill handoffs
273
+
274
+ - Use `name-resolution-integrity-review` for the cross-language lookup trace and identity split.
275
+ - Use `compiler-engineering-review` for semantic analysis, typed IR, lowering, and compiler or linker
276
+ correctness after lookup localization.
277
+ - Use `interpreter-engineering-review` for resolver, environment, frame, closure, bytecode, and
278
+ runtime cache implementation.
279
+ - Use `parser-engineering-review` for syntax and macro grammar ambiguity before binding.
280
+ - Use the matching language code-change skill for source-language fixes.
281
+ - Use `module-boundary-review` for architecture import direction and package public API policy.
282
+ - Use the module, package, and loader checklist when runtime or physical module identity diverges.