Inspiration

Every team has had this meeting twice. A decision gets made, maybe written down in Confluence, and months later a new ticket quietly reverses it: "store sessions in MongoDB", "use moment.js", "add a GraphQL endpoint". Nobody saw the decision, the reasons are lost, and the debate starts over. Now AI coding agents write a big share of the code, and they have never read the decision log at all.

What it does

Precedent turns Architecture Decision Records (ADRs) in Confluence into a memory every person and every agent can use:

  • Decision log from Confluence: child pages of a Decision Log page, or any page labelled adr, with status, owner, date, context, decision, rejected alternatives and consequences.
  • Jira project page: every open issue that reopens a decision (proposes an alternative the team rejected) or relies on a superseded one, with who decided, when and why. One click posts the warning on the issue.
  • Issue panel: the decisions behind the issue you're reading.
  • Precedent Rovo agent: "What did we decide about dates?", "Does ORB-3 conflict with any decision?", "Record that we chose read replicas, superseding ADR-008".
  • MCP server: the same five tools for Claude Code, Cursor or any MCP client, so coding agents call check-plan before they pick a library, datastore, API style or tool.

How we built it

  • Forge (Runs on Atlassian: no egress, no storage) with UI Kit.
  • rovo:agent + rovo:mcp sharing five action modules: find-decisions, decision-log, check-plan, check-issue (GET) and record-decision (CREATE: writes the next numbered ADR, can supersede an older one and comment on the Jira issue).
  • Confluence REST v2 (pages, children, versioned updates) and v1 (CQL search, labels); Jira REST v3 (search/jql, bulk create, comments). Every call runs asUser().
  • A pure, unit-tested decision engine parses ADRs and classifies any text as reopens / superseded / related, with human-readable reasons. The UI, the agent and the MCP tools all use the same engine.

Challenges we ran into

  • Deterministic before generative: the engine decides the facts (which ADR, which rejected alternative, which superseding decision), and the agent explains them. So agents never invent decisions.
  • Search lag: new pages aren't searchable right away, so ADRs are read from the Decision Log's children (consistent) and CQL is used only as a site-wide fallback.
  • 25-second limit: demo seeding runs in two idempotent phases with pooled parallel requests.
  • Getting the MCP flow right end to end: an admin enables external tools, then the client connects with OAuth 2.1, acting with the user's own permissions.

Accomplishments that we're proud of

Asking Claude Code to "store sessions in MongoDB", and watching it call Precedent, learn that ADR-001 rejected MongoDB, and propose the PostgreSQL way instead, before writing any code.

What we learned

Teams don't need more documentation, they need the documentation they already have to show up at the moment someone is about to contradict it. For AI agents, MCP makes that moment programmable.

What's next

Bitbucket pull-request checks, a "proposed ADR" flow with approvals, Teamwork Graph to pull decisions from other tools, and a Marketplace listing.

Share this project:

Updates

Submission history