# Migration Validator

> Safety verification checklist for C-to-Rust migrations. Validates compilation, unsafe block minimization, memory safety, API compatibility, and idiomatic Rust patterns. Use when: validate migration, check Rust safety, verify converted code, migration QA.

- **Type:** Skill
- **Install:** `agentstack add skill-juanmarchetto-agent-skills-migration-validator`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [JuanMarchetto](https://agentstack.voostack.com/s/juanmarchetto)
- **Installs:** 0
- **Category:** [Web & Browser](https://agentstack.voostack.com/c/web-and-browser)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [JuanMarchetto](https://github.com/JuanMarchetto)
- **Source:** https://github.com/JuanMarchetto/agent-skills/tree/main/skills/migration-validator
- **Website:** https://github.com/JuanMarchetto/agent-skills

## Install

```sh
agentstack add skill-juanmarchetto-agent-skills-migration-validator
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Migration Validation Checklist

## Compilation Check
- [ ] Rust code compiles with `rustc --edition 2024`
- [ ] No errors, only warnings acceptable if minor
- [ ] Clippy passes with 0 warnings (`cargo clippy`)

## Safety Check
- [ ] Count `unsafe` blocks (target: 0 for easy/medium, minimize for hard)
- [ ] Every `unsafe` block has a `// SAFETY:` comment
- [ ] No raw pointer dereferences without bounds checking
- [ ] No transmute unless absolutely necessary
- [ ] No `unwrap()` on user-controlled data

## Semantic Equivalence
- [ ] Same function signature (equivalent types)
- [ ] Same behavior for all valid inputs
- [ ] Same error conditions / edge cases
- [ ] Overflow behavior matches (wrapping vs. checked)
- [ ] Printf format matches exactly (especially `%g` → custom format_g())
- [ ] Bool/int distinction preserved (C `int` 0/1 ≠ Rust `bool`)

## Differential Testing
- [ ] Compile C with `cc -std=gnu11 -lm`
- [ ] Compile Rust with `rustc --edition 2024`
- [ ] Run both with identical test inputs
- [ ] Compare outputs **byte-by-byte** (not just "looks similar")
- [ ] Test edge cases: empty input, max values, null/None, negative numbers
- [ ] Float tolerance: exact match preferred, tolerance only for known precision differences

## Idiomatic Score
Enhanced formula with positive AND negative signals:
- Base: 100
- Negative: `- (unsafe_blocks * 10) - (clippy_warnings * 2) - (unwrap_count * 3) - (as_casts * 1)`
- Positive: `+ min(10, result_count * 2) + min(5, option_count) + min(5, iter_usage)`
- Ranges: 90-100 Excellent, 70-89 Good, 60-69 Acceptable,  high-score non-compiling > c2rust fallback

## Repair Loop Rules
- Effective iterations scale with file size:
  - 2000 LOC: min(configured, 2)
  - Chunked translations: max(configured, 8) — chunks are small, repair is affordable
- Stall detection: 2 unchanged error counts → re-translate at temp 0.7
- Temperature ramp: base 0.2 + 0.1 per iteration (capped at 1.0)
- Quality gate: if initial translation has >5 unsafe → re-translate at temp 0.5
- **P5: Idiomatic hints** — when compiles + diff passes but score < threshold, repair agent gets refactoring hints instead of empty feedback (prevents wasted iterations)

## Validated Production Migrations
These fixtures are regression-tested and represent known-good migrations:
| File | LOC C→Rust | Score | Unsafe | Notes |
|------|-----------|-------|--------|-------|
| add, power, gcd, etc. | <50 | 100 | 0 | Simple arithmetic |
| hash_table.c | 204→~200 | 81 | 0 | malloc/free → Box/Vec |
| cjson_combined.c | 520→319 | 100 | 0 | JSON parser, recursive data |
| expr_eval.c | 1686→1446 | 100 | 0 | 74 functions, recursive descent |
| cjson_full_combined.c | 1696→1439 | 100* | 0 | Full cJSON library (49/78 fns) |
| picohttpparser.c | 1102→1551 | 100 | 0 | HTTP parser, state machine |
| genann_combined.c | 642→622 | 100 | 0 | Neural network, fn ptrs→enum, autonomous pipeline |
| olive_combined.c | 1443→1176 | 100 | 0 | 2D graphics, pixel buffers, checksum diff test |
| http_parser_combined.c | 3680→1492 | N/A | 0 | HTTP parser, goto state machine→line parsing, manual completion |
| miniz_core_standalone.c | 4429 | N/A | N/A | FallbackUnsafe (ceiling case) |

---

Powered by [Noricum](https://github.com/JuanMarchetto/noricum) — autonomous C/C++ to Rust migration agent

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [JuanMarchetto](https://github.com/JuanMarchetto)
- **Source:** [JuanMarchetto/agent-skills](https://github.com/JuanMarchetto/agent-skills)
- **License:** MIT
- **Homepage:** https://github.com/JuanMarchetto/agent-skills

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-juanmarchetto-agent-skills-migration-validator
- Seller: https://agentstack.voostack.com/s/juanmarchetto
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
