{
  "repo": "core",
  "version": "7.17.5",
  "from": "dd51253ac702ab232224dac50de33eb0dd09e40f",
  "to": "3dfd4ff66bfd1c6ea217fa251d2f28df79052f87",
  "added": [],
  "removed": [],
  "changed": [],
  "narrowed": [
    {
      "id": "F1",
      "source": "behaviorFlips.summary",
      "text": "Narrowing — argv re-entry (#766; test [7178] ①; B-107): a program that turns its STDIN into another program's argv (`xargs`, `parallel`) is judged like a shell re-entry — refused whole, so the boundary asks (mandated) instead of vouching; when the wrapped program is a declared no-path verb the pipeline runs unasked."
    },
    {
      "id": "F2",
      "source": "behaviorFlips.summary",
      "text": "Narrowing — a base move the walk cannot verify (#767; test [7178] ②; B-107): after `cd X` the relative operands of a later segment are judged against BOTH bases (moved and unmoved) unless every connector between that `cd` and the segment is `&&` (the shell itself verifies the move); `;`, `||`, `|`, `&` and unknown connectors leave the move unverified (fail-closed)."
    },
    {
      "id": "F3",
      "source": "behaviorFlips.summary",
      "text": "Narrowing + contract (#768 β/γ; clay C-R37; test [7178] ③): the full Bash face runs the canonical recheck the `bash_readonly` face already had — after the gate allowed and before spawn, every path the lexical verdict accepted (`checkedPaths` + glob patterns) is canonicalized against the READ roots; one that escapes is REFUSED (an error result, `details.type: \"readonly_out_of_root\"`, never an ask — the gate has passed and there is no channel to ask on). The seat's contract is stated as `@contract shell.read_boundary.friction_floor`: the shell read boundary judges what a command TEXT may name (a friction floor); the security boundary is the executionEnv sandbox."
    }
  ],
  "closedSetMembers": [
    {
      "set": "ShellSegmentConnector",
      "at": [
        "src/tools/fs/bash-readonly-classifier.ts:344"
      ],
      "newSet": true,
      "added": [
        "&&",
        ";",
        "start",
        "|",
        "||"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "typeKeys": [],
  "declarationMoves": [],
  "mintMoves": [],
  "criteriaObserves": [
    {
      "kind": "typeMember",
      "name": "AskRequest.ruleOffersAbsence",
      "assertions": [
        "G1.a",
        "G2.a",
        "G3.a"
      ]
    }
  ],
  "consumersHint": {
    "cli": [],
    "server": [],
    "sdk": [],
    "note": "scanned cli@0a45f646 server@82cf402c sdk@6910789 — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it"
  },
  "breakingCount": 0,
  "breakingItems": []
}
