Skip to content

[P1][Review] Reject malformed price rows instead of manufacturing zero-dollar data #15

Description

@karlwaldman

Review-only / approval gate

No implementation, PR merge, package publication or production mutation until the owner approves the full sprint plan.

Evidence

Reviewed main 68795010c4c83b02ae5972959c8bd2321691aebf.

src/Client.php historical/demoPrices use Price::fromArray without latestPriceOrFail validation. src/Price.php defaults absent code to empty string, price to 0.0, currency to USD. Mock successful historical response data.prices=[{}] returns a Price with code='',price=0,currency='USD'; a missing/non-array prices field becomes an empty successful list.

Preferred smallest change

Use one minimal validated price-row boundary across latest/history/demo. Distinguish a legitimately empty list from a malformed envelope. Preserve legitimately zero numeric prices; do not use truthiness or invent defaults for missing required market data.

Acceptance / negative-path tests

Fixtures: absent/non-array prices, empty list, null/missing/non-numeric/zero/negative values according to contract, missing code/currency, malformed timestamps. Latest/history/demo agree and surface ApiException rather than misleading data.

Risk and PR gate

P1 data correctness; response-only isolated fix, Sunday eligible if no API schema change.
One focused issue PR; independent adversarial review must challenge deletion safety, public compatibility, failure recovery and whether a smaller deletion suffices. Include red/green test evidence and packed/installable artifact proof for any published SDK/MCP change. Merge only in the approved priority order after reviewer objections are resolved. Do not publish a breaking change as a patch. If already fixed at execution time, record evidence and skip without a cosmetic PR.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions