Register the policies, research, or technical records the work will rely on.
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.
An AI client can propose a recommendation or document change, citing the source versions it used.
The reviewer approves or rejects it. The AI interface cannot approve its own work.
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 --seedWINDOWS POWERSHELL
.\launch-demo.ps1Open 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.

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 1
evv-0001 - Document proposal
- in reviewApplied: no
prp-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.pyWindows PowerShell: .\verify.ps1
Review rules, protected records, approval permissions, source changes, and audit history.
Local server behavior, request handling, review states, and errors.
16 handler tests, two in-memory stdio tests, and one real subprocess test cover discovery, metadata, tools, framing, results, and errors.
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 specificationI 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.
I built this as a personal project. The organizations, sources, records, and outcomes are synthetic. There is no employer code or data.
This version is for one user on one computer. It is not a production deployment or evidence of use by an organization.
Request headers identify the reviewer role for the demo. A production system would need real authentication and identity checks.
Approval records a decision. It does not apply the proposed change to a document or another system.
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.
A reviewer or tool call must request a staleness check. This version does not continuously monitor external sources.
PROJECT FILES
Code and documentation.
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.