CHANGEFRONT / PERSONAL PROJECT

Keep AI-assisted work tied to its sources.

I built ChangeFront to track which sources an AI recommendation relies on, require a person to review it, and flag it when those sources change. It runs locally, with an MCP interface for AI clients and a browser interface for reviewers. The example below uses scripted inputs so you can see how the review rules work.

01Add the sources

Register the policies, research, or technical records the work will rely on.

02Create a draft

An AI client can propose a recommendation or document change, citing the source versions it used.

03Review the work

The reviewer approves or rejects it. The AI interface cannot approve its own work.

04Check for changes

When a source is updated, work that relied on the old version is invalidated. Its history stays available.

TRY CHANGEFRONT

Run it on your own computer.

Clone or download the repository. With Python 3.12 or later installed, run the command below from the project folder. The demo uses example data and SQLite. No additional Python packages are needed to run it.

MACOS / LINUX

PYTHONPATH=src python3 -m changefront_ref serve --seed

WINDOWS POWERSHELL

.\launch-demo.ps1

Open http://127.0.0.1:8765 in your browser. The Windows launcher opens it automatically. Both commands create a demo database on your computer. The server only accepts local connections.

ChangeFront Reference Edition reviewer interface showing evidence boundaries, system counts, and the evidence ledger
The local interface running with example data from the downloadable project.

A RECORDED EXAMPLE

What happens when the source changes?

Recorded test with example data. These are the results from September 14, 2026. The script supplies the drafts and reviewer role. No LLM or actual human approver takes part in this test.

The draft cites version 1 of the policy.

The script creates a recommendation and document proposal based on a 90-day review interval, then submits both for review. The example source is marked verified by the script; ChangeFront does not fact-check it.

Current source
Version 1Review every 90 days.evv-0001
Recommendation
in reviewStill cites version 1evv-0001
Document proposal
in reviewApplied: noprp-0001
Show the recorded data for this step
{
  "evidence": [
    {
      "applicability": "Invented portfolio test control",
      "authority_tier": 1,
      "claim": "Review this synthetic control every 90 days.",
      "confidence": 0.95,
      "content_hash": "3f5df151d0a7f12bfb0eb6a19b538744f0e8897c977eefa5c928edc966d9b8cd",
      "created_at": "2026-09-14T12:00:00Z",
      "created_by": "mcp-client",
      "effective_state": "active",
      "excerpt": "Review every 90 days.",
      "expires_at": "2027-09-01T00:00:00Z",
      "id": "evv-0001",
      "is_current_version": true,
      "metadata": {
        "synthetic": true
      },
      "observed_at": "2026-09-01T00:00:00Z",
      "persisted_state": "active",
      "record_id": "evr-0001",
      "source_id": "demo-policy",
      "source_name": "Synthetic review policy",
      "source_type": "official",
      "source_uri": "https://policy.example/review",
      "stable_key": "review-interval",
      "state_reason": "new immutable version accepted",
      "state_source": "persisted_event",
      "title": "Synthetic review interval",
      "valid_from": "2026-09-01T00:00:00Z",
      "verification_state": "verified",
      "version_no": 1
    }
  ],
  "explanation": "A scripted draft and document proposal enter review with a direct link to version 1. The verified designation is supplied by the fixture, not established by fact-checking.",
  "key": "submitted",
  "proposal": {
    "applied": false,
    "base_revision": "r1",
    "created_at": "2026-09-14T12:00:00Z",
    "created_by": "mcp-client",
    "decision": null,
    "document_key": "example-runbook",
    "evidence_version_ids": [
      "evv-0001"
    ],
    "id": "prp-0001",
    "proposed_markdown": "Review the example control every 90 days.",
    "rationale": "Follow the synthetic v1 policy.",
    "state": "in_review",
    "state_at": "2026-09-14T12:00:00Z",
    "state_reason": "submitted for explicit human decision",
    "title": "Add the review checkpoint"
  },
  "recommendation": {
    "confidence": 0.9,
    "created_at": "2026-09-14T12:00:00Z",
    "created_by": "mcp-client",
    "decision": null,
    "evidence_version_ids": [
      "evv-0001"
    ],
    "id": "rec-0001",
    "proposed_action": "Add a 90-day checkpoint to the example runbook.",
    "rationale": "The synthetic v1 policy specifies a 90-day interval.",
    "state": "in_review",
    "state_at": "2026-09-14T12:00:00Z",
    "state_reason": "submitted for explicit human decision",
    "title": "Schedule a 90-day review"
  },
  "title": "The recommendation cites a specific source version"
}

8/8 checks passed. 12 audit events verified. Service source: fce2ae6.

TEST RESULTS

63 tests across three interfaces.

All 63 tests passed in three consecutive local runs on September 14, 2026, using the unchanged public service and test files. The tests use temporary databases, a fixed clock, and sequential identifiers; HTTP checks run locally. The repeat runs check consistency. They do not add to the test count or show how the system would perform in production.

python3 scripts/verify.py

Windows PowerShell: .\verify.ps1

SERVICE + STORAGE30 tests

Review rules, protected records, approval permissions, source changes, and audit history.

HTTP + API14 tests

Local server behavior, request handling, review states, and errors.

MCP INTERFACE19 tests

16 handler tests, two in-memory stdio tests, and one real subprocess test cover discovery, metadata, tools, framing, results, and errors.

WHAT THE TESTS CHECKReview rules

Whether the example follows its rules for state changes and blocked actions. These tests do not measure model quality, adoption, or business impact.

MCP INTERFACE

What an AI client can and cannot do.

The stateless stdio server follows MCP 2026-07-28 with per-request metadata, server discovery, deterministic tool listing, structured results, and standard protocol errors. The MCP, browser, and HTTP interfaces all use the same service, so they follow the same review rules.

Read the official MCP specification
TOOLS AVAILABLE TO AN AI CLIENTRead evidence, draft and submit work, check for stale sources, get summaries, and verify audit history
ACTIONS NOT AVAILABLE THROUGH MCPApprove work, record final decisions, apply document changes, run shell commands, or access the network

I kept approval and document changes out of the MCP tools. An AI client can prepare work for review, but it cannot approve or apply it.

LIMITATIONS

What this version does and does not do.

Example data only

I built this as a personal project. The organizations, sources, records, and outcomes are synthetic. There is no employer code or data.

Runs locally

This version is for one user on one computer. It is not a production deployment or evidence of use by an organization.

Simulated reviewer identity

Request headers identify the reviewer role for the demo. A production system would need real authentication and identity checks.

No document editing

Approval records a decision. It does not apply the proposed change to a document or another system.

Audit history has limits

The check can detect changed events, but someone who can rewrite the database can also rebuild its hash chain. It has no independently signed record.

No background monitoring

A reviewer or tool call must request a staleness check. This version does not continuously monitor external sources.

PROJECT FILES

Code and documentation.

Public GitHub repositorySource, tests, documentation, verification, and commit historyREADME + quick startWhat it does, how to run it, and where to find the codeArchitectureHow the interfaces, service, and stored records work togetherTrust modelPermissions, assumptions, and security limitationsReviewer guideSteps for checking the implementation yourselfMCP referenceProtocol details and the tools available to an AI clientExample dataThe synthetic inputs used in the demo; no private or employer data

MORE OF MY WORK

From enterprise AI to robotics.

ChangeFront is one of my personal projects. My other work includes enterprise AI architecture, rollout and support, and autonomous robotics.