Skip to content

M-001B: Modernize SteamAPI to .NET 10 - #3

Merged
fatihemres merged 6 commits into
masterfrom
net10_modernization_planning
Oct 15, 2026
Merged

fatihemres merged 6 commits into
masterfrom
net10_modernization_planning

Conversation

@fatihemres

@fatihemres fatihemres commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

M-001B: Modernize SteamAPI to .NET 10 (Release Candidate v0.2.0)

STATUS: DRAFT -- AWAITING PRODUCT OWNER MERGE AUTHORIZATION
This pull request delivers the complete M-001B modernization milestone across Phases 2A through 3E. It remains in DRAFT status until explicit Product Owner release authorization is granted.


1. Summary of Completed Modernization Phases

  • Phase 2A (.NET 10 Target Framework): Upgraded Core, SteamAPI, and SteamAPI.Tests from net6.0 to net10.0. Modernized GitHub Actions workflow to the official .NET 10 SDK (10.0.x).
  • Phase 2B (HTTP Infrastructure Modernization): Replaced obsolete synchronous WebClient and ServicePointManager with an asynchronous, pooled HttpClient (SteamService) registered via IHttpClientFactory. Propagated CancellationToken and enforced a strict 30-second upstream timeout with full body read coverage.
  • Phase 2C (API Reliability & Error Handling): Enforced formal model validation and standard RFC 9457 ProblemDetails / ValidationProblemDetails for handled client errors (400), upstream errors (502), and timeouts (504).
  • Phase 3A (Technical Audit & Security Review): Verified 0 known package vulnerabilities via dotnet list package --vulnerable.
  • Phase 3B (Initial Live Smoke Verification): Verified core search suggestion endpoints against live Steam across cultures 1 (tr_TR), 2 (en_US), and 3 (es_ES).
  • Phase 3C (Release Hardening & Documentation):
    • Search input strictly capped at 200 UTF-16 code units ([MaxLength(200)]).
    • Outbound automatic redirects disabled (AllowAutoRedirect = false).
    • Response buffering capped at 1 MiB (MaxResponseContentBufferSize = 1,048,576).
    • Typed SteamResponseParseException introduced and mapped to HTTP 502.
    • Authored developer documentation (README.md, docs/API.md, and docs/releases/v0.2.0-rc-notes.md).
  • Phase 3D (Final Controlled Live Steam Integration & Audit): Verified release candidate against live Steam across 6 smoke scenarios and 3 validation scenarios. Conducted a complete outgoing request audit (7 verified completed, at most 8 attempted, within 15-request budget).
  • Phase 3E (Documentation Harmonization & Release Readiness): Final documentation harmonization, request accounting correction (~46.7% budget remaining under conservative accounting), merge-safe README updates, and PR metadata alignment.

2. Remote CI Verification Evidence

  • GitHub Actions Run: 38733996618
  • Commit: b36de3519cbd5dbc8474b74a85625fbe0b4dd5b0
  • Result: 628 / 628 test executions passed (0 failed, 0 skipped)
    • Ubuntu Latest (Debug): 157 passed
    • Ubuntu Latest (Release): 157 passed
    • Windows Latest (Debug): 157 passed
    • Windows Latest (Release): 157 passed
  • Test Suite Inventory: 157 deterministic offline tests (49 baseline regression + 80 HTTP/controller integration + 28 security and contract regression tests).

3. Breaking Changes Notice

  1. Runtime Requirement: Minimum hosting requirement is .NET 10.0 Runtime.
  2. Search Input Boundary: Search terms exceeding 200 UTF-16 code units are rejected with HTTP 400 Bad Request.
  3. Structured RFC 9457 Payloads: Errors return standard JSON ProblemDetails / ValidationProblemDetails rather than plain strings.
  4. Upstream Error Mapping: Handled upstream failures cleanly map to HTTP 502 Bad Gateway (previously unhandled 500s); timeouts return HTTP 504 Gateway Timeout.

4. Known Residual Limitations

  • HTML Scraping Fragility: If Valve completely overhauls the suggestion DOM structure removing <a class="match"> tags, the endpoint returns [] (empty results).
  • Missing Currency Metadata: The price field remains numeric-only without an ISO 4217 currency code.
  • No Application-Level Rate Limiting: Outbound calls to Steam are unthrottled; production deployments should sit behind a reverse proxy or API gateway enforcing client rate limits.
  • No Production Monitoring: Distributed tracing, OpenTelemetry, and Prometheus metrics are not configured in this milestone.
  • Four Legacy CS8618 Warnings: Unresolved in CultureValue.cs (3) and GetSteamGameInfoRequestModel.cs (1); documented as outside the scope of this release.

5. Release Governance and Merge Status

  • PR State: DRAFT (Awaiting explicit Product Owner authorization before merge).
  • Branch: net10_modernization_planning -> master.
  • Pending Actions:
    1. Product Owner final review and approval.
    2. Formal PR review approval and squash/merge into master.
    3. Release tag creation (v0.2.0) and publication.

@fatihemres
fatihemres marked this pull request as ready for review October 15, 2026 12:47
@fatihemres
fatihemres merged commit 04ee2b1 into master Oct 15, 2026
2 checks passed
@fatihemres
fatihemres deleted the net10_modernization_planning branch October 16, 2026 10:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant