How we build software at DiluxOne

At DiluxOne, human energy goes into writing a good issue. Once a person accepts it, an agent takes it to production through checks anyone can audit, and every change ends with a receipt that proves what was asked, how it was done and how we know it works. If something fails, the change does not move: it fixes itself within its limits, or goes back to a person with the exact action and its link.

8gates per change
3human decisions
2sealed hashes per issue
1signed receipt per merge

Three decisions. The gates check the rest.

As in our mark: the black block is what a person decides; the blue module is what fits in and runs on its own.

Always

Accept the issue

The only approval a normal change needs. Whoever accepts has read the PRD; from that moment its text is sealed with its hash.

Only when critical

Merge by hand

An issue marked critical, or a change to the rules that govern autonomy, waits for a person to merge it, with the reason in view.

When shipping

Accept the release

Shipping a version to users is always a human decision: the release issue is opened by hand or by a planned milestone.

The eight gates, in order

Each gate is a check with a fixed name that leaves its result on the issue’s board. Deterministic checks always rule; AI can stop a change, never skip a deterministic gate.

deterministic · no AI, reproducibleAI · can only stophuman · a person decides
  1. G1

    Issue ready

    schemaAI rubric

    A complete PRD under one schema: problem, scope, out of scope, acceptance criteria with an ID and a verifiable form, criticality.

    if it failsThe agent asks on the issue for what is missing; it cannot be accepted yet.

  2. G2

    Acceptance

    humanor a policy lane

    A person accepts, or a lane of the autonomy policy allows it. The PRD hash is sealed at that moment.

    if it failsNothing starts.

  3. G3

    Spec

    agentscope and paths

    Before writing code, the agent fills in the spec on the same issue: files, approach and one test per criterion. Its hash is sealed too.

    if it failsOut of scope or touching protected paths: it stops and asks, with the action and its link.

  4. G4

    Project checks

    deterministic

    Conventions, lint, static analysis, tests and whatever each stack needs, like Plugin Check for WordPress.

    if it failsThe agent fixes and pushes again; it counts as a round.

  5. G5

    Clean review

    IA

    No blocking or major finding left open. What earlier reviews learned is already written down as rules.

    if it failsLoop: fix and review again, up to 3 rounds; if it does not converge, back to a person with a summary.

  6. G6

    Meets the issue

    criterion → testscope

    Every acceptance criterion has its test, it exists and it passes. Nothing outside the scope that was asked for.

    if it failsBack to the loop; if it is about scope, to a person.

  7. G7

    Merge

    deterministic

    Everything green, both hashes revalidated, not critical, no governance rule touched, within budget. It merges on its own and the receipt is issued.

    if it failsIt waits for a human merge, with the reason and the link.

  8. G8

    Healthy main

    deterministic

    The main branch CI stays green after the merge.

    if it failsAn automatic revert and an issue open.

Receipt-Driven Development

A change is not done when the code works: it is done when its receipt exists. The receipt is the sealed, signed and verifiable proof that what was accepted was built, the way it was accepted, with the evidence that shows it. No receipt, no “done”.

What was asked?

The PRD, sealed with its hash when a person accepted it.

How was it solved?

The sealed spec and the exact commit that reached production.

How do we know it works?

Criterion by criterion, the test that proves it and its result, plus the checks and the review verdict.

Who authorized it?

The person who accepted, or the policy lane with the exact version of the rule it applied.

TDD

The test first: the code exists to make it pass.

SDD

The specification first: the code implements it.

RDD

The receipt is the definition of done: request, spec, tests and authorization, and nobody can alter it.

Issue

PRDwhat and why, criteria with an IDsealed on acceptance
Spectechnical plan, one test per criterionsealed at G3

Pull request

  • stack checks
  • clean review
  • criterion by criterion, with evidence
  • merge by policy

Receipt

  • PRD and spec hashes
  • commit, checks and verdict
  • who accepted, which rule applied
  • on its own branch, signed

The seal: what a hash is and how it is checked again

A hash is the fingerprint of a text: SHA-256 turns it into 64 characters. The same text always gives the same fingerprint; change a single comma and you get a completely different one. You cannot go back from the fingerprint to the text, nor forge another text with the same fingerprint.

Accepted PRD · criterion C1On save, the site shows “Saved” in under 2 seconds.
Sealed SHA-2564f1c9a07e2b85d3360af19c4d7e5b2a8916c0f3d27ab4e59c81d6f20a3b7e914
Someone edits it laterOn save, the site shows “Saved” in under 20 seconds.
Recomputed SHA-256 · no matchb92e06d4c1f7a85e3d0b49c62a1f8e07d5c3b916a4e20f87c1d9b35e6a0f4c28

Illustrative fingerprints. Each section is normalized before hashing, so an invisible change does not alter it and a real one always does.

1

Computed

On acceptance, the bot takes only the PRD section, normalizes it and computes its SHA-256. The same with the spec when it passes G3.

