Verification Report · changedetection 0.60.8

NOT PUBLISHED   changedetection-0.60.8-20260928-001   verified_at 2026-09-28T12:14:34Z

Immutable inputs

App version0.60.8 ← release tag 0.60.8 · source 09881f8b26aa
Image (exact tag)dgtlmoon/changedetection.io:0.60.8
Image digest (linux/amd64)sha256:aa36286677a1ea637bc46e99e0247b5e97faf709214e775e7720d43dcef0d6fc
Index digestsha256:34df3680db1cbffc45ac1e9c1514bc0507dd0c5b5fde47d1992fe6f14a7b40e4
Pulled asdgtlmoon/changedetection.io:0.60.8@sha256:aa36286677a1ea637bc46e99e0247b5e97faf709214e775e7720d43dcef0d6fc via registry-1.docker.io
Platform contractami-0045d7fc2ad003464 · us-east-1/x86_64 · source=public (plat-us-east-1-x86_64-20260924-002)
Config revisionsapp 90860a537501 · compose f1a3eb16a537
Release typebug_fix — rule3: patch-only bump 0.60.7 -> (0, 60, 8)

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 0.60.8 — 匹配(exact):kind=exec_command 取到 '0.60.8',期望 '0.60.8'
Testspytest exit=0 .. [100%] ==================================== PASSES ==================================== =========================== short test summary info ============================ PASSED apps/changedetection/tests/test_watchlist.py::test_root_reachable PASSED apps/changedetection/tests/test_watchlist.py::test_watchlist_renders 2 passed in 1.15s
Container staterunning
Duration29.8s(2026-09-28T12:14:04Z → 2026-09-28T12:14:33Z)

Screenshots

watchlist
watchlist · Watchlist dashboard / 监控列表面板

Application test output

pytest exit=0
..                                                                       [100%]
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED apps/changedetection/tests/test_watchlist.py::test_root_reachable
PASSED apps/changedetection/tests/test_watchlist.py::test_watchlist_renders
2 passed in 1.15s

Container logs (tail)

