rock
edccf19072
fix: remove magika/ort dependency (CI glibc too old for C23 symbols)
...
Build and Push / Test (push) Successful in 2m40s
Build and Push / Build and push image (push) Canceled after 0s
Root cause: ort (ONNX Runtime) links against __isoc23_strtoll which
requires glibc 2.38+. CI runner has older glibc, causing linker failure.
Replace magika ML detection with regex-only ContentRouter.
Regex fallback already covers all content types (JSON, log, diff, code).
All 294 tests passing.
2026-08-28 15:42:06 -07:00
Story Crater Bot
0d836c4ec1
feat: M3.8 pluggable optimizer service (DRY + SOLID, 13 tests)
...
Build and Push / Test (push) Failing after 1m55s
Build and Push / Build and push image (push) Skipped
Refactored M3.8 to be extensible and customizable:
SOLID Architecture:
- Single Responsibility: OptimizerPlugin (optimize), FormatHandler (format)
- Open/Closed: Registry trait for extensibility without modification
- Liskov Substitution: Generic SimpleRegistry<T> works for any plugin type
- Interface Segregation: Traits focused, minimal methods
- Dependency Inversion: OptimizerService depends on abstractions
DRY Improvements:
- Generic Registry<T> trait eliminates duplicate register/get/list code
- PluginLocator strategy pattern replaces duplicated lookup logic
- OptimizerServiceBuilder factory pattern for ergonomic creation
Features:
✓ OptimizerPlugin trait (async optimization with metrics)
✓ FormatHandler trait (json, jsonl, raw, csv, yaml)
✓ Registry<T> generic trait (reusable for any plugin type)
✓ PluginLocator strategy (find optimizer by type, format by name)
✓ OptimizerService (orchestrator + dependency injection)
✓ OptimizerServiceBuilder (fluent builder)
✓ BuiltinOptimizer (wraps ContextOptimizer)
✓ 5 format handlers (JSON, JSONL, Raw, CSV, YAML)
Tests (13 passing):
- Registry registration and lookup
- Type-based optimizer finding
- Format handler discovery
- Service creation via builder
- Service optimization workflow
- Error handling on missing formats
Build: ✅ mem-core clean (130 tests total)
Usage:
let service = OptimizerServiceBuilder::new()
.with_optimizer(Arc::new(MyOptimizer))
.with_format(Arc::new(JsonFormatter))
.build()?;
let output = service.optimize(content, "text/plain", Some("json")).await?;
Ready for:
- Custom optimizer implementations
- Custom format handlers
- Query optimization (next commit)
- Ingest pipeline integration (next commit)
2026-08-28 12:13:14 -07:00
Story Crater Bot
8d8addc930
feat: M3.8.1 phase 4a — TextCompressor + env config (12 tests)
...
Build and Push / Test (push) Failing after 1m49s
Build and Push / Build and push image (push) Skipped
TextCompressor (320 LOC, 10 tests):
- Token importance scoring with lazy_static STOP_WORDS
- Keeps: high-entropy tokens (IDs, hashes, error codes, numbers, symbols)
- Drops: stop words, filler words, low-information prose
- ID detection: UUID, SHA256, session IDs, underscored patterns
- Error marker detection: error, exception, panic, fail, warn, critical
- Configurable compression ratio (default 40% token retention)
ContextOptimizerConfig::from_env() (2 tests):
- MEM_CONTEXT_OPTIMIZER (on/off)
- MEM_MAGIKA_ENABLED, MEM_MAGIKA_THRESHOLD
- MEM_COMPRESS_JSON, MEM_COMPRESS_LOGS, MEM_COMPRESS_CODE, MEM_COMPRESS_DIFF, MEM_COMPRESS_TEXT
- MEM_TOKEN_BUDGET, MEM_CCR_ENABLED
ContextOptimizer::from_env() factory method
62 optimizer tests total:
Phase 1 (17) + Phase 2 (15) + Phase 3 (18) + Phase 4a (12) = 62 passing
2026-08-28 10:02:52 -07:00
Story Crater Bot
edcc23122e
feat: M3.8.1 phase 3 — CacheAligner + CCR Store (18 tests)
...
Build and Push / Test (push) Failing after 1m53s
Build and Push / Build and push image (push) Skipped
CacheAligner (180 LOC, 8 tests):
- Detects dynamic patterns: timestamps, UUIDs, session IDs, temp paths, SHAs
- Uses once_cell Lazy statics + Regex for pattern matching
- Separates stable prefix (cache-able) from dynamic tail (varies)
- Reports drift metrics (0.0-1.0 ratio of dynamic content)
- Preserves identical prefixes across calls for KV cache hits
CcrStore (170 LOC, 10 tests):
- LRU cache with IndexMap (preserves insertion order)
- SHA256 hashing for content identification
- TTL-based expiry (default 1hr, configurable)
- Thread-safe (Mutex-wrapped)
- Supports large content (tested 100KB+)
ContextOptimizer integration (2 tests):
- Wired CCR store into optimizer
- Stores originals when compression occurs + CCR enabled
- Returns hash for retrieval hints
50 optimizer tests total:
Phase 1 (17) + Phase 2 (15) + Phase 3 (18) = 50 passing
2026-08-28 09:39:31 -07:00
Story Crater Bot
05aec4e23b
feat: M3.8.1 phase 1 — content router + log compressor
...
Build and Push / Test (push) Failing after 1m46s
Build and Push / Build and push image (push) Skipped
ContentRouter uses Google Magika ML for content detection (<1ms) with regex
fallback. Detects JSON, code, logs, diffs, config, text.
LogCompressor reuses M3.7.7 patterns (markers, cascade, strip_ansi) to
shrink build logs by keeping errors/stacks and dropping noise.
17 unit tests passing:
- router: json, code, diff, log, text detection
- log: error lines, stack traces, ansi stripping, compression
- optimizer: token estimation, passthrough mode
Magika + ort ONNX runtime added to Cargo.toml.
2026-08-28 09:29:56 -07:00
Story Crater Bot
d3be7f6fd4
Deploy Poimen Memory K8s cluster with ArgoCD tracking (M2.2, M3.5-M3.7)
ci / markdown (push) Waiting to run
2026-08-22 23:13:42 -07:00
Story Crater Bot
631cbfa3e9
feat: complete M0.1-M0.4 phases
...
M0.1 - Cargo workspace + crate skeletons
- 6-crate workspace with correct dependency direction
- CI/CD pipeline with GitHub Actions
- Integration tests verifying build and dependency structure
M0.2 - Domain types and sha256 identity
- Level (L0, L1, L2) enum with proper serde formatting
- Role enum (User, Assistant, ToolResult, System)
- Record, Chunk, and MemoryNode domain types
- Content-hash identity system ensuring rebuild idempotence
- Newtypes (ProjectId, QueryId, RunId) with validation
- Round-trip serde tests for all types
M0.3 - RecordSource trait + ChunkPolicy
- RecordSource trait for streaming record sources
- Chunk policy with token budgets and boundary modes
- TokenCounter trait with CharsOverFourCounter stub
- Chunking stream that respects budgets without splitting records
- VecSource for testing
- Integration tests verifying lossless chunking and budget adherence
M0.4 - Tokenizer-backed chunk sizing
- Vendored Qwen2 tokenizer with hash verification
- QwenTokenCounter implementing proper token counting
- Hash guard that fails on modified tokenizer
- mem tokens CLI subcommand for token counting
- Integration tests with known string counts, hash guards, and budget verification
Total: 19 integration tests passing, all phases verified to compose correctly
Workspace builds cleanly with no clippy warnings
2026-08-22 23:13:42 -07:00