Show HN: Turri – a coding agent with the power of regenerative software (github.com)
turri is based on Pi and the concept of regenerative software introduced by Chad Fowler. The ability to regenerate the same piece of code multiple times and always get the same results in terms of functionality is called the deletion test and proves that your coding agent completely understands you. The idea is that every time part of the software needs to be changed, you regenerate a new version of the code based on the durable information you have about the system.
The durable system information includes specs, tests, ADRs, and other types of documents, and it is written in ***plain. You write these with the help of an agent, and Turri starts partial regeneration of the software you're changing. You can repeat this process as many times as you want until you're happy with the change you're implementing. The regeneration also includes proofs that the generated code completely conforms to the system knowledge on which it was based (it implements all the tests that are part of the definition and automatically adds additional tests).
You can try this by cloning the repo or by installing it from my landing page. I created a desktop app to improve usability. Currently, it's only suitable for new projects, but I'm working on adding support for existing projects.
I also wrote the full story in case you're interested: https://turri.dev/blog/why-i-built-turri/
12 comments
[ 6.0 ms ] story [ 34.5 ms ] threadPlease, try it yourself and let me know what you think.
Honestly, I haven't used it on some reasonable scale to fell the real issues of migrations yet. I consider this to be one of the biggest problems with the approach, but I think it's addressable.
The largest project I’ve managed this way has been in production for about six months and has already gone through 45 versions. So far I haven't had encountered no no data loss so far”.
Renaming is where I would be wary of generating code from scratch. Based solely on a schema diff, a rename appears as the deletion of one element followed by the addition of a new one. Does turri ask about what you meant in such cases, or is there a way to specify this directly within the specification?
If this is true, it means that each new change in the system can be reliably described with a small change in the system knowledge (usually it includes some small update in specs and tests) and regenerate with very high certainty that the produced code will be correct.
Basically, the regeneration test is putting a solid ground for all future improvements.
First, it automatically confirms that all defined tests are passing but it's hard to say if the defined tests are covering all the edge cases that are important.
It will also write a bunch of mutation tests and do the automatic tests based on the type of application.
At the end, you would still need to manually check to confirm the functionality (unless until you are confirming inital deletion test for a certain module).
Does it do anything similar?