Risk-based QA records / Pilot 0 / Portfolio demo

Test Cases and Run Records

Back to Decision Desk

Owner-reviewed runs · September 6

Scoped automated acceptance for a personal portfolio. Owner self-review, not independent review or production certification. See the Dashboard for current validity; expiry does not erase recorded test results.

cex-market-data-quality-lab

Tested version
fc1e0604f96206e1f9dbbc58308031b5ff2f4c4f
Review
William · Owner self-review; overlapping roles disclosed
Decision recorded
2026-09-07T15:11:54.526Z
Approval expiry
2026-09-08T23:59:00+08:00
In scope
Unit and REST/WebSocket contract checks · Documentation consistency · Public market-data live integration
Excluded
Human manual testing · Authenticated accounts, orders and funds · Production trading-system certification · Load and production reconnect testing
RUN-20260906-cex-deterministic-1 · Pass · 40/40 passed
Executed at
2026-09-06T12:40:02.275Z
Environment
Windows; Python 3.14.2; public Binance market-data endpoints; automated checks only
Command
python -m pytest tests/unit tests/contract tests/meta -v -p no:cacheprovider
Execution note
Recorded execution; not a new run or independent review.
Original JUnit SHA-256
b836c589694947da419047afc22539819568ec1df7aa9ec423b888623420253e

Sanitized per-test results derived from the original JUnit artifact; raw environment output is not published.

TestResult
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
RUN-20260906-cex-live-1 · Pass · 5/5 passed
Executed at
2026-09-06T12:40:37.272Z
Environment
Windows; Python 3.14.2; public Binance market-data endpoints; automated checks only
Command
python -m pytest tests/live -v -m live -p no:cacheprovider
Execution note
Recorded execution; not a new run or independent review.
Original JUnit SHA-256
4530c5f35881149d0075137960bd0fc62854f1a46c133c952a862f198f02c50c

Sanitized per-test results derived from the original JUnit artifact; raw environment output is not published.

TestResult
tests.live.test_rest_live::tests.live.test_rest_livePass
tests.live.test_rest_live::tests.live.test_rest_livePass
tests.live.test_rest_live::tests.live.test_rest_livePass
tests.live.test_websocket_live::tests.live.test_websocket_livePass
tests.live.test_websocket_live::tests.live.test_websocket_livePass
RUN-20260907-cex-deterministic-1 · Pass · 40/40 passed
Executed at
2026-09-07T15:09:50.847Z
Environment
Windows; Python 3.14.2; public Binance market-data endpoints; automated checks only
Command
.venv/Scripts/python.exe -m pytest tests/unit tests/contract tests/meta -v -p no:cacheprovider --junitxml=D:/Codex/RiskQADemoSite/test-records/releases/2026-09-07/cex/raw/deterministic.xml
Execution note
Fresh execution on 2026-09-07 for the owner-authorized scoped renewal; not independent review.
Original JUnit SHA-256
ba95af23b5c22d8a190e7d6121e8dd740cbd639f84a7e2dfebd1bdc1fd063249

Sanitized per-test results derived from the original JUnit artifact; raw environment output is not published.

TestResult
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.unit.test_order_book::tests.unit.test_order_bookPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_rest_contract::tests.contract.test_rest_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.contract.test_websocket_contract::tests.contract.test_websocket_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
tests.meta.test_documentation_contract::tests.meta.test_documentation_contractPass
RUN-20260907-cex-live-1 · Pass · 5/5 passed
Executed at
2026-09-07T15:10:26.443Z
Environment
Windows; Python 3.14.2; public Binance market-data endpoints; automated checks only
Command
.venv/Scripts/python.exe -m pytest tests/live -v -m live -p no:cacheprovider --junitxml=D:/Codex/RiskQADemoSite/test-records/releases/2026-09-07/cex/raw/live.xml
Execution note
Fresh execution on 2026-09-07 for the owner-authorized scoped renewal; not independent review.
Original JUnit SHA-256
4ac2bb8b66cdeae5e2584583734f8c6ab856f83cc336d49eb8cdb2fcb67ca28b

Sanitized per-test results derived from the original JUnit artifact; raw environment output is not published.

TestResult
tests.live.test_rest_live::tests.live.test_rest_livePass
tests.live.test_rest_live::tests.live.test_rest_livePass
tests.live.test_rest_live::tests.live.test_rest_livePass
tests.live.test_websocket_live::tests.live.test_websocket_livePass
tests.live.test_websocket_live::tests.live.test_websocket_livePass

sanyoii.github.io

Tested version
643b01720959dad2b1ccc9c8fcbe4f493f89bf0b
Review
William · Owner self-review; overlapping roles disclosed
Decision recorded
2026-09-06T12:51:34.447Z
Approval expiry
2026-09-13T20:40:00+08:00
In scope
Static content and document checks · English and Traditional Chinese behavior · Responsive Chromium layouts · Reduced motion and 404 behavior
Excluded
Fresh production-site verification · Browsers other than Chromium · Performance testing · Full accessibility conformance certification
RUN-20260906-portfolio-chromium-initial · Blocked · 9/22 passed
Executed at
2026-09-06T12:40:06.379Z
Environment
Windows; Python 3.14.2; local HTTP server; Chromium via Playwright; not production
Command
python -m pytest tests -v -p no:cacheprovider
Execution note
Chromium launch blocked by spawn EPERM. Retained before the elevated retry.
Original JUnit SHA-256
0eacce992cc5313ba590fc34724c9cf83c5c3d89c6ef72eef658214348c430a0

Sanitized per-test results derived from the original JUnit artifact; raw environment output is not published.

TestResult
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_runtime::tests.test_runtimeBlocked
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
RUN-20260906-portfolio-chromium-retry · Pass · 22/22 passed
Executed at
2026-09-06T12:41:05.513Z
Environment
Windows; Python 3.14.2; local HTTP server; Chromium via Playwright; not production
Command
python -m pytest tests -v -p no:cacheprovider (elevated browser execution)
Execution note
Elevated retry; original blocked attempt retained.
Original JUnit SHA-256
7df49109c2efdd1cb32d7bb86ac2726ba9bd8463cc68a018fc52f229b504d1e1

Sanitized per-test results derived from the original JUnit artifact; raw environment output is not published.

TestResult
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_runtime::tests.test_runtimePass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass
tests.test_static::tests.test_staticPass

Historical pilot · August 17

Each Run ID links to its included Test Cases. The page shows the tested version, checks, and expected results so readers can understand scope without reading JSON.

These are sanitized Run records without per-case raw output. The available data confirms each Run's overall result and included Test Cases. Raw JUnit and manual-check files are not public and are not presented as downloadable results.

Repo
sanyoii/cex-market-data-quality-lab
Tested version
8fd5081254b5429e480ec20a56ef09bcc6f5ab9e
Branch
main
Release target
0.1.0
Synthetic example / Not current CEX evidence

How a Test Fail appears in Run Records

Fail Demo

The following is a synthetic failed Run card. It only demonstrates how to read failure data. It does not belong to the tested version above and does not overwrite the current Pass records.

WebSocket ordering checks

Fail 3 Test Cases · 2 Pass · 1 Fail

Run ID link
Run ID
DEMO-RUN-FAIL-001
Execution time
2026/08/18 17:20 (Taiwan time, demo)
Run Result
Fail
Release impact
P0 risk not accepted; currently No-Go
TC-MDQ-016Accept sequentially increasing updatesPass
TC-MDQ-017Reject stale-sequence updatesFail
TC-MDQ-018Restore the snapshot after reconnectingPass

Expected

The stale sequence is rejected

Actual

The stale sequence overwrites current state

Defect

DEF-MDQ-004 · High · Open
View full Failure, Defect, and Execution Log

Post-fix execution — Historical

These Runs retain results for the historical version, not approval of the current version.

Automated tests

Pass 39 automated checks covering 34 logical Test Case IDs

