ADR-0033: The combined system, proved in CI¶
Status: Accepted Date: 2026-10-12 Deciders: Alex Nodeland Amends: RFC-0002's phase 7, and relayr RFC-0001's: the product repository, and the exit criterion
Context¶
RFC-0002's phase 7 ends when "the product repository passes its CI on the stack": a repository generated from the template, holding the combined system as a product, as artifactr ADR-0032 says. Phases 1 to 6 built everything that repository would hold, in relayr and in the template.
lattice's CI already generates that application, with both libraries, evals, grantr and the bridge, on every change to stackr or a library. Two of its jobs check it:
- Template generates it at the commit under test, and runs its own CI,
make check, throughscripts/check-app. - Smoke, in its two rows with an application, "everything on local Supabase, and an application" and "a single host, behind Caddy, and an application", builds it, runs it on the stack, and checks it end to end with
make smoke-app.
Decision¶
- There is no separate product repository for v0.1. Phase 7's exit criterion becomes: the application generated from the template passes its own CI, and runs end to end on the stack. The Template and Smoke jobs meet it together. On the stack,
make smoke-appchecks:- sign-in and tenants;
- both agents' traces in Tempo and Langfuse;
- an alert opening an incident thread with its timeline, and a person's message there joining it;
- the incident's resolution posting a closing notice and proposing its postmortem;
- a rule drafted in a thread going live once a person accepts it, while a forged acceptance is refused.
- A real product repository comes with the user's own product, generated from the template when there is a product to build, not as a placeholder.
Options considered¶
| Option | For | Against |
|---|---|---|
| The Template and Smoke jobs as the proof (chosen) | Checked on every change, at the commit under test, with nothing to keep in step | No repository a product team could fork as it is |
| A product repository generated now | A standing example of the combined system | A second repository to keep in step with the template, with its own CI and secrets, holding no product |
An example under lattice's examples/ |
A generated application to read, beside the code it uses | Generated code checked in, which drifts from the template unless CI regenerates and compares it, while the Template job already generates it |
Consequences¶
- Easier: the combined system is proved on every change to stackr or a library, and can't drift from the template.
- Harder: someone starting a product generates it themselves, with
copier copy, as the combined system guide shows. - Revisit: a product repository once a product needs one.