mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-03 07:54:40 +08:00
`implements Acyclic` resolved to Record<never, never>, and the frontend indexes implemented types as class protocols by symbol, so every Record value in the program took checked identity (on tsc-ts: Int32 field contracts failed with SC7003). The default is now AcyclicObject, an empty interface only @scriptc/types declares, and type arguments in heritage clauses are reported (they would make a class implement its own type). Corpus 4642 stores an Acyclic class with an Int32 field in a Record. explainCycle picks the shortest cycle through the unit and a mutable edge (BFS distances forward and backward within the component): on tsc-ts `Node.parent -> Node` instead of a 20-step path through the checker.