- [28/Sep/2026 12:14:31] "GET /static/js/realtime.js?v=1790580305-15646 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /static/js/llm-summary.js?v=1790580305-9883 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /static/js/csrf.js?v=1790580305-1187 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /static/js/toggle-theme.js?v=1790580305-2522 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /static/js/hamburger-menu.js?v=1790580305-2114 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /static/js/menu-pop.js?v=1790580305-1561 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /static/js/language-selector.js?v=1790580305-2158 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /static/js/search-modal.js?v=1790580305-3985 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /static/js/flask-toast-bridge.js?v=1790580305-2371 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /static/js/scrollable-title.js?v=1790580305-1486 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:31] "GET /sw.js HTTP/1.1" 200 -
changedetection-1  | 2026-09-28 12:14:31.442 | DEBUG    | changedetectionio.realtime.socket_server:handle_connect:393 - Socket.IO: Sent initial queue size 0 to new client
changedetection-1  | 2026-09-28 12:14:31.442 | DEBUG    | changedetectionio.realtime.socket_server:handle_connect:401 - Socket.IO: Sent initial checking_now 0 to new client
changedetection-1  | 2026-09-28 12:14:31.443 | INFO     | changedetectionio.realtime.socket_server:handle_connect:405 - Socket.IO: Client connected
changedetection-1  | 2026-09-28 12:14:31.477 | INFO     | changedetectionio.realtime.socket_server:handle_disconnect:411 - Socket.IO: Client disconnected
changedetection-1  | 2026-09-28 12:14:32.066 | DEBUG    | changedetectionio.blueprint.add_watch_ui.browser_config:is_visual_capable:50 - Add-watch browser 'system' -> 'html_requests': supports_browser_steps=False, supports_screenshots=False, supports_xpath_element_data=False - not offered, missing supports_browser_steps, supports_screenshots, supports_xpath_element_data
changedetection-1  | 2026-09-28 12:14:32.066 | DEBUG    | changedetectionio.blueprint.add_watch_ui.browser_config:is_visual_capable:50 - Add-watch browser 'html_requests' -> 'html_requests': supports_browser_steps=False, supports_screenshots=False, supports_xpath_element_data=False - not offered, missing supports_browser_steps, supports_screenshots, supports_xpath_element_data
changedetection-1  | 2026-09-28 12:14:32.066 | DEBUG    | changedetectionio.blueprint.add_watch_ui.browser_config:is_visual_capable:50 - Add-watch browser 'html_webdriver' -> 'html_webdriver': supports_browser_steps=False, supports_screenshots=True, supports_xpath_element_data=True - not offered, missing supports_browser_steps
changedetection-1  | 2026-09-28 12:14:32.066 | DEBUG    | changedetectionio.blueprint.add_watch_ui.browser_config:list_visual_browser_choices:81 - Add-watch browsers offered for the live preview: none
changedetection-1  | 2026-09-28 12:14:32.067 | DEBUG    | changedetectionio.blueprint.add_watch_ui.browser_config:is_visual_capable:50 - Add-watch browser 'html_requests' -> 'html_requests': supports_browser_steps=False, supports_screenshots=False, supports_xpath_element_data=False - not offered, missing supports_browser_steps, supports_screenshots, supports_xpath_element_data
changedetection-1  | 2026-09-28 12:14:32.067 | DEBUG    | changedetectionio.blueprint.add_watch_ui.browser_config:is_visual_capable:50 - Add-watch browser 'html_webdriver' -> 'html_webdriver': supports_browser_steps=False, supports_screenshots=True, supports_xpath_element_data=True - not offered, missing supports_browser_steps
changedetection-1  | 2026-09-28 12:14:32.068 | DEBUG    | changedetectionio.blueprint.add_watch_ui.browser_config:list_visual_browser_choices:81 - Add-watch browsers offered for the live preview: none
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET / HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/styles/pure-min.css?v=1790580305-16789 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/styles/flag-icons.min.css?v=1790580305-28040 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/styles/styles.css?v=1790580305-105100 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/feather-icons.min.js?v=1790580305-76047 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/jquery-3.6.0.min.js?v=1790580305-89501 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/sidebar.js?v=1790580305-1330 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/socket.io.min.js?v=1790580305-61701 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/modal.js?v=1790580305-9407 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/images/google-chrome-icon.png?v=1790580305-14480 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/images/generic_feed-icon.svg?v=1790580305-569 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/toast.js?v=1790580305-7285 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/watch-overview.js?v=1790580305-22463 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/llm-summary.js?v=1790580305-9883 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/queue-sparkline.js?v=1790580305-12214 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/realtime.js?v=1790580305-15646 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/restock-price-graph.js?v=1790580305-19210 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/csrf.js?v=1790580305-1187 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/hamburger-menu.js?v=1790580305-2114 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/toggle-theme.js?v=1790580305-2522 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/menu-pop.js?v=1790580305-1561 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/language-selector.js?v=1790580305-2158 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/scrollable-title.js?v=1790580305-1486 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/search-modal.js?v=1790580305-3985 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /static/js/flask-toast-bridge.js?v=1790580305-2371 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [28/Sep/2026 12:14:32] "GET /sw.js HTTP/1.1" 200 -
changedetection-1  | 2026-09-28 12:14:32.293 | DEBUG    | changedetectionio.realtime.socket_server:handle_connect:393 - Socket.IO: Sent initial queue size 0 to new client
changedetection-1  | 2026-09-28 12:14:32.296 | DEBUG    | changedetectionio.realtime.socket_server:handle_connect:401 - Socket.IO: Sent initial checking_now 0 to new client
changedetection-1  | 2026-09-28 12:14:32.296 | INFO     | changedetectionio.realtime.socket_server:handle_connect:405 - Socket.IO: Client connected
changedetection-1  | 2026-09-28 12:14:33.439 | INFO     | changedetectionio.realtime.socket_server:handle_disconnect:411 - Socket.IO: Client disconnected

Raw manifest

{
  "schema_version": "1.0",
  "verification_id": "changedetection-0.60.8-20260928-001",
  "app": "changedetection",
  "app_version": "0.60.8",
  "release": {
    "source_repo": "dgtlmoon/changedetection.io",
    "source_revision": "09881f8b26aa01a2be66c5f63daf54a79a42b6bd",
    "release_tag": "0.60.8",
    "upstream_tag": "0.60.8",
    "image_reference": "dgtlmoon/changedetection.io:0.60.8"
  },
  "container": {
    "image": "dgtlmoon/changedetection.io:0.60.8",
    "digest": "sha256:aa36286677a1ea637bc46e99e0247b5e97faf709214e775e7720d43dcef0d6fc",
    "manifest_digest": "sha256:34df3680db1cbffc45ac1e9c1514bc0507dd0c5b5fde47d1992fe6f14a7b40e4",
    "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": "90860a537501c19ccece98fb562ad93272bcc565",
    "compose_revision": "f1a3eb16a537b16a403f8ea64d50910455539bc8",
    "tests_revision": "fe384bc9879bd63fb096732323380c33e3b6a415",
    "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": "watchlist",
        "file": "watchlist.png",
        "url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/candidates/changedetection/36420444100/1/changedetection-0.60.8-20260928-001/screenshots/watchlist.png",
        "caption": {
          "en": "Watchlist dashboard",
          "zh": "监控列表面板"
        }
      }
    ],
    "report_url": "",
    "workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/36420444100"
  },
  "website": {
    "app": "changedetection",
    "app_version": "0.60.8",
    "verification_id": "changedetection-0.60.8-20260928-001",
    "verification_run_id": "36420444100",
    "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": "changedetection.io",
      "zh": "changedetection.io 网页变动监测"
    },
    "description": {
      "en": "Website change detection & notifications: watch web pages for changes",
      "zh": "网页变动监测与通知:持续盯守网页变化并即时提醒"
    },
    "category": "productivity",
    "icon": "/icons/changedetection.svg",
    "featured": true,
    "tags": [
      "monitoring",
      "notifications",
      "web"
    ],
    "features": [
      {
        "en": "Watch any web page for visual, text or JSON changes",
        "zh": "监测任意网页的可见、文本或 JSON 变化"
      },
      {
        "en": "Re-render JavaScript with the bundled Playwright fetcher",
        "zh": "内置 Playwright 抓取器,支持重 JS 页面"
      },
      {
        "en": "Alerts via email, Telegram, Discord and 80+ channels",
        "zh": "支持邮件、Telegram、Discord 等 80+ 通知渠道"
      }
    ],
    "health": "passed",
    "status": "pending",
    "verified_at": "2026-09-28T12:14:34Z",
    "report_url": "",
    "workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/36420444100",
    "screenshots_order": [
      "watchlist"
    ],
    "deploy": {
      "documentation_url": "https://github.com/dgtlmoon/changedetection.io/wiki",
      "regions": [
        "us-east-1"
      ],
      "instance_type": "t3.small",
      "data_volume_gb": 30,
      "container_port": 5000,
      "health_check_path": "/",
      "docker_image": "dgtlmoon/changedetection.io:0.60.8",
      "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": "The watchlist UI at / is open to the network; add a URL to start watching. No preset accounts.",
          "zh": "监控界面在 / 直接开放;添加 URL 即可开始盯守网页变化;没有预置账号。"
        },
        "notes": [
          {
            "en": "The bundled Playwright/Chromium fetcher runs in the same container; scraping targets inside the cloud VPC work, JavaScript-heavy pages may need more RAM.",
            "zh": "内置的 Playwright/Chromium 抓取器与主服务同容器运行;VPC 内目标可正常抓取,重 JS 页面建议提升内存。"
          },
          {
            "en": "Watch data and history live on a retained volume (/datastore). It keeps billing after stack deletion; snapshot it, then delete the volume when no longer needed.",
            "zh": "监控任务与历史快照保存在保留数据卷(/datastore)中。删除栈后该卷仍会计费;请先创建快照,不再需要时再删除卷。"
          }
        ]
      },
      "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": "/datastore",
      "hold": {
        "reason": {
          "en": "Deployment paused pending protected access to the management interface.",
          "zh": "暂停部署:待补齐管理界面访问保护。"
        }
      },
      "production_contract": {
        "checks": [
          "admin_auth",
          "data_dir_write"
        ]
      }
    },
    "release": {
      "type": "bug_fix",
      "previous_version": "0.60.7",
      "type_evidence": "rule3: patch-only bump 0.60.7 -> (0, 60, 8)"
    },
    "screenshots": [
      {
        "scenario": "watchlist",
        "file": "watchlist.png",
        "url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/candidates/changedetection/36420444100/1/changedetection-0.60.8-20260928-001/screenshots/watchlist.png",
        "caption": {
          "en": "Watchlist dashboard",
          "zh": "监控列表面板"
        }
      }
    ]
  },
  "verification_run_id": "36420444100",
  "verified_at": "2026-09-28T12:14:34Z"
}