| 1 | Dropped side-effect | behavior.yaml::side_effects[must_preserve] |
| 2 | Dropped framework binding | bindings.yaml::bindings[must_appear_in_target] |
| 3 | Hallucinated target API | guidelines/<source>-to-<target>/ (out of scope) |
| 4 | Broken caller (signature unsync) | unit_graph.yaml::depends_on + exported_signature |
| 5 | Dead-code removal of reflection/DI class | unit_graph.yaml::dynamic_entrypoints |
| 6 | Wire contract break | wire_contracts.yaml::stability:frozen + target_contract |
| 7 | Tx boundary lost | behavior.yaml::concurrency.tx_boundary |
| 8 | Cross-language semantic gotcha | wire_contracts.yaml::semantic_divergence |
| 9 | Missing runtime config | bindings.yaml::runtime_config[must_appear_in_target] |
| 10 | Significant branch dropped | behavior.yaml::branches[must_preserve] |
| 11 | Error contract drift | behavior.yaml::error_paths[contract + must_preserve] |
| 12 | Shared module duplicated/lost | shared_modules.yaml::migration_strategy |
| 13 | Concurrency model mismatch | behavior.yaml::concurrency.model |
| 14 | Implicit cross-unit state lost | cross_unit_state.yaml::flows[must_preserve] |
| 15 | Static pairing missed dynamic key / external writer | cross_unit_state.yaml::pairing + must_confirm:runtime |
| 16 | God-class field drift / hallucinated fields | shared_modules.yaml::god_class + shared_refs.used_fields ⊆ |
| 17 | Premature commit to target unit count | unit_decomposition.yaml::commit:false + candidate_splits |
| 18 | Split candidate without driver/rationale | unit_decomposition.yaml::candidate_splits[].drivers + rationale |
| 19 | Fabricated score/confidence misleads design | Principle 6 + self-check: no composite_score |
| 20 | Partial-migration cut breaks at the seam (an unreadable frozen-side semantic — binary dep, config-gated, or name-contradicts-behavior — never recorded) | seams.yaml::frozen_contract[must_preserve], conditional: only when source is invisible/unrecoverable |
| 21 | Frozen side refactored, breaking un-migrated peers | seams.yaml::frozen_side_rule |
| 22 | Protocol-shift conversion left to the migrating agent's guess (wrong mapping/edge cases) | seams.yaml::bridge_points[mapping_rule + edge_cases + idempotency_retry + fallback] |
| 23 | User-specified cut point silently overruled by analyze | seams.yaml::source:declared authoritative rule |
| 24 | Inventory-driven over-rewrite: every discovered framework file or source_anchor becomes an implementation task, even though a smaller runtime boundary satisfies acceptance | migration_boundary.yaml::{strategy,must_rewrite,legacy_allowed_to_remain} + rule: source_anchors are not rewrite targets |
| 25 | User asked for clean/full rewrite but analyze silently leaves legacy runtime residue | migration_boundary.yaml::{user_intent.cleanup_required,full_rewrite_reason} |