Verification Report · changedetection 0.60.9

NOT PUBLISHED   changedetection-0.60.9-20261016-001   verified_at 2026-10-16T10:17:39Z

Immutable inputs

App version0.60.9 ← release tag 0.60.9 · source bbe02bb58de1
Image (exact tag)dgtlmoon/changedetection.io:0.60.9
Image digest (linux/amd64)sha256:6e45efa0bac5966e528013726e0ce240e40f2717ba3cc007c22a8c26e0275949
Index digestsha256:04eaae7915bad711160cb15abe160f6d3fabe98bbbd658509d4b7a654000fb2d
Pulled asdgtlmoon/changedetection.io:0.60.9@sha256:6e45efa0bac5966e528013726e0ce240e40f2717ba3cc007c22a8c26e0275949 via registry-1.docker.io
Platform contractami-0fa5967347d08d2df · us-east-1/x86_64 · source=public (plat-us-east-1-x86_64-20261016-001)
Config revisionsapp 90860a537501 · compose f1a3eb16a537
Release typebug_fix — rule3: patch-only bump 0.60.8 -> (0, 60, 9)

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.9 — 匹配(exact):kind=exec_command 取到 '0.60.9',期望 '0.60.9'
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
Duration30.8s(2026-10-16T10:17:07Z → 2026-10-16T10:17:38Z)

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)

17:35] "GET /static/js/toggle-theme.js?v=1791791578-2522 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:35] "GET /static/js/llm-summary.js?v=1791791578-9883 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:35] "GET /static/js/queue-sparkline.js?v=1791791578-12214 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:35] "GET /static/js/watch-overview.js?v=1791791578-22463 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:35] "GET /static/js/hamburger-menu.js?v=1791791578-2114 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:35] "GET /static/js/language-selector.js?v=1791791578-2158 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:35] "GET /static/js/scrollable-title.js?v=1791791578-1486 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:35] "GET /static/js/menu-pop.js?v=1791791578-1561 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:35] "GET /static/js/search-modal.js?v=1791791578-3985 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:35] "GET /static/js/flask-toast-bridge.js?v=1791791578-2371 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /sw.js HTTP/1.1" 200 -
changedetection-1  | 2026-10-16 10:17:36.057 | DEBUG    | changedetectionio.realtime.socket_server:handle_connect:393 - Socket.IO: Sent initial queue size 0 to new client
changedetection-1  | 2026-10-16 10:17:36.059 | DEBUG    | changedetectionio.realtime.socket_server:handle_connect:401 - Socket.IO: Sent initial checking_now 0 to new client
changedetection-1  | 2026-10-16 10:17:36.059 | INFO     | changedetectionio.realtime.socket_server:handle_connect:405 - Socket.IO: Client connected
changedetection-1  | 2026-10-16 10:17:36.097 | INFO     | changedetectionio.realtime.socket_server:handle_disconnect:411 - Socket.IO: Client disconnected
changedetection-1  | 2026-10-16 10:17:36.707 | 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-10-16 10:17:36.707 | 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-10-16 10:17:36.708 | 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-10-16 10:17:36.708 | 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-10-16 10:17:36.708 | 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-10-16 10:17:36.709 | 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-10-16 10:17:36.709 | 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 - - [16/Oct/2026 10:17:36] "GET / HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/styles/pure-min.css?v=1791791578-16789 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/styles/flag-icons.min.css?v=1791791578-28040 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/feather-icons.min.js?v=1791791578-76047 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/sidebar.js?v=1791791578-1330 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/styles/styles.css?v=1791791578-105100 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/socket.io.min.js?v=1791791578-61701 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/jquery-3.6.0.min.js?v=1791791578-89501 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/images/google-chrome-icon.png?v=1791791578-14480 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/modal.js?v=1791791578-9407 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/images/generic_feed-icon.svg?v=1791791578-569 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/toast.js?v=1791791578-7285 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/realtime.js?v=1791791578-15646 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/csrf.js?v=1791791578-1187 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/restock-price-graph.js?v=1791791578-19210 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/queue-sparkline.js?v=1791791578-12214 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/watch-overview.js?v=1791791578-22463 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/hamburger-menu.js?v=1791791578-2114 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/toggle-theme.js?v=1791791578-2522 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/llm-summary.js?v=1791791578-9883 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/menu-pop.js?v=1791791578-1561 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/scrollable-title.js?v=1791791578-1486 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/language-selector.js?v=1791791578-2158 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/search-modal.js?v=1791791578-3985 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /static/js/flask-toast-bridge.js?v=1791791578-2371 HTTP/1.1" 200 -
changedetection-1  | 172.18.0.1 - - [16/Oct/2026 10:17:36] "GET /sw.js HTTP/1.1" 200 -
changedetection-1  | 2026-10-16 10:17:36.930 | DEBUG    | changedetectionio.realtime.socket_server:handle_connect:393 - Socket.IO: Sent initial queue size 0 to new client
changedetection-1  | 2026-10-16 10:17:36.931 | DEBUG    | changedetectionio.realtime.socket_server:handle_connect:401 - Socket.IO: Sent initial checking_now 0 to new client
changedetection-1  | 2026-10-16 10:17:36.932 | INFO     | changedetectionio.realtime.socket_server:handle_connect:405 - Socket.IO: Client connected
changedetection-1  | 2026-10-16 10:17:38.080 | INFO     | changedetectionio.realtime.socket_server:handle_disconnect:411 - Socket.IO: Client disconnected

