{
  "id": "cut-into-packets",
  "description": "Divide a deck or packet into a stated number of resulting packets",
  "labels": {
    "en": "Cut into packets",
    "es": "Cortar en paquetes",
    "fr": "Couper en paquets",
    "de": "In Pakete schneiden"
  },
  "action_contract": {
    "requires": [
      "source"
    ],
    "parameters": {
      "piles": {
        "required": true,
        "description": "Number of resulting packets",
        "domain": "integer >= 2"
      },
      "cut_plan": {
        "required": false,
        "description": "Ordered top/bottom removals with cardinality or remainder descriptors",
        "domain": "array"
      }
    },
    "post_state_invariant": "Every input card occurs in exactly one result packet; within-packet relative order is preserved.",
    "boundary_note": "Packet identity/custody representation depends on TAM-44."
  }
}