2

Sealed

The fingerprint is stored with who accepted, when, and the schema and policy versions, in a commit signed by the bot on the receipts branch.

3

Shown

The issue’s board repeats it at a glance. If someone edits the board, the seal on the receipts branch wins.

4

Checked again

On every edit of the issue, before the agent starts, on every push and right before the merge.

// receipts/issues/123/merge.json · illustrative
{
  "issue": 123,
  "prd":  { "sha256": "4f1c9a07…a3b7e914", "accepted_by": "maintainer" },
  "spec": { "sha256": "9d2e51b8…c04f7a62" },
  "pull_request": 131,
  "head_commit": "e8b4c2f",
  "checks": "all green",
  "review": "clean, 2 rounds",
  "criteria": { "C1": "tests/SaveNoticeTest" },
  "policy": "autonomy.yml@3a91d0e",
  "merged_by": "policy"
}

Bugs: reproduced first, fixed after

A reported bug is not fixed on intuition. A workflow tries to reproduce it from what was reported; if it is confirmed, the failure is written as a test, and the fix has to make it pass.

1 · Report

Reported as an issue

What was done, what was expected, what happened and in which version.

2 · Triage

Is it a bug?

A workflow decides whether it describes a failure or asks for something new.

3 · Reproduction

Try to reproduce it

The agent writes a test with the reported steps and runs it in a clean environment, with no secrets.

Reproduces

Confirmed: to fix

The failing test is the evidence; the fix has to make it pass, through every gate.

Does not reproduce

More information

The issue gets what was tried and what is missing to reproduce it.

Not a bug

To the queue

A new feature or an improvement waits for its acceptance like any issue.

Lanes: what moves on its own, and with what evidence

Everything decided without a person comes from a single policy file. A project can restrict it, never widen it. If a piece of work fits no lane, it is not accepted on its own.

In operation

Reproduced bug

A test that fails before and passes after, and a report about the same thing as the fix.

First in autonomy

Platform

Runner images, CI dependencies, tool versions. Evidence: smoke test and green checks.

Next

Human issue

What a person accepts travels on its own to the merge, gate by gate.

Always with a person

Release

Never accepted on its own: shipping to users always goes through a person.

Golden rule. The rules that govern autonomy, and the gates that enforce them, always need human acceptance and a human merge. Autonomy cannot widen itself, and one switch stops all of it without touching code.

What if someone writes “delete the whole repo” in an issue?

Four layers, and none of them depends on the agent behaving well.

  1. Strict structure

    The issue has exactly the schema’s sections; any text outside them fails the gate.

  2. A person read what is accepted

    The hash seals the accepted PRD. The agent reads only the sealed PRD and spec, never third-party comments.

  3. Text is data, not orders

    The agent gets the issue as a specification to implement, never as instructions for itself.

  4. Least privilege

    The agent’s credentials cannot delete the repository, push to main or touch workflows. Everything goes through a pull request with gates.

Any decision explained in three clicks

Who accepted this change?

The issue’s board: the person, or the policy lane with a link to its exact version.

Why did it merge with nobody?

The board, merge row: every condition with its result and its check.

Does it meet what was asked?

The receipt: criterion by criterion, the test that proves it and its result.

What was decided alone this week?

A weekly summary with everything accepted and merged by policy.

Every job starts clean. Every release is a decision.

Ephemeral runners

Public repositories run on GitHub’s runners; private ones on our own machines. Each job runs in a disposable container, built from an image that rebuilds itself every week and passes a smoke test before it is used; if it fails, the previous one stays and an issue opens with the log. The machine is described as code.

Release as an issue

A “Release X.Y.Z” issue opens, by hand or when its milestone closes. A person accepts it: that is the approval. The agent prepares the release pull request through the gates, and the deploy checks the acceptance and the version before publishing.

Everything lives in GitHub and is set up once

What is the same in every project is defined once, at the organization level, in a central repository. Each project declares only its own, and each job runs where it belongs.

The organization

One central repository

Reusable workflows, organization rules, policies as data, a bot of our own that signs the agent’s commits and writes the receipts, and issue types, Projects and secrets defined once.

Public repositories

GitHub runners

Each job starts on a new GitHub machine and is discarded at the end. Free for public repositories.

Private repositories

Private runner

A cloud VM with several runners, only for private repositories. It starts when jobs are waiting and stops after a few idle minutes.

Sensitive work never runs on the private runner. Publishing versions, checking publishing credentials and reproducing bugs (which runs code written from an issue’s text) always run on new GitHub machines that are born clean and destroyed at the end.

Download it: open source, MIT license

DiluxOne is an initiative of Pablo Di Loreto: technology to build businesses, with WordPress plugins, cloud services and AI tools, in one account. This pipeline is the framework every one of its modules is built with, and it is open source: use it in your own projects as it is or adapted. An installer that sets it up in your GitHub organization in a few steps is on its way.

Scroll to Top