Verification Report · mealie v3.28.0

NOT PUBLISHED   mealie-v3.28.0-20260924-001   verified_at 2026-09-24T20:54:37Z

Immutable inputs

App versionv3.28.0 ← release tag v3.28.0 · source 0552eaa4a800
Image (exact tag)ghcr.io/mealie-recipes/mealie:v3.28.0
Image digest (linux/amd64)sha256:3e57058bfcb4343bd7c43d8f04306f6d37523d06ef7a7a395ebfcfc2a752cee4
Index digestsha256:8b02290f4d1806f02acac6f25f6d48a3c965612fda1f8e914d5af533276f8688
Pulled asghcr.io/mealie-recipes/mealie:v3.28.0@sha256:3e57058bfcb4343bd7c43d8f04306f6d37523d06ef7a7a395ebfcfc2a752cee4 via ghcr.io
Platform contractami-0045d7fc2ad003464 · us-east-1/x86_64 · source=public (plat-us-east-1-x86_64-20260924-002)
Config revisionsapp 1ab527d06411 · compose d8d498f90d6b
Release typenew_version — rule4: minor/major change v3.27.0 -> (3, 28, 0)

Publish gate

CheckFieldResult
Compose startedchecks.compose_startedPassed
Container healthychecks.container_healthyPassed
Health check passedchecks.health_check_passedPassed
Application testschecks.tests_passedPassed
Screenshots capturedchecks.screenshots_generatedPassed
Screenshots publishedchecks.screenshots_uploadedFailed
Report publishedchecks.report_uploadedFailed
Manifest publishedchecks.verification_manifest_uploadedFailed
Platform contract validchecks.required_platform_contract_validPassed

Evidence

Health probeHTTP 200 — ready
Version assertionTrue actual v3.28.0 — 匹配(exact):kind=api_json_path 取到 'v3.28.0',期望 'v3.28.0'
Testspytest exit=0 . [100%] ==================================== PASSES ==================================== =========================== short test summary info ============================ PASSED apps/mealie/tests/test_smoke.py::test_public_about_and_root 1 passed in 0.87s
Container staterunning
Duration35.0s(2026-09-24T20:54:01Z → 2026-09-24T20:54:35Z)

Screenshots

welcome
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.87s

Container logs (tail)

2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/xY4_qymb.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/view.CDXnFyKt.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/use-add-to-shopping-list-dialog.CGLBgJ6G.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/url.CgO0F1m1.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/site-settings.QF8W0kxE.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/setup.CkFN96c8.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/sbOeNkWF.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/sRjPColL.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/rmHci5BB.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/register.Ci09nJZH.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/recipes.CeOIUZSo.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/rSCdDGYh.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/q5oDdEGg.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/pKoBi9NY.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/oZiS1GhZ.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/notifiers.DUR7azNG.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/nGAvKjoi.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/migrations.8t2n5SMO.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/maintenance.DnF-194y.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/mZlwCRbK.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/mJ14xD48.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/ldfmio1E.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/l7tOtuPM.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/keFvKBqJ.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/kASaODpB.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/html.C24WQB82.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/group.BpwFW7xd.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/forgot-password.DdcLZU4q.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/f1hkip8b.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/edit.xsOJFBr8.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/eam1dw8s.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/e4LCKbXM.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/dtoe_3dH.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/cXc5tHQ2.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/c8TiKoIF.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/backups.eqfSDEIq.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/ai.BNncFdva.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/_id_.C9VkBJZq.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/_groupSlug_.Da7m6LyV.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/VjR148_8.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/VTextarea.3hgqEjoQ.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/VSwitch.6F5bginw.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/VRow.D9ST-1OJ.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/VPicker.B4cUAy9V.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/VNumberInput.-SYS74l4.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/VExpansionPanels.B1ZDLzAL.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/VDatePicker.DWcOqFBK.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/VDataTable.DdPbBUGO.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/UserRegistrationForm.DLKBmh5p.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/UHBioS6I.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/TWc4M8WV.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/SkmTxmyU.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/SearchFilter.C9f4tbih.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/RecipeTimeline.DB8NTGZH.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/RecipePrintView.CBiN17Uz.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/RecipePage.BxZoDRBn.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/RecipeOrganizerSelector.B52Je4OH.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/RecipeIngredientListItem.CEtWrGZZ.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/RecipeCardSection.D7Ff3VBB.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/RecipeCardLineItem.Ca-fwVP8.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/RU1qYmmd.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/QueryFilterBuilder.5oMoIKi7.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/Q2qD4-WV.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/Q2_S63IL.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/PpTNcXfE.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/PLYBWSC4.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/MlqPKshT.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/MealPlanLayout.lFXLfdtQ.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/LqjcV393.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/L3M_2XW9.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/ImageCropper.-G3RCJhN.css HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/IcHZ9QF0.js HTTP/1.1"
mealie-1  | INFO     2026-09-24T20:54:35 - [172.18.0.1:51824] 200 OK "GET /_nuxt/IJvVeTFq.js HTTP/1.1"

Raw manifest

{
  "schema_version": "1.0",
  "verification_id": "mealie-v3.28.0-20260924-001",
  "app": "mealie",
  "app_version": "v3.28.0",
  "release": {
    "source_repo": "mealie-recipes/mealie",
    "source_revision": "0552eaa4a80031b8572849cca0ed95d07f1be001",
    "release_tag": "v3.28.0",
    "upstream_tag": "v3.28.0",
    "image_reference": "ghcr.io/mealie-recipes/mealie:v3.28.0"
  },
  "container": {
    "image": "ghcr.io/mealie-recipes/mealie:v3.28.0",
    "digest": "sha256:3e57058bfcb4343bd7c43d8f04306f6d37523d06ef7a7a395ebfcfc2a752cee4",
    "manifest_digest": "sha256:8b02290f4d1806f02acac6f25f6d48a3c965612fda1f8e914d5af533276f8688",
    "platform": "linux/amd64"
  },
  "platform": {
    "platform_verification_id": "plat-us-east-1-x86_64-20260924-002",
    "ami_id": "ami-0045d7fc2ad003464",
    "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.28.0/welcome.png",
        "caption": {
          "en": "Welcome page",
          "zh": "欢迎页"
        }
      }
    ],
    "report_url": "",
    "workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/36057886677"
  },
  "website": {
    "app": "mealie",
    "app_version": "v3.28.0",
    "verification_id": "mealie-v3.28.0-20260924-001",
    "verification_run_id": "36057886677",
    "platform_verification_id": "plat-us-east-1-x86_64-20260924-002",
    "ami_id": "ami-0045d7fc2ad003464",
    "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-09-24T20:54:37Z",
    "report_url": "",
    "workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/36057886677",
    "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.28.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.27.0",
      "type_evidence": "rule4: minor/major change v3.27.0 -> (3, 28, 0)"
    },
    "screenshots": [
      {
        "scenario": "welcome",
        "file": "welcome.png",
        "url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/screenshots/mealie/v3.28.0/welcome.png",
        "caption": {
          "en": "Welcome page",
          "zh": "欢迎页"
        }
      }
    ]
  },
  "verification_run_id": "36057886677",
  "verified_at": "2026-09-24T20:54:37Z"
}