From ed9f4500a2aa223ef1ed25e2d89b9a09b6a4e702 Mon Sep 17 00:00:00 2001 From: seanbetts Date: Mon, 22 Jun 2026 18:13:56 +0100 Subject: [PATCH] Capture Steam Machine launch watch baseline --- scripts/check_customs_shipments.sh | 17 +- scripts/check_komodo.sh | 112 +++++++++++- scripts/check_steamdb.sh | 77 +++++++- scripts/check_steamvr_depots.sh | 104 +++++++++++ scripts/download_with_playwright.js | 3 +- scripts/fetch_steamdb_with_playwright.js | 3 +- scripts/fetch_with_playwright.js | 3 +- scripts/parse_importinfo_shipments.py | 95 ++++++++-- status/current.md | 139 +++++++++------ status/evidence.jsonl | 10 ++ status/runs/2026-05-28.md | 90 ++++++++++ status/runs/2026-05-29.md | 89 +++++++++ status/runs/2026-05-30.md | 90 ++++++++++ status/runs/2026-05-31.md | 94 ++++++++++ status/runs/2026-06-01.md | 71 ++++++++ status/runs/2026-06-12.md | 109 ++++++++++++ status/runs/2026-06-15.md | 103 +++++++++++ status/runs/2026-06-19.md | 94 ++++++++++ status/runs/2026-06-22.md | 141 +++++++++++++++ tests/test_check_komodo.py | 101 +++++++++++ tests/test_check_steamdb.py | 81 +++++++++ tests/test_customs_shipments.py | 218 +++++++++++++++++++++++ tests/test_new_sources.py | 164 +++++++++++++++++ 23 files changed, 1926 insertions(+), 82 deletions(-) create mode 100644 status/runs/2026-05-28.md create mode 100644 status/runs/2026-05-29.md create mode 100644 status/runs/2026-05-30.md create mode 100644 status/runs/2026-05-31.md create mode 100644 status/runs/2026-06-01.md create mode 100644 status/runs/2026-06-12.md create mode 100644 status/runs/2026-06-15.md create mode 100644 status/runs/2026-06-19.md create mode 100644 status/runs/2026-06-22.md diff --git a/scripts/check_customs_shipments.sh b/scripts/check_customs_shipments.sh index 3444ad3..2ee96b8 100755 --- a/scripts/check_customs_shipments.sh +++ b/scripts/check_customs_shipments.sh @@ -33,11 +33,14 @@ looks_like_importinfo_shipment_table() { looks_like_importgenius_shipment_page() { path=$1 - for marker in "Bill of Lading" "GAME CONSOLE" "VALVE CORPORATION"; do + for marker in "Bill of Lading" "VALVE CORPORATION"; do if ! grep -qi "$marker" "$path"; then return 1 fi done + if ! grep -Eqi "GAME CONSOLE|VIRTUAL REALITY|WIRELESS PC CONTROLLER|VR CONTROLLER|HEADSET" "$path"; then + return 1 + fi return 0 } @@ -123,6 +126,18 @@ fetch_importgenius \ "importgenius-ingram-valve" \ "importgenius-ingram-valve" \ "https://www.importgenius.com/importers/ingram-micro-c-o-valve-corporation" || true +fetch_importgenius \ + "importgenius-ceva-valve" \ + "importgenius-ceva-valve" \ + "https://www.importgenius.com/importers/ceva-c-o-valve-corporation" || true +fetch_importgenius \ + "importgenius-ceva-nl-valve" \ + "importgenius-ceva-nl-valve" \ + "https://www.importgenius.com/importers/ceva-nl-c-o-valve-corporation" || true +fetch_importgenius \ + "importgenius-valve-corp" \ + "importgenius-valve-corp" \ + "https://www.importgenius.com/importers/valve-corp" || true python3 "$SCRIPT_DIR/parse_importinfo_shipments.py" \ --manifest "$MANIFEST" \ diff --git a/scripts/check_komodo.sh b/scripts/check_komodo.sh index a263017..361eaf8 100755 --- a/scripts/check_komodo.sh +++ b/scripts/check_komodo.sh @@ -33,8 +33,71 @@ load_local_env() { fi } +configure_playwright_runtime() { + NODE_BIN="${NODE_BIN:-}" + if [ -z "$NODE_BIN" ]; then + NODE_BIN="$(command -v node 2>/dev/null || true)" + fi + bundled_node="$HOME/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin/node" + if [ -z "$NODE_BIN" ] && [ -x "$bundled_node" ]; then + NODE_BIN="$bundled_node" + fi + export NODE_BIN + + if [ -z "${NODE_PATH:-}" ]; then + for node_modules in \ + "$REPO_DIR/node_modules" \ + "$HOME/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules" + do + if [ -d "$node_modules" ]; then + NODE_PATH="$node_modules" + export NODE_PATH + break + fi + done + fi +} + +cdp_endpoint_alive() { + endpoint="${PLAYWRIGHT_CDP_ENDPOINT:-}" + if [ -z "$endpoint" ]; then + return 1 + fi + curl --max-time 2 -fsS "$endpoint/json/version" >/dev/null 2>&1 +} + +KOMODO_BOOTSTRAP_ATTEMPTED=0 + +bootstrap_dedicated_browser() { + if [ "${KOMODO_PLAYWRIGHT_FALLBACK:-0}" != "1" ] || [ "${KOMODO_AUTO_BOOTSTRAP:-1}" = "0" ]; then + return 0 + fi + if [ "$KOMODO_BOOTSTRAP_ATTEMPTED" = "1" ]; then + return 0 + fi + + KOMODO_BOOTSTRAP_ATTEMPTED=1 + bootstrap_cmd="${KOMODO_BOOTSTRAP_CMD:-$SCRIPT_DIR/bootstrap_komodo.sh}" + if [ ! -x "$bootstrap_cmd" ]; then + printf '%s\n' "Komodo bootstrap command not executable: $bootstrap_cmd" >> "$ERROR_FILE" + return 0 + fi + + if "$bootstrap_cmd" >/dev/null 2>>"$ERROR_FILE"; then + load_local_env + fi +} + maybe_set_cdp_endpoint() { - if [ -n "${PLAYWRIGHT_CDP_ENDPOINT:-}" ] || [ -z "${PLAYWRIGHT_PROFILE_DIR:-}" ]; then + if [ -n "${PLAYWRIGHT_CDP_ENDPOINT:-}" ]; then + if cdp_endpoint_alive; then + return 0 + fi + unset PLAYWRIGHT_CDP_ENDPOINT + fi + + if [ -z "${PLAYWRIGHT_PROFILE_DIR:-}" ]; then + bootstrap_dedicated_browser return 0 fi @@ -50,7 +113,13 @@ maybe_set_cdp_endpoint() { if [ -n "$port" ]; then PLAYWRIGHT_CDP_ENDPOINT="http://127.0.0.1:$port" export PLAYWRIGHT_CDP_ENDPOINT + if cdp_endpoint_alive; then + return 0 + fi + unset PLAYWRIGHT_CDP_ENDPOINT fi + + bootstrap_dedicated_browser } load_local_env @@ -71,14 +140,21 @@ fetch_json() { rm -f "$tmp" - if [ "$allow_fallback" = "1" ] && [ "${KOMODO_PLAYWRIGHT_FALLBACK:-0}" = "1" ] && command -v node >/dev/null 2>&1; then + if [ "$allow_fallback" = "1" ] && [ "${KOMODO_PLAYWRIGHT_FALLBACK:-0}" = "1" ]; then + configure_playwright_runtime + if [ -z "${NODE_BIN:-}" ]; then + printf '%s\n' "Playwright fallback unavailable: node executable not found" >> "$ERROR_FILE" + rm -f "$tmp" + printf '%s\n' "failed to fetch JSON from $url" >> "$ERROR_FILE" + return 1 + fi maybe_set_cdp_endpoint PLAYWRIGHT_CORE_PATH="${PLAYWRIGHT_CORE_PATH:-}" if command -v playwright-cli >/dev/null 2>&1; then PLAYWRIGHT_CLI_BIN="$(command -v playwright-cli)" PLAYWRIGHT_CORE_PATH="$(CDPATH= cd -- "$(dirname "$PLAYWRIGHT_CLI_BIN")/../lib/node_modules/@playwright/cli/node_modules/playwright-core" 2>/dev/null && pwd || true)" fi - PLAYWRIGHT_CORE_PATH="$PLAYWRIGHT_CORE_PATH" node "$SCRIPT_DIR/fetch_with_playwright.js" "$url" "$tmp" + PLAYWRIGHT_CORE_PATH="$PLAYWRIGHT_CORE_PATH" "$NODE_BIN" "$SCRIPT_DIR/fetch_with_playwright.js" "$url" "$tmp" if jq empty "$tmp" >/dev/null 2>&1; then mv "$tmp" "$OUT_DIR/$name.json" return 0 @@ -124,8 +200,14 @@ do fi done -for id in $(jq -r '.[].id' "$OUT_DIR/sections-controller-search.json" 2>/dev/null || true); do - fetch_json "media-parent-section-$id" "https://komodostation.com/wp-json/wp/v2/media?parent=$id&per_page=100" || true +for section_report in \ + sections-controller-search \ + sections-machine-search \ + sections-frame-search +do + for id in $(jq -r '.[].id' "$OUT_DIR/$section_report.json" 2>/dev/null || true); do + fetch_json "media-parent-section-$id" "https://komodostation.com/wp-json/wp/v2/media?parent=$id&per_page=100" || true + done done { @@ -153,8 +235,24 @@ jq -r ' | @tsv ' "$OUT_DIR/media-controller-search.json" > "$REPORT_DIR/komodo-controller-media-interesting.tsv" -: > "$REPORT_DIR/komodo-machine-media.tsv" -: > "$REPORT_DIR/komodo-frame-media.tsv" +write_section_media_report() { + sections_file="$1" + output_file="$2" + : > "$output_file" + for id in $(jq -r '.[].id' "$sections_file" 2>/dev/null || true); do + media_file="$OUT_DIR/media-parent-section-$id.json" + if [ -f "$media_file" ]; then + jq -r ' + .[]? + | [.id,.date,.modified,.slug,.mime_type,.post,.source_url] + | @tsv + ' "$media_file" >> "$output_file" + fi + done +} + +write_section_media_report "$OUT_DIR/sections-machine-search.json" "$REPORT_DIR/komodo-machine-media.tsv" +write_section_media_report "$OUT_DIR/sections-frame-search.json" "$REPORT_DIR/komodo-frame-media.tsv" jq -r ' .[]? diff --git a/scripts/check_steamdb.sh b/scripts/check_steamdb.sh index a6a4028..9dc7ef7 100755 --- a/scripts/check_steamdb.sh +++ b/scripts/check_steamdb.sh @@ -26,8 +26,71 @@ load_local_env() { fi } +configure_playwright_runtime() { + NODE_BIN="${NODE_BIN:-}" + if [ -z "$NODE_BIN" ]; then + NODE_BIN="$(command -v node 2>/dev/null || true)" + fi + bundled_node="$HOME/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin/node" + if [ -z "$NODE_BIN" ] && [ -x "$bundled_node" ]; then + NODE_BIN="$bundled_node" + fi + export NODE_BIN + + if [ -z "${NODE_PATH:-}" ]; then + for node_modules in \ + "$REPO_DIR/node_modules" \ + "$HOME/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules" + do + if [ -d "$node_modules" ]; then + NODE_PATH="$node_modules" + export NODE_PATH + break + fi + done + fi +} + +cdp_endpoint_alive() { + endpoint="${STEAMDB_CDP_ENDPOINT:-}" + if [ -z "$endpoint" ]; then + return 1 + fi + curl --max-time 2 -fsS "$endpoint/json/version" >/dev/null 2>&1 +} + +STEAMDB_BOOTSTRAP_ATTEMPTED=0 + +bootstrap_dedicated_browser() { + if [ "${STEAMDB_PLAYWRIGHT_FALLBACK:-0}" != "1" ] || [ "${STEAMDB_AUTO_BOOTSTRAP:-1}" = "0" ]; then + return 0 + fi + if [ "$STEAMDB_BOOTSTRAP_ATTEMPTED" = "1" ]; then + return 0 + fi + + STEAMDB_BOOTSTRAP_ATTEMPTED=1 + bootstrap_cmd="${STEAMDB_BOOTSTRAP_CMD:-$SCRIPT_DIR/bootstrap_steamdb.sh}" + if [ ! -x "$bootstrap_cmd" ]; then + printf '%s\n' "SteamDB bootstrap command not executable: $bootstrap_cmd" >> "$ERROR_FILE" + return 0 + fi + + if "$bootstrap_cmd" >/dev/null 2>>"$ERROR_FILE"; then + load_local_env + fi +} + maybe_set_cdp_endpoint() { - if [ -n "${STEAMDB_CDP_ENDPOINT:-}" ] || [ -z "${STEAMDB_PROFILE_DIR:-}" ]; then + if [ -n "${STEAMDB_CDP_ENDPOINT:-}" ]; then + if cdp_endpoint_alive; then + return 0 + fi + unset STEAMDB_CDP_ENDPOINT + fi + + if [ -z "${STEAMDB_PROFILE_DIR:-}" ]; then + bootstrap_dedicated_browser return 0 fi @@ -43,7 +106,13 @@ maybe_set_cdp_endpoint() { if [ -n "$port" ]; then STEAMDB_CDP_ENDPOINT="http://127.0.0.1:$port" export STEAMDB_CDP_ENDPOINT + if cdp_endpoint_alive; then + return 0 + fi + unset STEAMDB_CDP_ENDPOINT fi + + bootstrap_dedicated_browser } is_challenge_page() { @@ -74,9 +143,11 @@ fetch_html() { fi fi - if [ "${STEAMDB_PLAYWRIGHT_FALLBACK:-0}" = "1" ] && command -v node >/dev/null 2>&1; then + if [ "${STEAMDB_PLAYWRIGHT_FALLBACK:-0}" = "1" ]; then + configure_playwright_runtime maybe_set_cdp_endpoint - if node "$SCRIPT_DIR/fetch_steamdb_with_playwright.js" "$url" "$tmp" >/dev/null 2>&1 \ + if [ -n "${NODE_BIN:-}" ] \ + && "$NODE_BIN" "$SCRIPT_DIR/fetch_steamdb_with_playwright.js" "$url" "$tmp" >/dev/null 2>&1 \ && [ -s "$tmp" ] \ && ! is_challenge_page "$tmp"; then mv "$tmp" "$out" diff --git a/scripts/check_steamvr_depots.sh b/scripts/check_steamvr_depots.sh index 7143247..b8b0078 100755 --- a/scripts/check_steamvr_depots.sh +++ b/scripts/check_steamvr_depots.sh @@ -9,6 +9,8 @@ fi RUN_DIR="$1" OUT_DIR="$RUN_DIR/api/steamvr-depots" REPORT_DIR="$RUN_DIR/reports" +SCRIPT_DIR="$(CDPATH= cd -- "$(dirname "$0")" && pwd)" +REPO_DIR="$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)" mkdir -p "$OUT_DIR" "$REPORT_DIR" ERROR_FILE="$REPORT_DIR/steamvr-depots-errors.txt" @@ -28,6 +30,101 @@ is_challenge_page() { rg -qi "Checking your browser|Just a moment|Cloudflare|cf-chl|cf-browser-verification" "$path" } +load_steamdb_env() { + env_file="${STEAMDB_ENV_FILE:-$REPO_DIR/.local/steamdb-env.sh}" + if [ -f "$env_file" ]; then + # shellcheck disable=SC1090 + . "$env_file" + fi +} + +steamdb_cdp_endpoint_alive() { + endpoint="${STEAMDB_CDP_ENDPOINT:-}" + if [ -z "$endpoint" ]; then + return 1 + fi + curl --max-time 2 -fsS "$endpoint/json/version" >/dev/null 2>&1 +} + +STEAMDB_BOOTSTRAP_ATTEMPTED=0 + +bootstrap_steamdb_browser() { + if [ "${STEAMDB_PLAYWRIGHT_FALLBACK:-0}" != "1" ] || [ "${STEAMDB_AUTO_BOOTSTRAP:-1}" = "0" ]; then + return 0 + fi + if [ "$STEAMDB_BOOTSTRAP_ATTEMPTED" = "1" ]; then + return 0 + fi + + STEAMDB_BOOTSTRAP_ATTEMPTED=1 + bootstrap_cmd="${STEAMDB_BOOTSTRAP_CMD:-$SCRIPT_DIR/bootstrap_steamdb.sh}" + if [ ! -x "$bootstrap_cmd" ]; then + printf '%s\n' "SteamDB bootstrap command not executable: $bootstrap_cmd" >> "$ERROR_FILE" + return 0 + fi + + if "$bootstrap_cmd" >/dev/null 2>>"$ERROR_FILE"; then + load_steamdb_env + fi +} + +ensure_steamdb_browser() { + if [ "${STEAMDB_PLAYWRIGHT_FALLBACK:-0}" != "1" ]; then + return 0 + fi + + if [ -n "${STEAMDB_CDP_ENDPOINT:-}" ]; then + if steamdb_cdp_endpoint_alive; then + return 0 + fi + unset STEAMDB_CDP_ENDPOINT + fi + + if [ -n "${STEAMDB_PROFILE_DIR:-}" ]; then + port="$(ps aux | awk -v profile="$STEAMDB_PROFILE_DIR" ' + index($0, profile) && match($0, /--remote-debugging-port=([0-9]+)/) { + value = substr($0, RSTART, RLENGTH) + sub(/^--remote-debugging-port=/, "", value) + print value + exit + } + ' 2>/dev/null || true)" + + if [ -n "$port" ]; then + STEAMDB_CDP_ENDPOINT="http://127.0.0.1:$port" + export STEAMDB_CDP_ENDPOINT + if steamdb_cdp_endpoint_alive; then + return 0 + fi + unset STEAMDB_CDP_ENDPOINT + fi + fi + + bootstrap_steamdb_browser +} + +fetch_html_with_steamdb_playwright() { + url="$1" + output="$2" + tmp="$output.tmp.playwright" + + if [ "${STEAMDB_PLAYWRIGHT_FALLBACK:-0}" != "1" ] || ! command -v node >/dev/null 2>&1; then + return 1 + fi + + ensure_steamdb_browser + + if node "$SCRIPT_DIR/fetch_steamdb_with_playwright.js" "$url" "$tmp" >/dev/null 2>&1 \ + && [ -s "$tmp" ] \ + && ! is_challenge_page "$tmp"; then + mv "$tmp" "$output" + return 0 + fi + + rm -f "$tmp" + return 1 +} + fetch_html() { name="$1" url="$2" @@ -40,6 +137,11 @@ fetch_html() { return 0 fi + rm -f "$tmp" + if fetch_html_with_steamdb_playwright "$url" "$out"; then + return 0 + fi + rm -f "$tmp" "$out" printf '%s\n' "failed to fetch $url: blocked or challenge page" >> "$ERROR_FILE" return 1 @@ -57,6 +159,8 @@ fetch_json() { fi } +load_steamdb_env + fetch_html "steamdb-depots.html" "https://steamdb.info/app/250820/depots/" || true fetch_json "steamvr-news.json" "https://api.steampowered.com/ISteamNews/GetNewsForApp/v2/?appid=250820&count=40&maxlength=12000&format=json" || true diff --git a/scripts/download_with_playwright.js b/scripts/download_with_playwright.js index 850a112..5247e56 100644 --- a/scripts/download_with_playwright.js +++ b/scripts/download_with_playwright.js @@ -6,13 +6,14 @@ function loadPlaywright() { const candidates = []; if (process.env.PLAYWRIGHT_CORE_PATH) candidates.push(process.env.PLAYWRIGHT_CORE_PATH); candidates.push("playwright-core"); + candidates.push("playwright"); for (const candidate of candidates) { try { return require(candidate); } catch (err) { } } - throw new Error("Unable to load playwright-core. Set PLAYWRIGHT_CORE_PATH or install playwright-core."); + throw new Error("Unable to load Playwright. Set PLAYWRIGHT_CORE_PATH, set NODE_PATH to a node_modules directory, or install playwright/playwright-core."); } function launchOptions(headless) { diff --git a/scripts/fetch_steamdb_with_playwright.js b/scripts/fetch_steamdb_with_playwright.js index 61c8c99..590dd6a 100755 --- a/scripts/fetch_steamdb_with_playwright.js +++ b/scripts/fetch_steamdb_with_playwright.js @@ -6,6 +6,7 @@ function loadPlaywright() { const candidates = []; if (process.env.PLAYWRIGHT_CORE_PATH) candidates.push(process.env.PLAYWRIGHT_CORE_PATH); candidates.push("playwright-core"); + candidates.push("playwright"); for (const candidate of candidates) { try { return require(candidate); @@ -13,7 +14,7 @@ function loadPlaywright() { } } throw new Error( - "Unable to load playwright-core. Set PLAYWRIGHT_CORE_PATH or install playwright-core." + "Unable to load Playwright. Set PLAYWRIGHT_CORE_PATH, set NODE_PATH to a node_modules directory, or install playwright/playwright-core." ); } diff --git a/scripts/fetch_with_playwright.js b/scripts/fetch_with_playwright.js index 760d9f3..5d132b4 100644 --- a/scripts/fetch_with_playwright.js +++ b/scripts/fetch_with_playwright.js @@ -6,6 +6,7 @@ function loadPlaywright() { const candidates = []; if (process.env.PLAYWRIGHT_CORE_PATH) candidates.push(process.env.PLAYWRIGHT_CORE_PATH); candidates.push("playwright-core"); + candidates.push("playwright"); for (const candidate of candidates) { try { return require(candidate); @@ -13,7 +14,7 @@ function loadPlaywright() { } } throw new Error( - "Unable to load playwright-core. Set PLAYWRIGHT_CORE_PATH or install playwright-core." + "Unable to load Playwright. Set PLAYWRIGHT_CORE_PATH, set NODE_PATH to a node_modules directory, or install playwright/playwright-core." ); } diff --git a/scripts/parse_importinfo_shipments.py b/scripts/parse_importinfo_shipments.py index 3ad8c31..aac214e 100755 --- a/scripts/parse_importinfo_shipments.py +++ b/scripts/parse_importinfo_shipments.py @@ -56,6 +56,9 @@ OUTPUT_FIELDS = [ PARTY_TERMS = ("VALVE", "CEVA", "INGRAM MICRO", "TECH-FRONT", "CHENG UEI") PRODUCT_TERMS = ( "GAME CONSOLE", + "VIRTUAL REALITY", + "VIRTUAL REALITY DEVICES", + "WIRELESS PC CONTROLLER", "VR CONTROLLER", "CONTROLLER", "STEAM", @@ -70,6 +73,9 @@ SOURCE_URLS = { "tech-front-game-console": "https://www.importinfo.com/search?s=TECH-FRONT%20GAME%20CONSOLE%20VALVE", "valve-corporation-game-console": "https://www.importinfo.com/search?s=VALVE%20CORPORATION%20GAME%20CONSOLE", "importgenius-ingram-valve": "https://www.importgenius.com/importers/ingram-micro-c-o-valve-corporation", + "importgenius-ceva-valve": "https://www.importgenius.com/importers/ceva-c-o-valve-corporation", + "importgenius-ceva-nl-valve": "https://www.importgenius.com/importers/ceva-nl-c-o-valve-corporation", + "importgenius-valve-corp": "https://www.importgenius.com/importers/valve-corp", } @@ -135,11 +141,11 @@ class TextParser(HTMLParser): self.parts = [] def handle_starttag(self, tag, attrs): - if tag in ("br", "p", "tr", "li", "h1", "h2", "h3", "section"): + if tag in ("br", "p", "tr", "li", "h1", "h2", "h3", "section", "div"): self.parts.append("\n") def handle_endtag(self, tag): - if tag in ("p", "tr", "li", "h1", "h2", "h3", "section"): + if tag in ("p", "tr", "li", "h1", "h2", "h3", "section", "div"): self.parts.append("\n") def handle_data(self, data): @@ -148,6 +154,10 @@ class TextParser(HTMLParser): def text(self): return html.unescape(" ".join("".join(self.parts).split())) + def lines(self): + raw_text = html.unescape("".join(self.parts)) + return [" ".join(line.split()) for line in raw_text.splitlines() if line.strip()] + def normalize_header(value): return FIELD_MAP.get(value.strip().lower(), "") @@ -177,34 +187,83 @@ def parse_rows(spec): def parse_importgenius_rows(spec): parser = TextParser() parser.feed(spec.path.read_text(encoding="utf-8", errors="ignore")) - text = parser.text() + text_lines = parser.lines() or [parser.text()] + importer_pattern = ( + r"(?:INGRAM\s+MICRO|CEVA(?:\s+NL)?)\s+C/O\s+VALVE\s+CORPORATION" + r"|VALVE\s+CORPORATION" + ) + supplier_pattern = ( + r"TECH-?FRONT\s+\(CHONGQING\)\s+COMPUTER\s+CO" + r"|CHENG\s+UEI\s+PRECISION\s+IND\.\s+CO\s+LTD" + ) pattern = re.compile( r"(?:^|\s)(?P\d+)\s+" r"(?P[A-Z0-9]+)\s+" - r"(?PGAME\s+CONSOLE\s*\.?)\s+" - r"(?P(?:INGRAM\s+MICRO|CEVA)\s+C/O\s+VALVE\s+CORPORATION)\s+" - r"(?PTECH-?FRONT\s+\(CHONGQING\)\s+COMPUTER\s+CO)\s+" + r"(?P[A-Z0-9][A-Z0-9 ./&()'-]+?)\s+" + r"(?P" + importer_pattern + r")\s+" + r"(?P" + supplier_pattern + r")\s+" r"(?P\d{4}-\d{2}-\d{2})\s+" r"(?P[A-Za-z ]+?)\s+" r"(?P[\d,]+\s+Kgs)\s+" r"(?P\d+\s+PKG)", re.IGNORECASE, ) - rows = [] - for match in pattern.finditer(text): + importer_re = re.compile(importer_pattern, re.IGNORECASE) + supplier_re = re.compile(supplier_pattern, re.IGNORECASE) + rank_re = re.compile(r"\d+") + bol_re = re.compile(r"[A-Z0-9]+") + date_re = re.compile(r"\d{4}-\d{2}-\d{2}") + country_re = re.compile(r"[A-Za-z ]+") + weight_re = re.compile(r"[\d,]+\s+Kgs", re.IGNORECASE) + quantity_re = re.compile(r"\d+\s+PKG", re.IGNORECASE) + + def build_record(match): record = {field: "" for field in OUTPUT_FIELDS} record["source"] = "importgenius" record["query"] = spec.query - record["house_bol"] = match.group("bol").upper() - record["arrival_date"] = match.group("arrival") - record["foreign_port"] = match.group("country").strip() - record["quantity"] = " ".join(match.group("quantity").split()) - record["weight"] = " ".join(match.group("weight").split()) - record["shipper"] = normalize_company(match.group("supplier")) - record["consignee"] = normalize_company(match.group("importer")) + record["house_bol"] = match["bol"].upper() + record["arrival_date"] = match["arrival"] + record["foreign_port"] = match["country"].strip() + record["quantity"] = " ".join(match["quantity"].split()) + record["weight"] = " ".join(match["weight"].split()) + record["shipper"] = normalize_company(match["supplier"]) + record["consignee"] = normalize_company(match["importer"]) record["notify_party"] = record["consignee"] - record["commodity"] = " ".join(match.group("product").upper().split()) + record["commodity"] = " ".join(match["product"].upper().split()).strip(" .") record["source_url"] = spec.source_url + return record + + rows = [] + for line in text_lines: + for match in pattern.finditer(line): + record = build_record(match.groupdict()) + if is_relevant(record): + rows.append(record) + for index in range(0, max(0, len(text_lines) - 8)): + values = text_lines[index : index + 9] + if not ( + rank_re.fullmatch(values[0]) + and bol_re.fullmatch(values[1]) + and importer_re.fullmatch(values[3]) + and supplier_re.fullmatch(values[4]) + and date_re.fullmatch(values[5]) + and country_re.fullmatch(values[6]) + and weight_re.fullmatch(values[7]) + and quantity_re.fullmatch(values[8]) + ): + continue + record = build_record( + { + "bol": values[1], + "product": values[2], + "importer": values[3], + "supplier": values[4], + "arrival": values[5], + "country": values[6], + "weight": values[7], + "quantity": values[8], + } + ) if is_relevant(record): rows.append(record) return rows @@ -350,7 +409,9 @@ def write_report(rows, output): "## Limitations", "", "Customs data is corroborating evidence, not a standalone confirmation. " - "GAME CONSOLE descriptions are medium confidence without other identifiers.", + "Product descriptions such as GAME CONSOLE, VIRTUAL REALITY DEVICES, " + "and WIRELESS PC CONTROLLER do not prove the final Valve retail SKU without " + "other identifiers.", "", ] ) diff --git a/status/current.md b/status/current.md index 30de5b1..9395c5c 100644 --- a/status/current.md +++ b/status/current.md @@ -1,59 +1,76 @@ # Steam Hardware Watch Status -Last updated: `2026-06-09` +Last updated: `2026-06-22` ## Best Current Answer -- `Price`: Steam Controller remains confirmed by official Valve store APIs at `$99.00` in the US. Steam Machine and Steam Frame still have no confirmed public price. -- `Release date`: Steam Controller remains confirmed with release date `May 4, 2026` and package `1558609`. Steam Machine and Steam Frame still only expose broad `Coming soon` / `2026` timing. -- `Same-time launch`: same-day availability for the full trio is ruled out. Steam Controller is public and purchasable; Machine and Frame still have no public package, package group, price, or exact availability. Steam Machine reservation package changenumbers have now moved three times: a multi-package cluster on `2026-05-12`, a follow-up bump across all four watched Machine packages on `2026-05-14`, and another all-four package bump on `2026-06-09`. The `2026-06-09` pass found no Valve public API readiness, and the two watched Steam Frame package IDs did not move. This makes Steam Machine the strongest current near-term signal, but it remains private backend movement rather than preorder confirmation. ImportGenius still shows relevant `GAME CONSOLE` shipments to `INGRAM MICRO C/O VALVE CORPORATION` through `2026-05-18`; this remains logistics corroboration, not public launch confirmation. +- `Price`: Steam Controller remains confirmed by official Valve store APIs at `$99.00` in the US. Steam Machine is now confirmed public in the Valve store API, starting at `$1,049.00` in the US and `£879.00` in the UK. Steam Frame still has no confirmed public price. +- `Release date`: Steam Controller remains confirmed with release date `May 4, 2026` and package `1558609`. Steam Machine is now confirmed with release date `Jun 30, 2026` in the US API / `30 Jun, 2026` in the UK API. Steam Frame still exposes only `Coming soon`. +- `Same-time launch`: same-day availability for the full trio is ruled out. Steam Controller is public and purchasable, Steam Machine is now public with packages/package group/prices/date, and Steam Frame still has no public package, package group, price, or exact availability. The Steam Machine watch correctly caught the launch sequence: multi-package backend movement, same-day Komodo page/media staging, then public Valve API exposure. ## Source Snapshot ### Komodo -- Komodo was reachable in the `2026-06-09` pass. -- Product modified timestamps remain unchanged from `2026-05-28`: - - Controller: `2026-05-27T16:52:25` +- Komodo was unblocked on `2026-06-22` after fixing the trusted-browser Playwright runtime path and rerunning the Komodo section through the dedicated Chrome session. +- Product modified timestamps: + - Controller: `2026-06-10T17:25:21` - Machine: `2026-05-27T16:53:06` - Frame: `2026-05-27T16:53:46` - This was not timestamp-only: all three product JSON records gained WooCommerce product category `961`, exposed as `product_cat-hardware` in `class_list`. Controller now has product categories `[961, 93]`; Machine and Frame now have `[961]`. -- No new Komodo section, media URL, asset exposure, or product timestamp movement appeared on `2026-06-09`. Treat the category addition as a real Komodo catalog-organization signal, not preorder confirmation. -- Visual asset retrieval found `141` candidate assets, retrieved `137`, and left `4` blocked known Komodo URLs for manual retry. No new asset URL was exposed. +- The Controller timestamp moved on `2026-06-10`, but selected content/class/category/product fields matched the `2026-06-09` snapshot, so treat it as timestamp-only unless later corroborated. +- Product modified timestamps still did not move, but the section layer did: eleven new Steam Machine sections appeared with `2026-06-22` dates/modifications: + - `steam-machine-01-video` + - `steam-machine-03-video` + - `steam-machine-04-core-features` + - `steam-machine-05-video` + - `steam-machine-06-led-strip` + - `steam-machine-07-support` + - `steam-machine-08-pc` + - `steam-machine-09-pc-video` + - `steam-machine-10-plays-well` + - `steam-machine-11-tech-image` + - `steam-machine-12-tech-spec` +- Komodo section media now includes `26` new `2026-06-22` Steam Machine assets: `7` WEBM videos, multiple PNG/WEBP video-poster assets, and English/Japanese AVIF tech/line-art images. No equivalent new Steam Frame sections appeared. +- Visual asset retrieval found `425` candidate assets, retrieved `400`, and left `25` blocked known Komodo URLs for manual retry. Most blocked rows are known Controller WEBP variants; the new `machine_video5.webp` variants should be retried manually if visual completeness matters. +- Komodo has not yet flipped its product layer: `steam-machine_jpy` still has `product_tag-wishlist-only`, `product_tag-hide-product-top`, and `outofstock`. Treat Komodo as lagging behind Valve's public store API for the actual launch state. ### SteamKit / PICS - SteamKit/PICS is the primary direct Steam metadata source for watched app and package movement. -- Current changenumbers from the `2026-06-09` run: +- Current changenumbers from the `2026-06-22` run: - Controller app `4165870`: `35731145` - Frame app `4165890`: `35675573` - - Machine app `4165910`: `35675573` - - Controller package `1558609`: `35893035` - - Machine package `1629446`: `36426730` - - Machine package `1629447`: `36426723` - - Machine package `1629458`: `36426735` - - Machine package `1629460`: `36426739` + - Machine app `4165910`: `36756875` + - Controller package `1558609`: `36708367` + - Machine package `1629446`: `36756963` + - Machine package `1629447`: `36756942` + - Machine package `1629458`: `36756957` + - Machine package `1629460`: `36756953` - Frame packages `1629484`, `1629486`: `35672606` -- All four watched Steam Machine package changenumbers moved again on `2026-06-09`; watched Steam Frame package changenumbers did not move. -- The latest Controller package signal remains the `2026-05-17` private PICS change on package `1558609`, where `ignorereservationifstockavailable=1` was removed from the package `extended` fields. Public Valve `appdetails` / `packagedetails` still did not change. -- The latest material Machine signal is the `2026-06-09` follow-up bump across all four watched Steam Machine package IDs, especially because the two watched Steam Frame package IDs did not move. -- Manual package-history context remains important: Steam Controller package `1558609` reportedly had a clustered change pattern plus one later follow-up change roughly two days before Valve's public purchase-timing update appeared. The Machine set now has the initial multi-package cluster and two later all-package follow-up bumps. Treat this as a stronger imminent-preorder heuristic, not confirmation. -- Machine and Frame apps/packages currently require private PICS metadata tokens, but changenumbers are visible and suitable for movement monitoring. -- Raw snapshot: `/Users/sean/Coding/steam-hardware-watch/runs/2026-06-09/api/steamkit/pics-product-info.json` -- Human-readable detail: `/Users/sean/Coding/steam-hardware-watch/runs/2026-06-09/reports/steamkit-pics-detail.md` +- All four watched Steam Machine packages are now `available` in SteamKit/PICS and contain app `4165910`; watched Steam Frame package changenumbers did not move. +- Steam Controller package `1558609` also moved on `2026-06-22`, from `35893035` to `36708367`, with a new PICS SHA. Public Valve `appdetails` / `packagedetails` still did not change. +- The launch conversion happened in the expected PICS shape: Machine app `4165910` moved, all four watched Machine packages moved again, changed from private-token/existence-only to available package details, and now report `apps_count=1`. +- Manual package-history context remains important: Steam Controller package `1558609` had a clustered change pattern plus a later follow-up before public purchase timing appeared. The Machine set followed a similar pattern, and the final same-day package movements preceded public package availability. +- Frame apps/packages currently still require private PICS metadata tokens or private package rows, but changenumbers remain visible and suitable for movement monitoring. +- Raw snapshot: `/Users/sean/Coding/steam-hardware-watch/runs/2026-06-22/api/steamkit/pics-product-info.json` +- Human-readable detail: `/Users/sean/Coding/steam-hardware-watch/runs/2026-06-22/reports/steamkit-pics-detail.md` ### SteamDB -- SteamDB package pages were challenge-blocked on `2026-06-09`, so no fresh human-readable SteamDB corroboration was collected for the new Machine package changenumbers. +- SteamDB package pages were still partly challenge-prone on `2026-06-22`, but the watcher collected usable package rows for the watched reservation IDs. - SteamDB package-page baseline: - - Controller package `1558609`: last record update `15 May 2026 - 16:07:19 UTC`, changenumber `35893035`, details available. - - Machine packages `1629446`, `1629447`, `1629458`, `1629460`: last record updates clustered on `13 May 2026`, private/existence-only, possible app `4165910:Steam Machine`. + - Controller package `1558609`: last record update `19 June 2026 - 18:38:41 UTC`, changenumber `36708367`, details available. + - Machine package `1629446`: last record update `22 June 2026 - 16:58:26 UTC`, changenumber `36756963`, details available, app `4165910:Steam Machine`. + - Machine package `1629447`: last record update `22 June 2026 - 16:57:36 UTC`, changenumber `36756942`, details available, app `4165910:Steam Machine`. + - Machine package `1629458`: last record update `22 June 2026 - 16:58:14 UTC`, changenumber `36756957`, details available, app `4165910:Steam Machine`. + - Machine package `1629460`: last record update `22 June 2026 - 16:58:02 UTC`, changenumber `36756953`, details available, app `4165910:Steam Machine`. - Frame packages `1629484`, `1629486`: last record update `5 May 2026 - 18:50:54 UTC`, private/existence-only, possible app `4165890:Steam Frame`. - SteamDB remains a useful human-readable corroboration layer when reachable, while SteamKit/PICS remains the primary direct metadata source. ### SteamTracking / GameTracking -- SteamTracking now fast-forwards and records source metadata before scanning. The `2026-06-09` pass used commit `b850a6699d19fc553a8a07be29feb4db88d398e8` (`2026-06-09T01:56:20Z`). +- SteamTracking now fast-forwards and records source metadata before scanning. The `2026-06-22` pass used commit `d8c88a286f382752aa90b7dd5a9aa057db78a077` (`2026-06-19T23:33:59Z`). - The corrected hardware signal reporting now creates dedicated Frame and Machine reports before the broad hardware report, so high-signal product-specific client strings are not buried in generic hardware noise. - Dedicated Steam Machine client signal report now surfaces setup-tour and compatibility lines: - `GuidedTour_SteamMachine_Welcome_Title` @@ -64,6 +81,11 @@ Last updated: `2026-06-09` - `WelcomeToSteamFrame` - `skip_steamframe_pairing_dialog` - `controller_steamframe_pair` + - `GuidedTour_FrameAlreadyPairedWith` + - `GuidedTour_FrameNowPairedWith` + - `GuidedTour_Frame_SetupComplete` + - `GuidedTour_SearchingForWirelessAdapter` + - `GuidedTour_WirelessAdapterDetected` - `Settings_RemotePlay_WifiAPSection` - `SteamFrameWirelessAdapterDialog_*` - `k_EAppTestType_SteamFrameCompatibilityReview` @@ -78,45 +100,60 @@ Last updated: `2026-06-09` - Known reservation package-code baseline remains: Machine package IDs `1629446`, `1629447`, `1629458`, `1629460` and Frame package IDs `1629484`, `1629486` first appeared in SteamTracking commit `334bd31a28a0` at `2026-04-28T23:46:34Z`. - New high-signal client manifest watch target: `steam_client_beta_linuxarm64` first appeared in the local SteamTracking baseline at commit `28f5287` (`2026-05-22T04:56:58Z`) with version `1779139477`. - Track `steam_client_beta_linuxarm64` and `steam_client_publicbeta_linuxarm64` every run, especially `bins_hardware_linuxarm64`, `bins_linuxarm64`, `steam_linuxarm64`, `runtime_steamrt_linuxarm64`, and `bins_steamrt_linuxarm64`. -- Current ARM64 client manifest baseline in the `2026-06-09` report: - - `steam_client_beta_linuxarm64`: version `1780371519`; `bins_hardware_linuxarm64.zip.da8814f3cc3788fd3789ce233dd86f107b2b244a`; size `10039405`. - - `steam_client_publicbeta_linuxarm64`: version `1780965181`; `bins_hardware_linuxarm64.zip.da8814f3cc3788fd3789ce233dd86f107b2b244a`; size `10039405`. -- ARM64 public-beta client manifest movement appeared versus the `2026-06-05` baseline, including `bins_linuxarm64` and `steam_linuxarm64`. The hardware-specific `bins_hardware_linuxarm64` block did not change. -- The updated SteamTracking checkout did not add a new Machine/Frame reservation package, price, exact availability, or product-publication signal. Content-normalized comparison of the dedicated Frame/Machine reports showed no substantive added or removed focused product strings; the apparent report deltas were line-number churn. +- Current ARM64 client manifest baseline in the `2026-06-22` report: + - `steam_client_beta_linuxarm64`: version `1781223733`; `bins_hardware_linuxarm64.zip.da8814f3cc3788fd3789ce233dd86f107b2b244a`; size `10039405`. + - `steam_client_publicbeta_linuxarm64`: version `1781911235`; `bins_hardware_linuxarm64.zip.da8814f3cc3788fd3789ce233dd86f107b2b244a`; size `10039405`. +- ARM64 public beta client manifest movement appeared versus the `2026-06-19` baseline, including `bins_linuxarm64`, `steam_linuxarm64`, `bins_steamrt_linuxarm64`, `bins_misc_linuxarm64`, and `webkit_linuxarm64`. The hardware-specific `bins_hardware_linuxarm64` block did not change. +- The updated SteamTracking checkout did not add a new Machine/Frame reservation package, price, exact availability, or product-publication signal. Content-normalized comparison showed no substantive Machine-specific additions, but did show new/renamed Steam Frame setup-tour and wireless-adapter localization strings. ### SteamVR Depots - SteamVR news metadata was saved. The latest public SteamVR news item is `Introducing SteamVR 2.16` from `2026-06-02T18:59:37Z`. -- SteamDB's SteamVR depot page remained blocked by challenge pages on `2026-06-09`, so no fresh depot manifest/build comparison was collected. +- SteamDB's SteamVR depot page remained blocked by challenge pages on `2026-06-22`, so no fresh depot manifest/build comparison was collected. - No local SteamVR depot snapshot was available for deeper content scanning. ### SteamOS Package Mirror - Valve's public SteamOS package mirror was reachable. - Notable mirror hits still include `fremont-hw-support 20260506.1-1` in `holo-3.8` and `holo-main`. +- `jupiter-3.8` Neptune firmware packages moved from `jupiter.20260610.1-1` to `jupiter.20260610.1-1.1`; `jupiter-main` remains at `jupiter.20260610.1-1`. Treat this as SteamOS firmware/package churn unless later tied to a product-specific hardware signal. - No direct `Deckard`, `Roy`, `Steam Frame`, `Steam Machine`, ARM/Snapdragon, or new product-specific top-level repo namespace appeared in the default pass. ### Valve Support / Store / CDN - Official Valve pages and APIs were reachable. -- No Valve public API readiness change appeared on `2026-06-09`. +- Valve public API readiness changed materially on `2026-06-22`: Steam Machine is now public with packages, a package group, prices, and a release date. - Valve API package snapshot: - Controller app `4165870`: public, package `1558609`, package group present, `$99.00`. - Frame app `4165890`: public app metadata, `Coming soon`, no packages, no package groups, no price. - - Machine app `4165910`: public app metadata, `Coming soon`, no packages, no package groups, no price. - - Machine packages `1629446`, `1629447`, `1629458`, `1629460`: `packagedetails success:false`. + - Machine app `4165910`: public app metadata, package group present, `coming_soon=False`, release date `Jun 30, 2026`, starting price `$1,049.00` in the US / `£879.00` in the UK. + - Machine package `1629447`: public, `Steam Machine 512GB`, `$1,049.00` US / `£879.00` UK. + - Machine package `1629458`: public, `Steam Machine 512GB with Controller`, `$1,128.00` US / `£938.00` UK. + - Machine package `1629446`: public, `Steam Machine 2TB`, `$1,349.00` US / `£1,149.00` UK. + - Machine package `1629460`: public, `Steam Machine 2TB with Controller`, `$1,428.00` US / `£1,208.00` UK. - Frame packages `1629484`, `1629486`: `packagedetails success:false`. -- This remains the cleanest public-readiness baseline. The `2026-06-09` SteamKit/PICS Machine package movement and the corrected SteamTracking guided-tour baseline have not propagated to public `appdetails`, `packagedetails`, packages, package groups, price, or exact timing. +- This is now the cleanest public-readiness baseline: Steam Machine launch state has propagated to public `appdetails`, `packagedetails`, package group, price, and release date. Steam Frame has not. ### Customs / Regulatory -- Customs status on `2026-06-09`: partial. ImportInfo automated fetches were blocked, while the existing ImportGenius-backed baseline still showed relevant rows. -- ImportGenius now lists `10` relevant `GAME CONSOLE` rows for `INGRAM MICRO C/O VALVE CORPORATION` from `2026-03-27` through `2026-05-18`. -- No newer customs rows appeared versus the `2026-05-22` / `2026-05-23` / `2026-05-25` ImportGenius baseline. -- Newer rows since the old `2026-04-23` baseline include: - - `SNHBSHACHI265020`, arrived `2026-05-18`, `42 PKG`, `14353 Kgs`. - - `SNHBSHACHI264140`, arrived `2026-05-18`, `42 PKG`, `14533 Kgs`. - - `SNHBSHACHI264031`, arrived `2026-05-08`, `42 PKG`, `12615 Kgs`. +- Customs status on `2026-06-22`: partial. ImportInfo automated fetches were blocked, while ImportGenius importer pages fetched and parsed. +- The customs watcher now covers ImportGenius importer pages for `INGRAM MICRO C/O VALVE CORPORATION`, `CEVA C/O VALVE CORPORATION`, `CEVA NL C/O VALVE CORPORATION`, and `VALVE CORPORATION`. +- ImportGenius lists `37` relevant Valve-hardware shipment rows in the `2026-06-22` report. +- No newer customs rows appeared versus the `2026-06-19` report. +- Newest high-signal rows: + - `SNHBSHACHI265222`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `GAME CONSOLE`, `42 PKG`, `12698 Kgs`. + - `SNHBSHACHI265217`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `GAME CONSOLE`, `42 PKG`, `12554 Kgs`. + - `SNHBSHACHI265224`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6464 Kgs`. + - `SNHBSHALAX265223`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6467 Kgs`. + - `SNHBSHACHI265216`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6406 Kgs`. + - `SNHBHKGLBG266038`, arrived `2026-06-17`, `VALVE CORPORATION`, `WIRELESS PC CONTROLLER`, `40 PKG`, `12970 Kgs`. + - `SNHBSHACHI265173`, arrived `2026-06-10`, `CEVA C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6374 Kgs`. + - `SNHBSHACHI265174`, arrived `2026-06-10`, `CEVA C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6372 Kgs`. + - `SNHBSHACHI265175`, arrived `2026-06-10`, `CEVA C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6392 Kgs`. + - `SNHBSHACHI265176`, arrived `2026-06-10`, `CEVA C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6391 Kgs`. + - `SNHBSHALAX265177`, arrived `2026-06-10`, `CEVA NL C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6400 Kgs`. + - `SNHBHKGLBG266011`, arrived `2026-06-10`, `VALVE CORPORATION`, `WIRELESS PC CONTROLLER`, `30 PKG`, `9727 Kgs`. +- Additional captured rows include `GAME CONSOLE` arrivals to CEVA/CEVA NL on `2026-06-03`, `2026-05-30`, and `2026-05-20`, plus `WIRELESS PC CONTROLLER` rows on `2026-06-02` and `2026-05-19`. - The prior NBD / ImportGenius context also remains relevant: - `WIRELESS PC CONTROLLER` row dated `2026-04-04`. - `GAME CONSOLE` shipment arriving `2026-04-23` for `INGRAM MICRO C/O VALVE CORPORATION`. @@ -124,15 +161,15 @@ Last updated: `2026-06-09` ## Open Questions -- When will Valve publish Steam Machine and Steam Frame prices? -- When will Steam Machine and Steam Frame receive public packages or package groups? -- Will the `2026-06-09` Machine follow-up changenumber bump precede public Valve API readiness? -- Will Valve expose Machine package IDs through public `packagedetails`, `appdetails.packages`, package groups, reservation text, or purchase eligibility? +- When will Valve publish Steam Frame price/package group/exact availability? +- Will Komodo flip the Steam Machine product layer from wishlist/outofstock to a public buy/reservation state? +- Will Valve expose Frame package IDs through public `packagedetails`, `appdetails.packages`, package groups, reservation text, or purchase eligibility? - Are the `fremont-hw-support` SteamOS packages related to Steam Machine launch preparation? ## Next Checks -- Watch SteamKit/PICS changenumbers for all watched app and package IDs, with higher frequency over the next 24-48 hours if possible. -- Watch Valve `appdetails` / `packagedetails` for Machine and Frame package or package-group exposure. -- Get one trusted-browser SteamDB package-page baseline for the four Machine package IDs to corroborate the new PICS movement with human-readable history pages. +- Watch SteamKit/PICS changenumbers for Frame package IDs and any post-launch Machine package amendments. +- Watch Valve `appdetails` / `packagedetails` for Steam Frame package or package-group exposure, plus any Steam Machine purchase-state/reservation copy changes. +- Keep SteamDB as a corroboration layer for any post-launch Machine package-history changes. - Continue normal Komodo, SteamTracking, SteamOS mirror, Valve API, and customs checks. +- Keep ImportGenius CEVA / CEVA NL / Valve Corp importer pages in the normal customs rotation and watch for additional `VIRTUAL REALITY DEVICES`, `GAME CONSOLE`, or `WIRELESS PC CONTROLLER` arrivals. diff --git a/status/evidence.jsonl b/status/evidence.jsonl index c38b222..dac7f03 100644 --- a/status/evidence.jsonl +++ b/status/evidence.jsonl @@ -45,3 +45,13 @@ {"date_checked": "2026-05-22", "source": "importgenius-customs", "entity": "steam-machine,steam-frame", "claim": "ImportGenius shows continued US-bound GAME CONSOLE shipments to Ingram Micro C/O Valve Corporation through May 18, 2026.", "evidence_type": "customs_import_record", "confidence": "medium", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-05-22/reports/customs-shipments.md", "notes": "Parsed 10 relevant ImportGenius rows for INGRAM MICRO C/O VALVE CORPORATION / TECH-FRONT (CHONGQING) COMPUTER CO. Newer rows since the April 23 baseline include May 18 BOLs SNHBSHACHI265020 and SNHBSHACHI264140 plus May 8 BOL SNHBSHACHI264031. Customs rows say GAME CONSOLE but do not identify the specific Valve hardware SKU."} {"date_checked": "2026-05-23", "source": "steamtracking-client-manifest", "entity": "steam-machine", "claim": "SteamTracking now exposes a dedicated steam_client_beta_linuxarm64 client manifest suitable for ARM64 Steam hardware monitoring.", "evidence_type": "client_manifest_baseline", "confidence": "medium", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-05-23/reports/steamtracking-client-manifests.md", "notes": "Manifest steam_client_beta_linuxarm64 first appears in the local SteamTracking history at commit 28f5287 on 2026-05-22T04:56:58Z with version 1779139477. The watcher now tracks beta/publicbeta linuxarm64 manifests and key blocks including bins_hardware_linuxarm64, bins_linuxarm64, steam_linuxarm64, runtime_steamrt_linuxarm64, and bins_steamrt_linuxarm64. This is a high-signal ARM64/Fremont readiness heuristic, not product identity or launch confirmation."} {"date_checked": "2026-06-09", "source": "steamkit-pics", "entity": "steam-machine", "claim": "SteamKit/PICS shows a third changenumber bump across all four watched Steam Machine reservation package IDs.", "evidence_type": "steam_product_info_followup_changenumber_delta", "confidence": "high", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-09/reports/steamkit-pics-detail.md", "notes": "Machine packages 1629446, 1629447, 1629458, and 1629460 moved from 35842876/35842851/35842860/35842863 on 2026-06-05 to 36426730/36426723/36426735/36426739 on 2026-06-09. Frame packages 1629484 and 1629486 stayed at 35672606. Valve appdetails/packagedetails still expose no Machine packages, package groups, price, or exact timing, so this is backend movement rather than public launch confirmation."} +{"date_checked": "2026-06-12", "source": "importgenius-customs", "entity": "steam-frame,steam-controller,steam-machine", "claim": "ImportGenius shows five June 10, 2026 Valve-bound VIRTUAL REALITY DEVICES rows plus a same-day WIRELESS PC CONTROLLER row after adding CEVA, CEVA NL, and Valve Corp importer pages to the customs watcher.", "evidence_type": "customs_import_record", "confidence": "medium", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-12/reports/customs-shipments.md", "notes": "VR rows: SNHBSHACHI265173/265174/265175/265176 to CEVA C/O VALVE CORPORATION and SNHBSHALAX265177 to CEVA NL C/O VALVE CORPORATION, all from TECH-FRONT (CHONGQING) COMPUTER CO, 42 PKG each, 6372-6400 Kgs. Same-day controller row: SNHBHKGLBG266011 to VALVE CORPORATION from CHENG UEI PRECISION IND. CO LTD, 30 PKG, 9727 Kgs. Customs descriptions are logistics corroboration only and do not prove Steam Frame launch timing."} +{"date_checked": "2026-06-19", "source": "steamkit-pics", "entity": "steam-machine", "claim": "SteamKit/PICS shows a fourth changenumber movement event across all four watched Steam Machine reservation package IDs.", "evidence_type": "steam_product_info_followup_changenumber_delta", "confidence": "high", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-19/reports/steamkit-pics-detail.md", "notes": "Machine packages 1629446, 1629447, 1629458, and 1629460 moved from 36426730/36426723/36426735/36426739 to 36684622/36684817/36684854/36684765. Frame packages 1629484 and 1629486 stayed at 35672606. Valve appdetails/packagedetails still expose no Machine packages, package groups, price, or exact timing, so this is backend movement rather than public launch confirmation."} +{"date_checked": "2026-06-19", "source": "importgenius-customs", "entity": "steam-frame,steam-controller,steam-machine", "claim": "ImportGenius shows six newer June 17, 2026 Valve-bound rows, including three VIRTUAL REALITY DEVICES rows, two GAME CONSOLE rows, and one WIRELESS PC CONTROLLER row.", "evidence_type": "customs_import_record", "confidence": "medium", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-19/reports/customs-shipments.md", "notes": "June 17 rows: VR devices SNHBSHACHI265224, SNHBSHALAX265223, SNHBSHACHI265216 to CEVA NL C/O VALVE CORPORATION from TECH-FRONT; game console SNHBSHACHI265222 and SNHBSHACHI265217 to CEVA NL C/O VALVE CORPORATION from TECH-FRONT; controller SNHBHKGLBG266038 to VALVE CORPORATION from CHENG UEI. Customs descriptions are logistics corroboration only and do not prove launch timing or final retail SKU."} +{"date_checked": "2026-06-22", "source": "steamkit-pics", "entity": "steam-machine,steam-controller", "claim": "SteamKit/PICS shows another changenumber movement event across all four watched Steam Machine reservation package IDs, plus movement on Steam Controller package 1558609.", "evidence_type": "steam_product_info_followup_changenumber_delta", "confidence": "high", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-22/reports/steamkit-pics-detail.md", "notes": "Machine packages 1629446/1629447/1629458/1629460 moved from 36684622/36684817/36684854/36684765 to 36721665/36721671/36721674/36721675. Controller package 1558609 moved from 35893035 to 36708367. Frame packages 1629484 and 1629486 stayed at 35672606. Valve appdetails/packagedetails still expose no Machine or Frame public packages, package groups, price, or exact timing."} +{"date_checked": "2026-06-22", "source": "steamtracking", "entity": "steam-frame", "claim": "Latest SteamTracking client checkout contains new or renamed Steam Frame setup-tour and wireless-adapter localization strings.", "evidence_type": "client_strings_delta", "confidence": "medium", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-22/reports/steamtracking-hardware-signals-key-lines.txt", "notes": "Content-normalized comparison versus 2026-06-19 added Frame setup strings including GuidedTour_FrameAlreadyPairedWith, GuidedTour_FrameNowPairedWith, GuidedTour_Frame_SetupComplete, GuidedTour_SearchingForWirelessAdapter, and GuidedTour_WirelessAdapterDetected. This strengthens client-readiness evidence but does not expose price, package group, or exact launch timing."} +{"date_checked": "2026-06-22", "source": "komodo", "entity": "steam-machine", "claim": "Komodo exposes nine new Steam Machine page sections and 20 new same-day Steam Machine media rows after unblocking the dedicated Chrome fallback.", "evidence_type": "site_section_media_staging", "confidence": "high", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-22/reports/komodo-machine-sections.tsv", "notes": "New sections include steam-machine-01-video, 03-video, 04-core-features, 06-led-strip, 07-support, 08-pc, 09-pc-video, 11-tech-image, and 12-tech-spec, all dated/modified 2026-06-22. Media includes 4 WEBM videos plus PNG/AVIF assets such as machine_video.png, machine_video3.png, PC-video.png, ledstrip.png, and English/Japanese tech-image AVIFs. Product modified timestamp and public Valve APIs still did not expose price, package group, or exact timing."} +{"date_checked": "2026-06-22", "source": "komodo", "entity": "steam-machine", "claim": "A later same-day Komodo pass expands the Steam Machine staging set to eleven sections and 26 same-day media rows.", "evidence_type": "site_section_media_staging_followup", "confidence": "high", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-22/reports/komodo-machine-sections.tsv", "notes": "Additional sections since the earlier 2026-06-22 pass are steam-machine-05-video and steam-machine-10-plays-well. Same-day media now includes 7 WEBM videos plus machine_video5.webp, together1_2.webp, together2.png, and other PNG/AVIF assets. Product modified timestamp remains 2026-05-27T16:53:06 and class_list still includes wishlist-only/hide-product-top/outofstock, so this is launch-page staging rather than public sale readiness."} +{"date_checked": "2026-06-22", "source": "steamkit-pics,steamdb", "entity": "steam-machine", "claim": "Machine package 1629447 moved again on the later 2026-06-22 pass while the other watched Machine packages and Frame packages did not move further.", "evidence_type": "steam_product_info_and_steamdb_followup_delta", "confidence": "high", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-22/reports/steamkit-pics-packages.tsv", "notes": "SteamKit/PICS now reports 1629447 at changenumber 36754857, up from 36721671 earlier the same day and 36684817 on the previous baseline. SteamDB corroborates 1629447 with last record update 22 June 2026 - 15:22:37 UTC and possible app 4165910:Steam Machine. Valve appdetails/packagedetails still expose no public Machine package, package group, price, or exact timing."} +{"date_checked": "2026-06-22", "source": "valve-store-api", "entity": "steam-machine", "claim": "Steam Machine launched publicly in Valve store APIs with app package group, release date, four public packages, and prices.", "evidence_type": "official_store_api_launch_confirmation", "confidence": "high", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-22/reports/valve-reservation-packages.tsv", "notes": "App 4165910 now has coming_soon=False, release date Jun 30, 2026, packages 1629447/1629458/1629446/1629460, and package group. US prices: 512GB $1,049.00, 512GB with Controller $1,128.00, 2TB $1,349.00, 2TB with Controller $1,428.00. UK prices checked live: 512GB £879.00, 512GB with Controller £938.00, 2TB £1,149.00, 2TB with Controller £1,208.00. Steam Frame packages 1629484/1629486 remain private with no package group or price."} +{"date_checked": "2026-06-22", "source": "steamkit-pics,steamdb", "entity": "steam-machine", "claim": "SteamKit/PICS and SteamDB corroborate Steam Machine launch conversion: all four watched Machine packages are now available/details_available.", "evidence_type": "steam_product_info_and_steamdb_launch_confirmation", "confidence": "high", "ref": "/Users/sean/Coding/steam-hardware-watch/runs/2026-06-22/reports/steamdb-reservation-packages.tsv", "notes": "SteamKit/PICS: app 4165910 moved to changenumber 36756875; packages 1629446/1629447/1629458/1629460 moved to 36756963/36756942/36756957/36756953 and are available with apps_count=1. SteamDB reports all four Machine packages as details_available with last record updates clustered at 2026-06-22 16:57-16:58 UTC. Frame packages remain private_exists_only at changenumber 35672606."} diff --git a/status/runs/2026-05-28.md b/status/runs/2026-05-28.md new file mode 100644 index 0000000..28aa545 --- /dev/null +++ b/status/runs/2026-05-28.md @@ -0,0 +1,90 @@ +# Run Note: 2026-05-28 + +## Summary + +- Full watcher pass completed with artifacts under `runs/2026-05-28`. +- The material update is on Komodo: Controller, Machine, and Frame product records all moved on `2026-05-27` and gained the WooCommerce `hardware` product category. +- No watched SteamKit/PICS app or package changenumbers moved. +- Valve public APIs still show Steam Controller public at `$99.00`; Steam Machine and Steam Frame remain `Coming soon` with no public packages, package groups, price, or exact timing. +- SteamDB package pages were retrieved after refreshing the dedicated browser profile and show unchanged watched package history rows. +- Customs still shows `10` relevant ImportGenius `GAME CONSOLE` rows, newest arrivals `2026-05-18`; no newer shipment row appeared. + +## Source Checks + +### Komodo + +- Initial Komodo fetch hit a stale Chrome CDP endpoint, then succeeded after refreshing the dedicated browser fallback. +- Product modified timestamps: + - Controller: `2026-05-27T16:52:25` + - Machine: `2026-05-27T16:53:06` + - Frame: `2026-05-27T16:53:46` +- Direct product JSON diff versus `2026-05-26` shows all three gained product category `961`, exposed as `product_cat-hardware`. +- Controller product categories changed from `[93]` to `[961, 93]`; Machine and Frame changed from `[]` to `[961]`. +- No Komodo section rows changed versus `2026-05-26`. +- Interpretation: this is a real Komodo catalog metadata change across the trio, but not preorder or purchase confirmation without SteamKit/PICS or Valve API corroboration. + +### SteamDB + +- SteamDB package pages were retrieved after refreshing the dedicated browser profile. +- Watched package rows were unchanged: + - Controller package `1558609`: last record update `15 May 2026 - 16:07:19 UTC`, changenumber `35893035`, details available. + - Machine packages `1629446`, `1629447`, `1629458`, `1629460`: last record updates clustered on `13 May 2026`, private/existence-only. + - Frame packages `1629484`, `1629486`: last record update `5 May 2026 - 18:50:54 UTC`, private/existence-only. +- One Controller app page still hit a SteamDB challenge; package-page baselines are usable. + +### SteamKit / PICS + +- No watched SteamKit/PICS changenumbers moved versus `2026-05-26`. +- Machine packages remain: + - `1629446`: `35842876` + - `1629447`: `35842851` + - `1629458`: `35842860` + - `1629460`: `35842863` +- Frame packages `1629484` and `1629486` remain `35672606`. +- Machine and Frame apps remain `35675573`. + +### SteamTracking / GameTracking + +- SteamTracking checkout remained at commit `5f58a47e5` (`2026-05-23T04:32:36Z`). +- `steam_client_beta_linuxarm64` remains version `1779139477`; watched ARM64 hardware/runtime blocks unchanged. +- `steam_client_publicbeta_linuxarm64` remains version `1779479049`; watched ARM64 hardware/runtime blocks unchanged. +- Known SteamInput/Triton/Ibex pairing strings remain present, but no new product or reservation string appeared. + +### SteamVR Depots + +- SteamDB SteamVR depot metadata page was blocked. +- Saved public SteamVR news/key-line context only; no new depot/build readiness signal was captured. + +### SteamOS Package Mirror + +- Mirror was reachable. +- `fremont-hw-support 20260506.1-1` remains present in `holo-3.8` and `holo-main`. +- No new product-specific repo namespace or direct Frame/Machine/Deckard/Roy signal appeared. + +### Valve Support / CDN + +- Valve APIs were reachable. +- Controller app `4165870` remains public with package `1558609`, package group present, and US price `$99.00`. +- Frame app `4165890` remains public app metadata only: `Coming soon`, no packages, no package groups, no price. +- Machine app `4165910` remains public app metadata only: `Coming soon`, no packages, no package groups, no price. +- Machine packages `1629446`, `1629447`, `1629458`, `1629460` and Frame packages `1629484`, `1629486` still return `packagedetails success:false`. + +### Customs / Regulatory + +- ImportInfo searches failed, but ImportGenius importer data parsed. +- Relevant shipment count remains `10`. +- Newest rows remain two `2026-05-18` `GAME CONSOLE` shipments to `INGRAM MICRO C/O VALVE CORPORATION` from `TECH-FRONT (CHONGQING) COMPUTER CO`, both `42 PKG`, weights `14353 Kgs` and `14533 Kgs`. +- No newer customs row appeared today. + +## Effect On Key Questions + +- Price: unchanged. Controller is confirmed at `$99.00`; Machine and Frame remain unpriced. +- Release date: unchanged. Machine and Frame still expose only broad `Coming soon` / `2026` timing. +- Same-time launch: unchanged. Controller is already public/purchasable; Machine and Frame still lack public package readiness. The Komodo `hardware` category addition is worth watching but does not override SteamKit/PICS and Valve API absence. + +## Next Checks + +- Continue higher-frequency SteamKit/PICS checks for Machine and Frame package movement. +- Watch Valve `appdetails` / `packagedetails` for Machine and Frame package-group, price, reservation, or purchase-state exposure. +- Watch Komodo for any follow-up change from catalog category organization into purchase state, stock state, visible copy, section/media changes, or regional store readiness. +- Keep customs checks in the normal watcher, but treat them as corroborating logistics evidence only. diff --git a/status/runs/2026-05-29.md b/status/runs/2026-05-29.md new file mode 100644 index 0000000..0005902 --- /dev/null +++ b/status/runs/2026-05-29.md @@ -0,0 +1,89 @@ +# Run Note: 2026-05-29 + +## Summary + +- Full watcher pass completed with artifacts under `runs/2026-05-29`. +- No material new launch signal appeared versus `2026-05-28`. +- No watched SteamKit/PICS app or package changenumbers moved. +- Valve public APIs still show Steam Controller public at `$99.00`; Steam Machine and Steam Frame remain `Coming soon` with no public packages, package groups, price, or exact timing. +- Komodo product timestamps and catalog metadata remain unchanged from the `2026-05-28` hardware-category finding. +- SteamDB package pages were retrieved after refreshing the dedicated browser profile and show unchanged watched package history rows. +- Customs still shows `10` relevant ImportGenius `GAME CONSOLE` rows, newest arrivals `2026-05-18`; no newer shipment row appeared. + +## Source Checks + +### Komodo + +- Initial Komodo fetch hit a stale Chrome CDP endpoint, then succeeded after refreshing the dedicated browser fallback. +- Product modified timestamps remain: + - Controller: `2026-05-27T16:52:25` + - Machine: `2026-05-27T16:53:06` + - Frame: `2026-05-27T16:53:46` +- No new section, media, asset, product timestamp, stock-state, or visible copy movement appeared versus `2026-05-28`. +- The latest material Komodo signal remains the `2026-05-28` finding that all three products gained product category `961` / `product_cat-hardware`. + +### SteamDB + +- SteamDB package pages were retrieved after refreshing the dedicated browser profile. +- Watched package rows were unchanged: + - Controller package `1558609`: last record update `15 May 2026 - 16:07:19 UTC`, changenumber `35893035`, details available. + - Machine packages `1629446`, `1629447`, `1629458`, `1629460`: last record updates clustered on `13 May 2026`, private/existence-only. + - Frame packages `1629484`, `1629486`: last record update `5 May 2026 - 18:50:54 UTC`, private/existence-only. +- Some app/history pages still hit SteamDB challenge pages; package-page baselines are usable. + +### SteamKit / PICS + +- No watched SteamKit/PICS changenumbers moved versus `2026-05-28`. +- Machine packages remain: + - `1629446`: `35842876` + - `1629447`: `35842851` + - `1629458`: `35842860` + - `1629460`: `35842863` +- Frame packages `1629484` and `1629486` remain `35672606`. +- Machine and Frame apps remain `35675573`. + +### SteamTracking / GameTracking + +- SteamTracking checkout remained at commit `5f58a47e5` (`2026-05-23T04:32:36Z`). +- `steam_client_beta_linuxarm64` remains version `1779139477`; watched ARM64 hardware/runtime blocks unchanged. +- `steam_client_publicbeta_linuxarm64` remains version `1779479049`; watched ARM64 hardware/runtime blocks unchanged. +- Known SteamInput/Triton/Ibex pairing strings remain present, but no new product or reservation string appeared. + +### SteamVR Depots + +- SteamDB SteamVR depot metadata page was blocked. +- Saved public SteamVR news/key-line context only; no new depot/build readiness signal was captured. + +### SteamOS Package Mirror + +- Mirror was reachable. +- `fremont-hw-support 20260506.1-1` remains present in `holo-3.8` and `holo-main`. +- No new product-specific repo namespace or direct Frame/Machine/Deckard/Roy signal appeared. + +### Valve Support / CDN + +- Valve APIs were reachable. +- Controller app `4165870` remains public with package `1558609`, package group present, and US price `$99.00`. +- Frame app `4165890` remains public app metadata only: `Coming soon`, no packages, no package groups, no price. +- Machine app `4165910` remains public app metadata only: `Coming soon`, no packages, no package groups, no price. +- Machine packages `1629446`, `1629447`, `1629458`, `1629460` and Frame packages `1629484`, `1629486` still return `packagedetails success:false`. + +### Customs / Regulatory + +- ImportInfo searches failed, but ImportGenius importer data parsed. +- Relevant shipment count remains `10`. +- Newest rows remain two `2026-05-18` `GAME CONSOLE` shipments to `INGRAM MICRO C/O VALVE CORPORATION` from `TECH-FRONT (CHONGQING) COMPUTER CO`, both `42 PKG`, weights `14353 Kgs` and `14533 Kgs`. +- No newer customs row appeared today. + +## Effect On Key Questions + +- Price: unchanged. Controller is confirmed at `$99.00`; Machine and Frame remain unpriced. +- Release date: unchanged. Machine and Frame still expose only broad `Coming soon` / `2026` timing. +- Same-time launch: unchanged. Controller is already public/purchasable; Machine and Frame still lack public package readiness. + +## Next Checks + +- Continue higher-frequency SteamKit/PICS checks for Machine and Frame package movement. +- Watch Valve `appdetails` / `packagedetails` for Machine and Frame package-group, price, reservation, or purchase-state exposure. +- Watch Komodo for any follow-up change from catalog category organization into purchase state, stock state, visible copy, section/media changes, or regional store readiness. +- Keep customs checks in the normal watcher, but treat them as corroborating logistics evidence only. diff --git a/status/runs/2026-05-30.md b/status/runs/2026-05-30.md new file mode 100644 index 0000000..6332160 --- /dev/null +++ b/status/runs/2026-05-30.md @@ -0,0 +1,90 @@ +# Run Note: 2026-05-30 + +## Summary + +- Full watcher pass completed with artifacts under `runs/2026-05-30`. +- No material new launch signal appeared versus `2026-05-29`. +- No watched SteamKit/PICS app or package changenumbers moved. +- Valve public APIs still show Steam Controller public at `$99.00`; Steam Machine and Steam Frame remain `Coming soon` with no public packages, package groups, price, or exact timing. +- Komodo product timestamps and catalog metadata remain unchanged from the `2026-05-28` hardware-category finding. +- SteamDB package pages were retrieved after refreshing the dedicated browser profile and show unchanged watched package history rows. +- Customs still shows `10` relevant ImportGenius `GAME CONSOLE` rows, newest arrivals `2026-05-18`; no newer shipment row appeared. +- One previously blocked Komodo asset was retrieved today, but no new asset URL was exposed. + +## Source Checks + +### Komodo + +- Initial Komodo fetch hit a stale Chrome CDP endpoint, then succeeded after refreshing the dedicated browser fallback. +- Product modified timestamps remain: + - Controller: `2026-05-27T16:52:25` + - Machine: `2026-05-27T16:53:06` + - Frame: `2026-05-27T16:53:46` +- No new section, media URL, product timestamp, stock-state, or visible copy movement appeared versus `2026-05-29`. +- Asset retrieval found `141` candidates, retrieved `137`, and left `4` blocked. The improvement was `f62242c14e7f409211d1c82f17ba2694.png` moving from blocked to retrieved; this was not a newly exposed asset. +- The latest material Komodo signal remains the `2026-05-28` finding that all three products gained product category `961` / `product_cat-hardware`. + +### SteamDB + +- SteamDB package pages were retrieved after refreshing the dedicated browser profile. +- Watched package rows were unchanged: + - Controller package `1558609`: last record update `15 May 2026 - 16:07:19 UTC`, changenumber `35893035`, details available. + - Machine packages `1629446`, `1629447`, `1629458`, `1629460`: last record updates clustered on `13 May 2026`, private/existence-only. + - Frame packages `1629484`, `1629486`: last record update `5 May 2026 - 18:50:54 UTC`, private/existence-only. + +### SteamKit / PICS + +- No watched SteamKit/PICS changenumbers moved versus `2026-05-29`. +- Machine packages remain: + - `1629446`: `35842876` + - `1629447`: `35842851` + - `1629458`: `35842860` + - `1629460`: `35842863` +- Frame packages `1629484` and `1629486` remain `35672606`. +- Machine and Frame apps remain `35675573`. + +### SteamTracking / GameTracking + +- SteamTracking checkout remained at commit `5f58a47e5` (`2026-05-23T04:32:36Z`). +- `steam_client_beta_linuxarm64` remains version `1779139477`; watched ARM64 hardware/runtime blocks unchanged. +- `steam_client_publicbeta_linuxarm64` remains version `1779479049`; watched ARM64 hardware/runtime blocks unchanged. +- Known SteamInput/Triton/Ibex pairing strings remain present, but no new product or reservation string appeared. + +### SteamVR Depots + +- SteamDB SteamVR depot metadata page was blocked. +- Saved public SteamVR news/key-line context only; no new depot/build readiness signal was captured. + +### SteamOS Package Mirror + +- Mirror was reachable. +- `fremont-hw-support 20260506.1-1` remains present in `holo-3.8` and `holo-main`. +- No new product-specific repo namespace or direct Frame/Machine/Deckard/Roy signal appeared. + +### Valve Support / CDN + +- Valve APIs were reachable. +- Controller app `4165870` remains public with package `1558609`, package group present, and US price `$99.00`. +- Frame app `4165890` remains public app metadata only: `Coming soon`, no packages, no package groups, no price. +- Machine app `4165910` remains public app metadata only: `Coming soon`, no packages, no package groups, no price. +- Machine packages `1629446`, `1629447`, `1629458`, `1629460` and Frame packages `1629484`, `1629486` still return `packagedetails success:false`. + +### Customs / Regulatory + +- ImportInfo searches failed, but ImportGenius importer data parsed. +- Relevant shipment count remains `10`. +- Newest rows remain two `2026-05-18` `GAME CONSOLE` shipments to `INGRAM MICRO C/O VALVE CORPORATION` from `TECH-FRONT (CHONGQING) COMPUTER CO`, both `42 PKG`, weights `14353 Kgs` and `14533 Kgs`. +- No newer customs row appeared today. + +## Effect On Key Questions + +- Price: unchanged. Controller is confirmed at `$99.00`; Machine and Frame remain unpriced. +- Release date: unchanged. Machine and Frame still expose only broad `Coming soon` / `2026` timing. +- Same-time launch: unchanged. Controller is already public/purchasable; Machine and Frame still lack public package readiness. + +## Next Checks + +- Continue higher-frequency SteamKit/PICS checks for Machine and Frame package movement. +- Watch Valve `appdetails` / `packagedetails` for Machine and Frame package-group, price, reservation, or purchase-state exposure. +- Watch Komodo for any follow-up change from catalog category organization into purchase state, stock state, visible copy, section/media changes, or regional store readiness. +- Keep customs checks in the normal watcher, but treat them as corroborating logistics evidence only. diff --git a/status/runs/2026-05-31.md b/status/runs/2026-05-31.md new file mode 100644 index 0000000..c1b3d82 --- /dev/null +++ b/status/runs/2026-05-31.md @@ -0,0 +1,94 @@ +# Run Note: 2026-05-31 + +## Summary + +- Full watcher pass completed under `runs/2026-05-31`. +- This is the first baseline after fixing SteamTracking freshness and hardware-signal extraction. +- No watched SteamKit/PICS app or package changenumber moved versus the previous saved PICS snapshot. +- Public Valve store/API readiness remains unchanged: Controller public at `$99.00`; Machine and Frame still `Coming soon`, with no public package groups, packages, prices, or exact dates. +- SteamTracking is now current at commit `555d8163c33b92e5a785424069bb7ccc3f180b6d` from `2026-05-30T02:25:43Z`. +- SteamTracking hardware signals now surface the previously missed Steam Machine guided-tour strings and Steam Frame wireless-adapter pairing strings. +- ARM64 Steam client manifest lines changed versus the stale `2026-05-30` local baseline. Treat this as a corrected-source catch-up signal, not proof that those changes happened during this run. +- Komodo and SteamDB were blocked in this pass, so their comparison removals are fetch artifacts rather than real source removals. + +## Source Checks + +### Komodo + +- Blocked: configured Chrome CDP endpoint was not reachable, then Komodo API fetch failed. +- Existing last-good Komodo baseline remains the `2026-05-30` trusted-browser pass. + +### SteamKit / PICS + +- Available. +- No watched app/package changenumber changed. +- Current Machine package changenumbers remain: + - `1629446`: `35842876` + - `1629447`: `35842851` + - `1629458`: `35842860` + - `1629460`: `35842863` +- Current Frame package changenumbers remain: + - `1629484`: `35672606` + - `1629486`: `35672606` + +### SteamDB + +- Blocked/challenge pages for app, package, and SteamVR depot pages. +- Use the `2026-05-30` trusted-browser SteamDB baseline until refreshed. + +### SteamTracking / GameTracking + +- Source metadata: + - before commit: `555d8163c33b92e5a785424069bb7ccc3f180b6d` + - after commit: `555d8163c33b92e5a785424069bb7ccc3f180b6d` + - commit time: `2026-05-30T02:25:43Z` + - updated during run: `no` +- New hardware signal report captured: + - `GuidedTour_SteamMachine_Welcome_Title` + - `GuidedTour_SteamMachine_SendOff_Description` + - `GuidedTour_SDCard_Title_SteamMachine` + - `SteamFrameWirelessAdapterDialog_*` + - Steam Machine compatibility warning strings +- ARM64 client manifest current lines: + - `steam_client_beta_linuxarm64`: version `1780078251` + - `steam_client_publicbeta_linuxarm64`: version `1780098236` + - both now point at the same `bins_hardware_linuxarm64` file hash `da8814f3cc3788fd3789ce233dd86f107b2b244a`. + +### SteamVR Depots + +- SteamDB depot page blocked. +- SteamVR news metadata saved. + +### SteamOS Package Mirror + +- Available. +- `fremont-hw-support 20260506.1-1` remains visible in `holo-3.8` and `holo-main`. +- No new direct Machine/Frame repo namespace appeared. + +### Valve Support / CDN + +- Available. +- Controller app `4165870`: public, package `1558609`, price `$99.00`. +- Frame app `4165890`: public app metadata, `Coming soon`, no package group or price. +- Machine app `4165910`: public app metadata, `Coming soon`, no package group or price. +- Watched Machine/Frame package IDs still return `packagedetails success:false`. + +### Customs / Regulatory + +- Partial: ImportInfo fetches failed, but existing ImportGenius-backed rows were available. +- Latest relevant `GAME CONSOLE` rows remain `2026-05-18`. +- No newer shipment row was found in this pass. + +## Effect On Key Questions + +- Price: no new Machine or Frame price signal. +- Release date: no new exact Machine or Frame date signal. +- Same-time launch: still ruled out for the full trio; Controller is already public while Machine and Frame remain not publicly purchasable. +- Launch-readiness: Steam Machine guided-tour exposure and ARM64 manifest catch-up are useful backend readiness signals, but they do not override the lack of public Valve package/price readiness. + +## Next Checks + +- Keep SteamTracking source freshness and hardware-signal report in every normal pass. +- Refresh trusted-browser SteamDB when useful, because today’s SteamDB pass was blocked. +- Restore/refresh the Komodo trusted browser if Komodo becomes important again. +- Continue watching SteamKit/PICS package changenumbers and Valve public `appdetails` / `packagedetails`. diff --git a/status/runs/2026-06-01.md b/status/runs/2026-06-01.md new file mode 100644 index 0000000..8e5bc9f --- /dev/null +++ b/status/runs/2026-06-01.md @@ -0,0 +1,71 @@ +# Run Note: 2026-06-01 + +## Summary + +- Full watcher pass completed under `runs/2026-06-01`. +- No new watched SteamKit/PICS app or package changenumber movement. +- No new SteamTracking source commit; checkout remained at `555d8163c33b92e5a785424069bb7ccc3f180b6d` (`2026-05-30T02:25:43Z`). +- ARM64 Steam client manifests are stable against the clean `2026-05-31` baseline; all focused lines now show `changed=no`. +- Valve public APIs remain unchanged: Controller public at `$99.00`; Machine and Frame still `Coming soon` with no package groups, packages, prices, or exact dates. +- Komodo, SteamDB package pages, and SteamVR depot page were blocked, so no fresh signal from those sources today. +- Customs remained partial, with no newer relevant shipment than `2026-05-18`. + +## Source Checks + +### Komodo + +- Blocked: configured Chrome CDP endpoint was not reachable and Komodo API fetch failed. +- Keep `2026-05-30` as the last good trusted-browser Komodo baseline. + +### SteamDB + +- Blocked/challenge pages for watched app/package pages. +- Use SteamKit/PICS as the primary metadata source and keep the `2026-05-30` trusted-browser SteamDB package baseline until refreshed. + +### SteamTracking / GameTracking + +- Source metadata: + - before commit: `555d8163c33b92e5a785424069bb7ccc3f180b6d` + - after commit: `555d8163c33b92e5a785424069bb7ccc3f180b6d` + - updated during run: `no` +- Hardware signal report is stable against `2026-05-31`; no new guided-tour, reservation, package, or public-readiness string appeared. +- ARM64 client manifest focus: + - `steam_client_beta_linuxarm64`: version `1780078251`, `changed=no` + - `steam_client_publicbeta_linuxarm64`: version `1780098236`, `changed=no` + +### SteamVR Depots + +- SteamDB depot page blocked. +- SteamVR news metadata saved; no new actionable SteamVR signal surfaced. + +### SteamOS Package Mirror + +- Available. +- `fremont-hw-support 20260506.1-1` remains visible in `holo-3.8` and `holo-main`. +- No new direct Machine/Frame package namespace appeared. + +### Valve Support / CDN + +- Available. +- No public-readiness change: + - Controller app `4165870`: public, package `1558609`, price `$99.00`. + - Frame app `4165890`: public app metadata, `Coming soon`, no package group or price. + - Machine app `4165910`: public app metadata, `Coming soon`, no package group or price. + - Watched Machine/Frame package IDs still return `packagedetails success:false`. + +### Customs / Regulatory + +- Partial: ImportInfo fetches failed. +- Existing relevant `GAME CONSOLE` rows remain available through the saved ImportGenius-backed baseline. +- No newer row than `2026-05-18` surfaced. + +## Effect On Key Questions + +- Price: no new Machine or Frame price signal. +- Release date: no new exact Machine or Frame date signal. +- Same-time launch: still ruled out for the full trio; Controller is already public while Machine and Frame remain not publicly purchasable. + +## Next Checks + +- Continue daily SteamKit/PICS, SteamTracking, Valve API, SteamOS mirror, and customs checks. +- Refresh trusted-browser Komodo and SteamDB when those sources become important again. diff --git a/status/runs/2026-06-12.md b/status/runs/2026-06-12.md new file mode 100644 index 0000000..ff282e8 --- /dev/null +++ b/status/runs/2026-06-12.md @@ -0,0 +1,109 @@ +# Run Note: 2026-06-12 + +## Summary + +- Full watch pass completed after repairing the missing `/tmp/SteamTracking-master` checkout and resuming from SteamTracking onward. +- No watched SteamKit/PICS changenumber movement since `2026-06-09`; the all-four Steam Machine package bump remains parked at: + - `1629446`: `36426730` + - `1629447`: `36426723` + - `1629458`: `36426735` + - `1629460`: `36426739` +- Valve public APIs still show no public Machine/Frame packages, package groups, price, reservation state, or exact availability. +- Komodo Controller product `modified` timestamp moved from `2026-05-27T16:52:25` to `2026-06-10T17:25:21`, but selected content/class/category/product fields match the `2026-06-09` snapshot. Treat as timestamp-only unless later corroborated. +- SteamTracking source is now commit `f7bd1dce772272dfe8a8d3b9b15fee8c1222faf4` (`2026-06-12T05:25:50Z`). Content-normalized Frame/Machine focused reports show no substantive added or removed product strings. +- `steam_client_publicbeta_linuxarm64` moved from `1780965181` to `1781212412`; `bins_linuxarm64` and `steam_linuxarm64` changed, while `bins_hardware_linuxarm64` did not. +- SteamOS `jupiter-main` Neptune firmware packages moved to `jupiter.20260610.1-1`; `jupiter-3.8` remains at `jupiter.20260604.1-1`. No Fremont package movement. +- Customs coverage was corrected after the first pass missed newer ImportGenius importer pages and non-`GAME CONSOLE` product labels. The rerun captured five `2026-06-10` `VIRTUAL REALITY DEVICES` rows to CEVA / CEVA NL C/O Valve, plus newer controller and game-console rows. + +## Source Checks + +### Komodo + +- Reachable. +- Product modified timestamps: + - Controller: `2026-06-10T17:25:21` + - Machine: `2026-05-27T16:53:06` + - Frame: `2026-05-27T16:53:46` +- Controller timestamp movement appears contentless in the fields we care about: title/content/excerpt/featured media/product brand/category/tag/class list/status/type/slug/template matched the `2026-06-09` snapshot. +- Visual assets: `141` discovered, `137` retrieved, `4` blocked. No new asset exposure called out by the run summary. + +### SteamDB + +- Blocked/challenge pages again for watched app/package pages, including all Machine and Frame reservation package IDs. +- No fresh SteamDB human-readable corroboration was collected. + +### SteamTracking / GameTracking + +- Source commit: `f7bd1dce772272dfe8a8d3b9b15fee8c1222faf4`, timestamp `2026-06-12T05:25:50Z`. +- Dedicated Steam Frame and Steam Machine signal reports still contain the known client-beta surface, but content-normalized comparison against `2026-06-09` showed `0` substantive added/removed focused lines for both products. +- ARM64 manifest watch: + - `steam_client_beta_linuxarm64`: unchanged at `1780371519`. + - `steam_client_publicbeta_linuxarm64`: moved to `1781212412`. + - Public-beta `bins_linuxarm64` and `steam_linuxarm64` changed. + - Public-beta `bins_hardware_linuxarm64` did not change. + +### SteamKit / PICS + +- No watched app/package changenumber movement versus `2026-06-09`. +- Controller app/package unchanged. +- Machine app unchanged. +- All four Machine packages unchanged from the June 9 bump. +- Frame app and Frame packages unchanged. + +### SteamVR Depots + +- SteamDB depot page blocked/challenged again. +- News metadata still shows latest item as `Introducing SteamVR 2.16` from `2026-06-02T18:59:37Z`. +- No fresh depot manifest/build comparison was collected. + +### SteamOS Package Mirror + +- Reachable. +- `fremont-hw-support` remains `20260506.1-1` in `holo-3.8` and `holo-main`. +- `jupiter-main` Neptune firmware packages moved from `jupiter.20260604.1-1` to `jupiter.20260610.1-1`. +- `jupiter-3.8` Neptune firmware packages remain at `jupiter.20260604.1-1`. +- No direct Steam Frame, Steam Machine, Deckard, Roy, ARM, or Snapdragon namespace appeared. + +### Valve Support / CDN + +- Public Valve APIs unchanged: + - Controller app `4165870`: public, package `1558609`, package group present, `$99.00`. + - Frame app `4165890`: public app metadata, `Coming soon`, no packages/package groups/price. + - Machine app `4165910`: public app metadata, `Coming soon`, no packages/package groups/price. + - Machine packages `1629446`, `1629447`, `1629458`, `1629460`: `packagedetails success:false`. + - Frame packages `1629484`, `1629486`: `packagedetails success:false`. + +### Customs / Regulatory + +- Partial. +- ImportInfo fetches failed/blocked. +- ImportGenius importer pages fetched and parsed for: + - `INGRAM MICRO C/O VALVE CORPORATION` + - `CEVA C/O VALVE CORPORATION` + - `CEVA NL C/O VALVE CORPORATION` + - `VALVE CORPORATION` +- Relevant shipment count is now `36`. +- Newest high-signal rows: + - `SNHBSHACHI265173`, arrived `2026-06-10`, `CEVA C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6374 Kgs`. + - `SNHBSHACHI265174`, arrived `2026-06-10`, `CEVA C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6372 Kgs`. + - `SNHBSHACHI265175`, arrived `2026-06-10`, `CEVA C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6392 Kgs`. + - `SNHBSHACHI265176`, arrived `2026-06-10`, `CEVA C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6391 Kgs`. + - `SNHBSHALAX265177`, arrived `2026-06-10`, `CEVA NL C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6400 Kgs`. + - `SNHBHKGLBG266011`, arrived `2026-06-10`, `VALVE CORPORATION`, `WIRELESS PC CONTROLLER`, `30 PKG`, `9727 Kgs`. +- Other newly captured rows include `GAME CONSOLE` arrivals to CEVA/CEVA NL on `2026-06-03`, `2026-05-30`, and `2026-05-20`, plus `WIRELESS PC CONTROLLER` arrivals on `2026-06-02` and `2026-05-19`. +- Root cause of the miss: the customs watcher only fetched the Ingram ImportGenius page, and the parser was hard-coded around `GAME CONSOLE` rows. It now fetches the additional Valve/CEVA importer pages and parses vertical ImportGenius table rows for VR/controller labels. + +## Effect On Key Questions + +- Price: unchanged. Controller remains `$99.00`; Machine and Frame still have no public price. +- Release date: unchanged. Controller is public/released; Machine and Frame still expose only `Coming soon` / `2026`. +- Same-time launch: no. Controller is already public/purchasable; Machine and Frame still lack public package groups and prices. +- Product readiness: Machine remains the strongest Steam backend signal because of the June 9 package bump. The newly captured `VIRTUAL REALITY DEVICES` customs rows add Frame-relevant logistics corroboration, but today did not add a new SteamKit/PICS or public Valve confirmation. + +## Next Checks + +- Re-check SteamKit/PICS for continued Machine package movement. +- Try a trusted-browser SteamDB package-history pass for the four Machine package IDs to corroborate the June 9 changenumbers with human-readable history timestamps. +- Keep Valve `appdetails` / `packagedetails` under high-frequency watch for public package, package-group, price, reservation, or purchase-state exposure. +- Keep tracking ARM64 public-beta client manifest changes, but treat them as secondary unless `bins_hardware_linuxarm64` or new product-specific strings move. +- Keep ImportGenius CEVA / CEVA NL / Valve Corp importer pages in the normal customs rotation and watch for additional `VIRTUAL REALITY DEVICES`, `GAME CONSOLE`, or `WIRELESS PC CONTROLLER` arrivals. diff --git a/status/runs/2026-06-15.md b/status/runs/2026-06-15.md new file mode 100644 index 0000000..a54fc01 --- /dev/null +++ b/status/runs/2026-06-15.md @@ -0,0 +1,103 @@ +# Run Note: 2026-06-15 + +## Summary + +- Full watch pass completed. +- No watched SteamKit/PICS changenumber movement since `2026-06-09`; the all-four Steam Machine package bump remains parked at: + - `1629446`: `36426730` + - `1629447`: `36426723` + - `1629458`: `36426735` + - `1629460`: `36426739` +- Valve public APIs still show no public Machine/Frame packages, package groups, price, reservation state, or exact availability. +- Komodo product timestamps are unchanged versus `2026-06-12`. +- Customs rows are unchanged versus `2026-06-12`: the newest captured rows remain the five `2026-06-10` `VIRTUAL REALITY DEVICES` rows and same-day `WIRELESS PC CONTROLLER` row. +- SteamTracking source is now commit `fb10b74d36d7d0560d4251d5ac8be6383efcd821` (`2026-06-14T10:27:14Z`). After stripping line-number churn, the dedicated Frame, Machine, and broad hardware signal reports had `0` substantive added or removed lines versus `2026-06-12`. +- `steam_client_publicbeta_linuxarm64` moved from `1781212412` to `1781329812`; `bins_linuxarm64` and `steam_linuxarm64` changed, while `bins_hardware_linuxarm64` did not. + +## Source Checks + +### Komodo + +- Reachable. +- Product modified timestamps: + - Controller: `2026-06-10T17:25:21` + - Machine: `2026-05-27T16:53:06` + - Frame: `2026-05-27T16:53:46` +- No product timestamp movement versus `2026-06-12`. +- Visual assets: `141` discovered, `138` retrieved, `3` blocked. This is not a new product signal; one previously blocked asset was retrievable. + +### SteamDB + +- Blocked/challenge pages again for watched app/package pages, including all Machine and Frame reservation package IDs. +- No fresh SteamDB human-readable corroboration was collected. + +### SteamTracking / GameTracking + +- Source commit: `fb10b74d36d7d0560d4251d5ac8be6383efcd821`, timestamp `2026-06-14T10:27:14Z`. +- Raw comparison showed many Frame/Machine/Hardware signal line deltas, but these normalize to `0` substantive changes after removing line numbers. +- Known Frame signals remain present: + - `WelcomeToSteamFrame` + - `controller_steamframe_pair` + - `skip_steamframe_pairing_dialog` + - `SteamFrameWirelessAdapterDialog_*` + - `steamFrameVerifiedApps` + - `k_EAppTestType_SteamFrameCompatibilityReview` +- Known Machine signals remain present: + - `GuidedTour_SteamMachine_Welcome_Title` + - `GuidedTour_SteamMachine_SendOff_Description` + - `GuidedTour_SDCard_Title_SteamMachine` + - Steam Machine compatibility strings +- ARM64 manifest watch: + - `steam_client_beta_linuxarm64`: unchanged at `1780371519`. + - `steam_client_publicbeta_linuxarm64`: moved to `1781329812`. + - Public-beta `bins_linuxarm64` and `steam_linuxarm64` changed. + - Public-beta `bins_hardware_linuxarm64` did not change. + +### SteamVR Depots + +- SteamDB depot page blocked/challenged again. +- News metadata still shows latest item as `Introducing SteamVR 2.16` from `2026-06-02T18:59:37Z`. +- No fresh depot manifest/build comparison was collected. + +### SteamOS Package Mirror + +- Reachable. +- Key lines unchanged versus `2026-06-12`. +- `fremont-hw-support` remains `20260506.1-1` in `holo-3.8` and `holo-main`. +- `jupiter-main` Neptune firmware packages remain at `jupiter.20260610.1-1`. +- `jupiter-3.8` Neptune firmware packages remain at `jupiter.20260604.1-1`. +- No direct Steam Frame, Steam Machine, Deckard, Roy, ARM, or Snapdragon namespace appeared. + +### Valve Support / CDN + +- Public Valve APIs unchanged: + - Controller app `4165870`: public, package `1558609`, package group present, `$99.00`. + - Frame app `4165890`: public app metadata, `Coming soon`, no packages/package groups/price. + - Machine app `4165910`: public app metadata, `Coming soon`, no packages/package groups/price. + - Machine packages `1629446`, `1629447`, `1629458`, `1629460`: `packagedetails success:false`. + - Frame packages `1629484`, `1629486`: `packagedetails success:false`. + +### Customs / Regulatory + +- Partial. +- ImportInfo fetches failed/blocked. +- ImportGenius importer pages fetched and parsed successfully. +- Relevant shipment count remains `36`, unchanged versus `2026-06-12`. +- Newest captured rows remain: + - five `2026-06-10` `VIRTUAL REALITY DEVICES` rows to `CEVA C/O VALVE CORPORATION` / `CEVA NL C/O VALVE CORPORATION`. + - one `2026-06-10` `WIRELESS PC CONTROLLER` row to `VALVE CORPORATION`. +- No newer customs row was captured. + +## Effect On Key Questions + +- Price: unchanged. Controller remains `$99.00`; Machine and Frame still have no public price. +- Release date: unchanged. Controller is public/released; Machine and Frame still expose only `Coming soon` / `2026`. +- Same-time launch: no. Controller is already public/purchasable; Machine and Frame still lack public package groups and prices. +- Product readiness: no new public readiness signal today. Machine remains the strongest Steam backend signal because of the June 9 package bump; Frame remains supported by SteamTracking strings and the June 10 VR-labelled logistics rows, but without new PICS/API movement. + +## Next Checks + +- Re-check SteamKit/PICS for continued Machine or Frame package movement. +- Keep Valve `appdetails` / `packagedetails` under high-frequency watch for public package, package-group, price, reservation, or purchase-state exposure. +- Continue tracking `steam_client_publicbeta_linuxarm64`, but treat changes as secondary unless `bins_hardware_linuxarm64` or new product-specific strings move. +- Keep ImportGenius CEVA / CEVA NL / Valve Corp importer pages in the normal customs rotation and watch for additional `VIRTUAL REALITY DEVICES`, `GAME CONSOLE`, or `WIRELESS PC CONTROLLER` arrivals. diff --git a/status/runs/2026-06-19.md b/status/runs/2026-06-19.md new file mode 100644 index 0000000..6abc5e7 --- /dev/null +++ b/status/runs/2026-06-19.md @@ -0,0 +1,94 @@ +# Run Note: 2026-06-19 + +## Summary + +- Full watch pass completed. +- SteamKit/PICS shows another all-four Steam Machine package bump: + - `1629446`: `36426730` -> `36684622` + - `1629447`: `36426723` -> `36684817` + - `1629458`: `36426735` -> `36684854` + - `1629460`: `36426739` -> `36684765` +- Frame packages `1629484` and `1629486` did not move. +- Valve public APIs still show no public Machine/Frame packages, package groups, price, reservation state, or exact availability. +- Customs captured six newer `2026-06-17` rows: three `VIRTUAL REALITY DEVICES`, two `GAME CONSOLE`, and one `WIRELESS PC CONTROLLER`. +- SteamTracking source is now commit `9dc97c0db6a0048236a891bc6751aec9bcd880e6` (`2026-06-18T23:29:58Z`). After stripping line-number churn, the dedicated Frame, Machine, and broad hardware signal reports had `0` substantive added or removed lines versus `2026-06-15`. +- `steam_client_beta_linuxarm64` moved from `1780371519` to `1781223733`; `bins_linuxarm64`, `steam_linuxarm64`, and `runtime_steamrt_linuxarm64` changed, while `bins_hardware_linuxarm64` did not. +- SteamOS `jupiter-3.8` Neptune firmware packages caught up from `jupiter.20260604.1-1` to `jupiter.20260610.1-1`. + +## Source Checks + +### Komodo + +- Reachable. +- Product modified timestamps unchanged: + - Controller: `2026-06-10T17:25:21` + - Machine: `2026-05-27T16:53:06` + - Frame: `2026-05-27T16:53:46` +- Visual assets: `244` discovered, `232` retrieved, `12` blocked. No product timestamp, section, or product-specific Komodo publication signal changed. + +### SteamDB + +- Blocked/challenge pages again for watched app/package pages, including all Machine and Frame reservation package IDs. +- No fresh SteamDB human-readable corroboration was collected. + +### SteamTracking / GameTracking + +- Source commit: `9dc97c0db6a0048236a891bc6751aec9bcd880e6`, timestamp `2026-06-18T23:29:58Z`. +- Raw comparison showed product signal line deltas, but Frame/Machine/Hardware signal reports normalize to `0` substantive changes after removing line numbers. +- Known Frame and Machine client strings remain present, but no new focused product strings appeared. +- ARM64 manifest watch: + - `steam_client_beta_linuxarm64`: moved to `1781223733`. + - Beta `bins_linuxarm64`, `steam_linuxarm64`, and `runtime_steamrt_linuxarm64` changed. + - Beta `bins_hardware_linuxarm64` did not change. + - `steam_client_publicbeta_linuxarm64`: unchanged at `1781329812`. + +### SteamVR Depots + +- SteamDB depot page blocked/challenged again. +- News metadata still shows latest item as `Introducing SteamVR 2.16` from `2026-06-02T18:59:37Z`. +- No fresh depot manifest/build comparison was collected. + +### SteamOS Package Mirror + +- Reachable. +- `jupiter-3.8` Neptune firmware packages moved from `jupiter.20260604.1-1` to `jupiter.20260610.1-1`. +- `jupiter-main` Neptune firmware packages remain at `jupiter.20260610.1-1`. +- `fremont-hw-support` remains `20260506.1-1` in `holo-3.8` and `holo-main`. +- No direct Steam Frame, Steam Machine, Deckard, Roy, ARM, or Snapdragon namespace appeared. + +### Valve Support / CDN + +- Public Valve APIs unchanged: + - Controller app `4165870`: public, package `1558609`, package group present, `$99.00`. + - Frame app `4165890`: public app metadata, `Coming soon`, no packages/package groups/price. + - Machine app `4165910`: public app metadata, `Coming soon`, no packages/package groups/price. + - Machine packages `1629446`, `1629447`, `1629458`, `1629460`: `packagedetails success:false`. + - Frame packages `1629484`, `1629486`: `packagedetails success:false`. + +### Customs / Regulatory + +- Partial. +- ImportInfo fetches failed/blocked. +- ImportGenius importer pages fetched and parsed successfully. +- Relevant shipment count is now `37`. +- Newest captured rows: + - `SNHBSHACHI265222`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `GAME CONSOLE`, `42 PKG`, `12698 Kgs`. + - `SNHBSHACHI265217`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `GAME CONSOLE`, `42 PKG`, `12554 Kgs`. + - `SNHBSHACHI265224`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6464 Kgs`. + - `SNHBSHALAX265223`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6467 Kgs`. + - `SNHBSHACHI265216`, arrived `2026-06-17`, `CEVA NL C/O VALVE CORPORATION`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6406 Kgs`. + - `SNHBHKGLBG266038`, arrived `2026-06-17`, `VALVE CORPORATION`, `WIRELESS PC CONTROLLER`, `40 PKG`, `12970 Kgs`. + +## Effect On Key Questions + +- Price: unchanged. Controller remains `$99.00`; Machine and Frame still have no public price. +- Release date: unchanged. Controller is public/released; Machine and Frame still expose only `Coming soon` / `2026`. +- Same-time launch: no. Controller is already public/purchasable; Machine and Frame still lack public package groups and prices. +- Product readiness: Steam Machine now has a fourth watched package movement event after the original May 12 cluster and May 14 / June 9 follow-ups. This is a stronger near-term backend signal, but public Valve API readiness is still absent. Frame remains supported by SteamTracking strings and repeated VR-labelled logistics rows, but its watched package IDs did not move. + +## Next Checks + +- Re-check SteamKit/PICS frequently for continued Machine package movement or any Frame package movement. +- Watch Valve `appdetails` / `packagedetails` for public package, package-group, price, reservation, or purchase-state exposure. +- Continue tracking ARM64 client manifests, but treat changes as secondary unless `bins_hardware_linuxarm64` or new product-specific strings move. +- Keep ImportGenius CEVA / CEVA NL / Valve Corp importer pages in the normal customs rotation and watch for additional `VIRTUAL REALITY DEVICES`, `GAME CONSOLE`, or `WIRELESS PC CONTROLLER` arrivals. diff --git a/status/runs/2026-06-22.md b/status/runs/2026-06-22.md new file mode 100644 index 0000000..39e5096 --- /dev/null +++ b/status/runs/2026-06-22.md @@ -0,0 +1,141 @@ +# Run Note: 2026-06-22 + +## Summary + +- Full watch pass completed after rerunning with Homebrew `python3` and `dotnet` on `PATH`; a later post-launch pass on the same date captured Steam Machine public availability. +- Steam Machine is now public in Valve store APIs: + - App `4165910`: package group present, `coming_soon=False`, release date `Jun 30, 2026`, starting price `$1,049.00` US / `£879.00` UK. + - Package `1629447`: `Steam Machine 512GB`, `$1,049.00` US / `£879.00` UK. + - Package `1629458`: `Steam Machine 512GB with Controller`, `$1,128.00` US / `£938.00` UK. + - Package `1629446`: `Steam Machine 2TB`, `$1,349.00` US / `£1,149.00` UK. + - Package `1629460`: `Steam Machine 2TB with Controller`, `$1,428.00` US / `£1,208.00` UK. +- SteamKit/PICS shows the final Steam Machine launch movement: + - App `4165910`: `35675573` -> `36756875` + - `1629446`: `36684622` -> `36756963` + - `1629447`: `36684817` -> `36756942` + - `1629458`: `36684854` -> `36756957` + - `1629460`: `36684765` -> `36756953` +- Steam Controller package `1558609` also moved: `35893035` -> `36708367`. +- Frame packages `1629484` and `1629486` did not move. +- Komodo was unblocked after fixing the Playwright runtime path, and the rerun found eleven new Steam Machine sections plus 26 new `2026-06-22` Steam Machine media rows. +- Komodo still lags the Valve API launch state: `steam-machine_jpy` remains `wishlist-only`, `hide-product-top`, and `outofstock`. +- SteamTracking source is now commit `d8c88a286f382752aa90b7dd5a9aa057db78a077` (`2026-06-19T23:33:59Z`). After stripping line-number churn, Machine-specific focused signals had no substantive additions, while Frame/hardware signals gained new/renamed setup-tour and wireless-adapter localization strings. +- `steam_client_publicbeta_linuxarm64` moved from `1781329812` to `1781911235`; `bins_hardware_linuxarm64` did not change. +- Customs still shows the newest high-signal rows from `2026-06-17`; no newer rows appeared in this pass. +- SteamDB was still marked challenge-prone by the summary, but the watcher collected usable package rows; all four watched Machine packages are now `details_available`. SteamVR depot pages were blocked or unavailable in automated fetches. Komodo is now reachable through the dedicated Chrome fallback. + +## Source Checks + +### Komodo + +- Reachable after fixing the trusted-browser Playwright runtime path and rerunning through the dedicated Chrome session. +- Product modified timestamps did not move: + - Controller modified `2026-06-10T17:25:21` + - Machine modified `2026-05-27T16:53:06` + - Frame modified `2026-05-27T16:53:46` +- New Steam Machine sections appeared: + - `450860`, `steam-machine-01-video`, modified `2026-06-22T16:37:43` + - `450868`, `steam-machine-03-video`, modified `2026-06-22T16:40:28` + - `450879`, `steam-machine-04-core-features`, modified `2026-06-22T16:49:30` + - `450964`, `steam-machine-05-video`, modified `2026-06-22T17:57:08` + - `450889`, `steam-machine-06-led-strip`, modified `2026-06-22T17:08:53` + - `450898`, `steam-machine-07-support`, modified `2026-06-22T17:18:55` + - `450908`, `steam-machine-08-pc`, modified `2026-06-22T17:23:44` + - `450917`, `steam-machine-09-pc-video`, modified `2026-06-22T17:32:03` + - `450972`, `steam-machine-10-plays-well`, modified `2026-06-22T18:01:29` + - `450925`, `steam-machine-11-tech-image`, modified `2026-06-22T17:35:06` + - `450933`, `steam-machine-12-tech-spec`, modified `2026-06-22T17:38:12` +- New `2026-06-22` Steam Machine media rows: `26`. + - Videos: `1c680883b4ac485b8045ba803630e78b.webm`, `270436d9ea881d8de5fb3191b547c6ae.webm`, `318490ba6322069a2a0092f2bab3c859.webm`, `01c98c52768f5d31467c6457a8df34c5.webm`, `bd9c2d3097272d7988b17a75d6d0bb71_5742ad.webm`, `66b311bc8270cdddd30485d0f0ac5fc0.webm`, and `ff1e8d1fdd73c23ade6225f044e41ad6_2_82c6f9.webm`. + - Images include `machine_video.png`, `machine_video3.png`, `machine_video5.webp`, `PC-video.png`, `ledstrip.png`, `together1_2.webp`, `together2.png`, `en-1ea15f358f35300145df48e86c5eb224.avif`, and `jp-0b2db0fb1925a7f3c3162729564d94eb.avif`. +- Visual assets: `425` discovered, `400` retrieved, `25` blocked. Most blocked rows are known Controller WEBP variants; new `machine_video5.webp` variants should be retried manually if visual completeness matters. +- No equivalent new Steam Frame sections or media appeared. + +### SteamDB + +- SteamDB remained challenge-prone, but the watcher collected usable package rows for all watched reservation package IDs. +- SteamDB corroborates the public launch conversion: + - `1629446`: last record update `22 June 2026 - 16:58:26 UTC`, changenumber `36756963`, details available. + - `1629447`: last record update `22 June 2026 - 16:57:36 UTC`, changenumber `36756942`, details available. + - `1629458`: last record update `22 June 2026 - 16:58:14 UTC`, changenumber `36756957`, details available. + - `1629460`: last record update `22 June 2026 - 16:58:02 UTC`, changenumber `36756953`, details available. + +### SteamKit / PICS + +- Reachable. +- Package movement: + - Controller package `1558609`: `35893035` -> `36708367` + - Machine app `4165910`: `35675573` -> `36756875` + - Machine package `1629446`: `36684622` -> `36756963` + - Machine package `1629447`: `36684817` -> `36756942` + - Machine package `1629458`: `36684854` -> `36756957` + - Machine package `1629460`: `36684765` -> `36756953` +- Frame packages stayed unchanged: + - `1629484`: `35672606` + - `1629486`: `35672606` +- Machine package details are now available and tied to app `4165910`; Frame package details are still private metadata token required. + +### SteamTracking / GameTracking + +- Source commit: `d8c88a286f382752aa90b7dd5a9aa057db78a077`, timestamp `2026-06-19T23:33:59Z`. +- Content-normalized focused signal comparison versus `2026-06-19`: + - Frame report: one symbol/reference rename only after normalization. + - Machine report: `0` substantive added or removed focused lines. + - Broad hardware report: new/renamed Frame setup-tour and wireless-adapter localization strings, including `GuidedTour_FrameAlreadyPairedWith`, `GuidedTour_FrameNowPairedWith`, `GuidedTour_Frame_SetupComplete`, `GuidedTour_SearchingForWirelessAdapter`, and `GuidedTour_WirelessAdapterDetected`. +- ARM64 manifest watch: + - `steam_client_beta_linuxarm64`: unchanged at `1781223733`. + - `steam_client_publicbeta_linuxarm64`: moved to `1781911235`. + - Public beta `bins_linuxarm64`, `steam_linuxarm64`, `bins_steamrt_linuxarm64`, `bins_misc_linuxarm64`, and `webkit_linuxarm64` changed. + - Public beta `bins_hardware_linuxarm64` did not change. + +### SteamVR Depots + +- SteamDB depot page blocked/challenged again. +- News metadata still shows latest item as `Introducing SteamVR 2.16` from `2026-06-02T18:59:37Z`. +- No fresh depot manifest/build comparison was collected. + +### SteamOS Package Mirror + +- Reachable. +- `jupiter-3.8` Neptune firmware packages moved from `jupiter.20260610.1-1` to `jupiter.20260610.1-1.1`. +- `jupiter-main` Neptune firmware packages remain at `jupiter.20260610.1-1`. +- `fremont-hw-support` remains `20260506.1-1` in `holo-3.8` and `holo-main`. +- No direct Steam Frame, Steam Machine, Deckard, Roy, ARM, or Snapdragon namespace appeared. + +### Valve Support / CDN + +- Public Valve APIs changed materially: + - Controller app `4165870`: public, package `1558609`, package group present, `$99.00`. + - Frame app `4165890`: public app metadata, `Coming soon`, no packages/package groups/price. + - Machine app `4165910`: public app metadata, `Jun 30, 2026`, package group present, starting price `$1,049.00`. + - Machine packages `1629446`, `1629447`, `1629458`, `1629460`: `packagedetails success:true`. + - Frame packages `1629484`, `1629486`: `packagedetails success:false`. + +### Customs / Regulatory + +- Partial. +- ImportInfo fetches failed/blocked. +- ImportGenius importer pages fetched and parsed successfully. +- Relevant shipment count remains `37`. +- Newest captured rows remain the `2026-06-17` batch: + - `SNHBSHACHI265222`, `GAME CONSOLE`, `42 PKG`, `12698 Kgs`. + - `SNHBSHACHI265217`, `GAME CONSOLE`, `42 PKG`, `12554 Kgs`. + - `SNHBSHACHI265224`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6464 Kgs`. + - `SNHBSHALAX265223`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6467 Kgs`. + - `SNHBSHACHI265216`, `VIRTUAL REALITY DEVICES`, `42 PKG`, `6406 Kgs`. + - `SNHBHKGLBG266038`, `WIRELESS PC CONTROLLER`, `40 PKG`, `12970 Kgs`. + +## Effect On Key Questions + +- Price: Steam Machine now has public prices: `$1,049.00` / `$1,128.00` / `$1,349.00` / `$1,428.00` in the US and `£879.00` / `£938.00` / `£1,149.00` / `£1,208.00` in the UK. Frame still has no public price. +- Release date: Steam Machine now exposes `Jun 30, 2026`; Frame still exposes only `Coming soon`. +- Same-time launch: no. Controller is already public/purchasable, Machine is now public with package group and prices, and Frame still lacks public package groups and prices. +- Product readiness: Steam Machine launch is confirmed through Valve public APIs, SteamKit/PICS availability, and SteamDB package details. Frame has new/renamed SteamTracking setup-tour strings and repeated VR-labelled logistics rows, but its watched package IDs did not move and Komodo did not expose new Frame sections. + +## Next Checks + +- Re-check SteamKit/PICS for post-launch Machine amendments and any Frame package movement. +- Keep the dedicated Komodo Chrome fallback alive during launch-watch windows; it is now working with the bundled Playwright runtime, and Komodo has not yet flipped its Machine product layer. +- Watch Valve `appdetails` / `packagedetails` for Frame public package, package-group, price, reservation, or purchase-state exposure. +- Continue tracking ARM64 client manifests, but treat changes as secondary unless `bins_hardware_linuxarm64` or new product-specific strings move. +- Keep ImportGenius CEVA / CEVA NL / Valve Corp importer pages in the normal customs rotation and watch for additional `VIRTUAL REALITY DEVICES`, `GAME CONSOLE`, or `WIRELESS PC CONTROLLER` arrivals. diff --git a/tests/test_check_komodo.py b/tests/test_check_komodo.py index 7bf398d..92d6585 100644 --- a/tests/test_check_komodo.py +++ b/tests/test_check_komodo.py @@ -159,6 +159,7 @@ class CheckKomodoTests(unittest.TestCase): "PATH": f"{fake_bin}:{env['PATH']}", "KOMODO_ENV_FILE": str(tmp_path / "missing-komodo-env.sh"), "KOMODO_PLAYWRIGHT_FALLBACK": "1", + "KOMODO_AUTO_BOOTSTRAP": "0", } ) @@ -188,6 +189,106 @@ class CheckKomodoTests(unittest.TestCase): (run_dir / "reports" / "komodo-frame-sections.tsv").read_text(encoding="utf-8"), ) + def test_playwright_fallback_bootstraps_dedicated_browser_when_cdp_is_stale(self): + tmp = TemporaryDirectory() + self.addCleanup(tmp.cleanup) + tmp_path = Path(tmp.name) + run_dir = tmp_path / "run" + fake_bin = tmp_path / "bin" + fake_bin.mkdir() + env_file = tmp_path / "komodo-env.sh" + bootstrap_log = tmp_path / "bootstrap.log" + + env_file.write_text( + "\n".join( + [ + "export KOMODO_PLAYWRIGHT_FALLBACK=1", + f'export PLAYWRIGHT_PROFILE_DIR="{tmp_path / "profile"}"', + 'export PLAYWRIGHT_CDP_ENDPOINT="http://127.0.0.1:9"', + ] + ) + + "\n", + encoding="utf-8", + ) + + write_executable( + fake_bin / "curl", + r""" + #!/bin/sh + for arg do + url="$arg" + done + case "$url" in + http://127.0.0.1:9/json/version) + exit 7 + ;; + *wp-json/wp/v2/product/413763*) + printf '%s\n' '{"modified":"2026-05-14T12:00:00","title":{"rendered":"Steam Controller"}}' + ;; + *wp-json/wp/v2/sections?search=Steam%20Controller*|*wp-json/wp/v2/media?search=Steam%20Controller*|*wp-json/wp/v2/media?parent=*) + printf '%s\n' '[]' + ;; + *wp-json/wp/v2/product/413772*|*wp-json/wp/v2/product/413776*|*wp-json/wp/v2/sections?search=Steam%20Machine*|*wp-json/wp/v2/sections?search=Steam%20Frame*) + exit 22 + ;; + *wp-json/*) + printf '%s\n' '{"name":"Komodo"}' + ;; + *) + exit 22 + ;; + esac + """, + ) + write_executable(fake_bin / "playwright-cli", "#!/bin/sh\nexit 0") + write_executable( + fake_bin / "node", + r""" + #!/bin/sh + url="$2" + output="$3" + case "$url" in + *wp-json/wp/v2/product/413772*) + printf '%s\n' '{"modified":"2026-05-14T12:00:00","title":{"rendered":"Steam Machine"}}' > "$output" + ;; + *wp-json/wp/v2/product/413776*) + printf '%s\n' '{"modified":"2026-05-14T12:00:00","title":{"rendered":"Steam Frame"}}' > "$output" + ;; + *) + printf '%s\n' '[]' > "$output" + ;; + esac + """, + ) + write_executable( + tmp_path / "bootstrap-komodo.sh", + f"#!/bin/sh\nprintf '%s\\n' bootstrap >> '{bootstrap_log}'\ncat > '{env_file}' <<'EOF'\nexport KOMODO_PLAYWRIGHT_FALLBACK=1\nexport PLAYWRIGHT_PROFILE_DIR=\"{tmp_path / 'profile'}\"\nexport PLAYWRIGHT_CDP_ENDPOINT=\"http://127.0.0.1:55684\"\nEOF\n", + ) + + env = os.environ.copy() + env.update( + { + "PATH": f"{fake_bin}:{env['PATH']}", + "KOMODO_ENV_FILE": str(env_file), + "KOMODO_BOOTSTRAP_CMD": str(tmp_path / "bootstrap-komodo.sh"), + } + ) + + result = subprocess.run( + [str(ROOT / "scripts" / "check_komodo.sh"), str(run_dir)], + cwd=ROOT, + env=env, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + ) + + self.assertEqual("", result.stderr) + self.assertEqual(0, result.returncode) + self.assertTrue(bootstrap_log.exists()) + self.assertIn("bootstrap", bootstrap_log.read_text(encoding="utf-8")) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_check_steamdb.py b/tests/test_check_steamdb.py index 6464ec7..116abb2 100644 --- a/tests/test_check_steamdb.py +++ b/tests/test_check_steamdb.py @@ -83,6 +83,7 @@ class CheckSteamDBTests(unittest.TestCase): "FAKE_NODE_MODE": node_mode, "FAKE_LOG_DIR": str(log_dir), "STEAMDB_PLAYWRIGHT_FALLBACK": "1", + "STEAMDB_AUTO_BOOTSTRAP": "0", } ) @@ -130,6 +131,86 @@ class CheckSteamDBTests(unittest.TestCase): errors = (run_dir / "reports" / "steamdb-errors.txt").read_text(encoding="utf-8") self.assertEqual("", errors) + def test_playwright_fallback_bootstraps_dedicated_browser_when_cdp_is_stale(self): + tmp = TemporaryDirectory() + self.addCleanup(tmp.cleanup) + tmp_path = Path(tmp.name) + run_dir = tmp_path / "run" + fake_bin = tmp_path / "bin" + fake_bin.mkdir() + log_dir = tmp_path / "logs" + log_dir.mkdir() + env_file = tmp_path / "steamdb-env.sh" + bootstrap_log = tmp_path / "bootstrap.log" + + env_file.write_text( + "\n".join( + [ + "export STEAMDB_PLAYWRIGHT_FALLBACK=1", + f'export STEAMDB_PROFILE_DIR="{tmp_path / "profile"}"', + 'export STEAMDB_CDP_ENDPOINT="http://127.0.0.1:9"', + ] + ) + + "\n", + encoding="utf-8", + ) + + write_executable( + fake_bin / "curl", + """ + #!/bin/sh + case "$*" in + *127.0.0.1:9/json/version*) + exit 7 + ;; + *) + printf '%s\\n' 'Just a moment...Checking your browser... Cloudflare' + ;; + esac + """, + ) + write_executable( + fake_bin / "node", + """ + #!/bin/sh + printf '%s\\n' "$*" >> "$FAKE_LOG_DIR/node-args.log" + output="" + for arg in "$@"; do + output="$arg" + done + printf '%s\\n' 'Steam Controller AppID: 4165870Coming soon prerelease' > "$output" + """, + ) + write_executable( + tmp_path / "bootstrap-steamdb.sh", + f"#!/bin/sh\nprintf '%s\\n' bootstrap >> '{bootstrap_log}'\ncat > '{env_file}' <<'EOF'\nexport STEAMDB_PLAYWRIGHT_FALLBACK=1\nexport STEAMDB_PROFILE_DIR=\"{tmp_path / 'profile'}\"\nexport STEAMDB_CDP_ENDPOINT=\"http://127.0.0.1:55685\"\nEOF\n", + ) + + env = os.environ.copy() + env.update( + { + "PATH": f"{fake_bin}:{env['PATH']}", + "FAKE_LOG_DIR": str(log_dir), + "STEAMDB_ENV_FILE": str(env_file), + "STEAMDB_BOOTSTRAP_CMD": str(tmp_path / "bootstrap-steamdb.sh"), + } + ) + + result = subprocess.run( + [str(ROOT / "scripts" / "check_steamdb.sh"), str(run_dir)], + cwd=ROOT, + env=env, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + ) + + self.assertEqual("", result.stderr) + self.assertEqual(0, result.returncode) + self.assertTrue(bootstrap_log.exists()) + self.assertIn("bootstrap", bootstrap_log.read_text(encoding="utf-8")) + def test_records_reservation_package_update_baseline(self): tmp = TemporaryDirectory() self.addCleanup(tmp.cleanup) diff --git a/tests/test_customs_shipments.py b/tests/test_customs_shipments.py index 7c64c00..d71e1fc 100644 --- a/tests/test_customs_shipments.py +++ b/tests/test_customs_shipments.py @@ -70,6 +70,86 @@ IMPORTGENIUS_HTML = textwrap.dedent( ) +IMPORTGENIUS_CEVA_VR_HTML = textwrap.dedent( + """ + + +

CEVA C/o Valve Corporation

+

Updated: 2026-06-10

+
+

Importer Shipments

+

# Bill of Lading Product Importer Supplier Arrival Date Country of Origin Gross Weight KGS Quantity

+

1 SNHBSHACHI265173 VIRTUAL REALITY DEVICES CEVA C/O VALVE CORPORATION TECH-FRONT (CHONGQING) COMPUTER CO 2026-06-10 China 6374 Kgs 42 PKG

+

2 SNHBSHACHI265174 VIRTUAL REALITY DEVICES CEVA C/O VALVE CORPORATION TECH-FRONT (CHONGQING) COMPUTER CO 2026-06-10 China 6372 Kgs 42 PKG

+
+ + + """ +) + + +IMPORTGENIUS_VERTICAL_CEVA_VR_HTML = textwrap.dedent( + """ + + +

CEVA C/o Valve Corporation

+
+

Importer Shipments

+
#
Bill of Lading
Product
Importer
+
Supplier
Arrival Date
Country of Origin
+
Gross Weight KGS
Quantity
+
1
+
SNHBSHACHI265173
+
VIRTUAL REALITY DEVICES
+
CEVA C/O VALVE CORPORATION
+
TECH-FRONT (CHONGQING) COMPUTER CO
+
2026-06-10
+
China
+
6374 Kgs
+
42 PKG
+
+ + + """ +) + + +IMPORTGENIUS_CEVA_NL_VR_HTML = textwrap.dedent( + """ + + +

CEVA NL C/o Valve Corporation

+

Updated: 2026-06-10

+
+

Importer Shipments

+

# Bill of Lading Product Importer Supplier Arrival Date Country of Origin Gross Weight KGS Quantity

+

1 SNHBSHALAX265177 VIRTUAL REALITY DEVICES CEVA NL C/O VALVE CORPORATION TECH-FRONT (CHONGQING) COMPUTER CO 2026-06-10 China 6400 Kgs 42 PKG

+
+ + + """ +) + + +IMPORTGENIUS_VALVE_CONTROLLER_HTML = textwrap.dedent( + """ + + +

Valve Corporation

+

Updated: 2026-06-10

+
+

Importer Shipments

+

# Bill of Lading Product Importer Supplier Arrival Date Country of Origin Gross Weight KGS Quantity

+

1 SNHBHKGLBG266011 WIRELESS PC CONTROLLER VALVE CORPORATION CHENG UEI PRECISION IND. CO LTD 2026-06-10 Hong Kong 9727 Kgs 30 PKG

+

4 DSVFMIL0341656 PNEUMATIC ACTUATOR VALVE 48 LLC L.P.S. SRL PER CONTO BIFFI ITALIA S 2026-05-16 Italy 1830 Kgs 1 CAS

+

5 SNHBHKGLBG265013 WIRELESS PC CONTROLLER VALVE CORPORATION CHENG UEI PRECISION IND. CO LTD 2026-05-12 Hong Kong 12970 Kgs 40 PKG

+
+ + + """ +) + + def run_parser(args, reports): return subprocess.run( [ @@ -289,6 +369,74 @@ class CustomsShipmentParserTests(unittest.TestCase): self.assertIn("SNHBSHACHI265020", key_lines) self.assertIn("2026-05-18", key_lines) + def test_extracts_importgenius_virtual_reality_device_rows(self): + with TemporaryDirectory() as tmp: + tmp_path = Path(tmp) + ceva = tmp_path / "importgenius-ceva.html" + ceva_nl = tmp_path / "importgenius-ceva-nl.html" + ceva.write_text(IMPORTGENIUS_CEVA_VR_HTML, encoding="utf-8") + ceva_nl.write_text(IMPORTGENIUS_CEVA_NL_VR_HTML, encoding="utf-8") + reports = tmp_path / "reports" + + result = run_parser( + [ + "--input", + f"importgenius-ceva-valve={ceva}", + "--input", + f"importgenius-ceva-nl-valve={ceva_nl}", + ], + reports, + ) + + self.assertEqual("", result.stderr) + self.assertEqual(0, result.returncode) + rows = read_rows(reports) + self.assertEqual( + ["SNHBSHACHI265173", "SNHBSHACHI265174", "SNHBSHALAX265177"], + [row["house_bol"] for row in rows], + ) + self.assertTrue( + all(row["commodity"] == "VIRTUAL REALITY DEVICES" for row in rows) + ) + self.assertEqual("CEVA C/O VALVE CORPORATION", rows[0]["consignee"]) + self.assertEqual("CEVA NL C/O VALVE CORPORATION", rows[2]["consignee"]) + + def test_extracts_importgenius_vertical_table_rows(self): + with TemporaryDirectory() as tmp: + tmp_path = Path(tmp) + html = tmp_path / "importgenius-ceva-vertical.html" + html.write_text(IMPORTGENIUS_VERTICAL_CEVA_VR_HTML, encoding="utf-8") + reports = tmp_path / "reports" + + result = run_parser(["--input", f"importgenius-ceva-valve={html}"], reports) + + self.assertEqual("", result.stderr) + self.assertEqual(0, result.returncode) + rows = read_rows(reports) + self.assertEqual(["SNHBSHACHI265173"], [row["house_bol"] for row in rows]) + self.assertEqual("VIRTUAL REALITY DEVICES", rows[0]["commodity"]) + self.assertEqual("6374 Kgs", rows[0]["weight"]) + + def test_extracts_importgenius_wireless_pc_controller_rows(self): + with TemporaryDirectory() as tmp: + tmp_path = Path(tmp) + html = tmp_path / "importgenius-valve-corp.html" + html.write_text(IMPORTGENIUS_VALVE_CONTROLLER_HTML, encoding="utf-8") + reports = tmp_path / "reports" + + result = run_parser(["--input", f"importgenius-valve-corp={html}"], reports) + + self.assertEqual("", result.stderr) + self.assertEqual(0, result.returncode) + rows = read_rows(reports) + self.assertEqual( + ["SNHBHKGLBG266011", "SNHBHKGLBG265013"], + [row["house_bol"] for row in rows], + ) + self.assertEqual("WIRELESS PC CONTROLLER", rows[0]["commodity"]) + self.assertEqual("VALVE CORPORATION", rows[0]["consignee"]) + self.assertEqual("CHENG UEI PRECISION IND. CO LTD", rows[0]["shipper"]) + class CheckCustomsShipmentsShellTests(unittest.TestCase): def test_fetches_pages_and_runs_parser(self): @@ -458,6 +606,76 @@ class CheckCustomsShipmentsShellTests(unittest.TestCase): ).read_text(encoding="utf-8") self.assertIn("SNHBSHACHI265020", key_lines) + def test_fetches_additional_importgenius_valve_importer_pages(self): + with TemporaryDirectory() as tmp: + tmp_path = Path(tmp) + run_dir = tmp_path / "run" + fake_bin = tmp_path / "bin" + fake_bin.mkdir() + (tmp_path / "importgenius-ingram-fixture.html").write_text( + IMPORTGENIUS_HTML, encoding="utf-8" + ) + (tmp_path / "importgenius-ceva-fixture.html").write_text( + IMPORTGENIUS_CEVA_VR_HTML, encoding="utf-8" + ) + (tmp_path / "importgenius-ceva-nl-fixture.html").write_text( + IMPORTGENIUS_CEVA_NL_VR_HTML, encoding="utf-8" + ) + (tmp_path / "importgenius-valve-corp-fixture.html").write_text( + IMPORTGENIUS_VALVE_CONTROLLER_HTML, encoding="utf-8" + ) + write_executable( + fake_bin / "curl", + f""" + #!/bin/sh + for arg do + url="$arg" + done + case "$url" in + *importgenius.com/importers/ingram-micro-c-o-valve-corporation) + cat "{tmp_path / "importgenius-ingram-fixture.html"}" + ;; + *importgenius.com/importers/ceva-c-o-valve-corporation) + cat "{tmp_path / "importgenius-ceva-fixture.html"}" + ;; + *importgenius.com/importers/ceva-nl-c-o-valve-corporation) + cat "{tmp_path / "importgenius-ceva-nl-fixture.html"}" + ;; + *importgenius.com/importers/valve-corp) + cat "{tmp_path / "importgenius-valve-corp-fixture.html"}" + ;; + *) + exit 22 + ;; + esac + """, + ) + env = os.environ.copy() + env["PATH"] = f"{fake_bin}{os.pathsep}{env['PATH']}" + + result = subprocess.run( + [str(ROOT / "scripts" / "check_customs_shipments.sh"), str(run_dir)], + cwd=ROOT, + env=env, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + ) + + self.assertEqual("", result.stderr) + self.assertEqual(0, result.returncode) + customs_dir = run_dir / "api" / "customs" + self.assertTrue((customs_dir / "importgenius-ceva-valve.html").exists()) + self.assertTrue((customs_dir / "importgenius-ceva-nl-valve.html").exists()) + self.assertTrue((customs_dir / "importgenius-valve-corp.html").exists()) + key_lines = ( + run_dir / "reports" / "customs-shipments-key-lines.txt" + ).read_text(encoding="utf-8") + self.assertIn("SNHBSHACHI265173", key_lines) + self.assertIn("SNHBSHALAX265177", key_lines) + self.assertIn("SNHBHKGLBG266011", key_lines) + class CustomsSummaryIntegrationTests(unittest.TestCase): def test_run_summary_and_status_draft_include_customs_lines(self): diff --git a/tests/test_new_sources.py b/tests/test_new_sources.py index 08c76cc..100a033 100644 --- a/tests/test_new_sources.py +++ b/tests/test_new_sources.py @@ -176,6 +176,170 @@ class CheckSteamVRDepotsTests(unittest.TestCase): self.assertIn("Steam Frame", key_lines) self.assertIn("Deckard", key_lines) + def test_uses_steamdb_playwright_fallback_for_depot_page(self): + tmp = TemporaryDirectory() + self.addCleanup(tmp.cleanup) + tmp_path = Path(tmp.name) + run_dir = tmp_path / "run" + fake_bin = tmp_path / "bin" + fake_bin.mkdir() + log_dir = tmp_path / "logs" + log_dir.mkdir() + + write_executable( + fake_bin / "curl", + """ + #!/bin/sh + for arg in "$@"; do + url="$arg" + done + case "$url" in + *steamdb.info*) + printf '%s\\n' 'Just a moment...Checking your browser Cloudflare' + ;; + *ISteamNews*) + printf '%s\\n' '{"appnews":{"appid":250820,"newsitems":[]}}' + ;; + *) + echo "unexpected url: $url" >&2 + exit 22 + ;; + esac + """, + ) + write_executable( + fake_bin / "node", + """ + #!/bin/sh + printf '%s\\n' "$*" >> "$FAKE_LOG_DIR/node-args.log" + output="" + for arg in "$@"; do + output="$arg" + done + printf '%s\\n' '
250823Linux OpenVR Linux
Build ID123
publicSteam Frame depot note
' > "$output" + """, + ) + + env = os.environ.copy() + env.update( + { + "PATH": f"{fake_bin}:{env['PATH']}", + "FAKE_LOG_DIR": str(log_dir), + "STEAMDB_PLAYWRIGHT_FALLBACK": "1", + "STEAMDB_AUTO_BOOTSTRAP": "0", + } + ) + + result = subprocess.run( + [str(ROOT / "scripts" / "check_steamvr_depots.sh"), str(run_dir)], + cwd=ROOT, + env=env, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + ) + + self.assertEqual("", result.stderr) + self.assertEqual(0, result.returncode) + self.assertTrue((log_dir / "node-args.log").exists()) + self.assertTrue((run_dir / "api" / "steamvr-depots" / "steamdb-depots.html").exists()) + errors = (run_dir / "reports" / "steamvr-depots-errors.txt").read_text( + encoding="utf-8" + ) + key_lines = (run_dir / "reports" / "steamvr-depots-key-lines.txt").read_text( + encoding="utf-8" + ) + self.assertEqual("", errors) + self.assertIn("Steam Frame", key_lines) + + def test_steamdb_playwright_fallback_bootstraps_when_cdp_is_stale(self): + tmp = TemporaryDirectory() + self.addCleanup(tmp.cleanup) + tmp_path = Path(tmp.name) + run_dir = tmp_path / "run" + fake_bin = tmp_path / "bin" + fake_bin.mkdir() + log_dir = tmp_path / "logs" + log_dir.mkdir() + env_file = tmp_path / "steamdb-env.sh" + bootstrap_log = tmp_path / "bootstrap.log" + + env_file.write_text( + "\n".join( + [ + "export STEAMDB_PLAYWRIGHT_FALLBACK=1", + f'export STEAMDB_PROFILE_DIR="{tmp_path / "profile"}"', + 'export STEAMDB_CDP_ENDPOINT="http://127.0.0.1:9"', + ] + ) + + "\n", + encoding="utf-8", + ) + + write_executable( + fake_bin / "curl", + """ + #!/bin/sh + case "$*" in + *127.0.0.1:9/json/version*) + exit 7 + ;; + *steamdb.info*) + printf '%s\\n' 'Just a moment...Checking your browser Cloudflare' + ;; + *ISteamNews*) + printf '%s\\n' '{"appnews":{"appid":250820,"newsitems":[]}}' + ;; + *) + echo "unexpected args: $*" >&2 + exit 22 + ;; + esac + """, + ) + write_executable( + fake_bin / "node", + """ + #!/bin/sh + printf '%s\\n' "$*" >> "$FAKE_LOG_DIR/node-args.log" + output="" + for arg in "$@"; do + output="$arg" + done + printf '%s\\n' '
publicSteam Frame depot note
' > "$output" + """, + ) + write_executable( + tmp_path / "bootstrap-steamdb.sh", + f"#!/bin/sh\nprintf '%s\\n' bootstrap >> '{bootstrap_log}'\ncat > '{env_file}' <<'EOF'\nexport STEAMDB_PLAYWRIGHT_FALLBACK=1\nexport STEAMDB_PROFILE_DIR=\"{tmp_path / 'profile'}\"\nexport STEAMDB_CDP_ENDPOINT=\"http://127.0.0.1:55685\"\nEOF\n", + ) + + env = os.environ.copy() + env.update( + { + "PATH": f"{fake_bin}:{env['PATH']}", + "FAKE_LOG_DIR": str(log_dir), + "STEAMDB_ENV_FILE": str(env_file), + "STEAMDB_BOOTSTRAP_CMD": str(tmp_path / "bootstrap-steamdb.sh"), + } + ) + + result = subprocess.run( + [str(ROOT / "scripts" / "check_steamvr_depots.sh"), str(run_dir)], + cwd=ROOT, + env=env, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + ) + + self.assertEqual("", result.stderr) + self.assertEqual(0, result.returncode) + self.assertTrue(bootstrap_log.exists()) + self.assertTrue((log_dir / "node-args.log").exists()) + if __name__ == "__main__": unittest.main()