mirror of
https://github.com/seanbetts/steam-hardware-watch.git
synced 2026-10-06 01:00:18 +02:00
Capture Steam Machine launch watch baseline
This commit is contained in:
1 parent
dab6f8b6d0
commit
ed9f4500a2
23 files changed
+1926
-82
No files matched your search
@@ -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" \
|
||||
|
||||
+105
-7
@@ -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 '
|
||||
.[]?
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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."
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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."
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<rank>\d+)\s+"
|
||||
r"(?P<bol>[A-Z0-9]+)\s+"
|
||||
r"(?P<product>GAME\s+CONSOLE\s*\.?)\s+"
|
||||
r"(?P<importer>(?:INGRAM\s+MICRO|CEVA)\s+C/O\s+VALVE\s+CORPORATION)\s+"
|
||||
r"(?P<supplier>TECH-?FRONT\s+\(CHONGQING\)\s+COMPUTER\s+CO)\s+"
|
||||
r"(?P<product>[A-Z0-9][A-Z0-9 ./&()'-]+?)\s+"
|
||||
r"(?P<importer>" + importer_pattern + r")\s+"
|
||||
r"(?P<supplier>" + supplier_pattern + r")\s+"
|
||||
r"(?P<arrival>\d{4}-\d{2}-\d{2})\s+"
|
||||
r"(?P<country>[A-Za-z ]+?)\s+"
|
||||
r"(?P<weight>[\d,]+\s+Kgs)\s+"
|
||||
r"(?P<quantity>\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.",
|
||||
"",
|
||||
]
|
||||
)
|
||||
|
||||
+88
-51
@@ -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.
|
||||
@@ -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."}
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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`.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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()
|
||||
@@ -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' '<html><title>Just a moment...</title><body>Checking your browser... Cloudflare</body></html>'
|
||||
;;
|
||||
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' '<html><title>Steam Controller AppID: 4165870</title><body>Coming soon prerelease</body></html>' > "$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)
|
||||
|
||||
@@ -70,6 +70,86 @@ IMPORTGENIUS_HTML = textwrap.dedent(
|
||||
)
|
||||
|
||||
|
||||
IMPORTGENIUS_CEVA_VR_HTML = textwrap.dedent(
|
||||
"""
|
||||
<html>
|
||||
<body>
|
||||
<h1>CEVA C/o Valve Corporation</h1>
|
||||
<p>Updated: 2026-06-10</p>
|
||||
<section>
|
||||
<h2>Importer Shipments</h2>
|
||||
<p># Bill of Lading Product Importer Supplier Arrival Date Country of Origin Gross Weight KGS Quantity</p>
|
||||
<p>1 SNHBSHACHI265173 VIRTUAL REALITY DEVICES CEVA C/O VALVE CORPORATION TECH-FRONT (CHONGQING) COMPUTER CO 2026-06-10 China 6374 Kgs 42 PKG</p>
|
||||
<p>2 SNHBSHACHI265174 VIRTUAL REALITY DEVICES CEVA C/O VALVE CORPORATION TECH-FRONT (CHONGQING) COMPUTER CO 2026-06-10 China 6372 Kgs 42 PKG</p>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
IMPORTGENIUS_VERTICAL_CEVA_VR_HTML = textwrap.dedent(
|
||||
"""
|
||||
<html>
|
||||
<body>
|
||||
<h1>CEVA C/o Valve Corporation</h1>
|
||||
<section>
|
||||
<h2>Importer Shipments</h2>
|
||||
<div>#</div><div>Bill of Lading</div><div>Product</div><div>Importer</div>
|
||||
<div>Supplier</div><div>Arrival Date</div><div>Country of Origin</div>
|
||||
<div>Gross Weight KGS</div><div>Quantity</div>
|
||||
<div>1</div>
|
||||
<div>SNHBSHACHI265173</div>
|
||||
<div>VIRTUAL REALITY DEVICES</div>
|
||||
<div>CEVA C/O VALVE CORPORATION</div>
|
||||
<div>TECH-FRONT (CHONGQING) COMPUTER CO</div>
|
||||
<div>2026-06-10</div>
|
||||
<div>China</div>
|
||||
<div>6374 Kgs</div>
|
||||
<div>42 PKG</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
IMPORTGENIUS_CEVA_NL_VR_HTML = textwrap.dedent(
|
||||
"""
|
||||
<html>
|
||||
<body>
|
||||
<h1>CEVA NL C/o Valve Corporation</h1>
|
||||
<p>Updated: 2026-06-10</p>
|
||||
<section>
|
||||
<h2>Importer Shipments</h2>
|
||||
<p># Bill of Lading Product Importer Supplier Arrival Date Country of Origin Gross Weight KGS Quantity</p>
|
||||
<p>1 SNHBSHALAX265177 VIRTUAL REALITY DEVICES CEVA NL C/O VALVE CORPORATION TECH-FRONT (CHONGQING) COMPUTER CO 2026-06-10 China 6400 Kgs 42 PKG</p>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
IMPORTGENIUS_VALVE_CONTROLLER_HTML = textwrap.dedent(
|
||||
"""
|
||||
<html>
|
||||
<body>
|
||||
<h1>Valve Corporation</h1>
|
||||
<p>Updated: 2026-06-10</p>
|
||||
<section>
|
||||
<h2>Importer Shipments</h2>
|
||||
<p># Bill of Lading Product Importer Supplier Arrival Date Country of Origin Gross Weight KGS Quantity</p>
|
||||
<p>1 SNHBHKGLBG266011 WIRELESS PC CONTROLLER VALVE CORPORATION CHENG UEI PRECISION IND. CO LTD 2026-06-10 Hong Kong 9727 Kgs 30 PKG</p>
|
||||
<p>4 DSVFMIL0341656 PNEUMATIC ACTUATOR VALVE 48 LLC L.P.S. SRL PER CONTO BIFFI ITALIA S 2026-05-16 Italy 1830 Kgs 1 CAS</p>
|
||||
<p>5 SNHBHKGLBG265013 WIRELESS PC CONTROLLER VALVE CORPORATION CHENG UEI PRECISION IND. CO LTD 2026-05-12 Hong Kong 12970 Kgs 40 PKG</p>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
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):
|
||||
|
||||
@@ -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' '<html><title>Just a moment...</title><body>Checking your browser Cloudflare</body></html>'
|
||||
;;
|
||||
*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' '<html><body><table><tr><td>250823</td><td>Linux OpenVR Linux</td></tr><tr><td>Build ID</td><td>123</td></tr><tr><td>public</td><td>Steam Frame depot note</td></tr></table></body></html>' > "$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' '<html><title>Just a moment...</title><body>Checking your browser Cloudflare</body></html>'
|
||||
;;
|
||||
*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' '<html><body><table><tr><td>public</td><td>Steam Frame depot note</td></tr></table></body></html>' > "$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()
|
||||
Reference in new issue
Block a user