summaryrefslogtreecommitdiffhomepage
path: root/.rules/plan/04-15-simplify-headers.md
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-04-30 20:24:33 +0900
committerAdam Malczewski <[email protected]>2026-04-30 20:24:33 +0900
commit262aa7395c50b449ce0a897f28b1e33c319f5dc7 (patch)
tree2ccc7c7f6402e76aea6b8788046215e82650fdfc /.rules/plan/04-15-simplify-headers.md
parent1e7a273bda744f93f230d21df895b54d2a81ce15 (diff)
downloaddispatch-adapter-minimax-main.tar.gz
dispatch-adapter-minimax-main.zip
add plan to updateHEADmain
Diffstat (limited to '.rules/plan/04-15-simplify-headers.md')
-rw-r--r--.rules/plan/04-15-simplify-headers.md109
1 files changed, 109 insertions, 0 deletions
diff --git a/.rules/plan/04-15-simplify-headers.md b/.rules/plan/04-15-simplify-headers.md
new file mode 100644
index 0000000..c79b986
--- /dev/null
+++ b/.rules/plan/04-15-simplify-headers.md
@@ -0,0 +1,109 @@
+# Phase 04 — Simplify Headers.build
+
+**Estimated time:** ~15 minutes
+**Touches:** `lib/dispatch/adapter/minimax/headers.rb`,
+`lib/dispatch/adapter/minimax.rb` (callsite cleanup).
+
+## Goal
+
+Collapse `Headers.build` from the Anthropic Claude Code header set
+(Stainless SDK fingerprints, `anthropic-version`, `anthropic-beta` list,
+Claude Code UA, OAuth-vs-API-key branching, `claude_code_only` mode) to
+the bare minimum MiniMax accepts:
+
+- `Authorization: Bearer <api_key>`
+- `Content-Type: application/json`
+- `Accept: application/json` (or `text/event-stream` when `stream: true`)
+
+That's it. No version header, no betas, no Stainless metadata, no UA.
+
+## Steps
+
+### 1. Rewrite `lib/dispatch/adapter/minimax/headers.rb` end to end
+
+```ruby
+# frozen_string_literal: true
+
+module Dispatch
+ module Adapter
+ class MiniMax < Base
+ module Headers
+ module_function
+
+ # Build the request headers for a MiniMax API call.
+ #
+ # @param api_key [String] the MiniMax API key (Token Plan or PAYG)
+ # @param stream [Boolean] set Accept to text/event-stream when true
+ # @param extra [Hash] low-priority caller overrides
+ # @return [Hash<String,String>]
+ def build(api_key:, stream: false, extra: {})
+ headers = extra.transform_keys(&:to_s)
+ headers["Content-Type"] = "application/json"
+ headers["Accept"] = stream ? "text/event-stream" : "application/json"
+ # Authorization is always last so caller extras cannot override it.
+ headers["Authorization"] = "Bearer #{api_key}"
+ headers
+ end
+ end
+ end
+ end
+end
+```
+
+### 2. Update every callsite in `lib/dispatch/adapter/minimax.rb`
+
+Find every `Headers.build(...)` and `build_headers_proc` invocation. The
+old signature took these keywords:
+
+```
+api_key:, is_oauth:, stream:, extra_betas:, interleaved_thinking:,
+base_url:, extra:, claude_code_only:
+```
+
+Replace EACH callsite with the new signature, keeping only:
+
+```
+api_key:, stream:, extra: (only when actually passed)
+```
+
+DELETE every passing of:
+- `is_oauth:`
+- `extra_betas:`
+- `interleaved_thinking:`
+- `base_url:` (Headers no longer cares about it)
+- `claude_code_only:`
+
+### 3. Drop `extra_betas` from the constructor
+
+Phase 02 may have left `@extra_betas` ivar in place. Now delete:
+
+- The `extra_betas:` keyword on `initialize`.
+- The `@extra_betas = Array(extra_betas)` assignment.
+- Any reference in `chat`, `count_tokens`, `list_models`, etc.
+
+### 4. Drop the `build_headers_proc` lambda if it exists
+
+If `lib/dispatch/adapter/minimax.rb` still has a `build_headers_proc`
+method or lambda factory, delete it. Replace its call sites with direct
+`Headers.build(api_key: @api_key, stream: ...)` calls. The wrapper was
+needed because `claude_code_only` and `extra_betas` varied per request;
+they no longer exist.
+
+## Acceptance criteria
+
+- `headers.rb` is approximately the size shown above (≤ 25 lines of code).
+- `grep -rn 'anthropic-version\|anthropic-beta\|x-stainless\|claude-cli\|claude_code_only\|interleaved_thinking\|extra_betas\|DEFAULT_BETAS\|CLAUDE_CODE_VERSION\|STAINLESS_PACKAGE_VERSION\|sk-ant-oat' lib/` returns ZERO matches.
+- The constructor no longer accepts `extra_betas:`.
+- Every `Headers.build` callsite in `lib/dispatch/adapter/minimax.rb` uses
+ only `api_key:`, `stream:`, and optionally `extra:` keywords.
+- `bundle exec rubocop --autocorrect-all` exits 0.
+
+The headers spec will fail until phase 13 retargets it; that is expected.
+
+## Verification
+
+Run `run_tests` with `project_path=reference/dispatch-adapter-minimax`.
+Rubocop must be clean. RSpec failures in `headers_spec.rb` are acceptable
+(retargeted in phase 13). RSpec failures elsewhere caused by missing
+header keywords are NOT acceptable — chase them down and fix the call
+chain before calling `ask_for_next_plan`.