go-mlx/cpp/TODO.md
Snider 28b5c5bb47 test(sub-packages): add 33 tests for cache, sample, tokenizer
- cache_test.go (10): KVCache and RotatingKVCache — creation, single/multi
  update, bounded sliding window, reset, state access
- sample_test.go (8): greedy, temperature (high/low), topK (single/multi),
  chain composition, TopP/MinP stub pass-through
- tokenizer_test.go (15): Load (valid/missing/invalid), BOS/EOS detection,
  encode produces tokens, decode skips specials, decode regular tokens,
  DecodeToken (regular/special/space/unknown), FormatGemmaPrompt,
  GPT-2 byte maps (round-trip, printable ASCII, control chars)

Total test count: 29 → 148 across 10 test files.

Co-Authored-By: Virgil <virgil@lethean.io>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:40:49 +00:00

2 KiB

TODO.md — go-mlx C++ Task Queue

Tasks for the CLion Claude session. Written by GoLand Claude or Virgil.


Orientation (First Session)

  • Map the mlx-c API surface — Read all 27 headers in build/_deps/mlx-c-src/mlx/c/. Document which functions the Go side currently binds (cross-reference with Go files) vs which are available but unused. Priority headers: ops.h, fast.h, array.h, transforms.h.
  • Understand the error modelerror.h provides mlx_set_error_handler(). The Go side registers a handler that logs to stderr. Research: can we get structured error info (error codes, categories)? Is the error string stable or does it vary?
  • Check memory management patternsmlx_*_free() functions exist for each type. Verify: is double-free safe? What happens if you free during async eval? Document for the Go finaliser integration.

Priority Tasks (from GoLand Claude)

  • Find mlx_contiguous or equivalentFloats()/DataInt32() on non-contiguous arrays (transpose, broadcast, slice views) returns wrong data because mlx_array_data_float32 returns the physical buffer, not the logical layout. Need a C function that copies a non-contiguous array to contiguous memory. Check if mlx_contiguous exists in mlx-c headers or if we need mlx_reshape to force a copy. This is a data correctness bug — see FINDINGS.md in project root.
  • Verify mlx_array_data_* eval semantics — Does mlx_array_data_float32() trigger evaluation (like C++ array::data() does), or must we call mlx_eval first? The Go side calls Materialize() before data access but some code paths might skip it.

Standing Tasks

  • API gap analysis — When the GoLand Claude needs a C function that isn't exposed by mlx-c, document the gap here and research if upstream mlx-c supports it or if a patch is needed.

Workflow

  1. GoLand Claude or Virgil writes tasks here
  2. Pick up in order, mark [x] when done
  3. New findings → cpp/FINDINGS.md
  4. If Go changes needed → note in FINDINGS.md for GoLand Claude