Verification Report · mealie v3.30.0
NOT PUBLISHED
mealie-v3.30.0-20261101-001
verified_at 2026-11-01T12:13:33Z
Immutable inputs
| App version | v3.30.0 ← release tag v3.30.0 · source 9552df621182 |
| Image (exact tag) | ghcr.io/mealie-recipes/mealie:v3.30.0 |
| Image digest (linux/amd64) | sha256:d552b662eb93f4dafa127fccfd8db9139e24c249753c72c17c9248edbc21e0c8 |
| Index digest | sha256:90f83da6f3ab0a421efc827118a556168573930105f13fa3321768f42163d784 |
| Pulled as | ghcr.io/mealie-recipes/mealie:v3.30.0@sha256:d552b662eb93f4dafa127fccfd8db9139e24c249753c72c17c9248edbc21e0c8 via ghcr.io |
| Platform contract | ami-0d6dd9e8265d48906 · us-east-1/x86_64 · source=public (plat-us-east-1-x86_64-20261101-001) |
| Config revisions | app 1ab527d06411 · compose d8d498f90d6b |
| Release type | new_version — rule4: minor/major change v3.28.0 -> (3, 30, 0) |
Publish gate
| Check | Field | Result |
|---|
| Compose started | checks.compose_started | Passed |
| Container healthy | checks.container_healthy | Passed |
| Health check passed | checks.health_check_passed | Passed |
| Application tests | checks.tests_passed | Passed |
| Screenshots captured | checks.screenshots_generated | Passed |
| Screenshots published | checks.screenshots_uploaded | Failed |
| Report published | checks.report_uploaded | Failed |
| Manifest published | checks.verification_manifest_uploaded | Failed |
| Platform contract valid | checks.required_platform_contract_valid | Passed |
Evidence
| Health probe | HTTP 200 — ready |
| Version assertion | True actual v3.30.0 — 匹配(exact):kind=api_json_path 取到 'v3.30.0',期望 'v3.30.0' |
| Tests | pytest exit=0
. [100%]
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED apps/mealie/tests/test_smoke.py::test_public_about_and_root
1 passed in 0.82s
|
| Container state | running |
| Duration | 38.8s(2026-11-01T12:12:53Z → 2026-11-01T12:13:31Z) |
Screenshots

