Applying Determinism to LLMs - A Spark Proven approach

Hello Ada folks,
The Dark Factory Ltd is pleased to release the Crucible under the AGPL license. It is a deterministic mostly factory which can use a local LLM such as QWEN 3.8 CODER (indeed before that Qwen 2.5 coder was used ) which can produce proven spark code. It uses mascot to design the system , and then will code the system up. It is not a claude wrapper.
Crucible was going to have a all singing and dancing web specification interface before I decided the most useful place is a claws or AI assistant tooling.
You can activate it by using the MCP on Claude or Codex, or you can use it naturally with Ghillie to make an AI Claw which can modify itself and eventualy rule humanity.
Crucible_AGPL/CONNECTING.md at f662966f8214b2a1282e3976b8f5e51df5c961b7 · the-dark-factory/Crucible_AGPL · GitHub are the instructions.
I hope you all enjoy it,
Tony (not an AI - an old man)

A correction to my own post, and an apology: the release I pointed you at could not work. If you downloaded it and it went nowhere, that was not you.

Five faults, all in the packaging, none of them subtle once found:

  1. The tarball unpacks flat. The door reads config/rail.conf and tower/base.bundle relative to the directory it is started in, and neither directory was in the download. Every forge refused with "stopped_at":"tower" — and the hint it prints tells you to restore a bundle that is sitting right there under a different name, or to replace a binary that is fine.
    1. CONNECTING.md describes a layout the download did not have. It tells you to run bin/crucible-agpl. There was no bin/. The claude mcp add line fails immediately.
    1. Three of the four binaries would not start on a clean machine. prover_service_main, vacuity_service_main and reef_relay_main were built by hand outside the project file, so they carried a dependency on a compiler runtime library that was not in the tarball. Only the door itself was built through crucible.gpr. Without the prover, nothing proves.
    1. No reef rail was declared in the shipped rail.conf, so the tower connected to nothing.
    1. No config/tower.conf. That file carries the owner’s policy, and the code reads absent or unreadable = deliveries off. So a factory that survived the other four would fetch the catalogue, verify its signature, and then decline every delivery — silently, while looking like it worked. That file had never been in the repository or in any release.
      All five are fixed, and I have run the result rather than assumed it. On a clean unpack the door now fetches the catalogue from the tower, verifies the signature and accepts the delivery — on macOS arm64 and Linux x86_64 both, with the same digest on each. Both tarballs are signed, and the allowed_signers file travels with them so you can check the signature without taking my word for anything.

Two things worth knowing if you build from source rather than download:

  • The tree needs GNAT 15. Ada.Calendar.Conversions.To_Unix_Time_64 does not exist in GNAT 13, so it fails to compile there with no useful explanation. Debian stable and Ubuntu 24.04 both ship older. That floor was not documented; it is now.
    • Building from source also builds the tower signing tools, which is not what a user needs and not how I would like people to come at it.
      The reason all this got out is the honest part: every machine here was already configured, so nobody ever saw what a stranger sees. There is now a probe that unpacks the shipped tarball into a clean directory and refuses to let it out if it cannot forge. That should have existed first.

Tony

project seems interesting, will check it out.

I’m just putting in another fix. Its been written in golang and bash scripts snakepit. I’ve been dogfooding into itself so that the factory itself is written in spark ada in one executable. Sadly however because of the proving requirements this last step is proving difficult. You can specify a user interface too which it will produce if it can , but the user interface will not be in spark ada when this happens. The best crucible to try will be 0.2.1 , you can use other inference , haiku from Anthropic works well.