Verification Report · vikunja v2.7.0
NOT PUBLISHED
vikunja-v2.7.0-20261002-001
verified_at 2026-10-02T21:32:43Z
Immutable inputs
| App version | v2.7.0 ← release tag v2.7.0 · source a16be96aa454 |
| Image (exact tag) | vikunja/vikunja:2.7.0 |
| Image digest (linux/amd64) | sha256:3c4b1d34d99256f7cad14b4508e97d80de53e1f5859745c3c176d10c62c73fbf |
| Index digest | sha256:e2204a1c1c6a81e833c2b3a5442be182ca2335b54c2e7e37578cc3fe12a27cfc |
| Pulled as | vikunja/vikunja:2.7.0@sha256:3c4b1d34d99256f7cad14b4508e97d80de53e1f5859745c3c176d10c62c73fbf via registry-1.docker.io |
| Platform contract | ami-0045d7fc2ad003464 · us-east-1/x86_64 · source=public (plat-us-east-1-x86_64-20261001-001) |
| Config revisions | app 168f891194c5 · compose 1efb8deca725 |
| Release type | new_version — rule4: minor/major change v2.6.0 -> (2, 7, 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 v2.7.0 — 匹配(exact):kind=api_json_path 取到 'v2.7.0',期望 'v2.7.0' |
| Tests | pytest exit=0
... [100%]
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED apps/vikunja/tests/test_register.py::test_info_endpoint
PASSED apps/vikunja/tests/test_register.py::test_register_renders
PASSED apps/vikunja/tests/test_register.py::test_project_and_attachment_survive_recreate
3 passed in 3.13s
|
| Container state | running |
| Duration | 15.5s(2026-10-02T21:32:27Z → 2026-10-02T21:32:43Z) |
Screenshots

register · Account registration / 账户注册页
Application test output
pytest exit=0
... [100%]
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED apps/vikunja/tests/test_register.py::test_info_endpoint
PASSED apps/vikunja/tests/test_register.py::test_register_renders
PASSED apps/vikunja/tests/test_register.py::test_project_and_attachment_survive_recreate
3 passed in 3.13s
Container logs (tail)
304 latency=12.729µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.621Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/CreateEdit-CM0NZR7i.js status=200 latency=109.766µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.623Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/ColorPicker-BXjG33ll.css status=200 latency=71.689µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.626Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/ColorPicker-9VrsVfSg.js status=200 latency=113.362µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.628Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/Card-ChiUTmkc.css status=304 latency=11.557µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.630Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/Card-CU_htBdF.js status=304 latency=11.548µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.633Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/Caldav-DU4FA2XX.js status=200 latency=159.442µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.635Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/ButtonLink-CPnyNXU6.css status=304 latency=9.695µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.637Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/ButtonLink-BeRsx6zR.js status=304 latency=12.088µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.640Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/BotUsers-DgfoAaee.js status=200 latency=226.452µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.643Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/BotUsers-Co8Zo8QU.css status=200 latency=54.252µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.645Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/BaseButton-DAvazVLr.css status=304 latency=12.018µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.647Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/BaseButton-BT-MgWyl.js status=304 latency=12.068µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.650Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/Avatar-CMuLE9DL.js status=200 latency=1.05125ms user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.653Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/Avatar-1bCPqDi3.css status=200 latency=118.349µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.655Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/AtomFeed-BaKPLFmB.js status=200 latency=104.207µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.664Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/AsyncEditor-CpECmkOH.js status=200 latency=96.766µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.666Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/ApiTokens-CsaKCTbo.js status=200 latency=153.912µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.669Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/ApiTokens-Baibvp1x.css status=200 latency=27.181µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.671Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/ApiTokenForm-B_D5u6Zt.js status=200 latency=246.391µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.674Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/AdminShell-HsFL42wy.js status=200 latency=58.428µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.676Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/AddTask-sSHY1URK.js status=200 latency=175.524µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.679Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/AddTask-DJt6a6an.css status=200 latency=84.367µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.681Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/assets/About-C0d7xm-w.js status=200 latency=114.523µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.684Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/images/icons/android-chrome-192x192.png status=200 latency=153.822µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.686Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/images/icons/android-chrome-512x512.png status=200 latency=210.157µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.688Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/images/icons/icon-maskable.png status=200 latency=211.819µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
vikunja-1 | time=2026-10-02T21:32:42.690Z level=INFO component=http remote_ip=172.18.0.1 method=GET uri=/manifest.webmanifest status=200 latency=61.663µs user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36"
Raw manifest
{
"schema_version": "1.0",
"verification_id": "vikunja-v2.7.0-20261002-001",
"app": "vikunja",
"app_version": "v2.7.0",
"release": {
"source_repo": "go-vikunja/vikunja",
"source_revision": "a16be96aa454671fdf213b0fbe411dd38a098418",
"release_tag": "v2.7.0",
"upstream_tag": "v2.7.0",
"image_reference": "vikunja/vikunja:2.7.0"
},
"container": {
"image": "vikunja/vikunja:2.7.0",
"digest": "sha256:3c4b1d34d99256f7cad14b4508e97d80de53e1f5859745c3c176d10c62c73fbf",
"manifest_digest": "sha256:e2204a1c1c6a81e833c2b3a5442be182ca2335b54c2e7e37578cc3fe12a27cfc",
"platform": "linux/amd64"
},
"platform": {
"platform_verification_id": "plat-us-east-1-x86_64-20261001-001",
"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": "168f891194c5bc44b6d7f75f64c6ae65c024e963",
"compose_revision": "1efb8deca7259e31533614acbf0b47b1d82ed655",
"tests_revision": "e2e1f52e8050d62c79c2bfeb01d7f37061a396b1",
"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": "register",
"file": "register.png",
"url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/candidates/vikunja/37067376633/1/vikunja-v2.7.0-20261002-001/screenshots/register.png",
"caption": {
"en": "Account registration",
"zh": "账户注册页"
}
}
],
"report_url": "",
"workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/37067376633"
},
"website": {
"app": "vikunja",
"app_version": "v2.7.0",
"verification_id": "vikunja-v2.7.0-20261002-001",
"verification_run_id": "37067376633",
"platform_verification_id": "plat-us-east-1-x86_64-20261001-001",
"ami_id": "ami-0045d7fc2ad003464",
"architecture": "x86_64",
"region": "us-east-1",
"display_name": {
"en": "Vikunja",
"zh": "Vikunja 任务管理"
},
"description": {
"en": "To-do app to organize tasks, projects and teams",
"zh": "开源待办与项目任务管理工具"
},
"category": "productivity",
"icon": "/icons/vikunja.svg",
"featured": true,
"tags": [
"todo",
"tasks",
"projects"
],
"features": [
{
"en": "Projects, labels, reminders and recurring tasks",
"zh": "项目、标签、提醒与重复任务"
},
{
"en": "Kanban boards, Gantt and table views",
"zh": "看板、甘特图与表格视图"
},
{
"en": "Team sharing with granular permissions",
"zh": "团队共享与细粒度权限"
}
],
"health": "passed",
"status": "pending",
"verified_at": "2026-10-02T21:32:43Z",
"report_url": "",
"workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/37067376633",
"screenshots_order": [
"register"
],
"deploy": {
"documentation_url": "https://vikunja.io/docs",
"regions": [
"us-east-1"
],
"instance_type": "t3.small",
"data_volume_gb": 30,
"container_port": 3456,
"health_check_path": "/api/v1/info",
"docker_image": "vikunja/vikunja:2.7.0",
"extra_environment": [
"VIKUNJA_SERVICE_PUBLICURL=${CORENOVA_APP_URL}/",
"VIKUNJA_FILES_BASEPATH=/db"
],
"template": {
"url": "https://corenovalaunch-templates.s3.us-east-1.amazonaws.com/corenova-one-click.template.yaml",
"revision": "c9350db2baff041f7af1051e500f8db9da8c749a"
},
"post_deploy": {
"admin_path": "/register",
"admin_setup": {
"en": "The first registered account becomes the instance admin. There are no preset credentials.",
"zh": "注册的第一个账户即实例管理员;没有预置账号密码。"
},
"notes": [
{
"en": "SQLite and attachments share /db without changing the database engine. Before updating an existing deployment, back up the database and export attachments from /app/vikunja/files; restore and verify them on a copy before switching. Replacing the template does not migrate container-local files.",
"zh": "SQLite 与附件共用 /db,不更换数据库引擎。更新已有部署前,先备份数据库并导出 /app/vikunja/files 中的附件,在副本上恢复验证后再切换;更换模板不会迁移容器内文件。"
},
{
"en": "Database (SQLite) and attachments live on a retained volume (/db). It keeps billing after stack deletion; snapshot it, then delete the volume when no longer needed.",
"zh": "数据库(SQLite)与附件保存在保留数据卷(/db)中。删除栈后该卷仍会计费;请先创建快照,不再需要时再删除卷。"
}
]
},
"cost_estimate": {
"monthly_usd": 23,
"note": {
"en": "Verified default in us-east-1: ~$15.2 t3.small + ~$4 for the 20 GB root and 30 GB data gp3 volumes + $3.65 public IPv4 per month.",
"zh": "us-east-1 已验证默认配置:t3.small 约 $15.2/月 + 20GB 系统盘与 30GB 数据盘 gp3 约 $4/月 + 公网 IPv4 约 $3.65/月。"
}
},
"data_path": "/db",
"production_contract": {
"checks": [
"url_injection",
"data_dir_write"
]
}
},
"release": {
"type": "new_version",
"previous_version": "v2.6.0",
"type_evidence": "rule4: minor/major change v2.6.0 -> (2, 7, 0)"
},
"screenshots": [
{
"scenario": "register",
"file": "register.png",
"url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/candidates/vikunja/37067376633/1/vikunja-v2.7.0-20261002-001/screenshots/register.png",
"caption": {
"en": "Account registration",
"zh": "账户注册页"
}
}
]
},
"verification_run_id": "37067376633",
"verified_at": "2026-10-02T21:32:43Z"
}