ok, I'm going to abandon the hypercortex thing for now:

architecture

Apps will interface with the tasks through the engine, applying queries, running mutations and getting results

Tasks will be simple structs that can respond with bool to Queries and update themselves with Mutations

Notes

The Engine needs to be aware of every task so that it can statelessly defined the minimum needed id prefix to uniquly identify a Task. For this reason there's no real reason to implement it as a full iterator. it can still output an itterator once it's done though...

The uniq id prefix thing is a platform specific issue, it should be handled by the cli, not the engine. The engine doesn't need to produce a vector because of IDs, it need to produce it because of sorting