Raw manifest

{
  "schema_version": "1.0",
  "verification_id": "changedetection-0.60.9-20261016-001",
  "app": "changedetection",
  "app_version": "0.60.9",
  "release": {
    "source_repo": "dgtlmoon/changedetection.io",
    "source_revision": "bbe02bb58de177f4c6afd61fa418921f2ff3164a",
    "release_tag": "0.60.9",
    "upstream_tag": "0.60.9",
    "image_reference": "dgtlmoon/changedetection.io:0.60.9"
  },
  "container": {
    "image": "dgtlmoon/changedetection.io:0.60.9",
    "digest": "sha256:6e45efa0bac5966e528013726e0ce240e40f2717ba3cc007c22a8c26e0275949",
    "manifest_digest": "sha256:04eaae7915bad711160cb15abe160f6d3fabe98bbbd658509d4b7a654000fb2d",
    "platform": "linux/amd64"
  },
  "platform": {
    "platform_verification_id": "plat-us-east-1-x86_64-20261016-001",
    "ami_id": "ami-0fa5967347d08d2df",
    "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/38886137152/1/changedetection-0.60.9-20261016-001/screenshots/watchlist.png",
        "caption": {
          "en": "Watchlist dashboard",
          "zh": "监控列表面板"
        }
      }
    ],
    "report_url": "",
    "workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/38886137152"
  },
  "website": {
    "app": "changedetection",
    "app_version": "0.60.9",
    "verification_id": "changedetection-0.60.9-20261016-001",
    "verification_run_id": "38886137152",
    "platform_verification_id": "plat-us-east-1-x86_64-20261016-001",
    "ami_id": "ami-0fa5967347d08d2df",
    "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-10-16T10:17:39Z",
    "report_url": "",
    "workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunch/actions/runs/38886137152",
    "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.9",
      "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.8",
      "type_evidence": "rule3: patch-only bump 0.60.8 -> (0, 60, 9)"
    },
    "screenshots": [
      {
        "scenario": "watchlist",
        "file": "watchlist.png",
        "url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/candidates/changedetection/38886137152/1/changedetection-0.60.9-20261016-001/screenshots/watchlist.png",
        "caption": {
          "en": "Watchlist dashboard",
          "zh": "监控列表面板"
        }
      }
    ]
  },
  "verification_run_id": "38886137152",
  "verified_at": "2026-10-16T10:17:39Z"
}