welcome · Welcome page / 欢迎页
Application test output
pytest exit=0
. [100%]
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED apps/mealie/tests/test_smoke.py::test_public_about_and_root
1 passed in 0.82s
Container logs (tail)
"GET /household/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /household/webhooks HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /household/webhooks/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /household/notifiers HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /household/notifiers/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /household/members HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /household/members/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /household/mealplan/settings HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /household/mealplan/settings/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /household/mealplan/planner HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /household/mealplan/planner/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /household/mealplan/planner/view HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /household/mealplan/planner/view/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /household/mealplan/planner/edit HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /household/mealplan/planner/edit/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/migrations HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/migrations/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/data HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/data/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/data/units HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/data/units/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/data/tools HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/data/tools/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/data/tags HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/data/tags/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/data/recipes HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/data/recipes/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/data/recipe-actions HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/data/recipe-actions/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/data/labels HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/data/labels/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/data/foods HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/data/foods/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /group/data/categories HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /group/data/categories/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /forgot-password HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /forgot-password/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/site-settings HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/site-settings/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/setup HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/setup/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/manage/users HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/manage/users/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/manage/users/create HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/manage/users/create/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/manage/households HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/manage/households/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/manage/groups HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/manage/groups/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/maintenance HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/maintenance/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/debug/parser HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/debug/parser/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/debug/ai-providers HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/debug/ai-providers/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 307 Temporary Redirect "GET /admin/backups HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /admin/backups/ HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /_nuxt/zxLSVYu7.js HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /_nuxt/zip.DPM4qn3r.css HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /_nuxt/z8K3Id_Y.js HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /_nuxt/yFEelN2o.js HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /_nuxt/view.Bpe8SzzA.css HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /_nuxt/v6VhBaTu.js HTTP/1.1"
mealie-1 | INFO 2026-11-01T12:13:31 - [::ffff:172.18.0.1:36494] 200 OK "GET /_nuxt/uvr_qTC2.js HTTP/1.1"
Raw manifest
{
"schema_version": "1.0",
"verification_id": "mealie-v3.30.0-20261101-001",
"app": "mealie",
"app_version": "v3.30.0",
"release": {
"source_repo": "mealie-recipes/mealie",
"source_revision": "9552df62118224a377d9c9b0a62706a62220ab86",
"release_tag": "v3.30.0",
"upstream_tag": "v3.30.0",
"image_reference": "ghcr.io/mealie-recipes/mealie:v3.30.0"
},
"container": {
"image": "ghcr.io/mealie-recipes/mealie:v3.30.0",
"digest": "sha256:d552b662eb93f4dafa127fccfd8db9139e24c249753c72c17c9248edbc21e0c8",
"manifest_digest": "sha256:90f83da6f3ab0a421efc827118a556168573930105f13fa3321768f42163d784",
"platform": "linux/amd64"
},
"platform": {
"platform_verification_id": "plat-us-east-1-x86_64-20261101-001",
"ami_id": "ami-0d6dd9e8265d48906",
"base_ami_source": "public",
"source_ami_name": "ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*",
"region": "us-east-1",
"architecture": "x86_64"
},
"config": {
"app_config_revision": "1ab527d06411f49e3fa3e1dfdd351f7ceb480566",
"compose_revision": "d8d498f90d6b8e4c6030ee51d036ec7819a965bc",
"tests_revision": "fda7146f7edb1f7d74ea7f6b1fa09cd99bc4ea7e",
"template_revision": "c9350db2baff041f7af1051e500f8db9da8c749a"
},
"verification": {
"application": "passed",
"platform": "referenced",
"tests": "passed"
},
"checks": {
"compose_started": true,
"container_healthy": true,
"health_check_passed": true,
"tests_passed": true,
"screenshots_generated": true,
"screenshots_uploaded": false,
"report_uploaded": false,
"verification_manifest_uploaded": false,
"required_platform_contract_valid": true
},
"artifacts": {
"screenshots": [
{
"scenario": "welcome",
"file": "welcome.png",
"url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/screenshots/mealie/v3.30.0/welcome.png",
"caption": {
"en": "Welcome page",
"zh": "欢迎页"
}
}
],
"report_url": "",
"workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/41305340293"
},
"website": {
"app": "mealie",
"app_version": "v3.30.0",
"verification_id": "mealie-v3.30.0-20261101-001",
"verification_run_id": "41305340293",
"platform_verification_id": "plat-us-east-1-x86_64-20261101-001",
"ami_id": "ami-0d6dd9e8265d48906",
"architecture": "x86_64",
"region": "us-east-1",
"display_name": {
"en": "Mealie",
"zh": "Mealie 菜谱管理"
},
"description": {
"en": "Self-hosted recipe manager with meal planning and shopping lists",
"zh": "支持餐食计划与购物清单的自托管菜谱管理器"
},
"category": "productivity",
"icon": "/icons/mealie.svg",
"featured": false,
"tags": [
"recipes",
"meal-planning",
"shopping"
],
"features": [
{
"en": "Import and organize recipes with searchable metadata",
"zh": "导入并组织菜谱,支持元数据检索"
},
{
"en": "Build meal plans and generate shopping lists",
"zh": "编排餐食计划并生成购物清单"
}
],
"health": "passed",
"status": "pending",
"verified_at": "2026-11-01T12:13:33Z",
"report_url": "",
"workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/41305340293",
"screenshots_order": [
"welcome"
],
"deploy": {
"documentation_url": "https://docs.mealie.io/",
"regions": [
"us-east-1"
],
"instance_type": "t3.small",
"data_volume_gb": 30,
"container_port": 9000,
"health_check_path": "/api/app/about",
"docker_image": "ghcr.io/mealie-recipes/mealie:v3.30.0",
"extra_environment": [],
"template": {
"url": "https://corenovalaunch-templates.s3.us-east-1.amazonaws.com/corenova-one-click.template.yaml",
"revision": "c9350db2baff041f7af1051e500f8db9da8c749a"
},
"post_deploy": {
"admin_path": "/",
"admin_setup": {
"en": "Open / after deployment and follow the first-run flow to create the owner account.",
"zh": "部署后打开 /,按首次运行引导创建所有者账户。"
},
"notes": [
{
"en": "Recipes, uploads, backups and the SQLite database are retained under /app/data.",
"zh": "菜谱、上传文件、备份与 SQLite 数据库均保留在 /app/data。"
}
]
},
"cost_estimate": {
"monthly_usd": 23,
"note": {
"en": "Verified default in us-east-1: t3.small, 20 GB root plus 30 GB data gp3, and public IPv4; transfer and snapshots are extra.",
"zh": "us-east-1 已验证默认配置:t3.small、20GB 系统盘、30GB 数据盘与公网 IPv4;流量和快照另计。"
}
},
"data_path": "/app/data"
},
"release": {
"type": "new_version",
"previous_version": "v3.28.0",
"type_evidence": "rule4: minor/major change v3.28.0 -> (3, 30, 0)"
},
"screenshots": [
{
"scenario": "welcome",
"file": "welcome.png",
"url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/screenshots/mealie/v3.30.0/welcome.png",
"caption": {
"en": "Welcome page",
"zh": "欢迎页"
}
}
]
},
"verification_run_id": "41305340293",
"verified_at": "2026-11-01T12:13:33Z"
}