EQ2001
A C# construct with no runtime equivalent in the browser (typed-reference intrinsics: __makeref, __reftype, __refvalue, stackalloc, pointers).
Restructure without it.
EQ2002
goto.
Restructure with loops and conditionals, or a labelled break/continue (those DO translate).
EQ2003
new T() on a type parameter — generic arguments are erased at runtime in JavaScript, so the concrete type is unknown.
Pass a factory (Func<T>) or the constructed value in.
EQ2004
A member with no JavaScript translation: an extension method whose declaring class is not part of this compilation, or a call the transpiler maps nothing for (Stopwatch.StartNew, Roslyn…) inside a class it mirrors, written qualified or reached bare through using static (WriteLine under using static System.Console, since 0.2.0-preview.60). Also a System.Range value stored rather than indexed with, or handed to an indexer that takes the Range itself (this[Range r], since 0.2.0-preview.61).
Use an instance member or bring the declaring source in; add a strategy; for a range, index with it directly (text[a..b]), or give the type a Length (or a Count) and a Slice(int start, int length), which a range calls; move the call behind a [ServerAction]; or, when the whole class only ever runs on the server, mark the CLASS [ServerOnly] and no module is emitted for it (0.2.0-preview.46).
EQ2005
An infinite iterator. Iterators are MATERIALISED into an array, so the loop would run forever instead of yielding lazily.
Give the loop an end (a bound, a yield break), or take what you need inside the method.
EQ2006
The member does not bind in the semantic model, so any translation would be a guess.
Either the code does not compile, or eqc is missing references / generated sources. Never guessed — see Compiler. EQ2007
A comparer that changes what a collection considers equal or in order: a collection expression's with(…) argument beyond a capacity hint, or a comparer handed to a collection's constructor (new Dictionary<string, T>(StringComparer.OrdinalIgnoreCase)) or to a LINQ operator that finds its keys or its elements by it (ToHashSet, and ToDictionary, ToLookup, GroupBy and Distinct since 0.2.0-preview.61). A list, a set or a dictionary finds an element by its type's default equality and takes no other: the default comparers and StringComparer.Ordinal pass. A sort or a binary search takes the type's default comparer, a Comparison<T>, a StringComparer's six, Comparer<T>.Create and a comparer you write, and refuses only one no twin carries (a StringComparer made for a culture, a comparer a library compiled).
Drop the comparer, or normalize the keys yourself (lower-case them on the way in and on every lookup). For a sort, pass a Comparison<T>.
EQ2008
Query syntax using join, let, a second from, or into — its C# translation runs through compiler-generated transparent identifiers. Also the fenced initializer forms.
Rewrite in method syntax, where every operator is supported.
EQ2009
A component is declared more than once in one file (partial declarations). eqc emits one module per declaration and cannot merge them.
Combine the members into a single declaration.
EQ2010
A symbol the framework keeps on the HOST — a type or a single member marked [ServerOnly] — named from client code. The runtime ships no twin, so the reference would compile, emit, and fail at hydration on "does not provide an export named" while SSR kept answering 200. An extension method called on a value that crosses names its home too: curve.Ease(t) is CurveEvaluator.Ease(curve, t), and it failed at the call. A type declared inside one that never crosses (a [ServerOnly] class or an attribute) has no twin either, as its owner has none, while one declared inside an exception class of the app's crosses as that class does, so client code that reaches it is refused the same way, however it reaches it: its name, an alias, using static, an operator or a conversion its value brings, or a zero. A module that would import its twin reports it at the declaration that holds the reference (Since 0.2.0-preview.61). A member marked [ServerOnly] is refused wherever client code names it, the code of its own type included: a component leaves such a method out of its twin, and its own Build calling it was a call to a member the twin does not have (Since 0.2.0-preview.62).
Call it from server code: a [ServerAction], a [ServerOnly] class, or a realizer. Never from a component's Build. Unlike EQ2004 this is a DECISION, not a gap — adding a strategy is not the answer.
EQ2011
A member that would take a name the runtime's component already uses. C# keeps a primary-constructor parameter, a field and a property apart, and spells them differently from the runtime's camelCase; JavaScript folds all of it onto this.<name>, so the assignment replaces the runtime's member and the page fails only in the browser. The list is read from the live runtime, never typed.
Rename the member. An override is exempt — a component's Build is meant to replace the runtime's build, and replacing a base member is what one is for — but a plain method is not: public void Mount() { } overrides nothing and still emits mount() over the runtime's own, so the component never mounts.
EQ2012
A [ServerAction] on an ABSTRACT component. The server registers an action under the name of the CONCRETE component carrying it — it skips abstract types and walks inherited methods — so it serves Tile/Load while a stub emitted on the base would invoke CardBase/Load. Nothing serves that id and the page gets "action not found", on both sides silently.
Declare the action on the concrete component. An alias is not the answer: the descriptor carries the component TYPE to invoke on, so two children inheriting one action give the base's id two answers — the owner of an inherited action is a decision, not a patch.
EQ2013
A vocabulary type whose browser half revives the values of a type argument (ServerTopic<T>) is built where that argument is, or holds, a type parameter, as in static ServerTopic<T> Topic<T>(string name) => new(name). JavaScript erases the type there, so the topic would carry no spec and every payload would reach its subscribers unrevived: a decimal or a long as the text the wire writes, a record without its members.
Build the topic where its payload type is concrete, as a static member of the type that declares the app's topics: static ServerTopic<RoomEvent> Room(string id) => new($"room:{id}"). See Server events. EQ2014
An exception type is built or tested where a type argument it carries, its own or one of a type it is nested in, is, or holds, a type parameter, as in static Exception Of<T>() => new Failed<T>(), catch (Failed<T>), or new Missing() inside the generic class that declares it. An exception carries the types it is, which a typed catch, is and its name read, and JavaScript erases a type parameter, so the exception would carry, or the test compare, T itself: catch (Failed<int>) missed what Of<int>() threw (Since 0.2.0-preview.61).
Build and test an exception where its type arguments are concrete types, and declare an exception class outside a generic type.