5.9 KiB
Customs Shipment Monitor Design
Date: 2026-05-05
Context
The current steam-hardware-watch workflow treats customs and regulatory sources as confirmation signals, but there is no repeatable shipment helper in scripts/run_watch.sh. The existing customs evidence came from a targeted 2026-05-01 pass against NBD and ImportGenius, then was recorded manually in status/current.md, status/runs/2026-05-01.md, and status/evidence.jsonl.
HMRC UK Trade Info was investigated and rejected for this use case. It provides lagged monthly trader/commodity presence, not shipment-level records. It should not be part of the automated monitor unless the goal changes to historical UK commodity-presence analysis.
Goal
Add a repeatable customs shipment monitor that captures shipment-level or near-shipment-level evidence for Valve hardware logistics, especially GAME CONSOLE and controller-related imports tied to Valve, CEVA, Ingram Micro, Tech-Front, and known Valve hardware supply-chain entities.
The monitor should answer:
- Did a new relevant shipment appear since the previous run?
- Which consignee/importer path was used?
- Which supplier shipped it?
- What arrived, when, where, and at what weight/package count?
- Does the pattern materially change launch-readiness confidence?
It should not infer price, exact release date, or product identity from customs data alone.
Source Strategy
Primary automated source:
- ImportInfo search pages and company pages.
Initial ImportInfo searches:
CEVA C/O VALVE CORPORATIONINGRAM MICRO C/O VALVE CORPORATIONTECH-FRONT (CHONGQING) COMPUTER COwith filtering forGAME CONSOLEVALVE CORPORATIONfor direct-consignee hardware shipments
Corroborating/manual sources:
- NBD Valve Corporation and Ingram/Valve pages.
- ImportGenius public previews for CEVA/Valve, Ingram/Valve, Tech-Front, and relevant suppliers.
- Paid or sample-only UK/global aggregators only as research leads, not automated dependencies.
Rejected source:
- HMRC UK Trade Info, because it is monthly, lagged, and aggregate-only.
Artifacts
Each run should save customs outputs under the dated run folder:
- Raw HTML pages under
api/customs/. - Extracted machine-readable rows under
reports/customs-shipments.tsv. - A concise report under
reports/customs-shipments.md. - Summary lines under
reports/customs-shipments-key-lines.txt. - Errors or blocked fetches under
reports/customs-shipments-errors.txt.
The helper should not update status/current.md directly. It should produce run artifacts for the agent to review, then material findings can be appended to status/evidence.jsonl through the existing evidence workflow.
Data Model
Extract these fields when available:
sourcequeryrun_datemaster_bolhouse_bolvoyagebill_typecarrier_codeimovessel_namearrival_dateus_portforeign_portquantityweighttype_of_serviceshipperconsigneenotify_partycommoditysource_url
The stable row identity should be house_bol when present, otherwise master_bol, otherwise a composite of arrival date, shipper, consignee, quantity, weight, and commodity.
Filtering
The helper should keep rows that match at least one relevant party and one relevant product/signal.
Relevant parties:
VALVECEVAINGRAM MICROTECH-FRONTCHENG UEI- known hardware logistics aliases already present in evidence records
Relevant products/signals:
GAME CONSOLEVR CONTROLLERCONTROLLERSTEAMBASE STATIONHEADSETDONGLE- future codenames or product names added to
references/sources.md
The first implementation should be conservative: preserve raw pages even when extraction filters are too narrow, and make filtered-out rows easy to recover by adjusting terms.
Reporting
customs-shipments.md should include:
- At-a-glance counts by source query.
- Newest relevant shipments.
- Rows grouped by consignee/importer path.
- Rows grouped by supplier.
- Out-of-pattern notes, such as package count or weight deviation.
- Known limitations, including public-source ambiguity and non-product-specific
GAME CONSOLEdescriptions.
customs-shipments-key-lines.txt should contain short lines suitable for write_run_summary.py and draft_status_update.py, for example:
2026-05-01 CEVA C/O VALVE CORPORATION TECH-FRONT (CHONGQING) COMPUTER CO GAME CONSOLE 42 PKG 12596 Kgs SNHBSHALAX264015
Integration
Add a new helper script:
scripts/check_customs_shipments.sh
Then integrate it into:
scripts/run_watch.shscripts/write_run_summary.pyscripts/draft_status_update.pyreferences/sources.mdSKILL.md
The runner should execute the customs helper on normal watch runs because ImportInfo is quick and high-signal. If ImportInfo blocks or changes structure, record the failure and let the rest of the watch continue.
Error Handling
The helper should:
- Save fetch failures to
customs-shipments-errors.txt. - Treat HTTP 401/403/429 as blocked source states, not empty evidence.
- Avoid requiring credentials.
- Avoid paid export endpoints.
- Avoid committing cookies, sessions, or local browser profile state.
Testing
Add focused tests that use a fake curl response with ImportInfo-style HTML tables.
Tests should cover:
- Extraction of BOL rows from a search page.
- Filtering to relevant Valve hardware rows.
- Preservation of multiple same-day shipments with different BOLs.
- Graceful blocked-source reporting.
Evidence Rules
Shipment records are confirmation signals. They can support active logistics and relative rollout readiness, but they do not prove:
- final retail product identity,
- price,
- exact launch date,
- same-day launch timing,
- region-specific consumer availability.
Use medium confidence only when a public shipment row clearly ties a relevant party to a relevant product description. Use low confidence for masked or aggregate corroboration.