NEW DEVLOGGG.
Okay so i’ve been super busy recently so not a lot of work done :> but i completed the export extraction, and also import extraction (which was surprisingly easy because turns out ts-morph does a lot of the heavy lifting for me)!
Was going to move on to call extraction, when i realized a few things:
- I need to resolve my imports. How am i supposed to know what an imported symbol is referring to if they don’t have a symbol?
- I need to create
aliases edges for my binding symbols (which are technically dummy symbols used to represent the imported symbol that is being referred to), in order to connect them to their actual symbol.
- I need lookup tables! :0 which i completely forgot about. So now I’ll be creating lookup tables as well via incremental updates. :>
After i resolve the above, i can FINALLY move on to call extraction 
I’ve also decided to change what my project is for! Having a graph representation of an actual codebase is super powerful, so I’ll be using it to make some sort of architectural linter (like eslint but for architecture instead of code syntax)
This is what i have in mind currently:
layers: {
api: "src/routes/**",
services: "src/services/**",
repositories: "src/repositories/**",
},
rules: [
// Layer rules — explicit forbidden edges
noCrossLayerCalls({ from: "api", to: "repositories" }),
// Path rules — enforce mandatory intermediaries
mustGoThrough({ from: "api", to: "repositories", through: "services" }),
// Cluster rules — graph-inferred boundaries
noUnexpectedCrossClusterCalls(),
allowCrossClusterCall({ from: "payments", to: "shared" }),
]
Obviously, its still a work in progress :> but i like where its going, will be working much more often hopefully 
(P.S, the image shows my export extraction details)