{
  "repo": "core",
  "version": "7.16.0",
  "from": "2231946734926d3ab4dcee259d04c0c9fd860887",
  "to": "v7.16.0",
  "added": [
    {
      "name": "isModelPriced",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/pricing.ts:73",
        "src/index.ts:192"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "writableRootOf",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/memory-engine/index.ts:306",
        "src/core/memory-engine/types.ts:391",
        "src/index.ts:1822"
      ],
      "criteriaCovered": false,
      "breaking": false
    }
  ],
  "removed": [],
  "changed": [],
  "narrowed": [
    {
      "id": "F1",
      "source": "behaviorFlips.summary",
      "text": "A behaviour NARROWING on the package surface and on disk: #699 (design/699) — the memory directory layout: every scope's home is `<memoryDir>/<label>` and the memory dir itself is nobody's home. Ten rules become five; a store still in the root-owning layout is moved once, durably, at the first mount (two-phase, marker-resumable). Package surface: `MemorySessionHandle.writableRoot` is `string | null`, `MemoryEngine.readonlyDirNamesUnderRoot` and `scanEntryFiles`'s `exclude` option are removed, `writableRootOf` is added. On disk: `scopes.json` v2 plus four sidecars re-keyed to the ledger form `(scope, rel)`."
    },
    {
      "id": "G9",
      "source": "criteria.title",
      "text": "#699 G9 — a read-only session no longer serves the root owner's model-worded index (declared narrowing)"
    }
  ],
  "closedSetMembers": [
    {
      "set": "SCOPE_REGISTRY_SHAPES",
      "at": [
        "src/core/memory-engine/layout.ts:541"
      ],
      "newSet": true,
      "added": [
        "absent",
        "migrating",
        "v1",
        "v2"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "typeKeys": [],
  "declarationMoves": [
    {
      "name": "isModelPriced",
      "kind": "function",
      "onSurface": true,
      "from": [
        "src/core/pricing.ts"
      ],
      "to": [
        "src/core/pricing.ts",
        "src/index.ts"
      ]
    }
  ],
  "mintMoves": [],
  "criteriaObserves": [
    {
      "kind": "taskEventField",
      "name": "tool_end.isError",
      "assertions": [
        "G1.a",
        "G2.a",
        "G5.a",
        "G6.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "MemorySessionHandle.writableRoot",
      "assertions": [
        "G2.a",
        "G8.a",
        "G9.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "Model.cost",
      "assertions": [
        "G13.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "RunnerDeps.onError",
      "assertions": [
        "G1.a",
        "G3.a",
        "G4.a",
        "G5.a",
        "G6.a",
        "G7.a",
        "G8.a",
        "G10.a",
        "G11.a",
        "G12.a"
      ]
    }
  ],
  "consumersHint": {
    "cli": [],
    "server": [],
    "sdk": [],
    "note": "scanned cli@d25a9381 server@a24ff851 sdk@557dfdf — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it"
  },
  "breakingCount": 0,
  "breakingItems": [],
  "toResolvedAt": "a4bf5545e28f5b64eb8597d48244e6ef4b6c4670"
}
