datomic

2026-01-31T16:49:00.919519Z

Rumor has it a codeq version 2 was made. Is that something that could be open sourced with some work?

Joe Lane 2026-01-31T19:06:39.692279Z

Any particular use case you have in mind for a tool like codeq?

2026-01-31T19:15:28.526219Z

Universal semantic code repository.

2026-01-31T19:16:21.804659Z

Content addressable something like unison language or convex project's orthogonal persistence.

2026-01-31T19:16:40.220789Z

All code and versions can be merged into one graph.

2026-01-31T19:16:54.203589Z

Then build out tooling on top of that.

Joe Lane 2026-01-31T19:22:45.447539Z

Have you thought about how a codeq’s identity does or does not change w.r.t. the codeqs it depends on? Eg if codeq-a depends on codeq-b and codeq-b has a bug fixed in it, does codeq-a now transitively get a rev bump as well? Its the difference between identity based on code as text or identity being based on code-as-text+the codeqs it depends on. If you were to build, say, a repository of generative test seeds and results, and wanted to only rerun tests for codeqs that changed, the transitive dep being part of a codeqs identity matters.

πŸ‘€ 1
2026-01-31T19:24:52.211509Z

content hashes and merkle trees

2026-01-31T19:25:25.170569Z

so if code changes it gets a new hash

πŸ‘€ 1
2026-01-31T19:26:02.139779Z

similar to this https://www.unison-lang.org/docs/the-big-idea/

Joe Lane 2026-01-31T19:26:05.826989Z

What if you don’t have the source of a fn, just the lib version it came from?

πŸ‘€ 1
2026-01-31T19:27:06.125809Z

not sure. seems like blobs would not be able to participate semantically

2026-01-31T19:27:19.755179Z

could just use the hash of the blob in that case

2026-01-31T19:28:36.127089Z

eg. if the lib is in nix packages for example, it would already have a deterministic reproducible hash

Joe Lane 2026-01-31T19:28:40.743649Z

The coordinates, right? β€œcom.foo/lib mvn/version 123, containing codeq-b” + hash of codeq-a

πŸ‘€ 1
2026-01-31T19:28:55.913509Z

no coordinates needed just a hash

2026-01-31T19:29:07.786299Z

coordinates could just be pointers to a hash

2026-01-31T19:29:27.161139Z

more like tags

2026-01-31T19:32:13.572469Z

so the idea is a bit bigger than codeq. more like a new thing that combines code repos and package management etc.

2026-01-31T19:32:41.632759Z

the convex project has a notion of orthogonal persistence also using merkle trees https://docs.convex.world/docs/tutorial/convex-lisp/convex-lisp

2026-01-31T19:34:06.471329Z

could be a product that is broader than just clojure

2026-01-31T19:34:41.558999Z

mostly though i just wanted semantic version control that would let you merge all repos into one and build tooling on that

2026-01-31T19:35:00.625609Z

was curious about datomic / codeq as an inspiration or base for that

2026-01-31T19:35:34.892189Z

curious if you have any thoughts

Joe Lane 2026-01-31T19:37:48.911689Z

So many thoughts haha Codeq is one of my favorite ideas and I’ve thought about it for many years. I'm on mobile now and running errands but lets keep the convo going async. I will look at the convex project

πŸ‘€ 1
2026-01-31T19:38:58.808629Z

thanks! doing some hiking in a bit but async works

2026-01-31T19:40:54.557689Z

@dustingetz codeq discussion in case you are interested

πŸ‘€ 1
Alex Miller (Clojure team) 2026-01-31T20:00:09.870349Z

> if you were to build, say, a repository of generative test seeds and results, and wanted to only rerun tests for codeqs that changed, the transitive dep being part of a codeqs identity matters. Btw, I did build this (based on codeq), never released it

πŸ‘ 2
πŸ‘€ 1
2026-01-31T20:01:41.130439Z

tests could certainly be optimized around when merkle hashes change

2026-01-31T20:02:32.777189Z

polylith seems to get some mileage out of testing only modules that change. a more fine grained capability would be even more powerful

Alex Miller (Clojure team) 2026-01-31T20:04:11.227899Z

That whole work grew out of the idea of specs and generative testing as a core. You don't want to check specs at runtime, you want to exhaustively (slowly) test each unit of code generatively and you do not need to retest things you have not changed

πŸ’― 1
πŸ‘€ 1
2026-01-31T20:06:11.010829Z

sometimes you have oddball third parties though where you can't predict what they will send but that is more at the service api layer

2026-02-02T17:49:01.383389Z

I am also interested in this. Think there are a lot of opportunities for something like codeq or related tools