Run ID link
Run ID
RUN-20260817T015452830Z-8fd5081254b5-DETERMINISTIC
Execution time
2026/08/17 09:57 (Taiwan time)
Result scope
Pass is the Run-level result; the table below shows included scope, not per-case raw results.
Order book (9 Test Cases)
Test CasePriorityCheckExpected result
OB-001P1Create an unsorted order book and read the best bid and ask.Return the highest bid and lowest ask while preserving Decimal precision.
OB-002P0Apply sequential updates that add levels and set quantities to zero.Add levels, remove zero-quantity levels, and advance the update ID to 101.
OB-003P0Apply a stale event to the current order book.Return False without changing the update ID or visible levels.
OB-004P0Apply an event with a sequence gap.Raise SequenceGapError before changing any data.
OB-005P0Create an order book from a crossed snapshot where the bid exceeds the ask.Raise MarketInvariantError and retain the bid and ask details.
OB-006P0Synchronize a snapshot with a stale event and sequential events.Skip the stale event and apply sequentially through update 102.
OB-007P0Create snapshots with zero price, zero quantity, and negative quantity.Raise MarketInvariantError for every invalid dataset.
OB-008P0Apply a negative-quantity update to a valid order book.Raise MarketInvariantError; zero remains the only value that removes a level.
OB-009P0Create an order book from a snapshot missing bids or asks.Raise MarketInvariantError because both market sides must be present.
REST contract (9 Test Cases)
Test CasePriorityCheckExpected result
REST-001P1Fetch bookTicker with a lowercase symbol and inspect the request and response.Send BTCUSDT and return a normalized symbol with Decimal values.
REST-002P0Handle a ticker whose bid exceeds its ask.Reject crossed market data with RestContractError.
REST-003P1Fetch depth for btcusdt with limit 5.Send normalized parameters and return only after validating the snapshot.
REST-004P1Request an unknown symbol and inspect the error.Preserve HTTP 400, exchange code -1121, and the message.
REST-005P1Fetch exchangeInfo for one symbol.Return BTCUSDT, TRADING, PRICE_FILTER, and LOT_SIZE.
REST-006P0Handle a ticker with a zero bid quantity.Reject non-positive values with RestContractError.
REST-007P1Handle exchangeInfo returning zero or two symbols.Raise RestContractError unless exactly one symbol is returned.
REST-008P1Handle ticker payloads with missing fields or a non-object shape.Raise RestContractError with a stable schema message.
REST-009P1Simulate a REST transport timeout.Preserve the httpx.ReadTimeout type and original message.
WebSocket contract (12 Test Cases)
Test CasePriorityCheckExpected result
WS-001P1Subscribe to one ticker and inspect control messages and the event.Subscribe, validate, and unsubscribe with request IDs 1 and 2 matched correctly.
WS-002P0Receive update ID 101 after update ID 102.Raise WebSocketContractError when the update ID goes backward.
WS-003P1Expect BTCUSDT but receive ETHUSDT.Reject the wrong symbol and include the expected and actual values.
WS-004P0Receive an event whose quantity is zero.Reject non-positive price or quantity values.
WS-005P0Receive an event whose bid exceeds its ask.Reject crossed market data.
WS-006P1Expect acknowledgment ID 1 but receive 99.Reject the mismatched acknowledgment.
WS-007P1Receive a market event after unsubscribe but before its acknowledgment.Ignore the in-flight event and complete after the correct acknowledgment.
WS-008P0Synchronize REST snapshot 100 with stale and sequential events.Return a synchronized order book at update 102 with the expected levels.
WS-009P1Wait for a slow connection with a 0.01-second timeout.Raise TimeoutError within the configured limit.
WS-010P1Receive malformed JSON after subscribing.Raise WebSocketContractError with a message that identifies invalid JSON.
WS-011P1Receive a JSON array after subscribing.Reject it because protocol payloads must be objects.
WS-012P1Receive a valid acknowledgment followed by a ticker missing field A.Raise WebSocketContractError with a stable schema message.
Documentation contract (4 Test Cases)
Test CasePriorityCheckExpected result
DOC-001P1Compare requirement IDs in the requirements and traceability documents.Both documents contain the same set of requirement IDs.
DOC-002P1Compare Test Cases, the Automation Map, and pytest functions.Every logical Case ID maps to an existing pytest function.
DOC-003P2Resolve relative links in Markdown.Every relative link points to an existing path.
DOC-004P0Inspect base URLs, endpoint paths, and CI settings.Only allowlisted public market-data interfaces are used; no account or trading interfaces appear.

Live market-data tests

Pass 5 Live market-data checks

Run ID link
Run ID
RUN-20260817T015452830Z-8fd5081254b5-LIVE
Execution time
2026/08/17 09:58 (Taiwan time)
Result scope
Pass is the Run-level result; the table below shows included scope, not per-case raw results.
Live market data (5 Test Cases)
Test CasePriorityCheckExpected result
LIVE-REST-001P1Fetch BTCUSDT exchangeInfo from public REST.The symbol is trading and includes price and quantity filters.
LIVE-REST-002P1Fetch the BTCUSDT book ticker from public REST.Quantities are positive and the best bid does not exceed the best ask.
LIVE-REST-003P1Fetch BTCUSDT depth with limit 100 and create an order book.The update ID is positive and the order-book state is valid.
LIVE-WS-001P1Subscribe to public WebSocket, collect three events, then unsubscribe.All three events are valid and update IDs never move backward.
LIVE-SYNC-001P0Synchronize a public REST snapshot with a WebSocket depth stream.The order book synchronizes without crossing and has a positive update ID.

Manual checks

Pass 2 manual checks

Run ID link
Run ID
RUN-20260817T015452830Z-8fd5081254b5-MANUAL
Execution time
2026/08/17 09:58 (Taiwan time)
Result scope
Pass is the Run-level result; the table below shows included scope, not per-case raw results.
Manual checks (2 Test Cases in this Run)
Test CasePriorityCheckExpected result
MTC-SAFE-001P0Inspect REST/WebSocket URLs, headers, variables, and authentication settings.Only public allowlisted hosts are used; there are no credentials, authorization headers, account endpoints, or trading actions.
MTC-EVID-001P1Compare Run records with executed cases, record paths, defects, retries, warnings, and limitations.Every executed case has a status and actual result; missing required records prevent a manual-pass claim.

Earlier execution — Not used

These Runs passed, but their process records did not meet requirements. They remain in the history and do not support the current decision.

Automated tests

Pass 39 automated checks covering 34 logical Test Case IDs

Run ID link
Run ID
RUN-20260817T013741977Z-8fd5081254b5-DETERMINISTIC
Execution time
2026/08/17 09:40 (Taiwan time)
Result scope
Pass is the Run-level result; the table below shows included scope, not per-case raw results.
Order book (9 Test Cases)
Test CasePriorityCheckExpected result
OB-001P1Create an unsorted order book and read the best bid and ask.Return the highest bid and lowest ask while preserving Decimal precision.
OB-002P0Apply sequential updates that add levels and set quantities to zero.Add levels, remove zero-quantity levels, and advance the update ID to 101.
OB-003P0Apply a stale event to the current order book.Return False without changing the update ID or visible levels.
OB-004P0Apply an event with a sequence gap.Raise SequenceGapError before changing any data.
OB-005P0Create an order book from a crossed snapshot where the bid exceeds the ask.Raise MarketInvariantError and retain the bid and ask details.
OB-006P0Synchronize a snapshot with a stale event and sequential events.Skip the stale event and apply sequentially through update 102.
OB-007P0Create snapshots with zero price, zero quantity, and negative quantity.Raise MarketInvariantError for every invalid dataset.
OB-008P0Apply a negative-quantity update to a valid order book.Raise MarketInvariantError; zero remains the only value that removes a level.
OB-009P0Create an order book from a snapshot missing bids or asks.Raise MarketInvariantError because both market sides must be present.
REST contract (9 Test Cases)
Test CasePriorityCheckExpected result
REST-001P1Fetch bookTicker with a lowercase symbol and inspect the request and response.Send BTCUSDT and return a normalized symbol with Decimal values.
REST-002P0Handle a ticker whose bid exceeds its ask.Reject crossed market data with RestContractError.
REST-003P1Fetch depth for btcusdt with limit 5.Send normalized parameters and return only after validating the snapshot.
REST-004P1Request an unknown symbol and inspect the error.Preserve HTTP 400, exchange code -1121, and the message.
REST-005P1Fetch exchangeInfo for one symbol.Return BTCUSDT, TRADING, PRICE_FILTER, and LOT_SIZE.
REST-006P0Handle a ticker with a zero bid quantity.Reject non-positive values with RestContractError.
REST-007P1Handle exchangeInfo returning zero or two symbols.Raise RestContractError unless exactly one symbol is returned.
REST-008P1Handle ticker payloads with missing fields or a non-object shape.Raise RestContractError with a stable schema message.
REST-009P1Simulate a REST transport timeout.Preserve the httpx.ReadTimeout type and original message.
WebSocket contract (12 Test Cases)
Test CasePriorityCheckExpected result
WS-001P1Subscribe to one ticker and inspect control messages and the event.Subscribe, validate, and unsubscribe with request IDs 1 and 2 matched correctly.
WS-002P0Receive update ID 101 after update ID 102.Raise WebSocketContractError when the update ID goes backward.
WS-003P1Expect BTCUSDT but receive ETHUSDT.Reject the wrong symbol and include the expected and actual values.
WS-004P0Receive an event whose quantity is zero.Reject non-positive price or quantity values.
WS-005P0Receive an event whose bid exceeds its ask.Reject crossed market data.
WS-006P1Expect acknowledgment ID 1 but receive 99.Reject the mismatched acknowledgment.
WS-007P1Receive a market event after unsubscribe but before its acknowledgment.Ignore the in-flight event and complete after the correct acknowledgment.
WS-008P0Synchronize REST snapshot 100 with stale and sequential events.Return a synchronized order book at update 102 with the expected levels.
WS-009P1Wait for a slow connection with a 0.01-second timeout.Raise TimeoutError within the configured limit.
WS-010P1Receive malformed JSON after subscribing.Raise WebSocketContractError with a message that identifies invalid JSON.
WS-011P1Receive a JSON array after subscribing.Reject it because protocol payloads must be objects.
WS-012P1Receive a valid acknowledgment followed by a ticker missing field A.Raise WebSocketContractError with a stable schema message.
Documentation contract (4 Test Cases)
Test CasePriorityCheckExpected result
DOC-001P1Compare requirement IDs in the requirements and traceability documents.Both documents contain the same set of requirement IDs.
DOC-002P1Compare Test Cases, the Automation Map, and pytest functions.Every logical Case ID maps to an existing pytest function.
DOC-003P2Resolve relative links in Markdown.Every relative link points to an existing path.
DOC-004P0Inspect base URLs, endpoint paths, and CI settings.Only allowlisted public market-data interfaces are used; no account or trading interfaces appear.

Live market-data tests

Pass 5 Live market-data checks

Run ID link
Run ID
RUN-20260817T013741977Z-8fd5081254b5-LIVE
Execution time
2026/08/17 09:40 (Taiwan time)
Result scope
Pass is the Run-level result; the table below shows included scope, not per-case raw results.
Live market data (5 Test Cases)
Test CasePriorityCheckExpected result
LIVE-REST-001P1Fetch BTCUSDT exchangeInfo from public REST.The symbol is trading and includes price and quantity filters.
LIVE-REST-002P1Fetch the BTCUSDT book ticker from public REST.Quantities are positive and the best bid does not exceed the best ask.
LIVE-REST-003P1Fetch BTCUSDT depth with limit 100 and create an order book.The update ID is positive and the order-book state is valid.
LIVE-WS-001P1Subscribe to public WebSocket, collect three events, then unsubscribe.All three events are valid and update IDs never move backward.
LIVE-SYNC-001P0Synchronize a public REST snapshot with a WebSocket depth stream.The order book synchronizes without crossing and has a positive update ID.

Manual checks

Pass 2 manual checks

Run ID link
Run ID
RUN-20260817T013741977Z-8fd5081254b5-MANUAL
Execution time
2026/08/17 09:41 (Taiwan time)
Result scope
Pass is the Run-level result; the table below shows included scope, not per-case raw results.
Manual checks (2 Test Cases in this Run)
Test CasePriorityCheckExpected result
MTC-SAFE-001P0Inspect REST/WebSocket URLs, headers, variables, and authentication settings.Only public allowlisted hosts are used; there are no credentials, authorization headers, account endpoints, or trading actions.
MTC-EVID-001P1Compare Run records with executed cases, record paths, defects, retries, warnings, and limitations.Every executed case has a status and actual result; missing required records prevent a manual-pass claim.