Free data
Every ReadyStack image ships with everything — the full build database, runnable test scripts, production seed data, and a human-readable manifest. Download our image. Audit our work. Run our tests. Data is free.
The AssetChain is ReadyStack's core technology — an unbreakable chain of accountability that runs through every build. Three independent chains verify every product: Package Creation (the image builds clean), Seed Data (data imports correctly), and Use Case Validation (all tests pass). The manifest, the tests, and the reports are all generated from it.
- Define expected behaviors
"PostgreSQL must accept connections. Login page must render. Seed data must contain 3 courses."
- Build and record every action
Every dependency pulled, every config written, every file changed — logged with full context: why, what problem, what error avoided.
- Test everything
Health checks run against every expected behavior. PASS or FAIL. No "looks good to me."
- Clean rebuild
docker build --no-cachefrom scratch. If it only worked because of cached layers, we catch it here. - Ship with proof
Generate all FreeData deliverables from the ContractChain database. Package inside the image. No data = no release.
Every ReadyStack image contains a /readystack/ directory with four deliverables. All four ship together or nothing ships.
/readystack/ ├── MANIFEST.md — human-readable proof of what we built and tested ├── contractchain.json — full build report (JSON) — every action, decision, fix across all 3 chains ├── data/ │ └── seed-data.sql — importable production data we validated against └── tests/ ├── run-all.sh — run every health check we ran ├── boot.sh — container + process manager checks ├── services.sh — database, cache, web server, workers ├── application.sh — login, API, assets ├── data.sh — seed data verification └── integration.sh — OAuth, email, external connectivity
The manifest
A marketing-focused, human-readable summary. What we built, what we tested, what passed. The brochure with receipts.
# MANIFEST.md Product: Install Canvas Version: 2026.02.15.1 Upstream: Canvas LMS prod @ abc123 Certified by: Tombomadil Built: 2026-02-15T03:00:00Z (22m 14s) ## What We Tested (14/14 passed) ✅ Container starts (3.2s) ✅ PostgreSQL accepts connections (4.1s) ✅ Redis responds (0.3s) ✅ Login page renders (1.1s) ✅ API returns valid JSON (0.8s) ✅ Seed data: 3 courses, 10 students (1.5s) ... ## What Broke and How We Fixed It VERIFIED IC-001: nokogiri compile → added libxml2-dev VERIFIED IC-002: Asset OOM → NODE_OPTIONS heap 4096MB ## Verify It Yourself docker exec <container> /readystack/tests/run-all.sh
The ContractChain database
The full build database ships as a SQLite file. Import it into any SQLite client and query every action, every decision, every fix, every lesson. No other Docker distribution gives you their build database.
-- "What did they change and why?" SELECT a.name, c.reason, c.file_changed FROM actions a JOIN contract_chain_attributes c ON c.action_id = a.id WHERE c.file_changed != 'N/A'; -- "What bugs did they hit?" SELECT defect_code, category, error_output, fix_applied FROM defects; -- "What did they learn?" SELECT category, error_pattern, root_cause, fix FROM lessons;
Users can diff contractchain.json across versions to see exactly what changed week to week.
Production data
The exact seed data we validated against, exported as an importable SQL file. Reset to a known good state anytime. The data matches what our health checks verified — no guessing.
Test automation
Run the same health checks we ran. One command. Same expectations, same checks, independently verifiable.
$ docker exec my-canvas /readystack/tests/run-all.sh === Boot === ✅ Container running ✅ Supervisord healthy === Services === ✅ PostgreSQL ✅ Redis ✅ Apache/Passenger ✅ Delayed job === Application === ✅ Login page ✅ API responds ✅ Assets served === Data === ✅ Seed data present ✅ Grades populated ✅ Announcements exist === Integration === ✅ OAuth endpoint ✅ Email config === RESULTS === PASS: 14 FAIL: 0 ✅ All checks passed