Review: Market scanner -- continuous polling of same-day games

review-1687-2026-07-02-r2 Review

review approved

Verdict: APPROVED

Re-review after refinement. Previous review review-1687-2026-07-02 found 4 issues (NEEDS_REFINEMENT). All resolved.

Previous Findings Resolution

  • [x] [SCOPE] arch-api note missing -- RESOLVED: arch-api created (API Integration: kalshi-assistant, architecture type, active, project: kalshi-assistant). Covers RSA-PSS auth, rate limits, endpoint groups.
  • [x] [SCOPE] arch-app note missing -- RESOLVED: arch-app created (Application Domain: Kalshi Assistant, architecture type, active, project: kalshi-assistant). Covers MarketScanner, KalshiClient, Watchdog, SizingEngine components.
  • [x] [LABEL] Arch label mismatch -- RESOLVED: No actual conflict. Board item labels arch:api and arch:app reference component-level notes (what the ticket touches). Story note references arch-domain-kalshi-assistant and arch-dataflow-kalshi-assistant (cross-cutting views). These are complementary layers. arch-app links to both domain and dataflow notes in its Related section.
  • [x] [BODY] Undocumented series tickers -- RESOLVED: Context section now cites source ("Kalshi API exploration, see docs/api/market-data-guide.md for methodology") and clarifies design intent ("scanner should discover active series dynamically rather than hardcoding these"). Ticker list is informational; config/market_series.yml file target provides configurable defaults.

Template Completeness

  • [x] Type -- Feature
  • [x] Lineage -- Depends on ldraney/kalshi-assistant #1
  • [x] Repo -- ldraney/kalshi-assistant
  • [x] User Story -- As the watchdog system / scan same-day markets / detect 85% threshold
  • [x] Context -- Watchdog strategy background, series tickers with source citation, rate limits, dynamic discovery design
  • [x] File Targets -- 4 files to create
  • [x] Feature Flag -- none
  • [x] Acceptance Criteria -- 6 items
  • [x] Test Expectations -- unit + integration tests, run command
  • [x] Constraints -- Solid Queue, rate limits, 24h history
  • [x] Checklist -- PR, tests, no unrelated changes
  • [x] Related -- project reference

Traceability

  • [x] story:watchdog-trading label -- Watchdog Trading
  • [x] story note verified -- story-kalshi-assistant-watchdog-trading exists (active, user-story type)
  • [x] story entry verified -- found in project-kalshi-assistant user-stories table (row: watchdog-trading, role: Trader)
  • [x] arch:api label -- Kalshi API integration component
  • [x] arch note verified -- arch-api exists (active, architecture type, project: kalshi-assistant)
  • [x] arch:app label -- Application domain component
  • [x] arch note verified -- arch-app exists (active, architecture type, project: kalshi-assistant)
  • [x] Forgejo issue -- ldraney/kalshi-assistant#2, open

File Targets

  • [x] app/jobs/market_scanner_job.rb -- to create (Solid Queue job). Depends on #1 (Rails scaffold).
  • [x] app/models/market_snapshot.rb -- to create (snapshot model). Depends on #1.
  • [x] db/migrate/xxx_create_market_snapshots.rb -- to create (migration). Depends on #1.
  • [x] config/market_series.yml -- to create (configurable series list). Depends on #1.
All file targets are files to CREATE. Paths follow Rails conventions. Repo currently has no Rails structure (only docs). Valid assuming #1 completes first.

Repo Placement

OK. Issue filed on ldraney/kalshi-assistant, Repo section says ldraney/kalshi-assistant. Single repo, no multi-repo concern.

Dependencies

  • Upstream: Depends on issue #1 (Rails scaffold + API client) -- documented in Lineage. Board item #1686 in backlog (sprint:1). This ticket is sprint:2. Correct ordering.
  • Downstream: Board item #1689 "Watchdog -- auto-buy when market crosses 85% threshold" (sprint:3, issue #4) logically depends on this scanner. Correct sprint order.
  • Parallel: Board item #1688 "Strategy engine -- database schema" (sprint:2, issue #3) is in the same sprint. No conflict -- can run in parallel once #1 completes.

Acceptance Criteria

6 criteria, all agent-testable:
  • [x] Background job polls -- verifiable via test that job enqueues and runs
  • [x] Scans configured series -- verifiable via config iteration test
  • [x] Stores snapshots with specified fields -- verifiable via DB assertions
  • [x] Filters same-day/next-day -- verifiable via date filtering test
  • [x] Respects rate limits -- verifiable via configurable delay check
  • [x] Logs 85% threshold crossing -- verifiable via log output assertion

Blast Radius

Minimal. New repo with only docs and README -- no existing production code. Referenced docs confirmed present: docs/api/market-data-guide.md and docs/strategy/watchdog-strategy.md both exist in repo. Architecture notes arch-api and arch-app document the components this ticket creates.

Decomposition Assessment

  • 4 file targets across 1 repo -- under the >3 files across >2 repos threshold.
  • 6 acceptance criteria -- borderline exceeds the >5 threshold by 1.
  • Estimated agent work: ~5 minutes. Creating 4 tightly coupled files for a single scanner feature.
No decomposition needed. The 6 AC are all aspects of a single coherent scanner component. Splitting would create artificially coupled sub-tickets.

Recommendation

No action needed. All previous findings resolved. Scope is solid, traceability complete, file targets verified, fits in a single agent pass.