Skip to content

uphold is the one of the owner's three repositories still recording decisions as ADR files and citing issue numbers in a tracked ROADMAP; freeze docs/adr at 0012, adopt the Design record issue template, and add a status vocabulary with an age check #285

Description

@HackingGate

Measured

Research read 2026-09-30 on the system-design stack that replaces ADR files, filed in full in the owner's private workspace tracker (five layers, dated, cited). uphold's rows, against the other two repositories the owner runs:

  • uphold still records decisions as ADR files, docs/adr/0001 to 0012, with 0012 merged Proposed on 2026-09-30 (73dd288). the owner's other two repositories record a decision as a GitHub issue on a Design record template (Goal, Today, Decision, Design, Plan, Done when, Open; research as a comment) and keep tracked files free of issue links, dates and status lines; the private workspace froze its 72 ADRs on 2026-09-29 behind an adr-freeze gate.
  • ROADMAP.md cites issues by number inside a tracked file, which the other two repositories forbid.
  • The ADR file tooling is dormant: adr-tools last commit 2020-03-30, log4brains last commit 2024-12-17 with open is-this-maintained issues, MADR 4.0.0 (2024-09-17) with only a Dependabot push since. The format stays at Adopt on the Thoughtworks Radar; the tools do not.
  • The field's file-first organisations (Oxide RFDs, Rust RFCs, Kubernetes KEPs) each keep a machine-readable status and a renderer; each pays for that with a database, a site or a tracking issue per record.
  • REFERENCE.md already plays the role the Rust reference plays: the durable current-state spec a reader reads cold.
  • The engine already has what the field calls "prove a rule can fire" only per engine elsewhere (conftest verify, ast-grep test); uphold has scratch-repo CLI tests, a corpus and mutation testing, but no built-in "this rule must fire on its invalid fixture" declaration a consumer can write beside a rule.

Why it matters

Three repositories with three decision shapes is the fact-with-two-homes defect at the level of process. uphold is the engine the other two run their rules through, so its own decisions are the ones most often cited from outside; a Proposed ADR in a file has no gate on its age here (the age gate the private workspace had was its own), and a ROADMAP with issue numbers goes stale the day an issue closes.

Done when

  • ADR 0012 is ruled (Accepted or Rejected with the reason), then docs/adr is frozen at 0012 by a rule written in uphold's own principles.toml that refuses a new file under docs/adr with the remedy "file a Design record".
  • .github/ISSUE_TEMPLATE/design.md exists with the seven headings and the design label; AGENTS.md or CONTRIBUTING.md says where a decision goes, in the same words the other two repositories use.
  • A status vocabulary on design issues (label set or project field) and an "open without a ruling for N days" check, the KEP lesson, so the age gate the file shape had is not lost.
  • ROADMAP.md carries no issue numbers; milestones or a project hold the live state.
  • Watch, not now: a per-rule "must fire on" fixture declaration in the rule schema, modelled on ast-grep test and conftest verify; ast-grep as a backend for code-shaped rules, whose root-anchored glob semantics match uphold's.
  • Wheel named: GitHub issue templates and labels, uphold's own rule engine for the freeze; no new tool.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions