Review: Rails app scaffold with Kalshi API client (re-review)

review-1686-2026-07-02-r2 Review

review approved

Verdict: APPROVED

Re-review of board item #1686 after refinement. Previous review (review-1686-2026-07-02) found 4 issues. All have been resolved.

Previous Issues — Resolution

  • [x] arch-rails note — FIXED: note arch-rails ("Rails Architecture: Kalshi Assistant") now exists, status active, project kalshi-assistant
  • [x] arch-api note — FIXED: note arch-api ("API Integration: kalshi-assistant") now exists, status active, project kalshi-assistant
  • [x] Faraday contradiction in Constraints — FIXED: now reads "Use Net::HTTP (stdlib) or Faraday — no other HTTP client gems"
  • [x] Env-dependent AC — FIXED: last AC now includes "(requires API credentials in ~/secrets/kalshi-api-key-id and ~/secrets/kalshi-private-key.key; alternatively verify with a stub/mock if credentials unavailable)"

Template Completeness

  • [x] Type — Feature
  • [x] Lineage
  • [x] Repo
  • [x] User Story
  • [x] Context
  • [x] File Targets
  • [x] Feature Flag — "none" (acceptable, no feature-flags.md in repo)
  • [x] Acceptance Criteria
  • [x] Test Expectations
  • [x] Constraints
  • [x] Checklist
  • [x] Related

Traceability

  • [x] story:portfolio-builder label — AI Portfolio Builder
  • [x] story note verified — found in project-kalshi-assistant user-stories section (key: portfolio-builder, links to story-kalshi-assistant-portfolio-builder)
  • [x] arch:rails label — Rails framework component
  • [x] arch note verified — arch-rails note exists in pal-e-docs (active, project kalshi-assistant)
  • [x] arch:api label — Kalshi API integration component
  • [x] arch note verified — arch-api note exists in pal-e-docs (active, project kalshi-assistant)
  • [x] Forgejo issue — ldraney/kalshi-assistant#1, open

File Targets

  • [x] app/services/kalshi_client.rb — to be created (greenfield scaffold, directory does not yet exist, correct)
  • [x] config/initializers/kalshi.rb — to be created (greenfield scaffold, correct)
  • [x] Gemfile — to be created (greenfield scaffold, correct)
  • [x] docs/api/overview.md — referenced in Context, verified exists in repo
  • [x] docs/api/openapi.yaml — referenced in Context, verified exists in repo
Note: All target files are "to create" since this is a greenfield Rails scaffold. No existing files will be modified. The docs/ directory is explicitly excluded from modification.

Repo Placement

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

Dependencies

No explicit dependencies documented. This is the first ticket for the project (Lineage: "Standalone"). Other sprint:1 items on the board:
  • #1693 Keycloak realm (sprint:1, type:infra) — parallel, no dependency
  • #1694 Service onboarding — namespace, Harbor, ArgoCD (sprint:1, type:infra) — parallel, not required for scaffold
  • #1692 DNS + reverse proxy (sprint:1, type:infra) — parallel, no dependency
Sprint:2 item #1688 (Strategy engine — database schema) depends on the Rails scaffold being in place. This is implicit and correctly sequenced via sprint labels.

Acceptance Criteria

7 acceptance criteria. All are testable by an agent:
  • "Rails 8 app initialized" — verifiable via file existence and rails --version
  • "Kalshi API client class with RSA-PSS signing" — verifiable via unit test
  • "Support for: GET markets, GET orderbook, GET portfolio/balance, POST orders" — verifiable via method existence
  • "Rate limit awareness" — verifiable via code inspection or unit test
  • "Demo environment config" — verifiable via config file check
  • "API key/secret loaded from environment variables" — verifiable via code inspection
  • "Can run rails console and call KalshiClient.new.balance successfully" — now includes stub/mock fallback if credentials unavailable, testable in all environments

Blast Radius

Minimal. Greenfield scaffold, no existing code patterns to check. The docs/ directory is explicitly excluded from modification. No downstream consumers yet.

Decomposition Assessment

  • File targets: 3 files to create, 1 repo — under threshold
  • Acceptance criteria: 7 — technically exceeds the >5 threshold
  • Estimated agent work: ~5 minutes (Rails scaffold + API client is a single coherent unit)
No decomposition needed. The 7 AC items are tightly coupled: items 2-7 are all aspects of a single API client built on top of the Rails scaffold (item 1). Decomposing would create artificial dependencies between sub-tickets.

Recommendation

No action needed.