CITL Integration
Renacer integrates with entrenar's Compiler-in-the-Loop Training (CITL) module to build a self-improving transpilation pipeline.
The CITL Philosophy
"LLM is bootstrap, not runtime dependency."
The goal: use expensive LLM calls during development to build a pattern library, then operate cost-free in production using local ML oracles.
┌─────────────────────────────────────────────────────────────┐
│ CITL WORKFLOW │
├─────────────────────────────────────────────────────────────┤
│ │
│ Day 1-30 (Bootstrap) Day 31+ (Steady State) │
│ ───────────────────── ───────────────────── │
│ LLM: 90% LLM: 5% │
│ Oracle: 10% Oracle: 95% │
│ Cost: $$$ Cost: ~$0 │
│ │
└─────────────────────────────────────────────────────────────┘
Renacer's Role
Renacer captures decision traces during transpilation:
- Trace Capture: Monitor transpiler decisions via
--trace-transpiler-decisions - Error Correlation: Link rustc errors to decision traces via source spans
- Pattern Export: Send traces to entrenar via OTLP
- Fix Verification: Confirm successful fixes for pattern reinforcement
Full Pipeline
1. Transpile with Tracing
# Depyler with decision tracing
depyler transpile app.py --output app.rs --trace-decisions
# Renacer captures and exports
renacer --trace-transpiler-decisions \
--otlp-endpoint http://localhost:4317 \
-- cargo build
2. Error Occurs
error[E0382]: borrow of moved value: `data`
--> app.rs:42:5
3. Oracle Query
entrenar's oracle queries accumulated patterns:
let oracle = DecisionPatternStore::load_apr("patterns.apr")?;
let suggestions = oracle.suggest_fix("E0382", &context, 5)?;
if let Some(fix) = suggestions.first() {
if fix.weighted_score() > 0.7 {
apply_fix(&fix.pattern.fix_diff); // No LLM needed!
}
}
4. Pattern Reinforcement
Successful fixes are recorded:
pattern.record_success(); // Increases future ranking
oracle.index_fix(pattern)?;
oracle.save_apr("patterns.apr")?;
Configuration
Renacer Config
# ~/.config/renacer/citl.toml
[export]
otlp_endpoint = "http://entrenar:4317"
batch_size = 100
[capture]
decision_categories = [
"TypeMapping",
"BorrowStrategy",
"LifetimeInference",
"UnsafeBlock"
]
Depyler Integration
# Enable full CITL pipeline
depyler transpile app.py \
--oracle \
--auto-fix \
--oracle-threshold 0.7 \
--patterns ~/.depyler/decision_patterns.apr
Ingesting Depyler Traces
Renacer can ingest decision traces from depyler's msgpack files:
use renacer::depyler_ingest::{DepylerIngestConfig, DepylerWatcher};
let config = DepylerIngestConfig {
watch_paths: vec!["/tmp/depyler_decisions.msgpack".into()],
poll_interval_ms: 100,
remote_sample_rate: 0.1, // Sample 10% for remote export
max_remote_rate: 1000, // Circuit breaker
};
let mut watcher = DepylerWatcher::new(config)?;
// Poll for new decisions
loop {
let decisions = watcher.poll()?;
for decision in decisions {
exporter.queue(decision);
}
std::thread::sleep(Duration::from_millis(100));
}
Cross-Project Pattern Transfer
Ownership/lifetime fixes transfer across transpilers:
| Error | Python→Rust | C→Rust | Bash→Rust |
|---|---|---|---|
| E0382 | ✅ Transfer | ✅ Transfer | ✅ Transfer |
| E0499 | ✅ Transfer | ✅ Transfer | ✅ Transfer |
| E0506 | ✅ Transfer | ✅ Transfer | ✅ Transfer |
| E0308 | ❌ Type-specific | ❌ Type-specific | ❌ Type-specific |
Import patterns from sister projects:
# Import depyler patterns into decy
decy oracle import \
--from ~/.depyler/decision_patterns.apr \
--filter "E0382,E0499,E0506" \
--output decision_patterns.apr
Cost Model
| Scenario | Cost/Error | 10K Errors/Month |
|---|---|---|
| LLM-only | $0.05 | $500 |
| Oracle @ 80% | $0.01 | $100 |
| Savings | $400/month |
Metrics Dashboard
Track CITL effectiveness:
# Oracle statistics
entrenar citl stats decision_patterns.apr
# Output:
# Patterns: 2,847
# Hit rate: 78.3%
# Top errors: E0382 (31%), E0499 (21%), E0308 (15%)
# Estimated savings: $892/month
See Also
- Decision Trace Export - Export configuration
- Transpiler Integration - Source mapping
- entrenar CITL Book - Full CITL docs