changedInput schema / properties / allowedPaths / description
Previous value: -"Globs you intend to change, e.g. [\"src/**\", \"docs/*.md\"]. Omit or leave empty to propose no path restriction, which the user is told plainly."New value: +"Globs you intend to change, e.g. [\"src/**\", \"docs/*.md\"]. File paths only: a word that is not a path (\"hubspot\", \"summer-campaign\") matches no file and makes every edit read as out of scope. A bare directory is expanded for you, so \"docs\" also covers \"docs/**\". Omit or leave empty to propose no path restriction, which the user is told plainly."
changedInput schema / properties / offLimitsPaths / description
Previous value: -"Globs you promise not to touch, e.g. [\"**/.env*\", \"infra/**\"]. These win wherever they overlap allowedPaths."New value: +"Globs you promise not to touch, e.g. [\".env*\", \"infra/**\"]. These win wherever they overlap allowedPaths. A leading \"**/\" needs a directory before it, so \"**/.env*\" is expanded for you to also cover a root \".env\"."
addedInput schema / properties / promises
Added value: +{
+ "description": "Boundaries that are not file paths: recipients, channels, spend limits, systems you will not open. For an agent whose work is not code (marketing, sales, support, operations), this is where the boundary goes. Shown to the user labelled \"Promised, not checked\" and recorded in the ledger, but NEVER enforced, because the gate judges a file path and these have none. Do not put these in allowedPaths.",
+ "items": {
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+}
changedInput schema / properties / sessionId / description
Previous value: -"Your per-session id. Required: a scope with no session cannot be enforced, and must never leak into another run."New value: +"Your per-session id, as your client reports it for THIS run. Required, and it is the key the gate reads the contract back by: a value that matches no live session still returns ratified:true and enforces nothing. Never invent one, and never reuse one from another run."
changedOutput schema / properties / contract / description
Previous value: -"The scope exactly as it was put to the user, echoed back so the agent and the human are holding the same contract."New value: +"The scope as it is STORED and gated, echoed back so you and the server hold the same contract. Paths are the EXPANDED ones: a bare directory and a leading \"**/\" each gain the variant they would otherwise have missed, so this can contain more entries than you sent. The user was shown the paths you sent, because the added twin says the same thing to a reader; the expansion only changes what the matcher covers, never what it means."
changedOutput schema / properties / contract / properties / allowedPaths / description
Previous value: -"Globs the run may change. Empty means no path restriction was proposed, which the user was told plainly."New value: +"Globs the run may change, after expansion. Empty means no path restriction was proposed, which the user was told plainly."
changedOutput schema / properties / contract / properties / offLimitsPaths / description
Previous value: -"Globs the run promised not to touch. These win wherever they overlap allowedPaths."New value: +"Globs the run promised not to touch, after expansion. These win wherever they overlap allowedPaths."
addedOutput schema / properties / contract / properties / promises
Added value: +{
+ "description": "Non-path boundaries as the user saw them. Recorded, never enforced.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+}
addedOutput schema / properties / enforcementNote
Added value: +{
+ "description": "Present only when there is something true to say about the limits of this contract. Repeat it to the user rather than paraphrasing it.",
+ "type": "string"
+}
addedOutput schema / properties / enforces
Added value: +{
+ "description": "What this contract CONTAINS that can be checked, not a promise about what the gate on this machine will do. An EMPTY array means nothing here is checked automatically: the contract is a recorded promise, and every action stays governed by the permission policy exactly as it was before. Never tell the user a boundary is enforced when this is empty.",
+ "items": {
+ "enum": [
+ "paths"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+}
addedOutput schema / properties / hookSeen
Added value: +{
+ "description": "Whether any agent hook has actually reported this sessionId. FALSE means the gate will look this contract up under a key that does not exist, so nothing will be checked no matter what ratified says: fix the session id rather than proceeding as if a scope were in force. ABSENT means the check could not run, which is not evidence either way.",
+ "type": "boolean"
+}
changedOutput schema / required
Previous value: -[
- "correlationId",
- "ratified",
- "answered",
- "contract"
-]New value: +[
+ "correlationId",
+ "ratified",
+ "answered",
+ "enforces",
+ "contract"
+]