changedInput schema / oneOf
Previous value: -[
- {
- "additionalProperties": false,
- "properties": {
- "budgetId": {
- "description": "Exact active General budgetId from get_business_budgets(budgetId). Never a role allocation or request ID.",
- "maxLength": 160,
- "minLength": 1,
- "type": "string"
- },
- "endsOn": {
- "description": "Last included UTC calendar day, on or after startsOn.",
- "format": "date",
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
- "type": "string"
- },
- "expectedRevision": {
- "description": "Copy the selected General frame’s current revision. A stale revision rejects the entire replacement; reread and obtain renewed intent instead of retrying with a newer revision.",
- "pattern": "^[a-f0-9]{64}$",
- "type": "string"
- },
- "goal": {
- "description": "Purpose of the selected spending frame.",
- "maxLength": 160,
- "minLength": 1,
- "type": "string"
- },
- "limitCents": {
- "description": "General/role limit in safe integer EUR cents. Zero blocks positive new spending; it does not archive. No currency conversion.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- },
- "reachKey": {
- "description": "Workspace-local spending category key, not a provider account or permission. Creation may introduce a key; updates and role allocations copy the selected frame’s key.",
- "pattern": "^[a-z0-9][a-z0-9_-]{0,79}$",
- "type": "string"
- },
- "reachLabel": {
- "description": "Display label for reachKey.",
- "maxLength": 120,
- "minLength": 1,
- "type": "string"
- },
- "requestKey": {
- "description": "Optional legacy reference, not journal-idempotency. After uncertainty read the frame/request instead of repeating the write.",
- "format": "uuid",
- "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
- "type": "string"
- },
- "startsOn": {
- "description": "First included UTC calendar day. Together with reachKey identifies a General frame.",
- "format": "date",
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
- "type": "string"
- }
- },
- "required": [
- "goal",
- "startsOn",
- "endsOn",
- "reachKey",
- "reachLabel",
- "limitCents",
- "budgetId",
- "expectedRevision"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "allocationId": {
- "description": "Role mode only: exact existing allocation to revise limitCents; roleKey and parentAllocationId stay unchanged. Omit for initial allocation.",
- "minLength": 1,
- "type": "string"
- },
- "budgetId": {
- "description": "Exact budgetId from this workspace's get_business_budgets; archive selects that frame, role mode selects its parent.",
- "maxLength": 160,
- "minLength": 1,
- "type": "string"
- },
- "endsOn": {
- "description": "Last included UTC calendar day, on or after startsOn.",
- "format": "date",
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
- "type": "string"
- },
- "goal": {
- "description": "Purpose of the selected spending frame.",
- "maxLength": 160,
- "minLength": 1,
- "type": "string"
- },
- "limitCents": {
- "description": "General/role limit in safe integer EUR cents. Zero blocks positive new spending; it does not archive. No currency conversion.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- },
- "parentAllocationId": {
- "anyOf": [
- {
- "minLength": 1,
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Role mode only: parent share for a child allocation; omitted/null means a root share. Immutable on updates."
- },
- "reachKey": {
- "description": "Workspace-local spending category key, not a provider account or permission. Creation may introduce a key; updates and role allocations copy the selected frame’s key.",
- "pattern": "^[a-z0-9][a-z0-9_-]{0,79}$",
- "type": "string"
- },
- "reachLabel": {
- "description": "Display label for reachKey.",
- "maxLength": 120,
- "minLength": 1,
- "type": "string"
- },
- "requestKey": {
- "description": "Fresh caller UUID across this tenant's shared work-operation journal. Exact replay keeps every argument; changed contents or actor conflict.",
- "format": "uuid",
- "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
- "type": "string"
- },
- "roleKey": {
- "description": "Exact existing roleKey from get_business_context(view=roles). Requires budgetId, requestKey and the unchanged parent frame; excludes expectedRevision.",
- "maxLength": 120,
- "minLength": 1,
- "type": "string"
- },
- "startsOn": {
- "description": "First included UTC calendar day. Together with reachKey identifies a General frame.",
- "format": "date",
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
- "type": "string"
- }
- },
- "required": [
- "goal",
- "startsOn",
- "endsOn",
- "reachKey",
- "reachLabel",
- "limitCents",
- "budgetId",
- "requestKey",
- "roleKey"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "properties": {
+ "budgetId": {
+ "description": "Exact active General budgetId from get_business_budgets(budgetId). Never a role allocation or request ID.",
+ "maxLength": 160,
+ "minLength": 1,
+ "type": "string"
+ },
+ "endsOn": {
+ "description": "Last included UTC calendar day, on or after startsOn.",
+ "format": "date",
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
+ "type": "string"
+ },
+ "expectedRevision": {
+ "description": "Copy the selected General frame’s current revision. A stale revision rejects the entire replacement; reread and obtain renewed intent instead of retrying with a newer revision.",
+ "pattern": "^[a-f0-9]{64}$",
+ "type": "string"
+ },
+ "goal": {
+ "description": "Purpose of the selected spending frame.",
+ "maxLength": 160,
+ "minLength": 1,
+ "type": "string"
+ },
+ "limitCents": {
+ "description": "General/role limit in safe integer EUR cents. Zero blocks positive new spending; it does not archive. No currency conversion.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "reachKey": {
+ "description": "Workspace-local spending category key, not a provider account or permission. Creation may introduce a key; updates and role allocations copy the selected frame’s key.",
+ "pattern": "^[a-z0-9][a-z0-9_-]{0,79}$",
+ "type": "string"
+ },
+ "reachLabel": {
+ "description": "Display label for reachKey.",
+ "maxLength": 120,
+ "minLength": 1,
+ "type": "string"
+ },
+ "requestKey": {
+ "description": "Optional legacy reference, not journal-idempotency. After uncertainty read the frame/request instead of repeating the write.",
+ "format": "uuid",
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
+ "type": "string"
+ },
+ "startsOn": {
+ "description": "First included UTC calendar day. Together with reachKey identifies a General frame.",
+ "format": "date",
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "goal",
+ "startsOn",
+ "endsOn",
+ "reachKey",
+ "reachLabel",
+ "limitCents",
+ "budgetId",
+ "expectedRevision"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "allocationId": {
+ "description": "Exact existing allocationId from get_business_budgets(budgetId,allocationId). Update requires this selection; a missing allocation is never created. Keep its roleKey and parentAllocationId unchanged.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "budgetId": {
+ "description": "Exact budgetId from this workspace's get_business_budgets; archive selects that frame, role mode selects its parent.",
+ "maxLength": 160,
+ "minLength": 1,
+ "type": "string"
+ },
+ "endsOn": {
+ "description": "Last included UTC calendar day, on or after startsOn.",
+ "format": "date",
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
+ "type": "string"
+ },
+ "goal": {
+ "description": "Purpose of the selected spending frame.",
+ "maxLength": 160,
+ "minLength": 1,
+ "type": "string"
+ },
+ "limitCents": {
+ "description": "General/role limit in safe integer EUR cents. Zero blocks positive new spending; it does not archive. No currency conversion.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "parentAllocationId": {
+ "anyOf": [
+ {
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Role mode only: parent share for a child allocation; omitted/null means a root share. Immutable on updates."
+ },
+ "reachKey": {
+ "description": "Workspace-local spending category key, not a provider account or permission. Creation may introduce a key; updates and role allocations copy the selected frame’s key.",
+ "pattern": "^[a-z0-9][a-z0-9_-]{0,79}$",
+ "type": "string"
+ },
+ "reachLabel": {
+ "description": "Display label for reachKey.",
+ "maxLength": 120,
+ "minLength": 1,
+ "type": "string"
+ },
+ "requestKey": {
+ "description": "Fresh caller UUID across this tenant's shared work-operation journal. Exact replay keeps every argument; changed contents or actor conflict.",
+ "format": "uuid",
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
+ "type": "string"
+ },
+ "roleKey": {
+ "description": "Exact existing roleKey from get_business_context(view=roles). Requires budgetId, requestKey and the unchanged parent frame; excludes expectedRevision.",
+ "maxLength": 120,
+ "minLength": 1,
+ "type": "string"
+ },
+ "startsOn": {
+ "description": "First included UTC calendar day. Together with reachKey identifies a General frame.",
+ "format": "date",
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "goal",
+ "startsOn",
+ "endsOn",
+ "reachKey",
+ "reachLabel",
+ "limitCents",
+ "budgetId",
+ "requestKey",
+ "roleKey",
+ "allocationId"
+ ],
+ "type": "object"
+ }
+]