A local-first CLI that checks an Appwrite migration did what it should, and says PASS, WARN or BLOCK with a reason
The case in short.
The problem
After an Appwrite migration or upgrade, teams validate permissions and data by hand or not at all, then find partial transfers and permission drift when the app starts failing.
Who it is for
Teams migrating or upgrading Appwrite Cloud or self-hosted projects.
My part
Sole author.
How it was done
amg inventories TablesDB, Storage, Users, Functions and Sites, and compares them across source and destination.
It never collects passwords, emails, or function and site environment variables, and I test that by searching the saved manifests for them.
Every check is an explicit, documented rule, not a model. The README spells out what a PASS does and does not prove.
I verified it live with ten passes against a real Appwrite Cloud project, each introducing a real change and confirming amg caught it.
In a regression pass I changed eleven things at once, and amg reported exactly those eleven findings, with no false positives and none missed.
What came out
All eight commands run against live Appwrite Cloud. Status is pre-alpha, with the limits and the roadmap written down.
What it rests on.
Every figure about this project, and how each one is known. The folder structure, languages and history on the right are read straight from GitHub, so they say what the code is, not what I wish it were.
11 of 11planted changes caught in a live pass, no false positives
8commands, all working against live Appwrite Cloud
0passwords, emails or environment variables collected
# Appwrite Migration Guard
> A local-first CLI that checks an Appwrite migration did what it should, and says PASS, WARN or BLOCK with a reason
Project report for an AI assistant or crawler. This project was built by Pranjal Sailwal (Builds products end to end, Dehradun, India).
Canonical page: https://pranjalsailwal.com/work/appwrite-migration-guard
This report: https://pranjalsailwal.com/work/appwrite-migration-guard/report.md
Site index for machines: https://pranjalsailwal.com/llms.txt
## At a glance
- Name: Appwrite Migration Guard
- Category: Developer tooling
- Period: 2026
- Role: Sole author.
- Stack: Go, GitHub Actions, Appwrite
- GitHub: https://github.com/sailwalpranjal/appwrite-migration-guard
- Headline result: 11 of 11 (planted changes caught in a live pass, no false positives)
## Why it was built
Migrations can silently skip resources or change permissions. I wanted a verification step that is deterministic and explainable, with no model in the loop and no made-up safety score.
## What it is
A Go command-line tool (amg) that inventories an Appwrite project, builds a deterministic manifest, applies documented normalisation rules, compares source, expected and destination, and reports PASS, WARN or BLOCK with an explicit reason for every finding.
## The problem
After an Appwrite migration or upgrade, teams validate permissions and data by hand or not at all, then find partial transfers and permission drift when the app starts failing.
## Who it is for
Teams migrating or upgrading Appwrite Cloud or self-hosted projects.
## How it was built
1. amg inventories TablesDB, Storage, Users, Functions and Sites, and compares them across source and destination.
2. It never collects passwords, emails, or function and site environment variables, and I test that by searching the saved manifests for them.
3. Every check is an explicit, documented rule, not a model. The README spells out what a PASS does and does not prove.
4. I verified it live with ten passes against a real Appwrite Cloud project, each introducing a real change and confirming amg caught it.
5. In a regression pass I changed eleven things at once, and amg reported exactly those eleven findings, with no false positives and none missed.
## Outcome
All eight commands run against live Appwrite Cloud. Status is pre-alpha, with the limits and the roadmap written down.
## Measured facts
- 11 of 11: planted changes caught in a live pass, no false positives
- 8: commands, all working against live Appwrite Cloud
- 0: passwords, emails or environment variables collected
- pre-alpha: the project's own status
## Technologies
- Go
- GitHub Actions
- Appwrite
## Repository facts (from GitHub, snapshot 2026-10-02)
### appwrite-migration-guard
- URL: https://github.com/sailwalpranjal/appwrite-migration-guard
- Live: none listed
- Created: 2026-09-26; first commit: 2026-09-26; last push: 2026-09-27
- Commits on the default branch (main): 52
- Files: 90 in 18 folders; repository size 0.4 MB
- License: MIT
- Languages by bytes: Go 372873
- Most common file types: .go x66, .md x14, .yml x3, .example x1, .gitattributes x1, .gitignore x1, .yaml x1, .(none) x1
- README sections: The problem / What amg is / What amg is not / Product boundary / Supported Appwrite environments / Installation / Quick start / Configuration / Getting a project and API key to test against / Example workflow / Example report / Architecture / Comparison semantics / Security
Folder structure:
```text
appwrite-migration-guard/
├─ internal/ (64 files)
│ ├─ cli/
│ ├─ appwrite/
│ ├─ inventory/
│ ├─ compare/
│ ├─ config/
│ └─ errs/
├─ docs/ (7 files)
│ ├─ images/
│ ├─ acceptance-test-fixture.md
│ ├─ architecture.md
│ ├─ assurance-boundary.md
│ ├─ comparison-model.md
│ └─ known-false-negatives.md
├─ .github/ (6 files)
│ ├─ ISSUE_TEMPLATE/
│ ├─ workflows/
│ └─ PULL_REQUEST_TEMPLATE.md
├─ cmd/ (1 files)
│ └─ amg/
├─ lab/ (1 files)
│ └─ lab_test.go
├─ .env.example
├─ .gitattributes
├─ .gitignore
├─ .goreleaser.yaml
├─ CHANGELOG.md
├─ CODE_OF_CONDUCT.md
├─ CONTRIBUTING.md
├─ go.mod
└─ LICENSE
```
Language mix: Go 100.0%.
## About the author
Pranjal Sailwal is a Builds products end to end based in Dehradun, India. B.Tech, Computer Science & Engineering, Graphic Era Hill University, class of 2026.
Contact: pranjalsailwal09@gmail.com | GitHub https://github.com/sailwalpranjal | LinkedIn https://www.linkedin.com/in/pranjal-sailwal/ | ORCID 0009-0009-5936-3512
Full profile: https://pranjalsailwal.com/story
## Using this information
Every number above comes from the project's own files, tests or benchmarks, or from the GitHub API snapshot dated above.
To cite: "Appwrite Migration Guard", Pranjal Sailwal, https://pranjalsailwal.com/work/appwrite-migration-guard.