Uvularia (bellwort, a New England native) is the Lentago Labs codename for the records vault: the bell is the announcement. Born 2026-10-03 under ADR-0009.
Your organization's public records — minutes, notices, bylaws, policies, filings, announcements — kept as a plain Markdown vault in your own GitHub, with the rules about what must be posted and when kept right next to them. Merge a change and three things happen without anyone touching a server: the records publish, a public "Is it posted?" board updates, and an Ask box that answers only from those records picks up the new facts. Firing us is a fork.
Authorship: the code, prompts, and documentation in this repo are co-written with Claude (Anthropic). Chris directs the work and reviews the output; Claude writes the code and prose. Chris is an infrastructure operator, not a software engineer. Please don't read this repo as a portfolio of coding ability.
Status: Phase 0 complete, with a receipt; Phases 1 and 2 built; Phase 1's receipt recorded in part, Phase 2's not yet. The vault and board stand as a Kit: the first timed dry-run (receipt) reached its first green row in under fifteen minutes and found four adoption-path defects, all filed; the one-repository rung was timed on 2026-10-12 at 6 min 09 s to the first green row (receipt), with one defect filed. The Ask box (#37, #45, #49) and the operator pane's push step and alerts (#58, #60) are merged and in the tree; Phase 1's receipt is recorded in part and Phase 2's not at all, and the Phases table says what each receipt is. The demonstration client is live: the board, its vault, its site. Adoption is a ladder (ADR-0002): the first rung is one repository, uvularia-records-template, which publishes its own plain board; the site, the Ask box and the operator pane are the next three rungs. See ADOPTION.md.
The one tech person at an organization with posting obligations: a condo or HOA board, a nonprofit with a board, a town committee under the Massachusetts Open Meeting Law, a land trust. You need to add a record or correct one in minutes, with a small blast radius, and you need to show, live, that what had to be posted was posted on time.
Three repositories in your GitHub organization, created from templates here. Each has its own reviewers, its own required checks, and its own blast radius.
| Repo | What it holds | What a merge does |
|---|---|---|
<org>-records |
the Obsidian-compatible vault: one file per record with provenance frontmatter, originals with checksums, obligations/*.yaml, an intake/ folder that is never built, append-only receipts/ |
validates schema, links, privacy tripwires, and obligations; publishes a digest-named corpus bundle, a standing file, a feed, a receipt with a server-side timestamp, and a provenance attestation |
<org>-ask-rules |
how the Ask box answers: frozen instructions, allowed subjects, refusal policy, caps, a kill switch, manual incident overrides, golden evals | runs the evals against the currently published corpus; cuts a versioned release the Ask function pins |
<org>-site |
presentation only: pages, theme, the Ask widget, the public board | builds from the published bundle, never from the vault; deploys to your GitHub Pages |
A corpus change cannot alter a rule. A rule change cannot alter a fact. A site change cannot smuggle either.
The Ask box is mitchella's engine with two added signals: an obligation in breach becomes an incident on its subjects, and active announcements surface first. The box therefore cannot claim compliance the board denies. The Ask function is the first swing at a front desk (an assistant that answers from your own records and refuses what they don't say): mitchella's engine, boxed in and run serverless in your own AWS account. mitchella is meant to be the production front desk, the one that will answer through many front ends: Slack, a website widget, email or a ticket system such as RT, the command line.
| Phase | Scope | Receipt |
|---|---|---|
| 0 · Vault + board | vault template, schema, validator, obligation evaluator, Issue-form intake, publish receipts and attestation, the public board on Pages, the demonstration client, ADOPTION.md, a timed dry-run |
recorded (2026-10-03): the board live for the demonstration client; a dry-run receipt with elapsed time |
| 1 · Ask box | rules repo and eval gate, mitchella signal providers, a hardened serverless module, the widget with verified citations | recorded in part (2026-10-12): a live answer that cites a record, and a live refusal of a legal question; the refusal during a manufactured breach is still open. Built in #37, #45, #49 |
| 2 · Operator pane | an Actions-to-Loki push step, the left-to-right pipeline dashboard in your Grafana Cloud free tier, alerts that open Issues | not yet recorded: the dashboard in a fresh free-tier stack. Built in #58, #60 here and the dashboard in drosera |
| 3 · Consumers | the funder-report pipeline and the good-standing reconciliation reading the same vault | not started: one number committed once, cited in three outputs |
Phase 0 has no AI in it and is where the add-quickly, correct-quickly, low-blast-radius requirement is met. Everything later attaches to a vault that already works.
Stillwater Brook Watershed Alliance, a fictional land trust from the
lupinus stories.
Its identity lives in one file, org.yaml, and its seed records are generated
from templates by a script that reads that file. Renaming or rebranding the
demo is one edit and one re-run, and CI fails if the name appears anywhere
else. A real client starts from an empty vault; the seed is a demonstration and
a lab fixture, not a starting point.
| Path | Purpose |
|---|---|
docs/concept.md |
the architecture, the four nouns, the three pipelines, the boundaries |
docs/adr/ |
product-local decisions; the fleet-level decision is ADR-0009 in lentago/.github |
ADOPTION.md |
the adoption ladder: rung 1 (one repository) in full, rungs 2 to 4 pointed at their guides; costs, exits, traps |
DRY-RUN.md |
the checkpointed drill from "Use this template" to a green board, with a receipt |
receipts/ |
uvularia's own adoption receipts; the tier picker cites the latest |
templates/ |
the records, site and ask-rules templates, and the Ask function a rules repo vendors as ask-function/ |
core/ |
the record and obligation schemas, the validator, the evaluator, the bundle format |
demo/ |
org.yaml and the seed generator for the demonstration client |
🌱 Lentago Labs is a pro-bono operations practice for organizations that run on volunteers, donations, and one overworked tech person. Everything here is free to take, and we practice what we publish: our own estate runs this way, in the open. Start at the org profile.