# 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.
