# Phase 01 — Rename namespace

**Estimated time:** ~30 minutes
**Touches:** Every file in the gem.

## Goal

Rename the entire codebase from `Claude` to `MiniMax`. After this phase the
gem still functionally targets api.anthropic.com (configuration swap is in
phase 04) — we are only renaming the Ruby surface, files, and gemspec here.

## Steps

### 1. Rename source directories and files

```text
lib/dispatch/adapter/claude.rb            → lib/dispatch/adapter/minimax.rb
lib/dispatch/adapter/claude/              → lib/dispatch/adapter/minimax/
sig/dispatch/adapter/claude.rbs           → sig/dispatch/adapter/minimax.rbs
spec/dispatch/adapter/claude/             → spec/dispatch/adapter/minimax/
spec/dispatch/adapter/claude_spec.rb      → spec/dispatch/adapter/minimax_spec.rb
dispatch-adapter-claude.gemspec           → dispatch-adapter-minimax.gemspec
```

DELETE the built-gem artifact:

```text
dispatch-adapter-claude-0.2.0.gem         → DELETED
```

### 2. Rename Ruby module everywhere

Replace `Dispatch::Adapter::Claude` with `Dispatch::Adapter::MiniMax`
throughout the codebase. `MiniMax` uses CamelCase exactly as written
(double capital).

Concretely, in every `*.rb` and `*.rbs` file under `lib/`, `spec/`, `sig/`,
`bin/`, and `examples/`:

- `class Claude < Base`           → `class MiniMax < Base`
- `Dispatch::Adapter::Claude`     → `Dispatch::Adapter::MiniMax`
- `class Claude::Foo` (and similar nested forms) → `class MiniMax::Foo`
- `Claude::VERSION` → `MiniMax::VERSION`
- `Claude::DEFAULT_*` → `MiniMax::DEFAULT_*`
- The `module ClaudeVersion` block in `lib/dispatch/adapter/minimax/version.rb`
  → `module MiniMaxVersion`
- The `ClaudeErrors` module → `MiniMaxErrors`

### 3. Update `require_relative` paths in `lib/dispatch/adapter/minimax.rb`

All sub-module requires must point at the new directory:

```ruby
require_relative "minimax/version"
require_relative "minimax/errors"
require_relative "minimax/key_store"      # was token_store — rename in phase 03
require_relative "minimax/headers"
require_relative "minimax/pricing_table"
require_relative "minimax/model_catalog"
require_relative "minimax/request_builder"
require_relative "minimax/response_builder"
require_relative "minimax/stream_collector"
require_relative "minimax/sse_parser"
require_relative "minimax/http_client"
```

NOTE: At this phase `key_store` does not yet exist; the file is still named
`token_store.rb`. Leave the require pointing at `minimax/token_store` for now
and rename in phase 03. DO NOT delete `pkce`, `oauth`, `cloaking`,
`usage_client`, or `rate_limit_headers` requires yet — that's phase 02.

### 4. Reset the version

Edit `lib/dispatch/adapter/minimax/version.rb`:

```ruby
# frozen_string_literal: true

module Dispatch
  module Adapter
    module MiniMaxVersion
      VERSION = "0.1.0"
    end
  end
end
```

### 5. Rewrite the gemspec

Edit `dispatch-adapter-minimax.gemspec`:

- `spec.name`        → `"dispatch-adapter-minimax"`
- `spec.version`     → `Dispatch::Adapter::MiniMaxVersion::VERSION`
- `spec.summary`     → `"MiniMax adapter for the Dispatch interface."`
- `spec.description` → A one-paragraph description mentioning MiniMax M2.7,
  Token Plan, Anthropic-compatible /v1/messages endpoint.
- `spec.metadata["source_code_uri"]` and `homepage_uri` → adjust as needed
  (leave placeholder if you don't know the new repo URL yet).

Keep all existing runtime dependencies (`dispatch-adapter-interface`).
DO NOT add new dependencies in this phase.

### 6. Rename the spec helper if it references Claude

`spec/spec_helper.rb` may contain `require "dispatch/adapter/claude"` —
update to `require "dispatch/adapter/minimax"`.

### 7. Update the `Gemfile` if it has explicit references

The `Gemfile` should NOT need changes (it loads the gemspec dynamically),
but verify there are no hardcoded `dispatch-adapter-claude` references.

### 8. Delete the lockfile so it regenerates

DELETE `Gemfile.lock`. It will regenerate on the next `bundle install`.

### 9. Update `.rspec`, `Rakefile`, `README.md`, `CHANGELOG.md`

For now, just rename references; the full README rewrite is phase 09.
At minimum:

- `.rspec`     — usually doesn't reference the module; verify.
- `Rakefile`   — replace any `Dispatch::Adapter::Claude` references.
- `README.md`  — replace `Claude` with `MiniMax` in references; full rewrite later.
- `CHANGELOG.md` — replace existing content with a single line:
  ```
  ## 0.1.0 (unreleased)
  - Initial release: forked from dispatch-adapter-claude.
  ```
- `AGENTS.md`  — leave for now or skip; rewriting is phase 09.

### 10. Update file headers

The `# Anthropic Claude adapter` style comments at the top of files should
be updated to MiniMax equivalents where they appear (do not invent
references; just retarget existing comments).

## Acceptance criteria

After completing this phase:

- `grep -rn 'Dispatch::Adapter::Claude' .` (excluding `.git/`, `.rules/`,
  `Gemfile.lock`) returns ZERO matches.
- `grep -rn 'class Claude' lib/ spec/ sig/` returns ZERO matches.
- `grep -rn 'ClaudeVersion\|ClaudeErrors' lib/ spec/ sig/` returns ZERO matches.
- The file `lib/dispatch/adapter/claude.rb` does NOT exist.
- The file `lib/dispatch/adapter/minimax.rb` exists.
- The directory `lib/dispatch/adapter/claude/` does NOT exist.
- The directory `lib/dispatch/adapter/minimax/` exists with the
  ten `.rb` files (version, errors, token_store [still named that for now],
  pkce, oauth, oauth/callback_server.rb, cloaking, headers, pricing_table,
  model_catalog, request_builder, response_builder, stream_collector,
  sse_parser, http_client, usage_client, rate_limit_headers).
- `dispatch-adapter-minimax.gemspec` exists; `dispatch-adapter-claude.gemspec`
  and `dispatch-adapter-claude-0.2.0.gem` do NOT.
- `bundle install` runs cleanly inside the gem directory.

## Verification

Run `run_tests` with `project_path=reference/dispatch-adapter-minimax`.
Both rubocop and rspec must exit 0.

The specs may have many failures referencing OAuth / PKCE / cloaking
machinery that hasn't been deleted yet — this is expected. They should
not have failures from the rename itself (e.g. `NameError:
uninitialized constant Dispatch::Adapter::Claude`). If a spec fails
because of a renamed constant, fix the spec to use the new name.

If specs targeting OAuth/PKCE/cloaking/usage are STILL failing after the
rename (because the underlying code still uses Anthropic endpoints, which
won't be reachable in test mode), that's acceptable — those specs will
be deleted in phase 08. As long as rspec EXITS NON-ZERO only on
test-doubles / NameError / NoMethodError that the rename caused, you can
proceed.

**HOWEVER**: rubocop MUST pass cleanly. Resolve any naming-related
violations (e.g. `Naming/FileName` if a file's class name no longer matches
its filename) before calling `ask_for_next_plan`.

If rspec failures persist beyond rename-related causes, document them in
the summary and proceed. Phase 02 will delete the offending code.
