node-autotask 0.32.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/MCP_TOOL_CATALOG.json +27 -8
  3. package/MCP_TOOL_MANIFEST.md +14 -13
  4. package/N8N_MCP_MANIFEST.json +38 -12
  5. package/N8N_MCP_MANIFEST.md +10 -9
  6. package/README.md +1 -1
  7. package/capabilities.json +4228 -2547
  8. package/capabilities.schema.json +32 -0
  9. package/dist/capabilities.cjs +2 -2
  10. package/dist/capabilities.d.cts +13 -1
  11. package/dist/capabilities.d.ts +13 -1
  12. package/dist/capabilities.js +1 -1
  13. package/dist/{chunk-M2EGFPGF.js → chunk-4MUBUSTL.js} +4227 -2546
  14. package/dist/{chunk-FVHPN7ZR.js → chunk-6ADFCU3I.js} +636 -429
  15. package/dist/{chunk-FTF2FEQ6.cjs → chunk-DKJP73FX.cjs} +1176 -969
  16. package/dist/{chunk-R6HLJCI2.js → chunk-EZKM4HQ6.js} +1038 -573
  17. package/dist/{chunk-DCTHO7CQ.cjs → chunk-FOOHJBPP.cjs} +4227 -2546
  18. package/dist/{chunk-IKPFR6K2.cjs → chunk-GDQ4QM7Q.cjs} +1085 -620
  19. package/dist/{chunk-QCB4LYKD.cjs → chunk-P6YN2POI.cjs} +143 -143
  20. package/dist/{chunk-T6EDJRLT.js → chunk-RDFL5QYE.js} +2 -2
  21. package/dist/{index-Cw4aNNMo.d.ts → index-ByMU8IC2.d.ts} +584 -198
  22. package/dist/{index-OkbCWcef.d.cts → index-Dx4-zpDo.d.cts} +584 -198
  23. package/dist/index.cjs +22 -22
  24. package/dist/index.d.cts +2 -2
  25. package/dist/index.d.ts +2 -2
  26. package/dist/index.js +4 -4
  27. package/dist/operations/index.cjs +165 -137
  28. package/dist/operations/index.d.cts +39 -25
  29. package/dist/operations/index.d.ts +39 -25
  30. package/dist/operations/index.js +48 -20
  31. package/dist/pool.cjs +9 -9
  32. package/dist/pool.d.cts +1 -1
  33. package/dist/pool.d.ts +1 -1
  34. package/dist/pool.js +4 -4
  35. package/dist/resources/index.cjs +4 -4
  36. package/dist/resources/index.d.cts +1 -1
  37. package/dist/resources/index.d.ts +1 -1
  38. package/dist/resources/index.js +3 -3
  39. package/docs/API.md +161 -36
  40. package/package.json +2 -1
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CAPABILITIES
3
- } from "./chunk-M2EGFPGF.js";
3
+ } from "./chunk-4MUBUSTL.js";
4
4
 
5
5
  // src/auth.ts
6
6
  var AUTH_HEADERS = {
@@ -2337,8 +2337,8 @@ var RELATIONSHIP_MAP = {
2337
2337
  "unproven": true,
2338
2338
  "blocker": {
2339
2339
  "kind": "unknown",
2340
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
2341
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
2340
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
2341
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
2342
2342
  },
2343
2343
  "vendorEvidence": [
2344
2344
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"appointments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ae6ff4b1-553b-48e0-b4fe-00c72964b268","message":"Value does not exist for the required f'
@@ -2413,13 +2413,15 @@ var RELATIONSHIP_MAP = {
2413
2413
  "unproven": true,
2414
2414
  "blocker": {
2415
2415
  "kind": "unknown",
2416
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/time-entry-approve) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the conditions (timeEntryID and approvalResourceID must reference existing objects) and the side effect (TimeEntry.BillingApprovalLevelMostRecent is updated; approvalDateTime / approvalResourceID are not), but the acceptance of the model body is unverified.",
2417
- "remedy": "attempt one create against a time entry in a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
2416
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the conditions (timeEntryID and approvalResourceID must reference existing objects) and the side effect (TimeEntry.BillingApprovalLevelMostRecent is updated; approvalDateTime and approvalResourceID are not).",
2417
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
2418
2418
  },
2419
2419
  "vendorEvidence": [
2420
2420
  'Vendor help, BillingItemApprovalLevels entity page (fetched 2026-10-26): "describes a multi-level approval record for an Autotask time entry ... This option is only available through the REST API."',
2421
2421
  'Vendor help, BillingItemApprovalLevels entity page (fetched 2026-10-26): "When the BillingItemApprovalLevels entity is created, the TimeEntry.BillingApprovalLevelMostRecent field is updated, but approvalDateTime and approvalResourceID are not. Instead, the approvalDateTime and approvalResourceID fields are editable on the TimeEntry entity. Workaround: ... create the BillingItemApprovalLevel and then follow that call up with an update to the TimeEntry to set the BillingApprovalDateTime and BillingApprovalResourceID fields."',
2422
- "api-docs.json: POST /V1.0/BillingItemApprovalLevels consumes definitions.BillingItemApprovalLevelModel and answers OperationResultModel \u2014 the entity defines no PUT, PATCH or DELETE path."
2422
+ "api-docs.json: POST /V1.0/BillingItemApprovalLevels consumes definitions.BillingItemApprovalLevelModel and answers OperationResultModel \u2014 the entity defines no PUT, PATCH or DELETE path.",
2423
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/time-entry-approve) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the conditions (timeEntryID and approvalResourceID must reference existing objects) and the side effect (TimeEntry.BillingApprovalLevelMostRecent is updated; approvalDateTime / approvalResourceID are not), but the acceptance of the model body is unverified.",
2424
+ "maintainer provenance (blocker.remedy): attempt one create against a time entry in a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
2423
2425
  ],
2424
2426
  "deleteBoundary": {
2425
2427
  "available": false,
@@ -2480,8 +2482,8 @@ var RELATIONSHIP_MAP = {
2480
2482
  "unproven": true,
2481
2483
  "blocker": {
2482
2484
  "kind": "blind-parent",
2483
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
2484
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
2485
+ "message": "The create failed on the parent reference: the parent table is blind for this API user, so no valid parent id can be read back.",
2486
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
2485
2487
  },
2486
2488
  "vendorEvidence": [
2487
2489
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"change_request_links.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"2d747061-00ea-4b40-b3fc-740882492457","message":"Value does not exist for the re'
@@ -2541,8 +2543,8 @@ var RELATIONSHIP_MAP = {
2541
2543
  "unproven": false,
2542
2544
  "blocker": {
2543
2545
  "kind": "ok",
2544
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
2545
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
2546
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
2547
+ "remedy": "None: create with the live-proven field set."
2546
2548
  },
2547
2549
  "vendorEvidence": [
2548
2550
  "verified-gone=True"
@@ -2588,8 +2590,8 @@ var RELATIONSHIP_MAP = {
2588
2590
  "unproven": false,
2589
2591
  "blocker": {
2590
2592
  "kind": "ok",
2591
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
2592
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
2593
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
2594
+ "remedy": "None: create with the live-proven field set."
2593
2595
  },
2594
2596
  "vendorEvidence": [
2595
2597
  "verified-gone=True"
@@ -2775,9 +2777,9 @@ var RELATIONSHIP_MAP = {
2775
2777
  ],
2776
2778
  "unproven": false,
2777
2779
  "blocker": {
2778
- "kind": "delete-absent",
2779
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 companies); cleanup is UI-only.",
2780
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
2780
+ "kind": "ok",
2781
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
2782
+ "remedy": "None: create with the live-proven field set."
2781
2783
  },
2782
2784
  "vendorEvidence": [
2783
2785
  '{"error":true,"code":"CONFIG_ERROR","category":"validation","retryable":false,"operation":"companies.delete","message":"invoke: unknown operation \\"companies.delete\\" \u2014 it is not in the capability reg'
@@ -2827,8 +2829,8 @@ var RELATIONSHIP_MAP = {
2827
2829
  "unproven": false,
2828
2830
  "blocker": {
2829
2831
  "kind": "ok",
2830
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
2831
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
2832
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
2833
+ "remedy": "None: create with the live-proven field set."
2832
2834
  },
2833
2835
  "vendorEvidence": [
2834
2836
  'Executed "company_alerts.create".'
@@ -2872,8 +2874,8 @@ var RELATIONSHIP_MAP = {
2872
2874
  "unproven": false,
2873
2875
  "blocker": {
2874
2876
  "kind": "ok",
2875
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
2876
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
2877
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
2878
+ "remedy": "None: create with the live-proven field set."
2877
2879
  },
2878
2880
  "vendorEvidence": [],
2879
2881
  "deleteBoundary": {
@@ -2919,15 +2921,17 @@ var RELATIONSHIP_MAP = {
2919
2921
  ],
2920
2922
  "unproven": false,
2921
2923
  "blocker": {
2922
- "kind": "delete-absent",
2923
- "message": 'create succeeded live (DG-1 verification, 2026-10-11, ww29, parent company 29683380, record id 30230658, marker name "node-autotask DG-1 create probe") once the four vendor-required body fields were present \u2014 actionType, assignedResourceID, startDateTime, endDateTime \u2014 plus the parent companyID in the path. The vendor reports a missing required field as HTTP 500 SERVER_ERROR naming the field; it is a deterministic rejection, not a transient fault (the SDK now answers retryable: false \u2014 add the field, do not retry). The vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue; cleanup is UI-only.',
2924
- "remedy": "provision via the API as proven: send actionType (picklist, e.g. 3 = Note: General), assignedResourceID (a resource id), startDateTime and endDateTime (UTC ISO) in the body and the company id as the parent; name and note are optional content fields. Clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
2924
+ "kind": "ok",
2925
+ "message": "A create needs actionType, assignedResourceID, startDateTime and endDateTime in the body plus the parent companyID in the path. The vendor reports a missing required field as HTTP 500 naming the field; this is a deterministic rejection, not a transient fault (retryable: false).",
2926
+ "remedy": "Send actionType (a picklist value, for example 3 = Note: General), assignedResourceID (a resource id), startDateTime and endDateTime (UTC ISO) in the body and the company id as the parent; name and note are optional content fields."
2925
2927
  },
2926
2928
  "vendorEvidence": [
2927
2929
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'assignedResourceID': Value does not exist for the required field assignedResourceID. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`,
2928
2930
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'actionType': Missing Required Field: actionType. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`,
2929
2931
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'endDateTime': Missing Required Field: endDateTime. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`,
2930
- `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'startDateTime': Missing Required Field: startDateTime. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`
2932
+ `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'startDateTime': Missing Required Field: startDateTime. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`,
2933
+ 'maintainer provenance (blocker.message): create succeeded live (DG-1 verification, 2026-10-11, ww29, parent company 29683380, record id 30230658, marker name "node-autotask DG-1 create probe") once the four vendor-required body fields were present \u2014 actionType, assignedResourceID, startDateTime, endDateTime \u2014 plus the parent companyID in the path. The vendor reports a missing required field as HTTP 500 SERVER_ERROR naming the field; it is a deterministic rejection, not a transient fault (the SDK now answers retryable: false \u2014 add the field, do not retry). The vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue; cleanup is UI-only.',
2934
+ "maintainer provenance (blocker.remedy): provision via the API as proven: send actionType (picklist, e.g. 3 = Note: General), assignedResourceID (a resource id), startDateTime and endDateTime (UTC ISO) in the body and the company id as the parent; name and note are optional content fields. Clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
2931
2935
  ],
2932
2936
  "deleteBoundary": {
2933
2937
  "available": false,
@@ -3002,8 +3006,8 @@ var RELATIONSHIP_MAP = {
3002
3006
  "unproven": false,
3003
3007
  "blocker": {
3004
3008
  "kind": "ok",
3005
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
3006
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
3009
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
3010
+ "remedy": "None: create with the live-proven field set."
3007
3011
  },
3008
3012
  "vendorEvidence": [
3009
3013
  'Executed "company_webhooks.create".'
@@ -3050,9 +3054,9 @@ var RELATIONSHIP_MAP = {
3050
3054
  "unproven": true,
3051
3055
  "blocker": {
3052
3056
  "kind": "blind-reference",
3053
- "message": "vendor 500: the billingProductID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
3054
- "remedy": "provision the referenced record in the Autotask UI first (the billingProductID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
3055
- "referenceField": "billingProductID"
3057
+ "message": "The billingProductID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
3058
+ "referenceField": "billingProductID",
3059
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
3056
3060
  },
3057
3061
  "vendorEvidence": [
3058
3062
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"configuration_item_billing_product_associations.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c2bf3080-c882-4ff2-b440-159686687978","message":"Refe'
@@ -3112,9 +3116,9 @@ var RELATIONSHIP_MAP = {
3112
3116
  "unproven": true,
3113
3117
  "blocker": {
3114
3118
  "kind": "blind-reference",
3115
- "message": "Value does not reference an existing entity for displayColorRgb .",
3116
- "remedy": "provision the referenced record in the Autotask UI first (the displayColorRgb reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
3117
- "referenceField": "displayColorRgb"
3119
+ "message": "The displayColorRgb reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
3120
+ "referenceField": "displayColorRgb",
3121
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
3118
3122
  },
3119
3123
  "vendorEvidence": [
3120
3124
  "Value does not reference an existing entity for displayColorRgb .",
@@ -3164,8 +3168,8 @@ var RELATIONSHIP_MAP = {
3164
3168
  "unproven": true,
3165
3169
  "blocker": {
3166
3170
  "kind": "unknown",
3167
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
3168
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
3171
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
3172
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
3169
3173
  },
3170
3174
  "vendorEvidence": [
3171
3175
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"configuration_item_category_udf_associations.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"89cf29e9-db4a-4834-b5fa-6344d2213569","message":"Field '`
@@ -3238,9 +3242,9 @@ var RELATIONSHIP_MAP = {
3238
3242
  "unproven": true,
3239
3243
  "blocker": {
3240
3244
  "kind": "blind-reference",
3241
- "message": "Value does not reference an existing entity for noteType .",
3242
- "remedy": "provision the referenced record in the Autotask UI first (the noteType reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
3243
- "referenceField": "noteType"
3245
+ "message": "The noteType reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
3246
+ "referenceField": "noteType",
3247
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
3244
3248
  },
3245
3249
  "vendorEvidence": [
3246
3250
  "Value does not reference an existing entity for noteType .",
@@ -3250,7 +3254,12 @@ var RELATIONSHIP_MAP = {
3250
3254
  "available": false,
3251
3255
  "note": "the vendor defines no DELETE for configuration_item_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
3252
3256
  },
3253
- "zone": "ww29"
3257
+ "zone": "ww29",
3258
+ "parentCompany": {
3259
+ "via": "configurationItemID",
3260
+ "resource": "configuration_items",
3261
+ "field": "companyID"
3262
+ }
3254
3263
  }
3255
3264
  },
3256
3265
  "deleteBoundary": {
@@ -3291,9 +3300,9 @@ var RELATIONSHIP_MAP = {
3291
3300
  "unproven": true,
3292
3301
  "blocker": {
3293
3302
  "kind": "blind-reference",
3294
- "message": "Reference value on field: configurationItemID of type: ConfigurationItem does not exist or is invalid.",
3295
- "remedy": "provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
3296
- "referenceField": "configurationItemID"
3303
+ "message": "The configurationItemID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
3304
+ "referenceField": "configurationItemID",
3305
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
3297
3306
  },
3298
3307
  "vendorEvidence": [
3299
3308
  "Reference value on field: configurationItemID of type: ConfigurationItem does not exist or is invalid.",
@@ -3303,7 +3312,12 @@ var RELATIONSHIP_MAP = {
3303
3312
  "available": true,
3304
3313
  "note": null
3305
3314
  },
3306
- "zone": "ww29"
3315
+ "zone": "ww29",
3316
+ "parentCompany": {
3317
+ "via": "configurationItemID",
3318
+ "resource": "configuration_items",
3319
+ "field": "companyID"
3320
+ }
3307
3321
  }
3308
3322
  },
3309
3323
  "deleteBoundary": null,
@@ -3361,8 +3375,8 @@ var RELATIONSHIP_MAP = {
3361
3375
  "unproven": false,
3362
3376
  "blocker": {
3363
3377
  "kind": "ok",
3364
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
3365
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
3378
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
3379
+ "remedy": "None: create with the live-proven field set."
3366
3380
  },
3367
3381
  "vendorEvidence": [
3368
3382
  'Executed "configuration_item_types.create".'
@@ -3410,8 +3424,8 @@ var RELATIONSHIP_MAP = {
3410
3424
  "unproven": true,
3411
3425
  "blocker": {
3412
3426
  "kind": "unknown",
3413
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
3414
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
3427
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
3428
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
3415
3429
  },
3416
3430
  "vendorEvidence": [
3417
3431
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"configuration_item_webhooks.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"f348c45e-80e0-4632-9dc9-d04796ea03ab","message":"A ConfigurationItemWebho'
@@ -3563,8 +3577,8 @@ var RELATIONSHIP_MAP = {
3563
3577
  "unproven": true,
3564
3578
  "blocker": {
3565
3579
  "kind": "unknown",
3566
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
3567
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
3580
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
3581
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
3568
3582
  },
3569
3583
  "vendorEvidence": [
3570
3584
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"configuration_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9b17f254-654d-4bdc-94bd-d7fc0ff8f4ff","message":"Value does not exist for the req'
@@ -3607,8 +3621,8 @@ var RELATIONSHIP_MAP = {
3607
3621
  "unproven": true,
3608
3622
  "blocker": {
3609
3623
  "kind": "unknown",
3610
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
3611
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
3624
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
3625
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
3612
3626
  },
3613
3627
  "vendorEvidence": [
3614
3628
  '{"error":true,"code":"NOT_FOUND","category":"not_found","retryable":false,"httpStatus":404,"operation":"contact_group_contacts.create","suggestedAction":"Verify the id, or resolve the record by name first.","correlationId":"f84411bb-c115-41af-8690-74a6283b9768","message":"Resource not found: <!DOCTY'
@@ -3650,8 +3664,8 @@ var RELATIONSHIP_MAP = {
3650
3664
  "unproven": false,
3651
3665
  "blocker": {
3652
3666
  "kind": "ok",
3653
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
3654
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
3667
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
3668
+ "remedy": "None: create with the live-proven field set."
3655
3669
  },
3656
3670
  "vendorEvidence": [
3657
3671
  "verified-gone=True"
@@ -3701,8 +3715,8 @@ var RELATIONSHIP_MAP = {
3701
3715
  "unproven": false,
3702
3716
  "blocker": {
3703
3717
  "kind": "ok",
3704
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
3705
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
3718
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
3719
+ "remedy": "None: create with the live-proven field set."
3706
3720
  },
3707
3721
  "vendorEvidence": [
3708
3722
  'Executed "contact_webhooks.create".'
@@ -3780,8 +3794,8 @@ var RELATIONSHIP_MAP = {
3780
3794
  "unproven": false,
3781
3795
  "blocker": {
3782
3796
  "kind": "ok",
3783
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
3784
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
3797
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
3798
+ "remedy": "None: create with the live-proven field set."
3785
3799
  },
3786
3800
  "vendorEvidence": [
3787
3801
  "verified-gone=True"
@@ -3833,17 +3847,24 @@ var RELATIONSHIP_MAP = {
3833
3847
  "unproven": true,
3834
3848
  "blocker": {
3835
3849
  "kind": "blind-reference",
3836
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382), current full text: 'productID [1] is invalid. Products with a BillingType of 'Standard'[1] cannot be associated to ContractBillingRules.' \u2014 a product with an ELIGIBLE (non-Standard) BillingType is required; the products table is blind for this API user \u2014 UNSATISFIABLE for this user. (10-04 ladder had stopped at isDailyProrationEnabled + 'productID [1] is invalid. Products with a'.)",
3837
- "remedy": "a product with a non-Standard BillingType is required (products table blind for this user) \u2014 provision/read an eligible product in the Autotask UI or use a user where the products table is visible"
3850
+ "message": "productID must reference a product whose BillingType is not 'Standard' (Standard products cannot be associated to ContractBillingRules); the products table is blind for this API user, so no eligible product can be read back.",
3851
+ "referenceField": "productID",
3852
+ "remedy": "Provision or select a product with a non-Standard BillingType in the Autotask UI, or use a user who can read the products table."
3838
3853
  },
3839
3854
  "vendorEvidence": [
3840
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_billing_rules.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"62ba9fcf-91ae-42a3-bc50-9911442eb738","message":"Reference value on field: con'
3855
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_billing_rules.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"62ba9fcf-91ae-42a3-bc50-9911442eb738","message":"Reference value on field: con',
3856
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382), current full text: 'productID [1] is invalid. Products with a BillingType of 'Standard'[1] cannot be associated to ContractBillingRules.' \u2014 a product with an ELIGIBLE (non-Standard) BillingType is required; the products table is blind for this API user \u2014 UNSATISFIABLE for this user. (10-04 ladder had stopped at isDailyProrationEnabled + 'productID [1] is invalid. Products with a'.)"
3841
3857
  ],
3842
3858
  "deleteBoundary": {
3843
3859
  "available": true,
3844
3860
  "note": null
3845
3861
  },
3846
- "zone": "ww29"
3862
+ "zone": "ww29",
3863
+ "parentCompany": {
3864
+ "via": "contractID",
3865
+ "resource": "contracts",
3866
+ "field": "companyID"
3867
+ }
3847
3868
  }
3848
3869
  },
3849
3870
  "deleteBoundary": null,
@@ -3880,17 +3901,23 @@ var RELATIONSHIP_MAP = {
3880
3901
  "unproven": false,
3881
3902
  "blocker": {
3882
3903
  "kind": "ok",
3883
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): write path proven via the vendor's unique-key wall \u2014 'A ContractBlockHourFactor for this roleID and contractID combination already exists' (pair (30131842, 29685291) pre-existing from the rates attach). Fields roleID (+ the unique key).",
3884
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
3904
+ "message": "The vendor enforces a unique (roleID, contractID) pair: a second create for the same pair is refused as already existing.",
3905
+ "remedy": "None: create with the live-proven field set (roleID and contractID identify the record)."
3885
3906
  },
3886
3907
  "vendorEvidence": [
3887
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_block_hour_factors.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8095334f-1e14-4185-b5dc-99e5526e526d","message":"Value does not exist for'
3908
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_block_hour_factors.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8095334f-1e14-4185-b5dc-99e5526e526d","message":"Value does not exist for',
3909
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): write path proven via the vendor's unique-key wall \u2014 'A ContractBlockHourFactor for this roleID and contractID combination already exists' (pair (30131842, 29685291) pre-existing from the rates attach). Fields roleID (+ the unique key)."
3888
3910
  ],
3889
3911
  "deleteBoundary": {
3890
3912
  "available": false,
3891
3913
  "note": "the vendor defines no DELETE for contract_block_hour_factors (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
3892
3914
  },
3893
- "zone": "ww29"
3915
+ "zone": "ww29",
3916
+ "parentCompany": {
3917
+ "via": "contractID",
3918
+ "resource": "contracts",
3919
+ "field": "companyID"
3920
+ }
3894
3921
  }
3895
3922
  },
3896
3923
  "deleteBoundary": {
@@ -3935,17 +3962,23 @@ var RELATIONSHIP_MAP = {
3935
3962
  "unproven": false,
3936
3963
  "blocker": {
3937
3964
  "kind": "ok",
3938
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114389. TYPE GATE: parent MUST be type 4 (Block hours) \u2014 'This ContractBlock must reference a Contract of type 4 (Block hours) with contractID'. Residue.",
3939
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
3965
+ "message": "The parent contract must be type 4 (Block hours).",
3966
+ "remedy": "Create with the live-proven field set under a type 4 (Block hours) contract."
3940
3967
  },
3941
3968
  "vendorEvidence": [
3942
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_blocks.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ea12c341-d1d3-4622-b73c-45e871ed1f91","message":"Reference value on field: contractID'
3969
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_blocks.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ea12c341-d1d3-4622-b73c-45e871ed1f91","message":"Reference value on field: contractID',
3970
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114389. TYPE GATE: parent MUST be type 4 (Block hours) \u2014 'This ContractBlock must reference a Contract of type 4 (Block hours) with contractID'. Residue."
3943
3971
  ],
3944
3972
  "deleteBoundary": {
3945
3973
  "available": false,
3946
3974
  "note": "the vendor defines no DELETE for contract_blocks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
3947
3975
  },
3948
- "zone": "ww29"
3976
+ "zone": "ww29",
3977
+ "parentCompany": {
3978
+ "via": "contractID",
3979
+ "resource": "contracts",
3980
+ "field": "companyID"
3981
+ }
3949
3982
  }
3950
3983
  },
3951
3984
  "deleteBoundary": {
@@ -3987,17 +4020,23 @@ var RELATIONSHIP_MAP = {
3987
4020
  "unproven": true,
3988
4021
  "blocker": {
3989
4022
  "kind": "blind-parent",
3990
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
3991
- "remedy": "provision a parent record in the Autotask UI first \u2014 the contracts table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
4023
+ "message": "The create failed on the parent reference: the contracts table is blind for this API user, so no valid parent id can be read back.",
4024
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
3992
4025
  },
3993
4026
  "vendorEvidence": [
3994
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_charges.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ed78a2ec-b5e2-4e5f-989b-4c39bee66567","message":"Reference value on field: contractI'
4027
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_charges.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ed78a2ec-b5e2-4e5f-989b-4c39bee66567","message":"Reference value on field: contractI',
4028
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the contracts table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
3995
4029
  ],
3996
4030
  "deleteBoundary": {
3997
4031
  "available": true,
3998
4032
  "note": null
3999
4033
  },
4000
- "zone": "ww29"
4034
+ "zone": "ww29",
4035
+ "parentCompany": {
4036
+ "via": "contractID",
4037
+ "resource": "contracts",
4038
+ "field": "companyID"
4039
+ }
4001
4040
  }
4002
4041
  },
4003
4042
  "deleteBoundary": null,
@@ -4032,17 +4071,24 @@ var RELATIONSHIP_MAP = {
4032
4071
  "unproven": true,
4033
4072
  "blocker": {
4034
4073
  "kind": "blind-reference",
4035
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field billingCodeID.' \u2014 the billing-allocation table is blind for this API user (no resolvable allocation code for this user's contracts) \u2014 UNSATISFIABLE for this user.",
4036
- "remedy": "an allocation code (billingCodeID) readable by this user is required (table blind) \u2014 provision in the Autotask UI or use a user where allocation codes are visible"
4074
+ "message": "billingCodeID must reference an allocation code readable by the user; the billing-allocation table is blind for this API user, so no resolvable code exists for its contracts.",
4075
+ "referenceField": "billingCodeID",
4076
+ "remedy": "Provision the allocation code in the Autotask UI, or use a user who can read allocation codes."
4037
4077
  },
4038
4078
  "vendorEvidence": [
4039
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_billing_codes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8ef9f8ea-5846-4128-bbcc-b523061c585f","message":"Reference value on '
4079
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_billing_codes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8ef9f8ea-5846-4128-bbcc-b523061c585f","message":"Reference value on ',
4080
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field billingCodeID.' \u2014 the billing-allocation table is blind for this API user (no resolvable allocation code for this user's contracts) \u2014 UNSATISFIABLE for this user."
4040
4081
  ],
4041
4082
  "deleteBoundary": {
4042
4083
  "available": true,
4043
4084
  "note": null
4044
4085
  },
4045
- "zone": "ww29"
4086
+ "zone": "ww29",
4087
+ "parentCompany": {
4088
+ "via": "contractID",
4089
+ "resource": "contracts",
4090
+ "field": "companyID"
4091
+ }
4046
4092
  }
4047
4093
  },
4048
4094
  "deleteBoundary": null,
@@ -4079,11 +4125,12 @@ var RELATIONSHIP_MAP = {
4079
4125
  "unproven": false,
4080
4126
  "blocker": {
4081
4127
  "kind": "ok",
4082
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 187; field roleID. Residue.",
4083
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
4128
+ "message": "The vendor accepted a create with the live-proven field set (roleID).",
4129
+ "remedy": "None: create with the live-proven field set."
4084
4130
  },
4085
4131
  "vendorEvidence": [
4086
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_roles.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"76f0c480-232b-4bfd-aa1e-c9cd3858d717","message":"Value does not exist for th'
4132
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_roles.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"76f0c480-232b-4bfd-aa1e-c9cd3858d717","message":"Value does not exist for th',
4133
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 187; field roleID. Residue."
4087
4134
  ],
4088
4135
  "deleteBoundary": {
4089
4136
  "available": true,
@@ -4126,11 +4173,12 @@ var RELATIONSHIP_MAP = {
4126
4173
  "unproven": false,
4127
4174
  "blocker": {
4128
4175
  "kind": "ok",
4129
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified \u2014 batch1-final recovery, id 3; the surviving per-resource receipts predate the recovery)",
4130
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
4176
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
4177
+ "remedy": "None: create with the live-proven field set."
4131
4178
  },
4132
4179
  "vendorEvidence": [
4133
- 'csxroles: {"id": 3, "final": "RECOVERED"} (batch1-final.json) \u2014 verify-gone=True (batch1-final.log)'
4180
+ 'csxroles: {"id": 3, "final": "RECOVERED"} (batch1-final.json) \u2014 verify-gone=True (batch1-final.log)',
4181
+ "maintainer provenance (blocker.message): create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified \u2014 batch1-final recovery, id 3; the surviving per-resource receipts predate the recovery)"
4134
4182
  ],
4135
4183
  "deleteBoundary": {
4136
4184
  "available": true,
@@ -4173,9 +4221,9 @@ var RELATIONSHIP_MAP = {
4173
4221
  "unproven": true,
4174
4222
  "blocker": {
4175
4223
  "kind": "blind-reference",
4176
- "message": "vendor 500: the excludedWorkTypeID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
4177
- "remedy": "provision the referenced record in the Autotask UI first (the excludedWorkTypeID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
4178
- "referenceField": "excludedWorkTypeID"
4224
+ "message": "The excludedWorkTypeID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
4225
+ "referenceField": "excludedWorkTypeID",
4226
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
4179
4227
  },
4180
4228
  "vendorEvidence": [
4181
4229
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_set_excluded_work_types.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"b900823d-cf16-4eea-a26b-ea1df9b13d70","message":"Reference'
@@ -4250,8 +4298,8 @@ var RELATIONSHIP_MAP = {
4250
4298
  "unproven": false,
4251
4299
  "blocker": {
4252
4300
  "kind": "ok",
4253
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
4254
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
4301
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
4302
+ "remedy": "None: create with the live-proven field set."
4255
4303
  },
4256
4304
  "vendorEvidence": [
4257
4305
  "verified-gone=True"
@@ -4301,17 +4349,23 @@ var RELATIONSHIP_MAP = {
4301
4349
  "unproven": false,
4302
4350
  "blocker": {
4303
4351
  "kind": "ok",
4304
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 1338. TYPE GATE (vendor): the parent contract MUST be type 3 (Fixed Price) \u2014 'ContractMilestones may only have a contractID linking to Contracts of type 3 (Fixed Price)'. Residue.",
4305
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
4352
+ "message": "The parent contract must be type 3 (Fixed Price): the vendor only allows ContractMilestones under Contracts of that type.",
4353
+ "remedy": "Create with the live-proven field set under a type 3 (Fixed Price) contract."
4306
4354
  },
4307
4355
  "vendorEvidence": [
4308
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_milestones.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"cfa41884-3855-4729-983f-733f52ef7320","message":"Reference value on field: contra'
4356
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_milestones.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"cfa41884-3855-4729-983f-733f52ef7320","message":"Reference value on field: contra',
4357
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 1338. TYPE GATE (vendor): the parent contract MUST be type 3 (Fixed Price) \u2014 'ContractMilestones may only have a contractID linking to Contracts of type 3 (Fixed Price)'. Residue."
4309
4358
  ],
4310
4359
  "deleteBoundary": {
4311
4360
  "available": false,
4312
4361
  "note": "the vendor defines no DELETE for contract_milestones (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
4313
4362
  },
4314
- "zone": "ww29"
4363
+ "zone": "ww29",
4364
+ "parentCompany": {
4365
+ "via": "contractID",
4366
+ "resource": "contracts",
4367
+ "field": "companyID"
4368
+ }
4315
4369
  }
4316
4370
  },
4317
4371
  "deleteBoundary": {
@@ -4352,17 +4406,23 @@ var RELATIONSHIP_MAP = {
4352
4406
  "unproven": false,
4353
4407
  "blocker": {
4354
4408
  "kind": "ok",
4355
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 35573321 under contract 30131842; fields title + description. Residue (no vendor DELETE).",
4356
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
4409
+ "message": "The vendor accepted a create with title and description under a contract.",
4410
+ "remedy": "None: create with the live-proven field set."
4357
4411
  },
4358
4412
  "vendorEvidence": [
4359
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_notes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"bc5bfb0b-79c1-4bde-882b-7cd16c77f6cd","message":"Reference value on field: contractID '
4413
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_notes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"bc5bfb0b-79c1-4bde-882b-7cd16c77f6cd","message":"Reference value on field: contractID ',
4414
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 35573321 under contract 30131842; fields title + description. Residue (no vendor DELETE)."
4360
4415
  ],
4361
4416
  "deleteBoundary": {
4362
4417
  "available": false,
4363
4418
  "note": "the vendor defines no DELETE for contract_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
4364
4419
  },
4365
- "zone": "ww29"
4420
+ "zone": "ww29",
4421
+ "parentCompany": {
4422
+ "via": "contractID",
4423
+ "resource": "contracts",
4424
+ "field": "companyID"
4425
+ }
4366
4426
  }
4367
4427
  },
4368
4428
  "deleteBoundary": {
@@ -4403,17 +4463,23 @@ var RELATIONSHIP_MAP = {
4403
4463
  "unproven": false,
4404
4464
  "blocker": {
4405
4465
  "kind": "ok",
4406
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30083427; fields contractHourlyRate + roleID (an owned/visible role). Residue.",
4407
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
4466
+ "message": "The vendor accepted a create with contractHourlyRate and roleID (an owned, visible role).",
4467
+ "remedy": "None: create with the live-proven field set."
4408
4468
  },
4409
4469
  "vendorEvidence": [
4410
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_rates.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"a829126b-68db-4fac-89ba-56c6ad725eef","message":"Value does not exist for the required'
4470
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_rates.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"a829126b-68db-4fac-89ba-56c6ad725eef","message":"Value does not exist for the required',
4471
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30083427; fields contractHourlyRate + roleID (an owned/visible role). Residue."
4411
4472
  ],
4412
4473
  "deleteBoundary": {
4413
4474
  "available": false,
4414
4475
  "note": "the vendor defines no DELETE for contract_rates (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
4415
4476
  },
4416
- "zone": "ww29"
4477
+ "zone": "ww29",
4478
+ "parentCompany": {
4479
+ "via": "contractID",
4480
+ "resource": "contracts",
4481
+ "field": "companyID"
4482
+ }
4417
4483
  }
4418
4484
  },
4419
4485
  "deleteBoundary": {
@@ -4458,11 +4524,12 @@ var RELATIONSHIP_MAP = {
4458
4524
  "unproven": false,
4459
4525
  "blocker": {
4460
4526
  "kind": "ok",
4461
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114390. TYPE GATE: parent MUST be type 6 (Retainer). Residue.",
4462
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
4527
+ "message": "The parent contract must be type 6 (Retainer).",
4528
+ "remedy": "Create with the live-proven field set under a type 6 (Retainer) contract."
4463
4529
  },
4464
4530
  "vendorEvidence": [
4465
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_retainers.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d4fb4798-c02b-4c19-b3fa-b1629ae9113a","message":"Reference value on field: contrac'
4531
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_retainers.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d4fb4798-c02b-4c19-b3fa-b1629ae9113a","message":"Reference value on field: contrac',
4532
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114390. TYPE GATE: parent MUST be type 6 (Retainer). Residue."
4466
4533
  ],
4467
4534
  "deleteBoundary": {
4468
4535
  "available": false,
@@ -4508,11 +4575,13 @@ var RELATIONSHIP_MAP = {
4508
4575
  "unproven": true,
4509
4576
  "blocker": {
4510
4577
  "kind": "resource-role-pair",
4511
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'The specified resourceID and roleID combination is not currently defined.' \u2014 a currently-DEFINED (resource, role) assignment is required; the resource_roles table is blind for this user (0 rows) \u2014 same pair-validation family as W-A3; UNSATISFIABLE for this user.",
4512
- "remedy": "a currently-DEFINED (resource, role) assignment is required (resource_roles blind for this user) \u2014 same family as W-A3; use a user with readable assignments or manage role costs in the Autotask UI"
4578
+ "message": "The create is refused unless the (resourceID, roleID) pair is currently defined ('The specified resourceID and roleID combination is not currently defined.'); the resource_roles table is blind for this API user, so no defined pair can be read back.",
4579
+ "remedy": "Use a currently defined (resource, role) assignment from a user who can read resource_roles, or manage role costs in the Autotask UI."
4513
4580
  },
4514
4581
  "vendorEvidence": [
4515
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_role_costs.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c64d8ace-bdf3-46e9-ba24-1e8989aa73ef","message":"Value does not exist for the req'
4582
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_role_costs.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c64d8ace-bdf3-46e9-ba24-1e8989aa73ef","message":"Value does not exist for the req',
4583
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'The specified resourceID and roleID combination is not currently defined.' \u2014 a currently-DEFINED (resource, role) assignment is required; the resource_roles table is blind for this user (0 rows) \u2014 same pair-validation family as W-A3; UNSATISFIABLE for this user.",
4584
+ "maintainer provenance (blocker.remedy): a currently-DEFINED (resource, role) assignment is required (resource_roles blind for this user) \u2014 same family as W-A3; use a user with readable assignments or manage role costs in the Autotask UI"
4516
4585
  ],
4517
4586
  "deleteBoundary": {
4518
4587
  "available": false,
@@ -4558,17 +4627,24 @@ var RELATIONSHIP_MAP = {
4558
4627
  "unproven": true,
4559
4628
  "blocker": {
4560
4629
  "kind": "blind-reference",
4561
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382), current full text: the parent contract must be type 7 (Recurring Services) or 'umbrella' ('Unable to create a ContractServiceAdjustment with a contractID that is not of type recurring Service or umbrella'); under a type-7 parent the vendor then requires an ACTIVE serviceID \u2014 'Unable to create a ContractServiceAdjustment with a serviceID of 1 because that Service is not active'. The services table is blind for this API user (no readable active service id) \u2014 UNSATISFIABLE for this user.",
4562
- "remedy": "an ACTIVE serviceID visible to this API user is required (services table blind for this user) \u2014 provision the active service in the Autotask UI or use a user where services are readable; parent must be type 7 (Recurring) or 'umbrella'"
4630
+ "message": "The parent contract must be type 7 (Recurring Services) or an umbrella contract, and serviceID must reference an ACTIVE service; the services table is blind for this API user, so no active service id can be read back.",
4631
+ "referenceField": "serviceID",
4632
+ "remedy": "Provision the active service in the Autotask UI, or use a user who can read services; the parent must be a type 7 (Recurring Services) or umbrella contract."
4563
4633
  },
4564
4634
  "vendorEvidence": [
4565
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_adjustments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"fc363aaa-2d29-4f86-8e8f-2871c6b09401","message":"Reference value on fiel'
4635
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_adjustments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"fc363aaa-2d29-4f86-8e8f-2871c6b09401","message":"Reference value on fiel',
4636
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382), current full text: the parent contract must be type 7 (Recurring Services) or 'umbrella' ('Unable to create a ContractServiceAdjustment with a contractID that is not of type recurring Service or umbrella'); under a type-7 parent the vendor then requires an ACTIVE serviceID \u2014 'Unable to create a ContractServiceAdjustment with a serviceID of 1 because that Service is not active'. The services table is blind for this API user (no readable active service id) \u2014 UNSATISFIABLE for this user."
4566
4637
  ],
4567
4638
  "deleteBoundary": {
4568
4639
  "available": false,
4569
4640
  "note": "the vendor defines no DELETE for contract_service_adjustments (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
4570
4641
  },
4571
- "zone": "ww29"
4642
+ "zone": "ww29",
4643
+ "parentCompany": {
4644
+ "via": "contractID",
4645
+ "resource": "contracts",
4646
+ "field": "companyID"
4647
+ }
4572
4648
  }
4573
4649
  },
4574
4650
  "deleteBoundary": {
@@ -4608,18 +4684,25 @@ var RELATIONSHIP_MAP = {
4608
4684
  "unproven": true,
4609
4685
  "blocker": {
4610
4686
  "kind": "unknown",
4611
- "message": "W-A7-class drift, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor answers HTTP 200 with a body that is NOT OperationResultModel \u2014 the node (spec-conformant) types INVALID_RESPONSE; the record may be created with an unparseable id (blind table). TYPE GATE: the parent contract must be type 7 (Recurring Services) \u2014 '\u2026with a contractID that is not of type recurring Service'. VENDOR-FIX (response shape) required.",
4612
- "remedy": "vendor response-shape fix required (W-A7-class 200 drift) \u2014 treat the INVALID_RESPONSE as the typed wall; parent must be type 7 (Recurring Services); manage the adjustment in the Autotask UI meanwhile"
4687
+ "message": "The vendor answers HTTP 200 with a body that is not an OperationResultModel (response-shape drift), typed INVALID_RESPONSE; the record may be created with an unparseable id. The parent contract must be type 7 (Recurring Services).",
4688
+ "remedy": "Treat INVALID_RESPONSE as the typed outcome; the parent must be a type 7 (Recurring Services) contract. Manage the adjustment in the Autotask UI until the vendor fixes the response shape."
4613
4689
  },
4614
4690
  "vendorEvidence": [
4615
4691
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_bundle_adjustments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"a1899b6f-015a-4c32-aaa8-eabeabb30165","message":"Reference value ',
4616
- '{"live": "2026-10-06 confirm-100", "message": "Expected OperationResultModel { itemId } (or { id }); got a different shape"}'
4692
+ '{"live": "2026-10-06 confirm-100", "message": "Expected OperationResultModel { itemId } (or { id }); got a different shape"}',
4693
+ "maintainer provenance (blocker.message): W-A7-class drift, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor answers HTTP 200 with a body that is NOT OperationResultModel \u2014 the node (spec-conformant) types INVALID_RESPONSE; the record may be created with an unparseable id (blind table). TYPE GATE: the parent contract must be type 7 (Recurring Services) \u2014 '\u2026with a contractID that is not of type recurring Service'. VENDOR-FIX (response shape) required.",
4694
+ "maintainer provenance (blocker.remedy): vendor response-shape fix required (W-A7-class 200 drift) \u2014 treat the INVALID_RESPONSE as the typed wall; parent must be type 7 (Recurring Services); manage the adjustment in the Autotask UI meanwhile"
4617
4695
  ],
4618
4696
  "deleteBoundary": {
4619
4697
  "available": false,
4620
4698
  "note": "the vendor defines no DELETE for contract_service_bundle_adjustments (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
4621
4699
  },
4622
- "zone": "ww29"
4700
+ "zone": "ww29",
4701
+ "parentCompany": {
4702
+ "via": "contractID",
4703
+ "resource": "contracts",
4704
+ "field": "companyID"
4705
+ }
4623
4706
  }
4624
4707
  },
4625
4708
  "deleteBoundary": {
@@ -4682,17 +4765,24 @@ var RELATIONSHIP_MAP = {
4682
4765
  "unproven": true,
4683
4766
  "blocker": {
4684
4767
  "kind": "blind-reference",
4685
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceBundleID.' \u2014 the service-bundles table is blind for this API user \u2014 UNSATISFIABLE for this user.",
4686
- "remedy": "a service-bundles-table record visible to this user is required (table blind, 0 rows) \u2014 provision in the Autotask UI or use a user where the table is visible"
4768
+ "message": "serviceBundleID must reference a service bundle; the service-bundles table is blind for this API user, so no id can be read back.",
4769
+ "referenceField": "serviceBundleID",
4770
+ "remedy": "Provision the service bundle in the Autotask UI, or use a user who can read the table."
4687
4771
  },
4688
4772
  "vendorEvidence": [
4689
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_bundles.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"032e3caa-4527-467f-b459-0cb80cfd1ad2","message":"Value does not exist for th'
4773
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_bundles.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"032e3caa-4527-467f-b459-0cb80cfd1ad2","message":"Value does not exist for th',
4774
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceBundleID.' \u2014 the service-bundles table is blind for this API user \u2014 UNSATISFIABLE for this user."
4690
4775
  ],
4691
4776
  "deleteBoundary": {
4692
4777
  "available": false,
4693
4778
  "note": "the vendor defines no DELETE for contract_service_bundles (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
4694
4779
  },
4695
- "zone": "ww29"
4780
+ "zone": "ww29",
4781
+ "parentCompany": {
4782
+ "via": "contractID",
4783
+ "resource": "contracts",
4784
+ "field": "companyID"
4785
+ }
4696
4786
  }
4697
4787
  },
4698
4788
  "deleteBoundary": {
@@ -4755,17 +4845,24 @@ var RELATIONSHIP_MAP = {
4755
4845
  "unproven": true,
4756
4846
  "blocker": {
4757
4847
  "kind": "blind-reference",
4758
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceID.' \u2014 the services table is blind for this API user (0 rows; no readable service id) \u2014 UNSATISFIABLE for this user.",
4759
- "remedy": "a services-table record visible to this user is required (table blind, 0 rows) \u2014 provision in the Autotask UI or use a user where the table is visible"
4848
+ "message": "serviceID must reference a service; the services table is blind for this API user, so no readable service id exists.",
4849
+ "referenceField": "serviceID",
4850
+ "remedy": "Provision the service in the Autotask UI, or use a user who can read the services table."
4760
4851
  },
4761
4852
  "vendorEvidence": [
4762
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_services.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c5003db3-bd6a-4970-aeb7-c13b32849acd","message":"Value does not exist for the requi'
4853
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_services.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c5003db3-bd6a-4970-aeb7-c13b32849acd","message":"Value does not exist for the requi',
4854
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceID.' \u2014 the services table is blind for this API user (0 rows; no readable service id) \u2014 UNSATISFIABLE for this user."
4763
4855
  ],
4764
4856
  "deleteBoundary": {
4765
4857
  "available": false,
4766
4858
  "note": "the vendor defines no DELETE for contract_services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
4767
4859
  },
4768
- "zone": "ww29"
4860
+ "zone": "ww29",
4861
+ "parentCompany": {
4862
+ "via": "contractID",
4863
+ "resource": "contracts",
4864
+ "field": "companyID"
4865
+ }
4769
4866
  }
4770
4867
  },
4771
4868
  "deleteBoundary": {
@@ -4809,11 +4906,12 @@ var RELATIONSHIP_MAP = {
4809
4906
  "unproven": false,
4810
4907
  "blocker": {
4811
4908
  "kind": "ok",
4812
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114391. TYPE GATE: parent MUST be type 8 (PerTicket incident) \u2014 'The Contract associated by contractID must be of type PerTicket (incident)'. Residue.",
4813
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
4909
+ "message": "The parent contract must be type 8 (PerTicket incident).",
4910
+ "remedy": "Create with the live-proven field set under a type 8 (PerTicket incident) contract."
4814
4911
  },
4815
4912
  "vendorEvidence": [
4816
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_ticket_purchases.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"268901a8-7fdd-4e9a-9731-92f840ac73bd","message":"Reference value on field: '
4913
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_ticket_purchases.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"268901a8-7fdd-4e9a-9731-92f840ac73bd","message":"Reference value on field: ',
4914
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114391. TYPE GATE: parent MUST be type 8 (PerTicket incident) \u2014 'The Contract associated by contractID must be of type PerTicket (incident)'. Residue."
4817
4915
  ],
4818
4916
  "deleteBoundary": {
4819
4917
  "available": false,
@@ -5157,12 +5255,14 @@ var RELATIONSHIP_MAP = {
5157
5255
  "unproven": false,
5158
5256
  "blocker": {
5159
5257
  "kind": "ok",
5160
- "message": "live-PROVEN 2026-10-06 (confirm-100, marker CONF100-1791187382): the W-A6 'blind parent' was companyID \u2014 an OWNED company satisfies it (seed 30132785). Proven contractType values: 1, 3 (Fixed Price), 4 (Block hours), 6 (Retainer), 7 (Recurring Services), 8 (PerTicket incident). The type-conditioned field gates are declared in requiresByValue / rejectedValues on this row (issue #219 N3) \u2014 they are no longer restated in prose here. Proven ids 30131842-30131847 (residue \u2014 no vendor DELETE for contracts).",
5161
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 send the body with the contractType you need and satisfy that value's requiresByValue gate (plus the contractPeriodType value it names); residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
5258
+ "message": "The create is conditioned on contractType: types 1, 3, 4, 6, 7 and 8 are accepted and type 5 is rejected. The per-type field gates are declared in requiresByValue and rejectedValues. An owned company satisfies companyID.",
5259
+ "remedy": "Send the body with the contractType you need and satisfy that value's requiresByValue entry (plus the contractPeriodType value it names)."
5162
5260
  },
5163
5261
  "vendorEvidence": [
5164
5262
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contracts.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"25d4a730-6d6c-49ff-a038-96d3fd09165d","message":"Value does not exist for the required fiel',
5165
- `{"live": "2026-10-06 confirm-100 (CONF100-1791187382)", "result": "OperationResultModel id=30131842 (type 1)", "ladder": "status -> endDate/timeReporting/contractType/contractName/startDate -> 'Contracts of type 1 require an estimatedRevenue' -> estimatedHours -> estimatedCost"}`
5263
+ `{"live": "2026-10-06 confirm-100 (CONF100-1791187382)", "result": "OperationResultModel id=30131842 (type 1)", "ladder": "status -> endDate/timeReporting/contractType/contractName/startDate -> 'Contracts of type 1 require an estimatedRevenue' -> estimatedHours -> estimatedCost"}`,
5264
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100, marker CONF100-1791187382): the W-A6 'blind parent' was companyID \u2014 an OWNED company satisfies it (seed 30132785). Proven contractType values: 1, 3 (Fixed Price), 4 (Block hours), 6 (Retainer), 7 (Recurring Services), 8 (PerTicket incident). The type-conditioned field gates are declared in requiresByValue / rejectedValues on this row (issue #219 N3) \u2014 they are no longer restated in prose here. Proven ids 30131842-30131847 (residue \u2014 no vendor DELETE for contracts).",
5265
+ "maintainer provenance (blocker.remedy): live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 send the body with the contractType you need and satisfy that value's requiresByValue gate (plus the contractPeriodType value it names); residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
5166
5266
  ],
5167
5267
  "deleteBoundary": {
5168
5268
  "available": false,
@@ -5314,9 +5414,9 @@ var RELATIONSHIP_MAP = {
5314
5414
  "unproven": true,
5315
5415
  "blocker": {
5316
5416
  "kind": "blind-reference",
5317
- "message": "Value does not reference an existing entity for primaryLocationID.",
5318
- "remedy": "provision the referenced record in the Autotask UI first (the primaryLocationID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
5319
- "referenceField": "primaryLocationID"
5417
+ "message": "The primaryLocationID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
5418
+ "referenceField": "primaryLocationID",
5419
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
5320
5420
  },
5321
5421
  "vendorEvidence": [
5322
5422
  "Value does not reference an existing entity for primaryLocationID.",
@@ -5359,9 +5459,9 @@ var RELATIONSHIP_MAP = {
5359
5459
  "liveProvenPrefix": [],
5360
5460
  "unproven": false,
5361
5461
  "blocker": {
5362
- "kind": "delete-absent",
5363
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 domain_registrars); cleanup is UI-only.",
5364
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
5462
+ "kind": "ok",
5463
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
5464
+ "remedy": "None: create with the live-proven field set."
5365
5465
  },
5366
5466
  "vendorEvidence": [
5367
5467
  '{"error":true,"code":"CONFIG_ERROR","category":"validation","retryable":false,"operation":"domain_registrars.delete","message":"invoke: unknown operation \\"domain_registrars.delete\\" \u2014 it is not in th'
@@ -5412,9 +5512,10 @@ var RELATIONSHIP_MAP = {
5412
5512
  "unproven": true,
5413
5513
  "blocker": {
5414
5514
  "kind": "picklist-unexposed",
5415
- "message": "Field 'Type': Missing Required Field: Type.",
5416
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI.",
5417
- "referenceField": "Type"
5515
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
5516
+ "referenceField": "Type",
5517
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
5518
+ "unsatisfiableViaApi": true
5418
5519
  },
5419
5520
  "vendorEvidence": [
5420
5521
  "Field 'Type': Missing Required Field: Type.",
@@ -5424,7 +5525,12 @@ var RELATIONSHIP_MAP = {
5424
5525
  "available": true,
5425
5526
  "note": null
5426
5527
  },
5427
- "zone": "ww29"
5528
+ "zone": "ww29",
5529
+ "parentCompany": {
5530
+ "via": "expenseItemID",
5531
+ "resource": "expense_items",
5532
+ "field": "companyID"
5533
+ }
5428
5534
  }
5429
5535
  },
5430
5536
  "deleteBoundary": null,
@@ -5480,11 +5586,12 @@ var RELATIONSHIP_MAP = {
5480
5586
  "unproven": true,
5481
5587
  "blocker": {
5482
5588
  "kind": "blind-parent",
5483
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
5484
- "remedy": "provision a parent record in the Autotask UI first \u2014 the expense_reports LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15; W-A6), so no parent id can be read back through the list surface (get-by-id is the authority); then retry the create with the real parent id."
5589
+ "message": "The create failed on the parent reference: the expense_reports list surface is visibility-scoped for this API user (empty), so no parent id can be enumerated; get-by-id is the authority and resolves records the list does not show.",
5590
+ "remedy": "Provision a parent record in the Autotask UI first (or use a known parent id; get-by-id still resolves it), then retry the create with the real parent id."
5485
5591
  },
5486
5592
  "vendorEvidence": [
5487
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"expense_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"178f9509-d97a-4e69-9e4b-f7af67d98e64","message":"Picklist value [1] does not exist for '
5593
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"expense_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"178f9509-d97a-4e69-9e4b-f7af67d98e64","message":"Picklist value [1] does not exist for ',
5594
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the expense_reports LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15; W-A6), so no parent id can be read back through the list surface (get-by-id is the authority); then retry the create with the real parent id."
5488
5595
  ],
5489
5596
  "deleteBoundary": {
5490
5597
  "available": false,
@@ -5545,8 +5652,8 @@ var RELATIONSHIP_MAP = {
5545
5652
  "unproven": true,
5546
5653
  "blocker": {
5547
5654
  "kind": "blind-parent",
5548
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
5549
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
5655
+ "message": "The create failed on the parent reference: the parent table's list surface is visibility-scoped for this API user (empty), so no parent id can be enumerated; get-by-id is the authority and resolves records the list does not show.",
5656
+ "remedy": "Provision a parent record in the Autotask UI first (or use a known parent id; get-by-id still resolves it), then retry the create with the real parent id."
5550
5657
  },
5551
5658
  "vendorEvidence": [
5552
5659
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"expense_reports.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9363affe-7779-4bac-bd81-49423574fbc8","message":"Value does not exist for the require'
@@ -5610,8 +5717,8 @@ var RELATIONSHIP_MAP = {
5610
5717
  "unproven": false,
5611
5718
  "blocker": {
5612
5719
  "kind": "ok",
5613
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
5614
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
5720
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
5721
+ "remedy": "None: create with the live-proven field set."
5615
5722
  },
5616
5723
  "vendorEvidence": [
5617
5724
  "verified-gone=True"
@@ -5658,8 +5765,8 @@ var RELATIONSHIP_MAP = {
5658
5765
  "unproven": false,
5659
5766
  "blocker": {
5660
5767
  "kind": "ok",
5661
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
5662
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
5768
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
5769
+ "remedy": "None: create with the live-proven field set."
5663
5770
  },
5664
5771
  "vendorEvidence": [
5665
5772
  "verified-gone=True"
@@ -5794,12 +5901,14 @@ var RELATIONSHIP_MAP = {
5794
5901
  "unproven": true,
5795
5902
  "blocker": {
5796
5903
  "kind": "undocumented-ladder",
5797
- "message": "Field 'useQuoteTotals': Missing Required Field: useQuoteTotals. | Value does not exist for the required field useQuoteTotals. ",
5798
- "remedy": "the vendor required-field ladder is undocumented and UNPROVEN (12 fields consumed before the campaign stopped \u2014 W-A5); no known field set makes this create succeed on ww29 \u2014 treat it as unavailable for this tenant and file the gap with the vendor."
5904
+ "message": "The vendor's required-field ladder is undocumented and unproven: the create still fails after the proven fields (liveProvenPrefix), and no known field set makes it succeed.",
5905
+ "remedy": "Treat the create as unavailable through the API for this tenant.",
5906
+ "unsatisfiableViaApi": true
5799
5907
  },
5800
5908
  "vendorEvidence": [
5801
5909
  "Field 'useQuoteTotals': Missing Required Field: useQuoteTotals. | Value does not exist for the required field useQuoteTotals. ",
5802
- `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"opportunities.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"b18b6fa2-5fba-4cbe-8657-b2805798c736","message":"Field 'startDate': Missing Required Fi`
5910
+ `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"opportunities.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"b18b6fa2-5fba-4cbe-8657-b2805798c736","message":"Field 'startDate': Missing Required Fi`,
5911
+ "maintainer provenance (blocker.remedy): the vendor required-field ladder is undocumented and UNPROVEN (12 fields consumed before the campaign stopped \u2014 W-A5); no known field set makes this create succeed on ww29 \u2014 treat it as unavailable for this tenant and file the gap with the vendor."
5803
5912
  ],
5804
5913
  "deleteBoundary": {
5805
5914
  "available": false,
@@ -5847,18 +5956,25 @@ var RELATIONSHIP_MAP = {
5847
5956
  "unproven": true,
5848
5957
  "blocker": {
5849
5958
  "kind": "picklist-unexposed",
5850
- "message": "vendor 500: the Type picklist values are not exposed to this API user (File/Document/Image/Other all rejected \u2014 W-A4)",
5851
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI.",
5852
- "referenceField": "Type"
5959
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
5960
+ "referenceField": "Type",
5961
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
5962
+ "unsatisfiableViaApi": true
5853
5963
  },
5854
5964
  "vendorEvidence": [
5855
- `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"opportunity_attachments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"83dcbf4f-7e56-4602-b52b-04db2f3455d2","message":"Field 'Type': Missing Requir`
5965
+ `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"opportunity_attachments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"83dcbf4f-7e56-4602-b52b-04db2f3455d2","message":"Field 'Type': Missing Requir`,
5966
+ "maintainer provenance (blocker.message): vendor 500: the Type picklist values are not exposed to this API user (File/Document/Image/Other all rejected \u2014 W-A4)"
5856
5967
  ],
5857
5968
  "deleteBoundary": {
5858
5969
  "available": true,
5859
5970
  "note": null
5860
5971
  },
5861
- "zone": "ww29"
5972
+ "zone": "ww29",
5973
+ "parentCompany": {
5974
+ "via": "opportunityID",
5975
+ "resource": "opportunities",
5976
+ "field": "companyID"
5977
+ }
5862
5978
  }
5863
5979
  },
5864
5980
  "deleteBoundary": null,
@@ -5910,11 +6026,12 @@ var RELATIONSHIP_MAP = {
5910
6026
  "unproven": true,
5911
6027
  "blocker": {
5912
6028
  "kind": "unknown",
5913
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevel1Model) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths.",
5914
- "remedy": "attempt one create against a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
6029
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the model body and answers OperationResultModel.",
6030
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
5915
6031
  },
5916
6032
  "vendorEvidence": [
5917
- "api-docs.json: POST /V1.0/OrganizationalLevel1s consumes definitions.OrganizationalLevel1Model and answers OperationResultModel \u2014 the entity defines no DELETE path."
6033
+ "api-docs.json: POST /V1.0/OrganizationalLevel1s consumes definitions.OrganizationalLevel1Model and answers OperationResultModel \u2014 the entity defines no DELETE path.",
6034
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevel1Model) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths."
5918
6035
  ],
5919
6036
  "deleteBoundary": {
5920
6037
  "available": false,
@@ -5954,11 +6071,12 @@ var RELATIONSHIP_MAP = {
5954
6071
  "unproven": true,
5955
6072
  "blocker": {
5956
6073
  "kind": "unknown",
5957
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevel2Model) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths.",
5958
- "remedy": "attempt one create against a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
6074
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the model body and answers OperationResultModel.",
6075
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
5959
6076
  },
5960
6077
  "vendorEvidence": [
5961
- "api-docs.json: POST /V1.0/OrganizationalLevel2s consumes definitions.OrganizationalLevel2Model and answers OperationResultModel \u2014 the entity defines no DELETE path."
6078
+ "api-docs.json: POST /V1.0/OrganizationalLevel2s consumes definitions.OrganizationalLevel2Model and answers OperationResultModel \u2014 the entity defines no DELETE path.",
6079
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevel2Model) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths."
5962
6080
  ],
5963
6081
  "deleteBoundary": {
5964
6082
  "available": false,
@@ -5998,11 +6116,12 @@ var RELATIONSHIP_MAP = {
5998
6116
  "unproven": true,
5999
6117
  "blocker": {
6000
6118
  "kind": "unknown",
6001
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevelAssociationModel) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths.",
6002
- "remedy": "attempt one create against a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
6119
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the model body and answers OperationResultModel.",
6120
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
6003
6121
  },
6004
6122
  "vendorEvidence": [
6005
- "api-docs.json: POST /V1.0/OrganizationalLevelAssociations consumes definitions.OrganizationalLevelAssociationModel and answers OperationResultModel \u2014 the entity defines no DELETE path."
6123
+ "api-docs.json: POST /V1.0/OrganizationalLevelAssociations consumes definitions.OrganizationalLevelAssociationModel and answers OperationResultModel \u2014 the entity defines no DELETE path.",
6124
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevelAssociationModel) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths."
6006
6125
  ],
6007
6126
  "deleteBoundary": {
6008
6127
  "available": false,
@@ -6049,11 +6168,12 @@ var RELATIONSHIP_MAP = {
6049
6168
  "unproven": true,
6050
6169
  "blocker": {
6051
6170
  "kind": "blind-parent",
6052
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
6053
- "remedy": "provision a parent record in the Autotask UI first \u2014 the products table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
6171
+ "message": "The create failed on the parent reference: the products table is blind for this API user, so no valid parent id can be read back.",
6172
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
6054
6173
  },
6055
6174
  "vendorEvidence": [
6056
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"product_vendors.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9aecd016-c8fa-4940-b54a-6e875d43aba7","message":"Value does not exist for the require'
6175
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"product_vendors.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9aecd016-c8fa-4940-b54a-6e875d43aba7","message":"Value does not exist for the require',
6176
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the products table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
6057
6177
  ],
6058
6178
  "deleteBoundary": {
6059
6179
  "available": false,
@@ -6116,8 +6236,8 @@ var RELATIONSHIP_MAP = {
6116
6236
  "unproven": true,
6117
6237
  "blocker": {
6118
6238
  "kind": "unknown",
6119
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
6120
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
6239
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
6240
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
6121
6241
  },
6122
6242
  "vendorEvidence": [
6123
6243
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"products.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"3f1bd9a6-28bb-4fb4-b851-07b5f90a8a3d","message":"Value does not exist for the required field'
@@ -6168,8 +6288,8 @@ var RELATIONSHIP_MAP = {
6168
6288
  "unproven": true,
6169
6289
  "blocker": {
6170
6290
  "kind": "blind-parent",
6171
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
6172
- "remedy": "provision a parent record in the Autotask UI first \u2014 the projects table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id.",
6291
+ "message": "The create failed on the parent reference: the projects table is blind for this API user, so no valid parent id can be read back.",
6292
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id.",
6173
6293
  "requires": {
6174
6294
  "anyOf": [
6175
6295
  "productID",
@@ -6178,13 +6298,19 @@ var RELATIONSHIP_MAP = {
6178
6298
  }
6179
6299
  },
6180
6300
  "vendorEvidence": [
6181
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"project_charges.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"664ab2ea-408f-4834-a331-eb5dd55ac557","message":"A productID or a billingCodeID must '
6301
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"project_charges.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"664ab2ea-408f-4834-a331-eb5dd55ac557","message":"A productID or a billingCodeID must ',
6302
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the projects table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
6182
6303
  ],
6183
6304
  "deleteBoundary": {
6184
6305
  "available": true,
6185
6306
  "note": null
6186
6307
  },
6187
- "zone": "ww29"
6308
+ "zone": "ww29",
6309
+ "parentCompany": {
6310
+ "via": "projectID",
6311
+ "resource": "projects",
6312
+ "field": "companyID"
6313
+ }
6188
6314
  }
6189
6315
  },
6190
6316
  "deleteBoundary": null,
@@ -6221,8 +6347,8 @@ var RELATIONSHIP_MAP = {
6221
6347
  "unproven": true,
6222
6348
  "blocker": {
6223
6349
  "kind": "unknown",
6224
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
6225
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
6350
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
6351
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
6226
6352
  },
6227
6353
  "vendorEvidence": [
6228
6354
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"project_notes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d11a453b-729e-4908-8c6d-8549b72e8d0c","message":"Picklist value [1] does not exist for '
@@ -6231,7 +6357,12 @@ var RELATIONSHIP_MAP = {
6231
6357
  "available": false,
6232
6358
  "note": "the vendor defines no DELETE for project_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
6233
6359
  },
6234
- "zone": "ww29"
6360
+ "zone": "ww29",
6361
+ "parentCompany": {
6362
+ "via": "projectID",
6363
+ "resource": "projects",
6364
+ "field": "companyID"
6365
+ }
6235
6366
  }
6236
6367
  },
6237
6368
  "deleteBoundary": {
@@ -6270,18 +6401,24 @@ var RELATIONSHIP_MAP = {
6270
6401
  ],
6271
6402
  "unproven": false,
6272
6403
  "blocker": {
6273
- "kind": "delete-absent",
6274
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (known id 527128, marker name FULL100W-1791110339 phases); cleanup is UI-only.",
6275
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
6404
+ "kind": "ok",
6405
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
6406
+ "remedy": "None: create with the live-proven field set."
6276
6407
  },
6277
6408
  "vendorEvidence": [
6278
- "residue.json: phases id 527128 (known id, undeletable by vendor wall W-A1; phases.get is scoped \u2014 the id is retained in the ledger)"
6409
+ "residue.json: phases id 527128 (known id, undeletable by vendor wall W-A1; phases.get is scoped \u2014 the id is retained in the ledger)",
6410
+ "maintainer provenance (blocker.message): create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (known id 527128, marker name FULL100W-1791110339 phases); cleanup is UI-only."
6279
6411
  ],
6280
6412
  "deleteBoundary": {
6281
6413
  "available": false,
6282
6414
  "note": "the vendor defines no DELETE for phases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
6283
6415
  },
6284
- "zone": "ww29"
6416
+ "zone": "ww29",
6417
+ "parentCompany": {
6418
+ "via": "projectID",
6419
+ "resource": "projects",
6420
+ "field": "companyID"
6421
+ }
6285
6422
  }
6286
6423
  },
6287
6424
  "deleteBoundary": {
@@ -6351,9 +6488,9 @@ var RELATIONSHIP_MAP = {
6351
6488
  "unproven": true,
6352
6489
  "blocker": {
6353
6490
  "kind": "blind-reference",
6354
- "message": "Value does not reference an existing entity for taskType .",
6355
- "remedy": "provision the referenced record in the Autotask UI first (the taskType reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
6356
- "referenceField": "taskType"
6491
+ "message": "The taskType reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
6492
+ "referenceField": "taskType",
6493
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
6357
6494
  },
6358
6495
  "vendorEvidence": [
6359
6496
  "Value does not reference an existing entity for taskType .",
@@ -6363,7 +6500,12 @@ var RELATIONSHIP_MAP = {
6363
6500
  "available": false,
6364
6501
  "note": "the vendor defines no DELETE for tasks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
6365
6502
  },
6366
- "zone": "ww29"
6503
+ "zone": "ww29",
6504
+ "parentCompany": {
6505
+ "via": "projectID",
6506
+ "resource": "projects",
6507
+ "field": "companyID"
6508
+ }
6367
6509
  }
6368
6510
  },
6369
6511
  "deleteBoundary": {
@@ -6471,9 +6613,9 @@ var RELATIONSHIP_MAP = {
6471
6613
  "unproven": true,
6472
6614
  "blocker": {
6473
6615
  "kind": "blind-reference",
6474
- "message": "Value does not reference an existing entity for projectType .",
6475
- "remedy": "provision the referenced record in the Autotask UI first (the projectType reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
6476
- "referenceField": "projectType"
6616
+ "message": "The projectType reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
6617
+ "referenceField": "projectType",
6618
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
6477
6619
  },
6478
6620
  "vendorEvidence": [
6479
6621
  "Value does not reference an existing entity for projectType .",
@@ -6543,9 +6685,9 @@ var RELATIONSHIP_MAP = {
6543
6685
  ],
6544
6686
  "unproven": false,
6545
6687
  "blocker": {
6546
- "kind": "delete-absent",
6547
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 purchase_order_item_receiving); cleanup is UI-only.",
6548
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
6688
+ "kind": "ok",
6689
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
6690
+ "remedy": "None: create with the live-proven field set."
6549
6691
  },
6550
6692
  "vendorEvidence": [
6551
6693
  "not found on a visible surface (record may predate the marker value or was created with a different value)"
@@ -6612,11 +6754,12 @@ var RELATIONSHIP_MAP = {
6612
6754
  "unproven": true,
6613
6755
  "blocker": {
6614
6756
  "kind": "unknown",
6615
- "message": "vendor 500: reference rejection on order (exact vendor text preserved verbatim in vendorEvidence \u2014 campaign receipt artifact, as recorded on disk)",
6616
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
6757
+ "message": "The vendor rejected a reference field on the create (HTTP 500); the cause is not classified.",
6758
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
6617
6759
  },
6618
6760
  "vendorEvidence": [
6619
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"purchase_order_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"1a4f90a8-2add-47f3-bc93-74e972f7fb5e","message":"Reference value on field: order'
6761
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"purchase_order_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"1a4f90a8-2add-47f3-bc93-74e972f7fb5e","message":"Reference value on field: order',
6762
+ "maintainer provenance (blocker.message): vendor 500: reference rejection on order (exact vendor text preserved verbatim in vendorEvidence \u2014 campaign receipt artifact, as recorded on disk)"
6620
6763
  ],
6621
6764
  "deleteBoundary": {
6622
6765
  "available": false,
@@ -6677,8 +6820,8 @@ var RELATIONSHIP_MAP = {
6677
6820
  "unproven": true,
6678
6821
  "blocker": {
6679
6822
  "kind": "blind-parent",
6680
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
6681
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
6823
+ "message": "The create failed on the parent reference: the parent table is blind for this API user, so no valid parent id can be read back.",
6824
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
6682
6825
  },
6683
6826
  "vendorEvidence": [
6684
6827
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"purchase_orders.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8cefa9ef-8cfd-46b3-baef-fe64b3d2b999","message":"Value does not exist for the require'
@@ -6732,17 +6875,23 @@ var RELATIONSHIP_MAP = {
6732
6875
  "unproven": true,
6733
6876
  "blocker": {
6734
6877
  "kind": "blind-parent",
6735
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
6736
- "remedy": "provision a parent record in the Autotask UI first \u2014 the quotes table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
6878
+ "message": "The create failed on the parent reference: the quotes table is blind for this API user, so no valid parent id can be read back.",
6879
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
6737
6880
  },
6738
6881
  "vendorEvidence": [
6739
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"quote_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"0645cad1-5749-42f1-9666-eeffac24118b","message":"Reference value on field: quoteID of quo'
6882
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"quote_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"0645cad1-5749-42f1-9666-eeffac24118b","message":"Reference value on field: quoteID of quo',
6883
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the quotes table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
6740
6884
  ],
6741
6885
  "deleteBoundary": {
6742
6886
  "available": true,
6743
6887
  "note": null
6744
6888
  },
6745
- "zone": "ww29"
6889
+ "zone": "ww29",
6890
+ "parentCompany": {
6891
+ "via": "quoteID",
6892
+ "resource": "quotes",
6893
+ "field": "companyID"
6894
+ }
6746
6895
  }
6747
6896
  },
6748
6897
  "deleteBoundary": null,
@@ -6777,8 +6926,8 @@ var RELATIONSHIP_MAP = {
6777
6926
  "unproven": false,
6778
6927
  "blocker": {
6779
6928
  "kind": "ok",
6780
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
6781
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
6929
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
6930
+ "remedy": "None: create with the live-proven field set."
6782
6931
  },
6783
6932
  "vendorEvidence": [
6784
6933
  'Executed "quote_locations.create".'
@@ -6878,8 +7027,8 @@ var RELATIONSHIP_MAP = {
6878
7027
  "unproven": true,
6879
7028
  "blocker": {
6880
7029
  "kind": "blind-parent",
6881
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
6882
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
7030
+ "message": "The create failed on the parent reference: the parent table is blind for this API user, so no valid parent id can be read back.",
7031
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
6883
7032
  },
6884
7033
  "vendorEvidence": [
6885
7034
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"quotes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"7db33388-b040-4940-9def-9f4a4b46acb8","message":"Value does not exist for the required field b'
@@ -6927,9 +7076,9 @@ var RELATIONSHIP_MAP = {
6927
7076
  ],
6928
7077
  "unproven": false,
6929
7078
  "blocker": {
6930
- "kind": "delete-absent",
6931
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 resource_role_queues); cleanup is UI-only.",
6932
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
7079
+ "kind": "ok",
7080
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
7081
+ "remedy": "None: create with the live-proven field set."
6933
7082
  },
6934
7083
  "vendorEvidence": [
6935
7084
  "BLIND SURFACE \u2014 own created records invisible to query (node sentinel, ww29-verified)"
@@ -7228,9 +7377,9 @@ var RELATIONSHIP_MAP = {
7228
7377
  ],
7229
7378
  "unproven": false,
7230
7379
  "blocker": {
7231
- "kind": "delete-absent",
7232
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 roles); cleanup is UI-only.",
7233
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
7380
+ "kind": "ok",
7381
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
7382
+ "remedy": "None: create with the live-proven field set."
7234
7383
  },
7235
7384
  "vendorEvidence": [
7236
7385
  '{"error":true,"code":"CONFIG_ERROR","category":"validation","retryable":false,"operation":"roles.delete","message":"invoke: unknown operation \\"roles.delete\\" \u2014 it is not in the capability registry (l'
@@ -7298,11 +7447,12 @@ var RELATIONSHIP_MAP = {
7298
7447
  "unproven": true,
7299
7448
  "blocker": {
7300
7449
  "kind": "blind-parent",
7301
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
7302
- "remedy": "provision a parent record in the Autotask UI first \u2014 the service_call_tasks table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
7450
+ "message": "The create failed on the parent reference: the service_call_tasks table is blind for this API user, so no valid parent id can be read back.",
7451
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
7303
7452
  },
7304
7453
  "vendorEvidence": [
7305
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_task_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"33baa2f9-f98c-49cd-ac9e-ef1ac532e277","message":"Value does not exist for'
7454
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_task_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"33baa2f9-f98c-49cd-ac9e-ef1ac532e277","message":"Value does not exist for',
7455
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the service_call_tasks table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
7306
7456
  ],
7307
7457
  "deleteBoundary": {
7308
7458
  "available": true,
@@ -7360,8 +7510,8 @@ var RELATIONSHIP_MAP = {
7360
7510
  "unproven": true,
7361
7511
  "blocker": {
7362
7512
  "kind": "blind-parent",
7363
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
7364
- "remedy": "provision a parent record in the Autotask UI first \u2014 the service_calls table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
7513
+ "message": "The create failed on the parent reference: the service_calls table is blind for this API user, so no valid parent id can be read back.",
7514
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
7365
7515
  },
7366
7516
  "vendorEvidence": [
7367
7517
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_tasks.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"49bf54fb-1e7f-40a9-82e0-25c58a4a67fd","message":"Value does not exist for the requ'
@@ -7370,7 +7520,12 @@ var RELATIONSHIP_MAP = {
7370
7520
  "available": true,
7371
7521
  "note": null
7372
7522
  },
7373
- "zone": "ww29"
7523
+ "zone": "ww29",
7524
+ "parentCompany": {
7525
+ "via": "serviceCallID",
7526
+ "resource": "service_calls",
7527
+ "field": "companyID"
7528
+ }
7374
7529
  }
7375
7530
  },
7376
7531
  "deleteBoundary": null,
@@ -7405,11 +7560,12 @@ var RELATIONSHIP_MAP = {
7405
7560
  "unproven": true,
7406
7561
  "blocker": {
7407
7562
  "kind": "blind-parent",
7408
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
7409
- "remedy": "provision a parent record in the Autotask UI first \u2014 the service_call_tickets table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
7563
+ "message": "The create failed on the parent reference: the service_call_tickets table is blind for this API user, so no valid parent id can be read back.",
7564
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
7410
7565
  },
7411
7566
  "vendorEvidence": [
7412
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_ticket_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9e96c2d1-9fcb-4d73-95dd-f88c1ce7de6c","message":"Value does not exist f'
7567
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_ticket_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9e96c2d1-9fcb-4d73-95dd-f88c1ce7de6c","message":"Value does not exist f',
7568
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the service_call_tickets table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
7413
7569
  ],
7414
7570
  "deleteBoundary": {
7415
7571
  "available": true,
@@ -7467,8 +7623,8 @@ var RELATIONSHIP_MAP = {
7467
7623
  "unproven": true,
7468
7624
  "blocker": {
7469
7625
  "kind": "blind-parent",
7470
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
7471
- "remedy": "provision a parent record in the Autotask UI first \u2014 the service_calls table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
7626
+ "message": "The create failed on the parent reference: the service_calls table is blind for this API user, so no valid parent id can be read back.",
7627
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
7472
7628
  },
7473
7629
  "vendorEvidence": [
7474
7630
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_tickets.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"62ab38e3-b14b-4462-829a-9abc91ce3eb3","message":"Value does not exist for the re'
@@ -7477,7 +7633,12 @@ var RELATIONSHIP_MAP = {
7477
7633
  "available": true,
7478
7634
  "note": null
7479
7635
  },
7480
- "zone": "ww29"
7636
+ "zone": "ww29",
7637
+ "parentCompany": {
7638
+ "via": "serviceCallID",
7639
+ "resource": "service_calls",
7640
+ "field": "companyID"
7641
+ }
7481
7642
  }
7482
7643
  },
7483
7644
  "deleteBoundary": null,
@@ -7544,8 +7705,8 @@ var RELATIONSHIP_MAP = {
7544
7705
  "unproven": true,
7545
7706
  "blocker": {
7546
7707
  "kind": "blind-parent",
7547
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
7548
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
7708
+ "message": "The create failed on the parent reference: the parent table is blind for this API user, so no valid parent id can be read back.",
7709
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
7549
7710
  },
7550
7711
  "vendorEvidence": [
7551
7712
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_calls.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"27ef068e-2ff8-4bf9-9043-a17008996639","message":"Value does not exist for the required '
@@ -7608,8 +7769,8 @@ var RELATIONSHIP_MAP = {
7608
7769
  "unproven": true,
7609
7770
  "blocker": {
7610
7771
  "kind": "blind-parent",
7611
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
7612
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
7772
+ "message": "The create failed on the parent reference: the parent table's list surface is visibility-scoped for this API user (empty), so no parent id can be enumerated; get-by-id is the authority and resolves records the list does not show.",
7773
+ "remedy": "Provision a parent record in the Autotask UI first (or use a known parent id; get-by-id still resolves it), then retry the create with the real parent id."
7613
7774
  },
7614
7775
  "vendorEvidence": [
7615
7776
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"services.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"eb4c0dfd-6d14-4af2-8770-7bd7fc06d0eb","message":"Picklist value [1] does not exist for perio'
@@ -7699,9 +7860,9 @@ var RELATIONSHIP_MAP = {
7699
7860
  "unproven": true,
7700
7861
  "blocker": {
7701
7862
  "kind": "blind-reference",
7702
- "message": "vendor 500: the configurationItemID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
7703
- "remedy": "provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
7704
- "referenceField": "configurationItemID"
7863
+ "message": "The configurationItemID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
7864
+ "referenceField": "configurationItemID",
7865
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
7705
7866
  },
7706
7867
  "vendorEvidence": [
7707
7868
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"subscriptions.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"36080c8a-2fd5-4fc3-9c0f-a53d95fa97b2","message":"Value does not reference an existing e'
@@ -7787,8 +7948,8 @@ var RELATIONSHIP_MAP = {
7787
7948
  "unproven": false,
7788
7949
  "blocker": {
7789
7950
  "kind": "ok",
7790
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
7791
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
7951
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
7952
+ "remedy": "None: create with the live-proven field set."
7792
7953
  },
7793
7954
  "vendorEvidence": [],
7794
7955
  "deleteBoundary": {
@@ -7828,8 +7989,8 @@ var RELATIONSHIP_MAP = {
7828
7989
  "unproven": false,
7829
7990
  "blocker": {
7830
7991
  "kind": "ok",
7831
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
7832
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
7992
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
7993
+ "remedy": "None: create with the live-proven field set."
7833
7994
  },
7834
7995
  "vendorEvidence": [
7835
7996
  "verified-gone=True"
@@ -7888,8 +8049,8 @@ var RELATIONSHIP_MAP = {
7888
8049
  "unproven": false,
7889
8050
  "blocker": {
7890
8051
  "kind": "ok",
7891
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
7892
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
8052
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
8053
+ "remedy": "None: create with the live-proven field set."
7893
8054
  },
7894
8055
  "vendorEvidence": [
7895
8056
  "verified-gone=True"
@@ -7933,11 +8094,12 @@ var RELATIONSHIP_MAP = {
7933
8094
  "unproven": true,
7934
8095
  "blocker": {
7935
8096
  "kind": "unknown",
7936
- "message": "vendor 500: reference rejection on r (exact vendor text preserved verbatim in vendorEvidence \u2014 campaign receipt artifact, as recorded on disk)",
7937
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
8097
+ "message": "The vendor rejected a reference field on the create (HTTP 500); the cause is not classified.",
8098
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
7938
8099
  },
7939
8100
  "vendorEvidence": [
7940
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"task_secondary_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d2783d1d-b23a-4c7d-9459-0089be7f9b0b","message":"Reference value on field: r'
8101
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"task_secondary_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d2783d1d-b23a-4c7d-9459-0089be7f9b0b","message":"Reference value on field: r',
8102
+ "maintainer provenance (blocker.message): vendor 500: reference rejection on r (exact vendor text preserved verbatim in vendorEvidence \u2014 campaign receipt artifact, as recorded on disk)"
7941
8103
  ],
7942
8104
  "deleteBoundary": {
7943
8105
  "available": true,
@@ -7974,11 +8136,12 @@ var RELATIONSHIP_MAP = {
7974
8136
  "unproven": true,
7975
8137
  "blocker": {
7976
8138
  "kind": "unknown",
7977
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.TaxRegionModel) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths.",
7978
- "remedy": "attempt one create against a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
8139
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the model body and answers OperationResultModel.",
8140
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
7979
8141
  },
7980
8142
  "vendorEvidence": [
7981
- "api-docs.json: POST /V1.0/TaxRegions consumes definitions.TaxRegionModel and answers OperationResultModel \u2014 the entity defines no DELETE path."
8143
+ "api-docs.json: POST /V1.0/TaxRegions consumes definitions.TaxRegionModel and answers OperationResultModel \u2014 the entity defines no DELETE path.",
8144
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.TaxRegionModel) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths."
7982
8145
  ],
7983
8146
  "deleteBoundary": {
7984
8147
  "available": false,
@@ -8024,9 +8187,9 @@ var RELATIONSHIP_MAP = {
8024
8187
  "unproven": true,
8025
8188
  "blocker": {
8026
8189
  "kind": "blind-reference",
8027
- "message": "vendor 500: the configurationItemID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
8028
- "remedy": "provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
8029
- "referenceField": "configurationItemID"
8190
+ "message": "The configurationItemID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
8191
+ "referenceField": "configurationItemID",
8192
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
8030
8193
  },
8031
8194
  "vendorEvidence": [
8032
8195
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_additional_configuration_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"20c78cfe-eb8c-437b-9f41-8a3cd852b05b","message":"Reference valu'
@@ -8035,7 +8198,12 @@ var RELATIONSHIP_MAP = {
8035
8198
  "available": true,
8036
8199
  "note": null
8037
8200
  },
8038
- "zone": "ww29"
8201
+ "zone": "ww29",
8202
+ "parentCompany": {
8203
+ "via": "ticketID",
8204
+ "resource": "tickets",
8205
+ "field": "companyID"
8206
+ }
8039
8207
  }
8040
8208
  },
8041
8209
  "deleteBoundary": null,
@@ -8072,18 +8240,24 @@ var RELATIONSHIP_MAP = {
8072
8240
  "unproven": false,
8073
8241
  "blocker": {
8074
8242
  "kind": "ok",
8075
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 4001 (deleted post-proof \u2014 zero residue). The 10-04 W-A2 'blind reference' was a company-scoping issue, NOT a blind table: 'The contactID is invalid. The contactID must be associated with either the Ticket's Company or its Parent Company.' A contact created under the ticket's own company (30132787 for ticket 527119) passes.",
8076
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
8243
+ "message": "contactID must be associated with the ticket's company or its parent company; a contact created under the ticket's own company is accepted.",
8244
+ "remedy": "Create the contact under the ticket's own company first, then add it to the ticket."
8077
8245
  },
8078
8246
  "vendorEvidence": [
8079
8247
  "Reference value on field: contactID of type: Contact does not exist or is invalid.",
8080
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_additional_contacts.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"f507450d-002a-4f1a-afc8-d0168a45f93d","message":"Reference value on field:'
8248
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_additional_contacts.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"f507450d-002a-4f1a-afc8-d0168a45f93d","message":"Reference value on field:',
8249
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 4001 (deleted post-proof \u2014 zero residue). The 10-04 W-A2 'blind reference' was a company-scoping issue, NOT a blind table: 'The contactID is invalid. The contactID must be associated with either the Ticket's Company or its Parent Company.' A contact created under the ticket's own company (30132787 for ticket 527119) passes."
8081
8250
  ],
8082
8251
  "deleteBoundary": {
8083
8252
  "available": true,
8084
8253
  "note": null
8085
8254
  },
8086
- "zone": "ww29"
8255
+ "zone": "ww29",
8256
+ "parentCompany": {
8257
+ "via": "ticketID",
8258
+ "resource": "tickets",
8259
+ "field": "companyID"
8260
+ }
8087
8261
  }
8088
8262
  },
8089
8263
  "deleteBoundary": null,
@@ -8122,8 +8296,9 @@ var RELATIONSHIP_MAP = {
8122
8296
  "unproven": true,
8123
8297
  "blocker": {
8124
8298
  "kind": "picklist-unexposed",
8125
- "message": "re-verified 2026-10-06 (confirm-100 CONF100-1791187382; drift): the vendor validates Publish FIRST ('Picklist value [0] does not exist for Publish'); with a picklist-valid Publish the string Type values File/Document/Image/Other are SILENTLY rejected \u2014 'Field Type: Missing Required Field: Type' (10-04 text: 'Picklist value [File] does not exist for Type'). The Type picklist values remain unexposed to this API user (W-A4) \u2014 VENDOR-FIX required.",
8126
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI."
8299
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
8300
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
8301
+ "unsatisfiableViaApi": true
8127
8302
  },
8128
8303
  "vendorEvidence": [
8129
8304
  "Picklist value [File] does not exist for Type.",
@@ -8134,7 +8309,12 @@ var RELATIONSHIP_MAP = {
8134
8309
  "available": true,
8135
8310
  "note": null
8136
8311
  },
8137
- "zone": "ww29"
8312
+ "zone": "ww29",
8313
+ "parentCompany": {
8314
+ "via": "ticketID",
8315
+ "resource": "tickets",
8316
+ "field": "companyID"
8317
+ }
8138
8318
  }
8139
8319
  },
8140
8320
  "deleteBoundary": null,
@@ -8232,8 +8412,8 @@ var RELATIONSHIP_MAP = {
8232
8412
  "unproven": true,
8233
8413
  "blocker": {
8234
8414
  "kind": "blind-parent",
8235
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
8236
- "remedy": "provision a parent record in the Autotask UI first \u2014 the tickets table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
8415
+ "message": "The create failed on the parent reference: the tickets table is blind for this API user, so no valid parent id can be read back.",
8416
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
8237
8417
  },
8238
8418
  "vendorEvidence": [
8239
8419
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_change_request_approvals.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"dcc063e9-eaf1-4e66-9bc9-cb5c4a4f3f71","message":"The Ticket id you ha'
@@ -8242,7 +8422,12 @@ var RELATIONSHIP_MAP = {
8242
8422
  "available": true,
8243
8423
  "note": null
8244
8424
  },
8245
- "zone": "ww29"
8425
+ "zone": "ww29",
8426
+ "parentCompany": {
8427
+ "via": "ticketID",
8428
+ "resource": "tickets",
8429
+ "field": "companyID"
8430
+ }
8246
8431
  }
8247
8432
  },
8248
8433
  "deleteBoundary": null,
@@ -8281,8 +8466,8 @@ var RELATIONSHIP_MAP = {
8281
8466
  "unproven": true,
8282
8467
  "blocker": {
8283
8468
  "kind": "blind-parent",
8284
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
8285
- "remedy": "provision a parent record in the Autotask UI first \u2014 the tickets table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id.",
8469
+ "message": "The create failed on the parent reference: the tickets table is blind for this API user, so no valid parent id can be read back.",
8470
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id.",
8286
8471
  "requires": {
8287
8472
  "anyOf": [
8288
8473
  "productID",
@@ -8297,7 +8482,12 @@ var RELATIONSHIP_MAP = {
8297
8482
  "available": true,
8298
8483
  "note": null
8299
8484
  },
8300
- "zone": "ww29"
8485
+ "zone": "ww29",
8486
+ "parentCompany": {
8487
+ "via": "ticketID",
8488
+ "resource": "tickets",
8489
+ "field": "companyID"
8490
+ }
8301
8491
  }
8302
8492
  },
8303
8493
  "deleteBoundary": null,
@@ -8334,8 +8524,8 @@ var RELATIONSHIP_MAP = {
8334
8524
  "unproven": false,
8335
8525
  "blocker": {
8336
8526
  "kind": "ok",
8337
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
8338
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
8527
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
8528
+ "remedy": "None: create with the live-proven field set."
8339
8529
  },
8340
8530
  "vendorEvidence": [
8341
8531
  "verified-gone=True"
@@ -8344,7 +8534,12 @@ var RELATIONSHIP_MAP = {
8344
8534
  "available": true,
8345
8535
  "note": null
8346
8536
  },
8347
- "zone": "ww29"
8537
+ "zone": "ww29",
8538
+ "parentCompany": {
8539
+ "via": "ticketID",
8540
+ "resource": "tickets",
8541
+ "field": "companyID"
8542
+ }
8348
8543
  }
8349
8544
  },
8350
8545
  "deleteBoundary": null,
@@ -8381,19 +8576,26 @@ var RELATIONSHIP_MAP = {
8381
8576
  "unproven": true,
8382
8577
  "blocker": {
8383
8578
  "kind": "unknown",
8384
- "message": "W-A7 drift + parent wall, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor now answers HTML 404 ('Resource not found' \u2014 typed NOT_FOUND by the node) for checklistLibraryID=1: the checklist-library PARENT is blind/absent for this API user before the 10-04 200-shape drift can surface. The responseDrift pin remains for the post-parent shape.",
8385
- "remedy": "the checklist-library PARENT is blind for this user (HTML 404 before the 200 drift) \u2014 provision the library in the Autotask UI or use a user where the table is visible; the post-parent 200-shape drift (W-A7) still needs the vendor-side fix"
8579
+ "message": "The checklist-library parent is blind or absent for this API user: the vendor answers HTML 404 (typed NOT_FOUND) before a 200 response-shape drift can surface.",
8580
+ "remedy": "Provision the library in the Autotask UI or use a user who can read the table; the post-parent response-shape drift still needs a vendor-side fix."
8386
8581
  },
8387
8582
  "vendorEvidence": [
8388
8583
  "Expected OperationResultModel { itemId } (or { id }); got a different shape (ladder_decode.log, INVALID_RESPONSE)",
8389
8584
  "api-docs.json declares OperationResultModel for POST /V1.0/Tickets/{id}/TicketChecklistLibraries \u2014 the vendor deviates (W-A7 adjudication: vendor spec drift, not a node defect)",
8390
- '{"live": "2026-10-06 confirm-100", "message": "Resource not found: <!DOCTYPE html PUBLIC .../xhtml/1.0/Strict ...>"}'
8585
+ '{"live": "2026-10-06 confirm-100", "message": "Resource not found: <!DOCTYPE html PUBLIC .../xhtml/1.0/Strict ...>"}',
8586
+ "maintainer provenance (blocker.message): W-A7 drift + parent wall, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor now answers HTML 404 ('Resource not found' \u2014 typed NOT_FOUND by the node) for checklistLibraryID=1: the checklist-library PARENT is blind/absent for this API user before the 10-04 200-shape drift can surface. The responseDrift pin remains for the post-parent shape.",
8587
+ "maintainer provenance (blocker.remedy): the checklist-library PARENT is blind for this user (HTML 404 before the 200 drift) \u2014 provision the library in the Autotask UI or use a user where the table is visible; the post-parent 200-shape drift (W-A7) still needs the vendor-side fix"
8391
8588
  ],
8392
8589
  "deleteBoundary": {
8393
8590
  "available": false,
8394
8591
  "note": "the vendor defines no DELETE for ticket_checklist_libraries (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
8395
8592
  },
8396
- "zone": "ww29"
8593
+ "zone": "ww29",
8594
+ "parentCompany": {
8595
+ "via": "ticketID",
8596
+ "resource": "tickets",
8597
+ "field": "companyID"
8598
+ }
8397
8599
  }
8398
8600
  },
8399
8601
  "deleteBoundary": {
@@ -8456,8 +8658,9 @@ var RELATIONSHIP_MAP = {
8456
8658
  "unproven": true,
8457
8659
  "blocker": {
8458
8660
  "kind": "picklist-unexposed",
8459
- "message": "re-verified 2026-10-06 (confirm-100 CONF100-1791187382; drift): the vendor validates Publish FIRST ('Picklist value [0] does not exist for Publish'); with a picklist-valid Publish the string Type values File/Document/Image/Other are SILENTLY rejected \u2014 'Field Type: Missing Required Field: Type' (10-04 text: 'Picklist value [File] does not exist for Type'). The Type picklist values remain unexposed to this API user (W-A4) \u2014 VENDOR-FIX required.",
8460
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI."
8661
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
8662
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
8663
+ "unsatisfiableViaApi": true
8461
8664
  },
8462
8665
  "vendorEvidence": [
8463
8666
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_note_attachments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"52976761-8459-49af-8509-49e562e59dbb","message":"Field 'Type': Missing Requir`
@@ -8507,8 +8710,8 @@ var RELATIONSHIP_MAP = {
8507
8710
  "unproven": false,
8508
8711
  "blocker": {
8509
8712
  "kind": "ok",
8510
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
8511
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
8713
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
8714
+ "remedy": "None: create with the live-proven field set."
8512
8715
  },
8513
8716
  "vendorEvidence": [
8514
8717
  'Executed "ticket_note_webhooks.create".'
@@ -8601,8 +8804,8 @@ var RELATIONSHIP_MAP = {
8601
8804
  "unproven": false,
8602
8805
  "blocker": {
8603
8806
  "kind": "ok",
8604
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
8605
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
8807
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
8808
+ "remedy": "None: create with the live-proven field set."
8606
8809
  },
8607
8810
  "vendorEvidence": [
8608
8811
  'Executed "ticket_notes.create".'
@@ -8611,7 +8814,12 @@ var RELATIONSHIP_MAP = {
8611
8814
  "available": false,
8612
8815
  "note": "the vendor defines no DELETE for ticket_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
8613
8816
  },
8614
- "zone": "ww29"
8817
+ "zone": "ww29",
8818
+ "parentCompany": {
8819
+ "via": "ticketID",
8820
+ "resource": "tickets",
8821
+ "field": "companyID"
8822
+ }
8615
8823
  }
8616
8824
  },
8617
8825
  "deleteBoundary": {
@@ -8649,8 +8857,8 @@ var RELATIONSHIP_MAP = {
8649
8857
  "unproven": true,
8650
8858
  "blocker": {
8651
8859
  "kind": "unknown",
8652
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
8653
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
8860
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
8861
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
8654
8862
  },
8655
8863
  "vendorEvidence": [
8656
8864
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_secondary_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"0965b007-8bd2-4d51-9967-257ab506a87a","message":"Value does not exist for '
@@ -8659,7 +8867,12 @@ var RELATIONSHIP_MAP = {
8659
8867
  "available": true,
8660
8868
  "note": null
8661
8869
  },
8662
- "zone": "ww29"
8870
+ "zone": "ww29",
8871
+ "parentCompany": {
8872
+ "via": "ticketID",
8873
+ "resource": "tickets",
8874
+ "field": "companyID"
8875
+ }
8663
8876
  }
8664
8877
  },
8665
8878
  "deleteBoundary": null,
@@ -8700,8 +8913,8 @@ var RELATIONSHIP_MAP = {
8700
8913
  "unproven": false,
8701
8914
  "blocker": {
8702
8915
  "kind": "ok",
8703
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
8704
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
8916
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
8917
+ "remedy": "None: create with the live-proven field set."
8705
8918
  },
8706
8919
  "vendorEvidence": [
8707
8920
  'Executed "ticket_webhooks.create".'
@@ -8939,9 +9152,9 @@ var RELATIONSHIP_MAP = {
8939
9152
  ],
8940
9153
  "unproven": false,
8941
9154
  "blocker": {
8942
- "kind": "delete-absent",
8943
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 tickets); cleanup is UI-only.",
8944
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
9155
+ "kind": "ok",
9156
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
9157
+ "remedy": "None: create with the live-proven field set."
8945
9158
  },
8946
9159
  "vendorEvidence": [
8947
9160
  '{"error":true,"code":"CONFIG_ERROR","category":"validation","retryable":false,"operation":"tickets.delete","message":"invoke: unknown operation \\"tickets.delete\\" \u2014 it is not in the capability registr'
@@ -9011,13 +9224,15 @@ var RELATIONSHIP_MAP = {
9011
9224
  "unproven": true,
9012
9225
  "blocker": {
9013
9226
  "kind": "resource-role-pair",
9014
- "message": "pair-scoped wall (confirm-100 CONF100-1791187382, 2026-10-06; scope re-stamped 2026-10-21): 3 live attempts with the API-only user's own resource 31131505 + roles 29685291/29682834/29683323 were refused with 'API-only user cannot be selected for this field' (10-04: 'The specified AssignedResourceID and AssignedRoleID combination is not currently defined'). This applies to creates selecting that resource+role pair; it is NOT a refusal of all time-entry writes \u2014 live creates succeeded on 2026-10-21 (pair not recorded). The authorised pair set has not been re-adjudicated by a live probe. createForResource (stage-11 proven, 10-04) was walled under the same pair on 10-06 and is unconfirmed for other pairs. Valid in-tenant pairs observed via postedWithin: (31131373, 29682834), (29869529, 29682834).",
9015
- "remedy": "vendor pair-eligibility, not missing tenant data: the API-only user's own resource is not selectable. Use a (resource, role) pair the tenant authorises for this user (creates succeeded 2026-10-21, pair not recorded), or record time in the Autotask UI; the working reads remain postedWithin / the window helpers (W-D3 pointer note)"
9227
+ "message": "The create is refused when it selects the API-only user's own resource ('API-only user cannot be selected for this field') or a (resourceID, roleID) pair the tenant has not defined ('The specified AssignedResourceID and AssignedRoleID combination is not currently defined'). This is a pair-scoped refusal, not a refusal of all time-entry creates: creates with a defined pair succeed.",
9228
+ "remedy": "Use a (resource, role) pair the tenant defines for the user, or record the time in the Autotask UI. Valid in-tenant pairs can be read through postedWithin."
9016
9229
  },
9017
9230
  "vendorEvidence": [
9018
9231
  "The specified AssignedResourceID and AssignedRoleID combination is not currently defined.",
9019
9232
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"time_entries.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c5ff4e59-bc8f-4f88-ad05-6445d8fddfa6","message":"API-only user cannot be selected for th',
9020
- '{"live": "2026-10-06 confirm-100", "message": "API-only user cannot be selected for this field."}'
9233
+ '{"live": "2026-10-06 confirm-100", "message": "API-only user cannot be selected for this field."}',
9234
+ "maintainer provenance (blocker.message): pair-scoped wall (confirm-100 CONF100-1791187382, 2026-10-06; scope re-stamped 2026-10-21): 3 live attempts with the API-only user's own resource 31131505 + roles 29685291/29682834/29683323 were refused with 'API-only user cannot be selected for this field' (10-04: 'The specified AssignedResourceID and AssignedRoleID combination is not currently defined'). This applies to creates selecting that resource+role pair; it is NOT a refusal of all time-entry writes \u2014 live creates succeeded on 2026-10-21 (pair not recorded). The authorised pair set has not been re-adjudicated by a live probe. createForResource (stage-11 proven, 10-04) was walled under the same pair on 10-06 and is unconfirmed for other pairs. Valid in-tenant pairs observed via postedWithin: (31131373, 29682834), (29869529, 29682834).",
9235
+ "maintainer provenance (blocker.remedy): vendor pair-eligibility, not missing tenant data: the API-only user's own resource is not selectable. Use a (resource, role) pair the tenant authorises for this user (creates succeeded 2026-10-21, pair not recorded), or record time in the Autotask UI; the working reads remain postedWithin / the window helpers (W-D3 pointer note)"
9021
9236
  ],
9022
9237
  "deleteBoundary": {
9023
9238
  "available": true,
@@ -9070,8 +9285,9 @@ var RELATIONSHIP_MAP = {
9070
9285
  "unproven": true,
9071
9286
  "blocker": {
9072
9287
  "kind": "picklist-unexposed",
9073
- "message": "re-verified 2026-10-06 (confirm-100 CONF100-1791187382; drift): the vendor validates Publish FIRST ('Picklist value [0] does not exist for Publish'); with a picklist-valid Publish the string Type values File/Document/Image/Other are SILENTLY rejected \u2014 'Field Type: Missing Required Field: Type' (10-04 text: 'Picklist value [File] does not exist for Type'). The Type picklist values remain unexposed to this API user (W-A4) \u2014 VENDOR-FIX required.",
9074
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI."
9288
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
9289
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
9290
+ "unsatisfiableViaApi": true
9075
9291
  },
9076
9292
  "vendorEvidence": [
9077
9293
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"time_entry_attachments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"04f16a9b-daa6-4dc1-96a2-32508985ac71","message":"Field 'Type': Missing Require`,
@@ -9138,9 +9354,9 @@ var RELATIONSHIP_MAP = {
9138
9354
  "unproven": true,
9139
9355
  "blocker": {
9140
9356
  "kind": "blind-reference",
9141
- "message": "vendor 500: the productID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
9142
- "remedy": "provision the referenced record in the Autotask UI first (the productID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
9143
- "referenceField": "productID"
9357
+ "message": "The productID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
9358
+ "referenceField": "productID",
9359
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
9144
9360
  },
9145
9361
  "vendorEvidence": [
9146
9362
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"inventory_products.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d27710fa-5cb6-455a-bc60-99c6efe2b810","message":"Field 'quantityMinimum': Missing `
@@ -12528,8 +12744,8 @@ var CREATE_GUIDANCE = {
12528
12744
  "unproven": true,
12529
12745
  "blocker": {
12530
12746
  "kind": "unknown",
12531
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
12532
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
12747
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
12748
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
12533
12749
  },
12534
12750
  "vendorEvidence": [
12535
12751
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"appointments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ae6ff4b1-553b-48e0-b4fe-00c72964b268","message":"Value does not exist for the required f'
@@ -12548,13 +12764,15 @@ var CREATE_GUIDANCE = {
12548
12764
  "unproven": true,
12549
12765
  "blocker": {
12550
12766
  "kind": "unknown",
12551
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/time-entry-approve) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the conditions (timeEntryID and approvalResourceID must reference existing objects) and the side effect (TimeEntry.BillingApprovalLevelMostRecent is updated; approvalDateTime / approvalResourceID are not), but the acceptance of the model body is unverified.",
12552
- "remedy": "attempt one create against a time entry in a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
12767
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the conditions (timeEntryID and approvalResourceID must reference existing objects) and the side effect (TimeEntry.BillingApprovalLevelMostRecent is updated; approvalDateTime and approvalResourceID are not).",
12768
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
12553
12769
  },
12554
12770
  "vendorEvidence": [
12555
12771
  'Vendor help, BillingItemApprovalLevels entity page (fetched 2026-10-26): "describes a multi-level approval record for an Autotask time entry ... This option is only available through the REST API."',
12556
12772
  'Vendor help, BillingItemApprovalLevels entity page (fetched 2026-10-26): "When the BillingItemApprovalLevels entity is created, the TimeEntry.BillingApprovalLevelMostRecent field is updated, but approvalDateTime and approvalResourceID are not. Instead, the approvalDateTime and approvalResourceID fields are editable on the TimeEntry entity. Workaround: ... create the BillingItemApprovalLevel and then follow that call up with an update to the TimeEntry to set the BillingApprovalDateTime and BillingApprovalResourceID fields."',
12557
- "api-docs.json: POST /V1.0/BillingItemApprovalLevels consumes definitions.BillingItemApprovalLevelModel and answers OperationResultModel \u2014 the entity defines no PUT, PATCH or DELETE path."
12773
+ "api-docs.json: POST /V1.0/BillingItemApprovalLevels consumes definitions.BillingItemApprovalLevelModel and answers OperationResultModel \u2014 the entity defines no PUT, PATCH or DELETE path.",
12774
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/time-entry-approve) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the conditions (timeEntryID and approvalResourceID must reference existing objects) and the side effect (TimeEntry.BillingApprovalLevelMostRecent is updated; approvalDateTime / approvalResourceID are not), but the acceptance of the model body is unverified.",
12775
+ "maintainer provenance (blocker.remedy): attempt one create against a time entry in a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
12558
12776
  ],
12559
12777
  "deleteBoundary": {
12560
12778
  "available": false,
@@ -12570,8 +12788,8 @@ var CREATE_GUIDANCE = {
12570
12788
  "unproven": true,
12571
12789
  "blocker": {
12572
12790
  "kind": "blind-parent",
12573
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
12574
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
12791
+ "message": "The create failed on the parent reference: the parent table is blind for this API user, so no valid parent id can be read back.",
12792
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
12575
12793
  },
12576
12794
  "vendorEvidence": [
12577
12795
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"change_request_links.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"2d747061-00ea-4b40-b3fc-740882492457","message":"Value does not exist for the re'
@@ -12593,8 +12811,8 @@ var CREATE_GUIDANCE = {
12593
12811
  "unproven": false,
12594
12812
  "blocker": {
12595
12813
  "kind": "ok",
12596
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
12597
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
12814
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
12815
+ "remedy": "None: create with the live-proven field set."
12598
12816
  },
12599
12817
  "vendorEvidence": [
12600
12818
  "verified-gone=True"
@@ -12615,8 +12833,8 @@ var CREATE_GUIDANCE = {
12615
12833
  "unproven": false,
12616
12834
  "blocker": {
12617
12835
  "kind": "ok",
12618
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
12619
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
12836
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
12837
+ "remedy": "None: create with the live-proven field set."
12620
12838
  },
12621
12839
  "vendorEvidence": [
12622
12840
  "verified-gone=True"
@@ -12639,9 +12857,9 @@ var CREATE_GUIDANCE = {
12639
12857
  ],
12640
12858
  "unproven": false,
12641
12859
  "blocker": {
12642
- "kind": "delete-absent",
12643
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 companies); cleanup is UI-only.",
12644
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
12860
+ "kind": "ok",
12861
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
12862
+ "remedy": "None: create with the live-proven field set."
12645
12863
  },
12646
12864
  "vendorEvidence": [
12647
12865
  '{"error":true,"code":"CONFIG_ERROR","category":"validation","retryable":false,"operation":"companies.delete","message":"invoke: unknown operation \\"companies.delete\\" \u2014 it is not in the capability reg'
@@ -12663,8 +12881,8 @@ var CREATE_GUIDANCE = {
12663
12881
  "unproven": false,
12664
12882
  "blocker": {
12665
12883
  "kind": "ok",
12666
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
12667
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
12884
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
12885
+ "remedy": "None: create with the live-proven field set."
12668
12886
  },
12669
12887
  "vendorEvidence": [
12670
12888
  'Executed "company_alerts.create".'
@@ -12683,8 +12901,8 @@ var CREATE_GUIDANCE = {
12683
12901
  "unproven": false,
12684
12902
  "blocker": {
12685
12903
  "kind": "ok",
12686
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
12687
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
12904
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
12905
+ "remedy": "None: create with the live-proven field set."
12688
12906
  },
12689
12907
  "vendorEvidence": [],
12690
12908
  "deleteBoundary": {
@@ -12705,15 +12923,17 @@ var CREATE_GUIDANCE = {
12705
12923
  ],
12706
12924
  "unproven": false,
12707
12925
  "blocker": {
12708
- "kind": "delete-absent",
12709
- "message": 'create succeeded live (DG-1 verification, 2026-10-11, ww29, parent company 29683380, record id 30230658, marker name "node-autotask DG-1 create probe") once the four vendor-required body fields were present \u2014 actionType, assignedResourceID, startDateTime, endDateTime \u2014 plus the parent companyID in the path. The vendor reports a missing required field as HTTP 500 SERVER_ERROR naming the field; it is a deterministic rejection, not a transient fault (the SDK now answers retryable: false \u2014 add the field, do not retry). The vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue; cleanup is UI-only.',
12710
- "remedy": "provision via the API as proven: send actionType (picklist, e.g. 3 = Note: General), assignedResourceID (a resource id), startDateTime and endDateTime (UTC ISO) in the body and the company id as the parent; name and note are optional content fields. Clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
12926
+ "kind": "ok",
12927
+ "message": "A create needs actionType, assignedResourceID, startDateTime and endDateTime in the body plus the parent companyID in the path. The vendor reports a missing required field as HTTP 500 naming the field; this is a deterministic rejection, not a transient fault (retryable: false).",
12928
+ "remedy": "Send actionType (a picklist value, for example 3 = Note: General), assignedResourceID (a resource id), startDateTime and endDateTime (UTC ISO) in the body and the company id as the parent; name and note are optional content fields."
12711
12929
  },
12712
12930
  "vendorEvidence": [
12713
12931
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'assignedResourceID': Value does not exist for the required field assignedResourceID. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`,
12714
12932
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'actionType': Missing Required Field: actionType. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`,
12715
12933
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'endDateTime': Missing Required Field: endDateTime. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`,
12716
- `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'startDateTime': Missing Required Field: startDateTime. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`
12934
+ `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":false,"httpStatus":500,"operation":"company_notes.create","message":"Field 'startDateTime': Missing Required Field: startDateTime. ; on record number [1].","suggestedAction":"Deterministic field rejection \u2014 fix the value, do not retry. Consult operations.fieldCatalog for the field catalog (types, required, maxLength)."}`,
12935
+ 'maintainer provenance (blocker.message): create succeeded live (DG-1 verification, 2026-10-11, ww29, parent company 29683380, record id 30230658, marker name "node-autotask DG-1 create probe") once the four vendor-required body fields were present \u2014 actionType, assignedResourceID, startDateTime, endDateTime \u2014 plus the parent companyID in the path. The vendor reports a missing required field as HTTP 500 SERVER_ERROR naming the field; it is a deterministic rejection, not a transient fault (the SDK now answers retryable: false \u2014 add the field, do not retry). The vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue; cleanup is UI-only.',
12936
+ "maintainer provenance (blocker.remedy): provision via the API as proven: send actionType (picklist, e.g. 3 = Note: General), assignedResourceID (a resource id), startDateTime and endDateTime (UTC ISO) in the body and the company id as the parent; name and note are optional content fields. Clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
12717
12937
  ],
12718
12938
  "deleteBoundary": {
12719
12939
  "available": false,
@@ -12735,8 +12955,8 @@ var CREATE_GUIDANCE = {
12735
12955
  "unproven": false,
12736
12956
  "blocker": {
12737
12957
  "kind": "ok",
12738
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
12739
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
12958
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
12959
+ "remedy": "None: create with the live-proven field set."
12740
12960
  },
12741
12961
  "vendorEvidence": [
12742
12962
  'Executed "company_webhooks.create".'
@@ -12758,9 +12978,9 @@ var CREATE_GUIDANCE = {
12758
12978
  "unproven": true,
12759
12979
  "blocker": {
12760
12980
  "kind": "blind-reference",
12761
- "message": "vendor 500: the billingProductID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
12762
- "remedy": "provision the referenced record in the Autotask UI first (the billingProductID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
12763
- "referenceField": "billingProductID"
12981
+ "message": "The billingProductID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
12982
+ "referenceField": "billingProductID",
12983
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
12764
12984
  },
12765
12985
  "vendorEvidence": [
12766
12986
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"configuration_item_billing_product_associations.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c2bf3080-c882-4ff2-b440-159686687978","message":"Refe'
@@ -12782,9 +13002,9 @@ var CREATE_GUIDANCE = {
12782
13002
  "unproven": true,
12783
13003
  "blocker": {
12784
13004
  "kind": "blind-reference",
12785
- "message": "Value does not reference an existing entity for displayColorRgb .",
12786
- "remedy": "provision the referenced record in the Autotask UI first (the displayColorRgb reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
12787
- "referenceField": "displayColorRgb"
13005
+ "message": "The displayColorRgb reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
13006
+ "referenceField": "displayColorRgb",
13007
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
12788
13008
  },
12789
13009
  "vendorEvidence": [
12790
13010
  "Value does not reference an existing entity for displayColorRgb .",
@@ -12806,8 +13026,8 @@ var CREATE_GUIDANCE = {
12806
13026
  "unproven": true,
12807
13027
  "blocker": {
12808
13028
  "kind": "unknown",
12809
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
12810
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
13029
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
13030
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
12811
13031
  },
12812
13032
  "vendorEvidence": [
12813
13033
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"configuration_item_category_udf_associations.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"89cf29e9-db4a-4834-b5fa-6344d2213569","message":"Field '`
@@ -12830,9 +13050,9 @@ var CREATE_GUIDANCE = {
12830
13050
  "unproven": true,
12831
13051
  "blocker": {
12832
13052
  "kind": "blind-reference",
12833
- "message": "Value does not reference an existing entity for noteType .",
12834
- "remedy": "provision the referenced record in the Autotask UI first (the noteType reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
12835
- "referenceField": "noteType"
13053
+ "message": "The noteType reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
13054
+ "referenceField": "noteType",
13055
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
12836
13056
  },
12837
13057
  "vendorEvidence": [
12838
13058
  "Value does not reference an existing entity for noteType .",
@@ -12842,7 +13062,12 @@ var CREATE_GUIDANCE = {
12842
13062
  "available": false,
12843
13063
  "note": "the vendor defines no DELETE for configuration_item_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
12844
13064
  },
12845
- "zone": "ww29"
13065
+ "zone": "ww29",
13066
+ "parentCompany": {
13067
+ "via": "configurationItemID",
13068
+ "resource": "configuration_items",
13069
+ "field": "companyID"
13070
+ }
12846
13071
  },
12847
13072
  {
12848
13073
  "resource": "configuration_item_related_items",
@@ -12855,9 +13080,9 @@ var CREATE_GUIDANCE = {
12855
13080
  "unproven": true,
12856
13081
  "blocker": {
12857
13082
  "kind": "blind-reference",
12858
- "message": "Reference value on field: configurationItemID of type: ConfigurationItem does not exist or is invalid.",
12859
- "remedy": "provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
12860
- "referenceField": "configurationItemID"
13083
+ "message": "The configurationItemID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
13084
+ "referenceField": "configurationItemID",
13085
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
12861
13086
  },
12862
13087
  "vendorEvidence": [
12863
13088
  "Reference value on field: configurationItemID of type: ConfigurationItem does not exist or is invalid.",
@@ -12867,7 +13092,12 @@ var CREATE_GUIDANCE = {
12867
13092
  "available": true,
12868
13093
  "note": null
12869
13094
  },
12870
- "zone": "ww29"
13095
+ "zone": "ww29",
13096
+ "parentCompany": {
13097
+ "via": "configurationItemID",
13098
+ "resource": "configuration_items",
13099
+ "field": "companyID"
13100
+ }
12871
13101
  },
12872
13102
  {
12873
13103
  "resource": "configuration_item_types",
@@ -12879,8 +13109,8 @@ var CREATE_GUIDANCE = {
12879
13109
  "unproven": false,
12880
13110
  "blocker": {
12881
13111
  "kind": "ok",
12882
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
12883
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
13112
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
13113
+ "remedy": "None: create with the live-proven field set."
12884
13114
  },
12885
13115
  "vendorEvidence": [
12886
13116
  'Executed "configuration_item_types.create".'
@@ -12903,8 +13133,8 @@ var CREATE_GUIDANCE = {
12903
13133
  "unproven": true,
12904
13134
  "blocker": {
12905
13135
  "kind": "unknown",
12906
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
12907
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
13136
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
13137
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
12908
13138
  },
12909
13139
  "vendorEvidence": [
12910
13140
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"configuration_item_webhooks.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"f348c45e-80e0-4632-9dc9-d04796ea03ab","message":"A ConfigurationItemWebho'
@@ -12927,8 +13157,8 @@ var CREATE_GUIDANCE = {
12927
13157
  "unproven": true,
12928
13158
  "blocker": {
12929
13159
  "kind": "unknown",
12930
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
12931
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
13160
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
13161
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
12932
13162
  },
12933
13163
  "vendorEvidence": [
12934
13164
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"configuration_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9b17f254-654d-4bdc-94bd-d7fc0ff8f4ff","message":"Value does not exist for the req'
@@ -12947,8 +13177,8 @@ var CREATE_GUIDANCE = {
12947
13177
  "unproven": true,
12948
13178
  "blocker": {
12949
13179
  "kind": "unknown",
12950
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
12951
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
13180
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
13181
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
12952
13182
  },
12953
13183
  "vendorEvidence": [
12954
13184
  '{"error":true,"code":"NOT_FOUND","category":"not_found","retryable":false,"httpStatus":404,"operation":"contact_group_contacts.create","suggestedAction":"Verify the id, or resolve the record by name first.","correlationId":"f84411bb-c115-41af-8690-74a6283b9768","message":"Resource not found: <!DOCTY'
@@ -12969,8 +13199,8 @@ var CREATE_GUIDANCE = {
12969
13199
  "unproven": false,
12970
13200
  "blocker": {
12971
13201
  "kind": "ok",
12972
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
12973
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
13202
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
13203
+ "remedy": "None: create with the live-proven field set."
12974
13204
  },
12975
13205
  "vendorEvidence": [
12976
13206
  "verified-gone=True"
@@ -12995,8 +13225,8 @@ var CREATE_GUIDANCE = {
12995
13225
  "unproven": false,
12996
13226
  "blocker": {
12997
13227
  "kind": "ok",
12998
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
12999
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
13228
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
13229
+ "remedy": "None: create with the live-proven field set."
13000
13230
  },
13001
13231
  "vendorEvidence": [
13002
13232
  'Executed "contact_webhooks.create".'
@@ -13020,8 +13250,8 @@ var CREATE_GUIDANCE = {
13020
13250
  "unproven": false,
13021
13251
  "blocker": {
13022
13252
  "kind": "ok",
13023
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
13024
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
13253
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
13254
+ "remedy": "None: create with the live-proven field set."
13025
13255
  },
13026
13256
  "vendorEvidence": [
13027
13257
  "verified-gone=True"
@@ -13048,17 +13278,24 @@ var CREATE_GUIDANCE = {
13048
13278
  "unproven": true,
13049
13279
  "blocker": {
13050
13280
  "kind": "blind-reference",
13051
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382), current full text: 'productID [1] is invalid. Products with a BillingType of 'Standard'[1] cannot be associated to ContractBillingRules.' \u2014 a product with an ELIGIBLE (non-Standard) BillingType is required; the products table is blind for this API user \u2014 UNSATISFIABLE for this user. (10-04 ladder had stopped at isDailyProrationEnabled + 'productID [1] is invalid. Products with a'.)",
13052
- "remedy": "a product with a non-Standard BillingType is required (products table blind for this user) \u2014 provision/read an eligible product in the Autotask UI or use a user where the products table is visible"
13281
+ "message": "productID must reference a product whose BillingType is not 'Standard' (Standard products cannot be associated to ContractBillingRules); the products table is blind for this API user, so no eligible product can be read back.",
13282
+ "referenceField": "productID",
13283
+ "remedy": "Provision or select a product with a non-Standard BillingType in the Autotask UI, or use a user who can read the products table."
13053
13284
  },
13054
13285
  "vendorEvidence": [
13055
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_billing_rules.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"62ba9fcf-91ae-42a3-bc50-9911442eb738","message":"Reference value on field: con'
13286
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_billing_rules.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"62ba9fcf-91ae-42a3-bc50-9911442eb738","message":"Reference value on field: con',
13287
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382), current full text: 'productID [1] is invalid. Products with a BillingType of 'Standard'[1] cannot be associated to ContractBillingRules.' \u2014 a product with an ELIGIBLE (non-Standard) BillingType is required; the products table is blind for this API user \u2014 UNSATISFIABLE for this user. (10-04 ladder had stopped at isDailyProrationEnabled + 'productID [1] is invalid. Products with a'.)"
13056
13288
  ],
13057
13289
  "deleteBoundary": {
13058
13290
  "available": true,
13059
13291
  "note": null
13060
13292
  },
13061
- "zone": "ww29"
13293
+ "zone": "ww29",
13294
+ "parentCompany": {
13295
+ "via": "contractID",
13296
+ "resource": "contracts",
13297
+ "field": "companyID"
13298
+ }
13062
13299
  },
13063
13300
  {
13064
13301
  "resource": "contract_block_hour_factors",
@@ -13070,17 +13307,23 @@ var CREATE_GUIDANCE = {
13070
13307
  "unproven": false,
13071
13308
  "blocker": {
13072
13309
  "kind": "ok",
13073
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): write path proven via the vendor's unique-key wall \u2014 'A ContractBlockHourFactor for this roleID and contractID combination already exists' (pair (30131842, 29685291) pre-existing from the rates attach). Fields roleID (+ the unique key).",
13074
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13310
+ "message": "The vendor enforces a unique (roleID, contractID) pair: a second create for the same pair is refused as already existing.",
13311
+ "remedy": "None: create with the live-proven field set (roleID and contractID identify the record)."
13075
13312
  },
13076
13313
  "vendorEvidence": [
13077
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_block_hour_factors.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8095334f-1e14-4185-b5dc-99e5526e526d","message":"Value does not exist for'
13314
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_block_hour_factors.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8095334f-1e14-4185-b5dc-99e5526e526d","message":"Value does not exist for',
13315
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): write path proven via the vendor's unique-key wall \u2014 'A ContractBlockHourFactor for this roleID and contractID combination already exists' (pair (30131842, 29685291) pre-existing from the rates attach). Fields roleID (+ the unique key)."
13078
13316
  ],
13079
13317
  "deleteBoundary": {
13080
13318
  "available": false,
13081
13319
  "note": "the vendor defines no DELETE for contract_block_hour_factors (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13082
13320
  },
13083
- "zone": "ww29"
13321
+ "zone": "ww29",
13322
+ "parentCompany": {
13323
+ "via": "contractID",
13324
+ "resource": "contracts",
13325
+ "field": "companyID"
13326
+ }
13084
13327
  },
13085
13328
  {
13086
13329
  "resource": "contract_blocks",
@@ -13097,17 +13340,23 @@ var CREATE_GUIDANCE = {
13097
13340
  "unproven": false,
13098
13341
  "blocker": {
13099
13342
  "kind": "ok",
13100
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114389. TYPE GATE: parent MUST be type 4 (Block hours) \u2014 'This ContractBlock must reference a Contract of type 4 (Block hours) with contractID'. Residue.",
13101
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13343
+ "message": "The parent contract must be type 4 (Block hours).",
13344
+ "remedy": "Create with the live-proven field set under a type 4 (Block hours) contract."
13102
13345
  },
13103
13346
  "vendorEvidence": [
13104
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_blocks.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ea12c341-d1d3-4622-b73c-45e871ed1f91","message":"Reference value on field: contractID'
13347
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_blocks.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ea12c341-d1d3-4622-b73c-45e871ed1f91","message":"Reference value on field: contractID',
13348
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114389. TYPE GATE: parent MUST be type 4 (Block hours) \u2014 'This ContractBlock must reference a Contract of type 4 (Block hours) with contractID'. Residue."
13105
13349
  ],
13106
13350
  "deleteBoundary": {
13107
13351
  "available": false,
13108
13352
  "note": "the vendor defines no DELETE for contract_blocks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13109
13353
  },
13110
- "zone": "ww29"
13354
+ "zone": "ww29",
13355
+ "parentCompany": {
13356
+ "via": "contractID",
13357
+ "resource": "contracts",
13358
+ "field": "companyID"
13359
+ }
13111
13360
  },
13112
13361
  {
13113
13362
  "resource": "contract_charges",
@@ -13121,17 +13370,23 @@ var CREATE_GUIDANCE = {
13121
13370
  "unproven": true,
13122
13371
  "blocker": {
13123
13372
  "kind": "blind-parent",
13124
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
13125
- "remedy": "provision a parent record in the Autotask UI first \u2014 the contracts table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
13373
+ "message": "The create failed on the parent reference: the contracts table is blind for this API user, so no valid parent id can be read back.",
13374
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
13126
13375
  },
13127
13376
  "vendorEvidence": [
13128
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_charges.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ed78a2ec-b5e2-4e5f-989b-4c39bee66567","message":"Reference value on field: contractI'
13377
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_charges.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"ed78a2ec-b5e2-4e5f-989b-4c39bee66567","message":"Reference value on field: contractI',
13378
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the contracts table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
13129
13379
  ],
13130
13380
  "deleteBoundary": {
13131
13381
  "available": true,
13132
13382
  "note": null
13133
13383
  },
13134
- "zone": "ww29"
13384
+ "zone": "ww29",
13385
+ "parentCompany": {
13386
+ "via": "contractID",
13387
+ "resource": "contracts",
13388
+ "field": "companyID"
13389
+ }
13135
13390
  },
13136
13391
  {
13137
13392
  "resource": "contract_exclusion_billing_codes",
@@ -13141,17 +13396,24 @@ var CREATE_GUIDANCE = {
13141
13396
  "unproven": true,
13142
13397
  "blocker": {
13143
13398
  "kind": "blind-reference",
13144
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field billingCodeID.' \u2014 the billing-allocation table is blind for this API user (no resolvable allocation code for this user's contracts) \u2014 UNSATISFIABLE for this user.",
13145
- "remedy": "an allocation code (billingCodeID) readable by this user is required (table blind) \u2014 provision in the Autotask UI or use a user where allocation codes are visible"
13399
+ "message": "billingCodeID must reference an allocation code readable by the user; the billing-allocation table is blind for this API user, so no resolvable code exists for its contracts.",
13400
+ "referenceField": "billingCodeID",
13401
+ "remedy": "Provision the allocation code in the Autotask UI, or use a user who can read allocation codes."
13146
13402
  },
13147
13403
  "vendorEvidence": [
13148
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_billing_codes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8ef9f8ea-5846-4128-bbcc-b523061c585f","message":"Reference value on '
13404
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_billing_codes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8ef9f8ea-5846-4128-bbcc-b523061c585f","message":"Reference value on ',
13405
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field billingCodeID.' \u2014 the billing-allocation table is blind for this API user (no resolvable allocation code for this user's contracts) \u2014 UNSATISFIABLE for this user."
13149
13406
  ],
13150
13407
  "deleteBoundary": {
13151
13408
  "available": true,
13152
13409
  "note": null
13153
13410
  },
13154
- "zone": "ww29"
13411
+ "zone": "ww29",
13412
+ "parentCompany": {
13413
+ "via": "contractID",
13414
+ "resource": "contracts",
13415
+ "field": "companyID"
13416
+ }
13155
13417
  },
13156
13418
  {
13157
13419
  "resource": "contract_exclusion_roles",
@@ -13163,11 +13425,12 @@ var CREATE_GUIDANCE = {
13163
13425
  "unproven": false,
13164
13426
  "blocker": {
13165
13427
  "kind": "ok",
13166
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 187; field roleID. Residue.",
13167
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13428
+ "message": "The vendor accepted a create with the live-proven field set (roleID).",
13429
+ "remedy": "None: create with the live-proven field set."
13168
13430
  },
13169
13431
  "vendorEvidence": [
13170
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_roles.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"76f0c480-232b-4bfd-aa1e-c9cd3858d717","message":"Value does not exist for th'
13432
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_roles.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"76f0c480-232b-4bfd-aa1e-c9cd3858d717","message":"Value does not exist for th',
13433
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 187; field roleID. Residue."
13171
13434
  ],
13172
13435
  "deleteBoundary": {
13173
13436
  "available": true,
@@ -13185,11 +13448,12 @@ var CREATE_GUIDANCE = {
13185
13448
  "unproven": false,
13186
13449
  "blocker": {
13187
13450
  "kind": "ok",
13188
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified \u2014 batch1-final recovery, id 3; the surviving per-resource receipts predate the recovery)",
13189
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
13451
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
13452
+ "remedy": "None: create with the live-proven field set."
13190
13453
  },
13191
13454
  "vendorEvidence": [
13192
- 'csxroles: {"id": 3, "final": "RECOVERED"} (batch1-final.json) \u2014 verify-gone=True (batch1-final.log)'
13455
+ 'csxroles: {"id": 3, "final": "RECOVERED"} (batch1-final.json) \u2014 verify-gone=True (batch1-final.log)',
13456
+ "maintainer provenance (blocker.message): create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified \u2014 batch1-final recovery, id 3; the surviving per-resource receipts predate the recovery)"
13193
13457
  ],
13194
13458
  "deleteBoundary": {
13195
13459
  "available": true,
@@ -13207,9 +13471,9 @@ var CREATE_GUIDANCE = {
13207
13471
  "unproven": true,
13208
13472
  "blocker": {
13209
13473
  "kind": "blind-reference",
13210
- "message": "vendor 500: the excludedWorkTypeID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
13211
- "remedy": "provision the referenced record in the Autotask UI first (the excludedWorkTypeID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
13212
- "referenceField": "excludedWorkTypeID"
13474
+ "message": "The excludedWorkTypeID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
13475
+ "referenceField": "excludedWorkTypeID",
13476
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
13213
13477
  },
13214
13478
  "vendorEvidence": [
13215
13479
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_exclusion_set_excluded_work_types.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"b900823d-cf16-4eea-a26b-ea1df9b13d70","message":"Reference'
@@ -13230,8 +13494,8 @@ var CREATE_GUIDANCE = {
13230
13494
  "unproven": false,
13231
13495
  "blocker": {
13232
13496
  "kind": "ok",
13233
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
13234
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
13497
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
13498
+ "remedy": "None: create with the live-proven field set."
13235
13499
  },
13236
13500
  "vendorEvidence": [
13237
13501
  "verified-gone=True"
@@ -13256,17 +13520,23 @@ var CREATE_GUIDANCE = {
13256
13520
  "unproven": false,
13257
13521
  "blocker": {
13258
13522
  "kind": "ok",
13259
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 1338. TYPE GATE (vendor): the parent contract MUST be type 3 (Fixed Price) \u2014 'ContractMilestones may only have a contractID linking to Contracts of type 3 (Fixed Price)'. Residue.",
13260
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13523
+ "message": "The parent contract must be type 3 (Fixed Price): the vendor only allows ContractMilestones under Contracts of that type.",
13524
+ "remedy": "Create with the live-proven field set under a type 3 (Fixed Price) contract."
13261
13525
  },
13262
13526
  "vendorEvidence": [
13263
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_milestones.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"cfa41884-3855-4729-983f-733f52ef7320","message":"Reference value on field: contra'
13527
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_milestones.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"cfa41884-3855-4729-983f-733f52ef7320","message":"Reference value on field: contra',
13528
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 1338. TYPE GATE (vendor): the parent contract MUST be type 3 (Fixed Price) \u2014 'ContractMilestones may only have a contractID linking to Contracts of type 3 (Fixed Price)'. Residue."
13264
13529
  ],
13265
13530
  "deleteBoundary": {
13266
13531
  "available": false,
13267
13532
  "note": "the vendor defines no DELETE for contract_milestones (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13268
13533
  },
13269
- "zone": "ww29"
13534
+ "zone": "ww29",
13535
+ "parentCompany": {
13536
+ "via": "contractID",
13537
+ "resource": "contracts",
13538
+ "field": "companyID"
13539
+ }
13270
13540
  },
13271
13541
  {
13272
13542
  "resource": "contract_notes",
@@ -13279,17 +13549,23 @@ var CREATE_GUIDANCE = {
13279
13549
  "unproven": false,
13280
13550
  "blocker": {
13281
13551
  "kind": "ok",
13282
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 35573321 under contract 30131842; fields title + description. Residue (no vendor DELETE).",
13283
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13552
+ "message": "The vendor accepted a create with title and description under a contract.",
13553
+ "remedy": "None: create with the live-proven field set."
13284
13554
  },
13285
13555
  "vendorEvidence": [
13286
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_notes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"bc5bfb0b-79c1-4bde-882b-7cd16c77f6cd","message":"Reference value on field: contractID '
13556
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_notes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"bc5bfb0b-79c1-4bde-882b-7cd16c77f6cd","message":"Reference value on field: contractID ',
13557
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 35573321 under contract 30131842; fields title + description. Residue (no vendor DELETE)."
13287
13558
  ],
13288
13559
  "deleteBoundary": {
13289
13560
  "available": false,
13290
13561
  "note": "the vendor defines no DELETE for contract_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13291
13562
  },
13292
- "zone": "ww29"
13563
+ "zone": "ww29",
13564
+ "parentCompany": {
13565
+ "via": "contractID",
13566
+ "resource": "contracts",
13567
+ "field": "companyID"
13568
+ }
13293
13569
  },
13294
13570
  {
13295
13571
  "resource": "contract_rates",
@@ -13302,17 +13578,23 @@ var CREATE_GUIDANCE = {
13302
13578
  "unproven": false,
13303
13579
  "blocker": {
13304
13580
  "kind": "ok",
13305
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30083427; fields contractHourlyRate + roleID (an owned/visible role). Residue.",
13306
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13581
+ "message": "The vendor accepted a create with contractHourlyRate and roleID (an owned, visible role).",
13582
+ "remedy": "None: create with the live-proven field set."
13307
13583
  },
13308
13584
  "vendorEvidence": [
13309
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_rates.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"a829126b-68db-4fac-89ba-56c6ad725eef","message":"Value does not exist for the required'
13585
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_rates.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"a829126b-68db-4fac-89ba-56c6ad725eef","message":"Value does not exist for the required',
13586
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30083427; fields contractHourlyRate + roleID (an owned/visible role). Residue."
13310
13587
  ],
13311
13588
  "deleteBoundary": {
13312
13589
  "available": false,
13313
13590
  "note": "the vendor defines no DELETE for contract_rates (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13314
13591
  },
13315
- "zone": "ww29"
13592
+ "zone": "ww29",
13593
+ "parentCompany": {
13594
+ "via": "contractID",
13595
+ "resource": "contracts",
13596
+ "field": "companyID"
13597
+ }
13316
13598
  },
13317
13599
  {
13318
13600
  "resource": "contract_retainers",
@@ -13329,11 +13611,12 @@ var CREATE_GUIDANCE = {
13329
13611
  "unproven": false,
13330
13612
  "blocker": {
13331
13613
  "kind": "ok",
13332
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114390. TYPE GATE: parent MUST be type 6 (Retainer). Residue.",
13333
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13614
+ "message": "The parent contract must be type 6 (Retainer).",
13615
+ "remedy": "Create with the live-proven field set under a type 6 (Retainer) contract."
13334
13616
  },
13335
13617
  "vendorEvidence": [
13336
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_retainers.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d4fb4798-c02b-4c19-b3fa-b1629ae9113a","message":"Reference value on field: contrac'
13618
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_retainers.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d4fb4798-c02b-4c19-b3fa-b1629ae9113a","message":"Reference value on field: contrac',
13619
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114390. TYPE GATE: parent MUST be type 6 (Retainer). Residue."
13337
13620
  ],
13338
13621
  "deleteBoundary": {
13339
13622
  "available": false,
@@ -13351,11 +13634,13 @@ var CREATE_GUIDANCE = {
13351
13634
  "unproven": true,
13352
13635
  "blocker": {
13353
13636
  "kind": "resource-role-pair",
13354
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'The specified resourceID and roleID combination is not currently defined.' \u2014 a currently-DEFINED (resource, role) assignment is required; the resource_roles table is blind for this user (0 rows) \u2014 same pair-validation family as W-A3; UNSATISFIABLE for this user.",
13355
- "remedy": "a currently-DEFINED (resource, role) assignment is required (resource_roles blind for this user) \u2014 same family as W-A3; use a user with readable assignments or manage role costs in the Autotask UI"
13637
+ "message": "The create is refused unless the (resourceID, roleID) pair is currently defined ('The specified resourceID and roleID combination is not currently defined.'); the resource_roles table is blind for this API user, so no defined pair can be read back.",
13638
+ "remedy": "Use a currently defined (resource, role) assignment from a user who can read resource_roles, or manage role costs in the Autotask UI."
13356
13639
  },
13357
13640
  "vendorEvidence": [
13358
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_role_costs.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c64d8ace-bdf3-46e9-ba24-1e8989aa73ef","message":"Value does not exist for the req'
13641
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_role_costs.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c64d8ace-bdf3-46e9-ba24-1e8989aa73ef","message":"Value does not exist for the req',
13642
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'The specified resourceID and roleID combination is not currently defined.' \u2014 a currently-DEFINED (resource, role) assignment is required; the resource_roles table is blind for this user (0 rows) \u2014 same pair-validation family as W-A3; UNSATISFIABLE for this user.",
13643
+ "maintainer provenance (blocker.remedy): a currently-DEFINED (resource, role) assignment is required (resource_roles blind for this user) \u2014 same family as W-A3; use a user with readable assignments or manage role costs in the Autotask UI"
13359
13644
  ],
13360
13645
  "deleteBoundary": {
13361
13646
  "available": false,
@@ -13373,17 +13658,24 @@ var CREATE_GUIDANCE = {
13373
13658
  "unproven": true,
13374
13659
  "blocker": {
13375
13660
  "kind": "blind-reference",
13376
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382), current full text: the parent contract must be type 7 (Recurring Services) or 'umbrella' ('Unable to create a ContractServiceAdjustment with a contractID that is not of type recurring Service or umbrella'); under a type-7 parent the vendor then requires an ACTIVE serviceID \u2014 'Unable to create a ContractServiceAdjustment with a serviceID of 1 because that Service is not active'. The services table is blind for this API user (no readable active service id) \u2014 UNSATISFIABLE for this user.",
13377
- "remedy": "an ACTIVE serviceID visible to this API user is required (services table blind for this user) \u2014 provision the active service in the Autotask UI or use a user where services are readable; parent must be type 7 (Recurring) or 'umbrella'"
13661
+ "message": "The parent contract must be type 7 (Recurring Services) or an umbrella contract, and serviceID must reference an ACTIVE service; the services table is blind for this API user, so no active service id can be read back.",
13662
+ "referenceField": "serviceID",
13663
+ "remedy": "Provision the active service in the Autotask UI, or use a user who can read services; the parent must be a type 7 (Recurring Services) or umbrella contract."
13378
13664
  },
13379
13665
  "vendorEvidence": [
13380
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_adjustments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"fc363aaa-2d29-4f86-8e8f-2871c6b09401","message":"Reference value on fiel'
13666
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_adjustments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"fc363aaa-2d29-4f86-8e8f-2871c6b09401","message":"Reference value on fiel',
13667
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382), current full text: the parent contract must be type 7 (Recurring Services) or 'umbrella' ('Unable to create a ContractServiceAdjustment with a contractID that is not of type recurring Service or umbrella'); under a type-7 parent the vendor then requires an ACTIVE serviceID \u2014 'Unable to create a ContractServiceAdjustment with a serviceID of 1 because that Service is not active'. The services table is blind for this API user (no readable active service id) \u2014 UNSATISFIABLE for this user."
13381
13668
  ],
13382
13669
  "deleteBoundary": {
13383
13670
  "available": false,
13384
13671
  "note": "the vendor defines no DELETE for contract_service_adjustments (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13385
13672
  },
13386
- "zone": "ww29"
13673
+ "zone": "ww29",
13674
+ "parentCompany": {
13675
+ "via": "contractID",
13676
+ "resource": "contracts",
13677
+ "field": "companyID"
13678
+ }
13387
13679
  },
13388
13680
  {
13389
13681
  "resource": "contract_service_bundle_adjustments",
@@ -13395,18 +13687,25 @@ var CREATE_GUIDANCE = {
13395
13687
  "unproven": true,
13396
13688
  "blocker": {
13397
13689
  "kind": "unknown",
13398
- "message": "W-A7-class drift, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor answers HTTP 200 with a body that is NOT OperationResultModel \u2014 the node (spec-conformant) types INVALID_RESPONSE; the record may be created with an unparseable id (blind table). TYPE GATE: the parent contract must be type 7 (Recurring Services) \u2014 '\u2026with a contractID that is not of type recurring Service'. VENDOR-FIX (response shape) required.",
13399
- "remedy": "vendor response-shape fix required (W-A7-class 200 drift) \u2014 treat the INVALID_RESPONSE as the typed wall; parent must be type 7 (Recurring Services); manage the adjustment in the Autotask UI meanwhile"
13690
+ "message": "The vendor answers HTTP 200 with a body that is not an OperationResultModel (response-shape drift), typed INVALID_RESPONSE; the record may be created with an unparseable id. The parent contract must be type 7 (Recurring Services).",
13691
+ "remedy": "Treat INVALID_RESPONSE as the typed outcome; the parent must be a type 7 (Recurring Services) contract. Manage the adjustment in the Autotask UI until the vendor fixes the response shape."
13400
13692
  },
13401
13693
  "vendorEvidence": [
13402
13694
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_bundle_adjustments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"a1899b6f-015a-4c32-aaa8-eabeabb30165","message":"Reference value ',
13403
- '{"live": "2026-10-06 confirm-100", "message": "Expected OperationResultModel { itemId } (or { id }); got a different shape"}'
13695
+ '{"live": "2026-10-06 confirm-100", "message": "Expected OperationResultModel { itemId } (or { id }); got a different shape"}',
13696
+ "maintainer provenance (blocker.message): W-A7-class drift, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor answers HTTP 200 with a body that is NOT OperationResultModel \u2014 the node (spec-conformant) types INVALID_RESPONSE; the record may be created with an unparseable id (blind table). TYPE GATE: the parent contract must be type 7 (Recurring Services) \u2014 '\u2026with a contractID that is not of type recurring Service'. VENDOR-FIX (response shape) required.",
13697
+ "maintainer provenance (blocker.remedy): vendor response-shape fix required (W-A7-class 200 drift) \u2014 treat the INVALID_RESPONSE as the typed wall; parent must be type 7 (Recurring Services); manage the adjustment in the Autotask UI meanwhile"
13404
13698
  ],
13405
13699
  "deleteBoundary": {
13406
13700
  "available": false,
13407
13701
  "note": "the vendor defines no DELETE for contract_service_bundle_adjustments (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13408
13702
  },
13409
- "zone": "ww29"
13703
+ "zone": "ww29",
13704
+ "parentCompany": {
13705
+ "via": "contractID",
13706
+ "resource": "contracts",
13707
+ "field": "companyID"
13708
+ }
13410
13709
  },
13411
13710
  {
13412
13711
  "resource": "contract_service_bundles",
@@ -13416,17 +13715,24 @@ var CREATE_GUIDANCE = {
13416
13715
  "unproven": true,
13417
13716
  "blocker": {
13418
13717
  "kind": "blind-reference",
13419
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceBundleID.' \u2014 the service-bundles table is blind for this API user \u2014 UNSATISFIABLE for this user.",
13420
- "remedy": "a service-bundles-table record visible to this user is required (table blind, 0 rows) \u2014 provision in the Autotask UI or use a user where the table is visible"
13718
+ "message": "serviceBundleID must reference a service bundle; the service-bundles table is blind for this API user, so no id can be read back.",
13719
+ "referenceField": "serviceBundleID",
13720
+ "remedy": "Provision the service bundle in the Autotask UI, or use a user who can read the table."
13421
13721
  },
13422
13722
  "vendorEvidence": [
13423
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_bundles.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"032e3caa-4527-467f-b459-0cb80cfd1ad2","message":"Value does not exist for th'
13723
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_service_bundles.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"032e3caa-4527-467f-b459-0cb80cfd1ad2","message":"Value does not exist for th',
13724
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceBundleID.' \u2014 the service-bundles table is blind for this API user \u2014 UNSATISFIABLE for this user."
13424
13725
  ],
13425
13726
  "deleteBoundary": {
13426
13727
  "available": false,
13427
13728
  "note": "the vendor defines no DELETE for contract_service_bundles (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13428
13729
  },
13429
- "zone": "ww29"
13730
+ "zone": "ww29",
13731
+ "parentCompany": {
13732
+ "via": "contractID",
13733
+ "resource": "contracts",
13734
+ "field": "companyID"
13735
+ }
13430
13736
  },
13431
13737
  {
13432
13738
  "resource": "contract_services",
@@ -13436,17 +13742,24 @@ var CREATE_GUIDANCE = {
13436
13742
  "unproven": true,
13437
13743
  "blocker": {
13438
13744
  "kind": "blind-reference",
13439
- "message": "re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceID.' \u2014 the services table is blind for this API user (0 rows; no readable service id) \u2014 UNSATISFIABLE for this user.",
13440
- "remedy": "a services-table record visible to this user is required (table blind, 0 rows) \u2014 provision in the Autotask UI or use a user where the table is visible"
13745
+ "message": "serviceID must reference a service; the services table is blind for this API user, so no readable service id exists.",
13746
+ "referenceField": "serviceID",
13747
+ "remedy": "Provision the service in the Autotask UI, or use a user who can read the services table."
13441
13748
  },
13442
13749
  "vendorEvidence": [
13443
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_services.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c5003db3-bd6a-4970-aeb7-c13b32849acd","message":"Value does not exist for the requi'
13750
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_services.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c5003db3-bd6a-4970-aeb7-c13b32849acd","message":"Value does not exist for the requi',
13751
+ "maintainer provenance (blocker.message): re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceID.' \u2014 the services table is blind for this API user (0 rows; no readable service id) \u2014 UNSATISFIABLE for this user."
13444
13752
  ],
13445
13753
  "deleteBoundary": {
13446
13754
  "available": false,
13447
13755
  "note": "the vendor defines no DELETE for contract_services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13448
13756
  },
13449
- "zone": "ww29"
13757
+ "zone": "ww29",
13758
+ "parentCompany": {
13759
+ "via": "contractID",
13760
+ "resource": "contracts",
13761
+ "field": "companyID"
13762
+ }
13450
13763
  },
13451
13764
  {
13452
13765
  "resource": "contract_ticket_purchases",
@@ -13462,11 +13775,12 @@ var CREATE_GUIDANCE = {
13462
13775
  "unproven": false,
13463
13776
  "blocker": {
13464
13777
  "kind": "ok",
13465
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114391. TYPE GATE: parent MUST be type 8 (PerTicket incident) \u2014 'The Contract associated by contractID must be of type PerTicket (incident)'. Residue.",
13466
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13778
+ "message": "The parent contract must be type 8 (PerTicket incident).",
13779
+ "remedy": "Create with the live-proven field set under a type 8 (PerTicket incident) contract."
13467
13780
  },
13468
13781
  "vendorEvidence": [
13469
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_ticket_purchases.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"268901a8-7fdd-4e9a-9731-92f840ac73bd","message":"Reference value on field: '
13782
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contract_ticket_purchases.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"268901a8-7fdd-4e9a-9731-92f840ac73bd","message":"Reference value on field: ',
13783
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114391. TYPE GATE: parent MUST be type 8 (PerTicket incident) \u2014 'The Contract associated by contractID must be of type PerTicket (incident)'. Residue."
13470
13784
  ],
13471
13785
  "deleteBoundary": {
13472
13786
  "available": false,
@@ -13493,12 +13807,14 @@ var CREATE_GUIDANCE = {
13493
13807
  "unproven": false,
13494
13808
  "blocker": {
13495
13809
  "kind": "ok",
13496
- "message": "live-PROVEN 2026-10-06 (confirm-100, marker CONF100-1791187382): the W-A6 'blind parent' was companyID \u2014 an OWNED company satisfies it (seed 30132785). Proven contractType values: 1, 3 (Fixed Price), 4 (Block hours), 6 (Retainer), 7 (Recurring Services), 8 (PerTicket incident). The type-conditioned field gates are declared in requiresByValue / rejectedValues on this row (issue #219 N3) \u2014 they are no longer restated in prose here. Proven ids 30131842-30131847 (residue \u2014 no vendor DELETE for contracts).",
13497
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 send the body with the contractType you need and satisfy that value's requiresByValue gate (plus the contractPeriodType value it names); residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13810
+ "message": "The create is conditioned on contractType: types 1, 3, 4, 6, 7 and 8 are accepted and type 5 is rejected. The per-type field gates are declared in requiresByValue and rejectedValues. An owned company satisfies companyID.",
13811
+ "remedy": "Send the body with the contractType you need and satisfy that value's requiresByValue entry (plus the contractPeriodType value it names)."
13498
13812
  },
13499
13813
  "vendorEvidence": [
13500
13814
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"contracts.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"25d4a730-6d6c-49ff-a038-96d3fd09165d","message":"Value does not exist for the required fiel',
13501
- `{"live": "2026-10-06 confirm-100 (CONF100-1791187382)", "result": "OperationResultModel id=30131842 (type 1)", "ladder": "status -> endDate/timeReporting/contractType/contractName/startDate -> 'Contracts of type 1 require an estimatedRevenue' -> estimatedHours -> estimatedCost"}`
13815
+ `{"live": "2026-10-06 confirm-100 (CONF100-1791187382)", "result": "OperationResultModel id=30131842 (type 1)", "ladder": "status -> endDate/timeReporting/contractType/contractName/startDate -> 'Contracts of type 1 require an estimatedRevenue' -> estimatedHours -> estimatedCost"}`,
13816
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100, marker CONF100-1791187382): the W-A6 'blind parent' was companyID \u2014 an OWNED company satisfies it (seed 30132785). Proven contractType values: 1, 3 (Fixed Price), 4 (Block hours), 6 (Retainer), 7 (Recurring Services), 8 (PerTicket incident). The type-conditioned field gates are declared in requiresByValue / rejectedValues on this row (issue #219 N3) \u2014 they are no longer restated in prose here. Proven ids 30131842-30131847 (residue \u2014 no vendor DELETE for contracts).",
13817
+ "maintainer provenance (blocker.remedy): live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 send the body with the contractType you need and satisfy that value's requiresByValue gate (plus the contractPeriodType value it names); residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
13502
13818
  ],
13503
13819
  "deleteBoundary": {
13504
13820
  "available": false,
@@ -13584,9 +13900,9 @@ var CREATE_GUIDANCE = {
13584
13900
  "unproven": true,
13585
13901
  "blocker": {
13586
13902
  "kind": "blind-reference",
13587
- "message": "Value does not reference an existing entity for primaryLocationID.",
13588
- "remedy": "provision the referenced record in the Autotask UI first (the primaryLocationID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
13589
- "referenceField": "primaryLocationID"
13903
+ "message": "The primaryLocationID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
13904
+ "referenceField": "primaryLocationID",
13905
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
13590
13906
  },
13591
13907
  "vendorEvidence": [
13592
13908
  "Value does not reference an existing entity for primaryLocationID.",
@@ -13605,9 +13921,9 @@ var CREATE_GUIDANCE = {
13605
13921
  "liveProvenPrefix": [],
13606
13922
  "unproven": false,
13607
13923
  "blocker": {
13608
- "kind": "delete-absent",
13609
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 domain_registrars); cleanup is UI-only.",
13610
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
13924
+ "kind": "ok",
13925
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
13926
+ "remedy": "None: create with the live-proven field set."
13611
13927
  },
13612
13928
  "vendorEvidence": [
13613
13929
  '{"error":true,"code":"CONFIG_ERROR","category":"validation","retryable":false,"operation":"domain_registrars.delete","message":"invoke: unknown operation \\"domain_registrars.delete\\" \u2014 it is not in th'
@@ -13630,9 +13946,10 @@ var CREATE_GUIDANCE = {
13630
13946
  "unproven": true,
13631
13947
  "blocker": {
13632
13948
  "kind": "picklist-unexposed",
13633
- "message": "Field 'Type': Missing Required Field: Type.",
13634
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI.",
13635
- "referenceField": "Type"
13949
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
13950
+ "referenceField": "Type",
13951
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
13952
+ "unsatisfiableViaApi": true
13636
13953
  },
13637
13954
  "vendorEvidence": [
13638
13955
  "Field 'Type': Missing Required Field: Type.",
@@ -13642,7 +13959,12 @@ var CREATE_GUIDANCE = {
13642
13959
  "available": true,
13643
13960
  "note": null
13644
13961
  },
13645
- "zone": "ww29"
13962
+ "zone": "ww29",
13963
+ "parentCompany": {
13964
+ "via": "expenseItemID",
13965
+ "resource": "expense_items",
13966
+ "field": "companyID"
13967
+ }
13646
13968
  },
13647
13969
  {
13648
13970
  "resource": "expense_items",
@@ -13654,11 +13976,12 @@ var CREATE_GUIDANCE = {
13654
13976
  "unproven": true,
13655
13977
  "blocker": {
13656
13978
  "kind": "blind-parent",
13657
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
13658
- "remedy": "provision a parent record in the Autotask UI first \u2014 the expense_reports LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15; W-A6), so no parent id can be read back through the list surface (get-by-id is the authority); then retry the create with the real parent id."
13979
+ "message": "The create failed on the parent reference: the expense_reports list surface is visibility-scoped for this API user (empty), so no parent id can be enumerated; get-by-id is the authority and resolves records the list does not show.",
13980
+ "remedy": "Provision a parent record in the Autotask UI first (or use a known parent id; get-by-id still resolves it), then retry the create with the real parent id."
13659
13981
  },
13660
13982
  "vendorEvidence": [
13661
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"expense_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"178f9509-d97a-4e69-9e4b-f7af67d98e64","message":"Picklist value [1] does not exist for '
13983
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"expense_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"178f9509-d97a-4e69-9e4b-f7af67d98e64","message":"Picklist value [1] does not exist for ',
13984
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the expense_reports LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15; W-A6), so no parent id can be read back through the list surface (get-by-id is the authority); then retry the create with the real parent id."
13662
13985
  ],
13663
13986
  "deleteBoundary": {
13664
13987
  "available": false,
@@ -13676,8 +13999,8 @@ var CREATE_GUIDANCE = {
13676
13999
  "unproven": true,
13677
14000
  "blocker": {
13678
14001
  "kind": "blind-parent",
13679
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
13680
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
14002
+ "message": "The create failed on the parent reference: the parent table's list surface is visibility-scoped for this API user (empty), so no parent id can be enumerated; get-by-id is the authority and resolves records the list does not show.",
14003
+ "remedy": "Provision a parent record in the Autotask UI first (or use a known parent id; get-by-id still resolves it), then retry the create with the real parent id."
13681
14004
  },
13682
14005
  "vendorEvidence": [
13683
14006
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"expense_reports.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9363affe-7779-4bac-bd81-49423574fbc8","message":"Value does not exist for the require'
@@ -13698,8 +14021,8 @@ var CREATE_GUIDANCE = {
13698
14021
  "unproven": false,
13699
14022
  "blocker": {
13700
14023
  "kind": "ok",
13701
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
13702
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
14024
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
14025
+ "remedy": "None: create with the live-proven field set."
13703
14026
  },
13704
14027
  "vendorEvidence": [
13705
14028
  "verified-gone=True"
@@ -13721,8 +14044,8 @@ var CREATE_GUIDANCE = {
13721
14044
  "unproven": false,
13722
14045
  "blocker": {
13723
14046
  "kind": "ok",
13724
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
13725
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
14047
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
14048
+ "remedy": "None: create with the live-proven field set."
13726
14049
  },
13727
14050
  "vendorEvidence": [
13728
14051
  "verified-gone=True"
@@ -13746,9 +14069,9 @@ var CREATE_GUIDANCE = {
13746
14069
  "unproven": true,
13747
14070
  "blocker": {
13748
14071
  "kind": "blind-reference",
13749
- "message": "vendor 500: the productID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
13750
- "remedy": "provision the referenced record in the Autotask UI first (the productID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
13751
- "referenceField": "productID"
14072
+ "message": "The productID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
14073
+ "referenceField": "productID",
14074
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
13752
14075
  },
13753
14076
  "vendorEvidence": [
13754
14077
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"inventory_products.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d27710fa-5cb6-455a-bc60-99c6efe2b810","message":"Field 'quantityMinimum': Missing `
@@ -13780,12 +14103,14 @@ var CREATE_GUIDANCE = {
13780
14103
  "unproven": true,
13781
14104
  "blocker": {
13782
14105
  "kind": "undocumented-ladder",
13783
- "message": "Field 'useQuoteTotals': Missing Required Field: useQuoteTotals. | Value does not exist for the required field useQuoteTotals. ",
13784
- "remedy": "the vendor required-field ladder is undocumented and UNPROVEN (12 fields consumed before the campaign stopped \u2014 W-A5); no known field set makes this create succeed on ww29 \u2014 treat it as unavailable for this tenant and file the gap with the vendor."
14106
+ "message": "The vendor's required-field ladder is undocumented and unproven: the create still fails after the proven fields (liveProvenPrefix), and no known field set makes it succeed.",
14107
+ "remedy": "Treat the create as unavailable through the API for this tenant.",
14108
+ "unsatisfiableViaApi": true
13785
14109
  },
13786
14110
  "vendorEvidence": [
13787
14111
  "Field 'useQuoteTotals': Missing Required Field: useQuoteTotals. | Value does not exist for the required field useQuoteTotals. ",
13788
- `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"opportunities.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"b18b6fa2-5fba-4cbe-8657-b2805798c736","message":"Field 'startDate': Missing Required Fi`
14112
+ `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"opportunities.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"b18b6fa2-5fba-4cbe-8657-b2805798c736","message":"Field 'startDate': Missing Required Fi`,
14113
+ "maintainer provenance (blocker.remedy): the vendor required-field ladder is undocumented and UNPROVEN (12 fields consumed before the campaign stopped \u2014 W-A5); no known field set makes this create succeed on ww29 \u2014 treat it as unavailable for this tenant and file the gap with the vendor."
13789
14114
  ],
13790
14115
  "deleteBoundary": {
13791
14116
  "available": false,
@@ -13805,18 +14130,25 @@ var CREATE_GUIDANCE = {
13805
14130
  "unproven": true,
13806
14131
  "blocker": {
13807
14132
  "kind": "picklist-unexposed",
13808
- "message": "vendor 500: the Type picklist values are not exposed to this API user (File/Document/Image/Other all rejected \u2014 W-A4)",
13809
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI.",
13810
- "referenceField": "Type"
14133
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
14134
+ "referenceField": "Type",
14135
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
14136
+ "unsatisfiableViaApi": true
13811
14137
  },
13812
14138
  "vendorEvidence": [
13813
- `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"opportunity_attachments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"83dcbf4f-7e56-4602-b52b-04db2f3455d2","message":"Field 'Type': Missing Requir`
14139
+ `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"opportunity_attachments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"83dcbf4f-7e56-4602-b52b-04db2f3455d2","message":"Field 'Type': Missing Requir`,
14140
+ "maintainer provenance (blocker.message): vendor 500: the Type picklist values are not exposed to this API user (File/Document/Image/Other all rejected \u2014 W-A4)"
13814
14141
  ],
13815
14142
  "deleteBoundary": {
13816
14143
  "available": true,
13817
14144
  "note": null
13818
14145
  },
13819
- "zone": "ww29"
14146
+ "zone": "ww29",
14147
+ "parentCompany": {
14148
+ "via": "opportunityID",
14149
+ "resource": "opportunities",
14150
+ "field": "companyID"
14151
+ }
13820
14152
  },
13821
14153
  {
13822
14154
  "resource": "organizational_level1s",
@@ -13826,11 +14158,12 @@ var CREATE_GUIDANCE = {
13826
14158
  "unproven": true,
13827
14159
  "blocker": {
13828
14160
  "kind": "unknown",
13829
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevel1Model) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths.",
13830
- "remedy": "attempt one create against a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
14161
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the model body and answers OperationResultModel.",
14162
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
13831
14163
  },
13832
14164
  "vendorEvidence": [
13833
- "api-docs.json: POST /V1.0/OrganizationalLevel1s consumes definitions.OrganizationalLevel1Model and answers OperationResultModel \u2014 the entity defines no DELETE path."
14165
+ "api-docs.json: POST /V1.0/OrganizationalLevel1s consumes definitions.OrganizationalLevel1Model and answers OperationResultModel \u2014 the entity defines no DELETE path.",
14166
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevel1Model) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths."
13834
14167
  ],
13835
14168
  "deleteBoundary": {
13836
14169
  "available": false,
@@ -13846,11 +14179,12 @@ var CREATE_GUIDANCE = {
13846
14179
  "unproven": true,
13847
14180
  "blocker": {
13848
14181
  "kind": "unknown",
13849
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevel2Model) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths.",
13850
- "remedy": "attempt one create against a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
14182
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the model body and answers OperationResultModel.",
14183
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
13851
14184
  },
13852
14185
  "vendorEvidence": [
13853
- "api-docs.json: POST /V1.0/OrganizationalLevel2s consumes definitions.OrganizationalLevel2Model and answers OperationResultModel \u2014 the entity defines no DELETE path."
14186
+ "api-docs.json: POST /V1.0/OrganizationalLevel2s consumes definitions.OrganizationalLevel2Model and answers OperationResultModel \u2014 the entity defines no DELETE path.",
14187
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevel2Model) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths."
13854
14188
  ],
13855
14189
  "deleteBoundary": {
13856
14190
  "available": false,
@@ -13866,11 +14200,12 @@ var CREATE_GUIDANCE = {
13866
14200
  "unproven": true,
13867
14201
  "blocker": {
13868
14202
  "kind": "unknown",
13869
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevelAssociationModel) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths.",
13870
- "remedy": "attempt one create against a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
14203
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the model body and answers OperationResultModel.",
14204
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
13871
14205
  },
13872
14206
  "vendorEvidence": [
13873
- "api-docs.json: POST /V1.0/OrganizationalLevelAssociations consumes definitions.OrganizationalLevelAssociationModel and answers OperationResultModel \u2014 the entity defines no DELETE path."
14207
+ "api-docs.json: POST /V1.0/OrganizationalLevelAssociations consumes definitions.OrganizationalLevelAssociationModel and answers OperationResultModel \u2014 the entity defines no DELETE path.",
14208
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.OrganizationalLevelAssociationModel) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths."
13874
14209
  ],
13875
14210
  "deleteBoundary": {
13876
14211
  "available": false,
@@ -13887,18 +14222,24 @@ var CREATE_GUIDANCE = {
13887
14222
  ],
13888
14223
  "unproven": false,
13889
14224
  "blocker": {
13890
- "kind": "delete-absent",
13891
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (known id 527128, marker name FULL100W-1791110339 phases); cleanup is UI-only.",
13892
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
14225
+ "kind": "ok",
14226
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
14227
+ "remedy": "None: create with the live-proven field set."
13893
14228
  },
13894
14229
  "vendorEvidence": [
13895
- "residue.json: phases id 527128 (known id, undeletable by vendor wall W-A1; phases.get is scoped \u2014 the id is retained in the ledger)"
14230
+ "residue.json: phases id 527128 (known id, undeletable by vendor wall W-A1; phases.get is scoped \u2014 the id is retained in the ledger)",
14231
+ "maintainer provenance (blocker.message): create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (known id 527128, marker name FULL100W-1791110339 phases); cleanup is UI-only."
13896
14232
  ],
13897
14233
  "deleteBoundary": {
13898
14234
  "available": false,
13899
14235
  "note": "the vendor defines no DELETE for phases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13900
14236
  },
13901
- "zone": "ww29"
14237
+ "zone": "ww29",
14238
+ "parentCompany": {
14239
+ "via": "projectID",
14240
+ "resource": "projects",
14241
+ "field": "companyID"
14242
+ }
13902
14243
  },
13903
14244
  {
13904
14245
  "resource": "product_vendors",
@@ -13911,11 +14252,12 @@ var CREATE_GUIDANCE = {
13911
14252
  "unproven": true,
13912
14253
  "blocker": {
13913
14254
  "kind": "blind-parent",
13914
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
13915
- "remedy": "provision a parent record in the Autotask UI first \u2014 the products table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14255
+ "message": "The create failed on the parent reference: the products table is blind for this API user, so no valid parent id can be read back.",
14256
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
13916
14257
  },
13917
14258
  "vendorEvidence": [
13918
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"product_vendors.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9aecd016-c8fa-4940-b54a-6e875d43aba7","message":"Value does not exist for the require'
14259
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"product_vendors.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9aecd016-c8fa-4940-b54a-6e875d43aba7","message":"Value does not exist for the require',
14260
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the products table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
13919
14261
  ],
13920
14262
  "deleteBoundary": {
13921
14263
  "available": false,
@@ -13934,8 +14276,8 @@ var CREATE_GUIDANCE = {
13934
14276
  "unproven": true,
13935
14277
  "blocker": {
13936
14278
  "kind": "unknown",
13937
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
13938
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
14279
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
14280
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
13939
14281
  },
13940
14282
  "vendorEvidence": [
13941
14283
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"products.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"3f1bd9a6-28bb-4fb4-b851-07b5f90a8a3d","message":"Value does not exist for the required field'
@@ -13958,8 +14300,8 @@ var CREATE_GUIDANCE = {
13958
14300
  "unproven": true,
13959
14301
  "blocker": {
13960
14302
  "kind": "blind-parent",
13961
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
13962
- "remedy": "provision a parent record in the Autotask UI first \u2014 the projects table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id.",
14303
+ "message": "The create failed on the parent reference: the projects table is blind for this API user, so no valid parent id can be read back.",
14304
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id.",
13963
14305
  "requires": {
13964
14306
  "anyOf": [
13965
14307
  "productID",
@@ -13968,13 +14310,19 @@ var CREATE_GUIDANCE = {
13968
14310
  }
13969
14311
  },
13970
14312
  "vendorEvidence": [
13971
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"project_charges.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"664ab2ea-408f-4834-a331-eb5dd55ac557","message":"A productID or a billingCodeID must '
14313
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"project_charges.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"664ab2ea-408f-4834-a331-eb5dd55ac557","message":"A productID or a billingCodeID must ',
14314
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the projects table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
13972
14315
  ],
13973
14316
  "deleteBoundary": {
13974
14317
  "available": true,
13975
14318
  "note": null
13976
14319
  },
13977
- "zone": "ww29"
14320
+ "zone": "ww29",
14321
+ "parentCompany": {
14322
+ "via": "projectID",
14323
+ "resource": "projects",
14324
+ "field": "companyID"
14325
+ }
13978
14326
  },
13979
14327
  {
13980
14328
  "resource": "project_notes",
@@ -13986,8 +14334,8 @@ var CREATE_GUIDANCE = {
13986
14334
  "unproven": true,
13987
14335
  "blocker": {
13988
14336
  "kind": "unknown",
13989
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
13990
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
14337
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
14338
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
13991
14339
  },
13992
14340
  "vendorEvidence": [
13993
14341
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"project_notes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d11a453b-729e-4908-8c6d-8549b72e8d0c","message":"Picklist value [1] does not exist for '
@@ -13996,7 +14344,12 @@ var CREATE_GUIDANCE = {
13996
14344
  "available": false,
13997
14345
  "note": "the vendor defines no DELETE for project_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
13998
14346
  },
13999
- "zone": "ww29"
14347
+ "zone": "ww29",
14348
+ "parentCompany": {
14349
+ "via": "projectID",
14350
+ "resource": "projects",
14351
+ "field": "companyID"
14352
+ }
14000
14353
  },
14001
14354
  {
14002
14355
  "resource": "projects",
@@ -14010,9 +14363,9 @@ var CREATE_GUIDANCE = {
14010
14363
  "unproven": true,
14011
14364
  "blocker": {
14012
14365
  "kind": "blind-reference",
14013
- "message": "Value does not reference an existing entity for projectType .",
14014
- "remedy": "provision the referenced record in the Autotask UI first (the projectType reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
14015
- "referenceField": "projectType"
14366
+ "message": "The projectType reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
14367
+ "referenceField": "projectType",
14368
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
14016
14369
  },
14017
14370
  "vendorEvidence": [
14018
14371
  "Value does not reference an existing entity for projectType .",
@@ -14033,9 +14386,9 @@ var CREATE_GUIDANCE = {
14033
14386
  ],
14034
14387
  "unproven": false,
14035
14388
  "blocker": {
14036
- "kind": "delete-absent",
14037
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 purchase_order_item_receiving); cleanup is UI-only.",
14038
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
14389
+ "kind": "ok",
14390
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
14391
+ "remedy": "None: create with the live-proven field set."
14039
14392
  },
14040
14393
  "vendorEvidence": [
14041
14394
  "not found on a visible surface (record may predate the marker value or was created with a different value)"
@@ -14057,11 +14410,12 @@ var CREATE_GUIDANCE = {
14057
14410
  "unproven": true,
14058
14411
  "blocker": {
14059
14412
  "kind": "unknown",
14060
- "message": "vendor 500: reference rejection on order (exact vendor text preserved verbatim in vendorEvidence \u2014 campaign receipt artifact, as recorded on disk)",
14061
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
14413
+ "message": "The vendor rejected a reference field on the create (HTTP 500); the cause is not classified.",
14414
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
14062
14415
  },
14063
14416
  "vendorEvidence": [
14064
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"purchase_order_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"1a4f90a8-2add-47f3-bc93-74e972f7fb5e","message":"Reference value on field: order'
14417
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"purchase_order_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"1a4f90a8-2add-47f3-bc93-74e972f7fb5e","message":"Reference value on field: order',
14418
+ "maintainer provenance (blocker.message): vendor 500: reference rejection on order (exact vendor text preserved verbatim in vendorEvidence \u2014 campaign receipt artifact, as recorded on disk)"
14065
14419
  ],
14066
14420
  "deleteBoundary": {
14067
14421
  "available": false,
@@ -14081,8 +14435,8 @@ var CREATE_GUIDANCE = {
14081
14435
  "unproven": true,
14082
14436
  "blocker": {
14083
14437
  "kind": "blind-parent",
14084
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14085
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
14438
+ "message": "The create failed on the parent reference: the parent table is blind for this API user, so no valid parent id can be read back.",
14439
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
14086
14440
  },
14087
14441
  "vendorEvidence": [
14088
14442
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"purchase_orders.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"8cefa9ef-8cfd-46b3-baef-fe64b3d2b999","message":"Value does not exist for the require'
@@ -14108,17 +14462,23 @@ var CREATE_GUIDANCE = {
14108
14462
  "unproven": true,
14109
14463
  "blocker": {
14110
14464
  "kind": "blind-parent",
14111
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14112
- "remedy": "provision a parent record in the Autotask UI first \u2014 the quotes table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14465
+ "message": "The create failed on the parent reference: the quotes table is blind for this API user, so no valid parent id can be read back.",
14466
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
14113
14467
  },
14114
14468
  "vendorEvidence": [
14115
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"quote_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"0645cad1-5749-42f1-9666-eeffac24118b","message":"Reference value on field: quoteID of quo'
14469
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"quote_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"0645cad1-5749-42f1-9666-eeffac24118b","message":"Reference value on field: quoteID of quo',
14470
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the quotes table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14116
14471
  ],
14117
14472
  "deleteBoundary": {
14118
14473
  "available": true,
14119
14474
  "note": null
14120
14475
  },
14121
- "zone": "ww29"
14476
+ "zone": "ww29",
14477
+ "parentCompany": {
14478
+ "via": "quoteID",
14479
+ "resource": "quotes",
14480
+ "field": "companyID"
14481
+ }
14122
14482
  },
14123
14483
  {
14124
14484
  "resource": "quote_locations",
@@ -14128,8 +14488,8 @@ var CREATE_GUIDANCE = {
14128
14488
  "unproven": false,
14129
14489
  "blocker": {
14130
14490
  "kind": "ok",
14131
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
14132
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
14491
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
14492
+ "remedy": "None: create with the live-proven field set."
14133
14493
  },
14134
14494
  "vendorEvidence": [
14135
14495
  'Executed "quote_locations.create".'
@@ -14151,8 +14511,8 @@ var CREATE_GUIDANCE = {
14151
14511
  "unproven": true,
14152
14512
  "blocker": {
14153
14513
  "kind": "blind-parent",
14154
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14155
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
14514
+ "message": "The create failed on the parent reference: the parent table is blind for this API user, so no valid parent id can be read back.",
14515
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
14156
14516
  },
14157
14517
  "vendorEvidence": [
14158
14518
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"quotes.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"7db33388-b040-4940-9def-9f4a4b46acb8","message":"Value does not exist for the required field b'
@@ -14172,9 +14532,9 @@ var CREATE_GUIDANCE = {
14172
14532
  ],
14173
14533
  "unproven": false,
14174
14534
  "blocker": {
14175
- "kind": "delete-absent",
14176
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 resource_role_queues); cleanup is UI-only.",
14177
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
14535
+ "kind": "ok",
14536
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
14537
+ "remedy": "None: create with the live-proven field set."
14178
14538
  },
14179
14539
  "vendorEvidence": [
14180
14540
  "BLIND SURFACE \u2014 own created records invisible to query (node sentinel, ww29-verified)"
@@ -14196,9 +14556,9 @@ var CREATE_GUIDANCE = {
14196
14556
  ],
14197
14557
  "unproven": false,
14198
14558
  "blocker": {
14199
- "kind": "delete-absent",
14200
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 roles); cleanup is UI-only.",
14201
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
14559
+ "kind": "ok",
14560
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
14561
+ "remedy": "None: create with the live-proven field set."
14202
14562
  },
14203
14563
  "vendorEvidence": [
14204
14564
  '{"error":true,"code":"CONFIG_ERROR","category":"validation","retryable":false,"operation":"roles.delete","message":"invoke: unknown operation \\"roles.delete\\" \u2014 it is not in the capability registry (l'
@@ -14217,11 +14577,12 @@ var CREATE_GUIDANCE = {
14217
14577
  "unproven": true,
14218
14578
  "blocker": {
14219
14579
  "kind": "blind-parent",
14220
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14221
- "remedy": "provision a parent record in the Autotask UI first \u2014 the service_call_tasks table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14580
+ "message": "The create failed on the parent reference: the service_call_tasks table is blind for this API user, so no valid parent id can be read back.",
14581
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
14222
14582
  },
14223
14583
  "vendorEvidence": [
14224
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_task_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"33baa2f9-f98c-49cd-ac9e-ef1ac532e277","message":"Value does not exist for'
14584
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_task_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"33baa2f9-f98c-49cd-ac9e-ef1ac532e277","message":"Value does not exist for',
14585
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the service_call_tasks table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14225
14586
  ],
14226
14587
  "deleteBoundary": {
14227
14588
  "available": true,
@@ -14237,8 +14598,8 @@ var CREATE_GUIDANCE = {
14237
14598
  "unproven": true,
14238
14599
  "blocker": {
14239
14600
  "kind": "blind-parent",
14240
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14241
- "remedy": "provision a parent record in the Autotask UI first \u2014 the service_calls table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14601
+ "message": "The create failed on the parent reference: the service_calls table is blind for this API user, so no valid parent id can be read back.",
14602
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
14242
14603
  },
14243
14604
  "vendorEvidence": [
14244
14605
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_tasks.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"49bf54fb-1e7f-40a9-82e0-25c58a4a67fd","message":"Value does not exist for the requ'
@@ -14247,7 +14608,12 @@ var CREATE_GUIDANCE = {
14247
14608
  "available": true,
14248
14609
  "note": null
14249
14610
  },
14250
- "zone": "ww29"
14611
+ "zone": "ww29",
14612
+ "parentCompany": {
14613
+ "via": "serviceCallID",
14614
+ "resource": "service_calls",
14615
+ "field": "companyID"
14616
+ }
14251
14617
  },
14252
14618
  {
14253
14619
  "resource": "service_call_ticket_resources",
@@ -14257,11 +14623,12 @@ var CREATE_GUIDANCE = {
14257
14623
  "unproven": true,
14258
14624
  "blocker": {
14259
14625
  "kind": "blind-parent",
14260
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14261
- "remedy": "provision a parent record in the Autotask UI first \u2014 the service_call_tickets table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14626
+ "message": "The create failed on the parent reference: the service_call_tickets table is blind for this API user, so no valid parent id can be read back.",
14627
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
14262
14628
  },
14263
14629
  "vendorEvidence": [
14264
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_ticket_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9e96c2d1-9fcb-4d73-95dd-f88c1ce7de6c","message":"Value does not exist f'
14630
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_ticket_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"9e96c2d1-9fcb-4d73-95dd-f88c1ce7de6c","message":"Value does not exist f',
14631
+ "maintainer provenance (blocker.remedy): provision a parent record in the Autotask UI first \u2014 the service_call_tickets table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14265
14632
  ],
14266
14633
  "deleteBoundary": {
14267
14634
  "available": true,
@@ -14277,8 +14644,8 @@ var CREATE_GUIDANCE = {
14277
14644
  "unproven": true,
14278
14645
  "blocker": {
14279
14646
  "kind": "blind-parent",
14280
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14281
- "remedy": "provision a parent record in the Autotask UI first \u2014 the service_calls table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14647
+ "message": "The create failed on the parent reference: the service_calls table is blind for this API user, so no valid parent id can be read back.",
14648
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
14282
14649
  },
14283
14650
  "vendorEvidence": [
14284
14651
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_call_tickets.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"62ab38e3-b14b-4462-829a-9abc91ce3eb3","message":"Value does not exist for the re'
@@ -14287,7 +14654,12 @@ var CREATE_GUIDANCE = {
14287
14654
  "available": true,
14288
14655
  "note": null
14289
14656
  },
14290
- "zone": "ww29"
14657
+ "zone": "ww29",
14658
+ "parentCompany": {
14659
+ "via": "serviceCallID",
14660
+ "resource": "service_calls",
14661
+ "field": "companyID"
14662
+ }
14291
14663
  },
14292
14664
  {
14293
14665
  "resource": "service_calls",
@@ -14300,8 +14672,8 @@ var CREATE_GUIDANCE = {
14300
14672
  "unproven": true,
14301
14673
  "blocker": {
14302
14674
  "kind": "blind-parent",
14303
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14304
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
14675
+ "message": "The create failed on the parent reference: the parent table is blind for this API user, so no valid parent id can be read back.",
14676
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
14305
14677
  },
14306
14678
  "vendorEvidence": [
14307
14679
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"service_calls.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"27ef068e-2ff8-4bf9-9043-a17008996639","message":"Value does not exist for the required '
@@ -14322,8 +14694,8 @@ var CREATE_GUIDANCE = {
14322
14694
  "unproven": true,
14323
14695
  "blocker": {
14324
14696
  "kind": "blind-parent",
14325
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14326
- "remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
14697
+ "message": "The create failed on the parent reference: the parent table's list surface is visibility-scoped for this API user (empty), so no parent id can be enumerated; get-by-id is the authority and resolves records the list does not show.",
14698
+ "remedy": "Provision a parent record in the Autotask UI first (or use a known parent id; get-by-id still resolves it), then retry the create with the real parent id."
14327
14699
  },
14328
14700
  "vendorEvidence": [
14329
14701
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"services.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"eb4c0dfd-6d14-4af2-8770-7bd7fc06d0eb","message":"Picklist value [1] does not exist for perio'
@@ -14347,9 +14719,9 @@ var CREATE_GUIDANCE = {
14347
14719
  "unproven": true,
14348
14720
  "blocker": {
14349
14721
  "kind": "blind-reference",
14350
- "message": "vendor 500: the configurationItemID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
14351
- "remedy": "provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
14352
- "referenceField": "configurationItemID"
14722
+ "message": "The configurationItemID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
14723
+ "referenceField": "configurationItemID",
14724
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
14353
14725
  },
14354
14726
  "vendorEvidence": [
14355
14727
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"subscriptions.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"36080c8a-2fd5-4fc3-9c0f-a53d95fa97b2","message":"Value does not reference an existing e'
@@ -14368,8 +14740,8 @@ var CREATE_GUIDANCE = {
14368
14740
  "unproven": false,
14369
14741
  "blocker": {
14370
14742
  "kind": "ok",
14371
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
14372
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
14743
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
14744
+ "remedy": "None: create with the live-proven field set."
14373
14745
  },
14374
14746
  "vendorEvidence": [],
14375
14747
  "deleteBoundary": {
@@ -14388,8 +14760,8 @@ var CREATE_GUIDANCE = {
14388
14760
  "unproven": false,
14389
14761
  "blocker": {
14390
14762
  "kind": "ok",
14391
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
14392
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
14763
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
14764
+ "remedy": "None: create with the live-proven field set."
14393
14765
  },
14394
14766
  "vendorEvidence": [
14395
14767
  "verified-gone=True"
@@ -14410,8 +14782,8 @@ var CREATE_GUIDANCE = {
14410
14782
  "unproven": false,
14411
14783
  "blocker": {
14412
14784
  "kind": "ok",
14413
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
14414
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
14785
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
14786
+ "remedy": "None: create with the live-proven field set."
14415
14787
  },
14416
14788
  "vendorEvidence": [
14417
14789
  "verified-gone=True"
@@ -14430,11 +14802,12 @@ var CREATE_GUIDANCE = {
14430
14802
  "unproven": true,
14431
14803
  "blocker": {
14432
14804
  "kind": "unknown",
14433
- "message": "vendor 500: reference rejection on r (exact vendor text preserved verbatim in vendorEvidence \u2014 campaign receipt artifact, as recorded on disk)",
14434
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
14805
+ "message": "The vendor rejected a reference field on the create (HTTP 500); the cause is not classified.",
14806
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
14435
14807
  },
14436
14808
  "vendorEvidence": [
14437
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"task_secondary_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d2783d1d-b23a-4c7d-9459-0089be7f9b0b","message":"Reference value on field: r'
14809
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"task_secondary_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"d2783d1d-b23a-4c7d-9459-0089be7f9b0b","message":"Reference value on field: r',
14810
+ "maintainer provenance (blocker.message): vendor 500: reference rejection on r (exact vendor text preserved verbatim in vendorEvidence \u2014 campaign receipt artifact, as recorded on disk)"
14438
14811
  ],
14439
14812
  "deleteBoundary": {
14440
14813
  "available": true,
@@ -14455,9 +14828,9 @@ var CREATE_GUIDANCE = {
14455
14828
  "unproven": true,
14456
14829
  "blocker": {
14457
14830
  "kind": "blind-reference",
14458
- "message": "Value does not reference an existing entity for taskType .",
14459
- "remedy": "provision the referenced record in the Autotask UI first (the taskType reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
14460
- "referenceField": "taskType"
14831
+ "message": "The taskType reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
14832
+ "referenceField": "taskType",
14833
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
14461
14834
  },
14462
14835
  "vendorEvidence": [
14463
14836
  "Value does not reference an existing entity for taskType .",
@@ -14467,7 +14840,12 @@ var CREATE_GUIDANCE = {
14467
14840
  "available": false,
14468
14841
  "note": "the vendor defines no DELETE for tasks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
14469
14842
  },
14470
- "zone": "ww29"
14843
+ "zone": "ww29",
14844
+ "parentCompany": {
14845
+ "via": "projectID",
14846
+ "resource": "projects",
14847
+ "field": "companyID"
14848
+ }
14471
14849
  },
14472
14850
  {
14473
14851
  "resource": "tax_regions",
@@ -14477,11 +14855,12 @@ var CREATE_GUIDANCE = {
14477
14855
  "unproven": true,
14478
14856
  "blocker": {
14479
14857
  "kind": "unknown",
14480
- "message": "never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.TaxRegionModel) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths.",
14481
- "remedy": "attempt one create against a non-production tenant (dry-run first), then promote createGuidance to kind ok with its liveProvenPrefix; a refusal arrives as a vendor 500 whose errors[] text names the failing field."
14858
+ "message": "No create has been attempted against a tenant, so acceptance of the model body is unverified. The vendor documents the model body and answers OperationResultModel.",
14859
+ "remedy": "Attempt one create in a non-production tenant (dry run first); a refusal arrives as a vendor 500 whose errors[] text names the failing field."
14482
14860
  },
14483
14861
  "vendorEvidence": [
14484
- "api-docs.json: POST /V1.0/TaxRegions consumes definitions.TaxRegionModel and answers OperationResultModel \u2014 the entity defines no DELETE path."
14862
+ "api-docs.json: POST /V1.0/TaxRegions consumes definitions.TaxRegionModel and answers OperationResultModel \u2014 the entity defines no DELETE path.",
14863
+ "maintainer provenance (blocker.message): never live-probed: this entity reached the plan on 2026-10-26 (feat/guidance-contract-027) after the stage-11 apply matrix closed, so no create has been attempted against a tenant. The vendor documents the model body (definitions.TaxRegionModel) and answers OperationResultModel, but acceptance of the body is unverified; the spec defines no DELETE on the entity's paths."
14485
14864
  ],
14486
14865
  "deleteBoundary": {
14487
14866
  "available": false,
@@ -14499,9 +14878,9 @@ var CREATE_GUIDANCE = {
14499
14878
  "unproven": true,
14500
14879
  "blocker": {
14501
14880
  "kind": "blind-reference",
14502
- "message": "vendor 500: the configurationItemID reference is unsatisfiable for this API user (the referenced table is blind/empty)",
14503
- "remedy": "provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user \u2014 no valid id can be read back), then retry with the real id.",
14504
- "referenceField": "configurationItemID"
14881
+ "message": "The configurationItemID reference cannot be satisfied: the referenced table is blind for this API user, so no valid id can be read back.",
14882
+ "referenceField": "configurationItemID",
14883
+ "remedy": "Provision the referenced record in the Autotask UI first, then retry with its real id."
14505
14884
  },
14506
14885
  "vendorEvidence": [
14507
14886
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_additional_configuration_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"20c78cfe-eb8c-437b-9f41-8a3cd852b05b","message":"Reference valu'
@@ -14510,7 +14889,12 @@ var CREATE_GUIDANCE = {
14510
14889
  "available": true,
14511
14890
  "note": null
14512
14891
  },
14513
- "zone": "ww29"
14892
+ "zone": "ww29",
14893
+ "parentCompany": {
14894
+ "via": "ticketID",
14895
+ "resource": "tickets",
14896
+ "field": "companyID"
14897
+ }
14514
14898
  },
14515
14899
  {
14516
14900
  "resource": "ticket_additional_contacts",
@@ -14522,18 +14906,24 @@ var CREATE_GUIDANCE = {
14522
14906
  "unproven": false,
14523
14907
  "blocker": {
14524
14908
  "kind": "ok",
14525
- "message": "live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 4001 (deleted post-proof \u2014 zero residue). The 10-04 W-A2 'blind reference' was a company-scoping issue, NOT a blind table: 'The contactID is invalid. The contactID must be associated with either the Ticket's Company or its Parent Company.' A contact created under the ticket's own company (30132787 for ticket 527119) passes.",
14526
- "remedy": "live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) \u2014 use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)"
14909
+ "message": "contactID must be associated with the ticket's company or its parent company; a contact created under the ticket's own company is accepted.",
14910
+ "remedy": "Create the contact under the ticket's own company first, then add it to the ticket."
14527
14911
  },
14528
14912
  "vendorEvidence": [
14529
14913
  "Reference value on field: contactID of type: Contact does not exist or is invalid.",
14530
- '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_additional_contacts.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"f507450d-002a-4f1a-afc8-d0168a45f93d","message":"Reference value on field:'
14914
+ '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_additional_contacts.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"f507450d-002a-4f1a-afc8-d0168a45f93d","message":"Reference value on field:',
14915
+ "maintainer provenance (blocker.message): live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 4001 (deleted post-proof \u2014 zero residue). The 10-04 W-A2 'blind reference' was a company-scoping issue, NOT a blind table: 'The contactID is invalid. The contactID must be associated with either the Ticket's Company or its Parent Company.' A contact created under the ticket's own company (30132787 for ticket 527119) passes."
14531
14916
  ],
14532
14917
  "deleteBoundary": {
14533
14918
  "available": true,
14534
14919
  "note": null
14535
14920
  },
14536
- "zone": "ww29"
14921
+ "zone": "ww29",
14922
+ "parentCompany": {
14923
+ "via": "ticketID",
14924
+ "resource": "tickets",
14925
+ "field": "companyID"
14926
+ }
14537
14927
  },
14538
14928
  {
14539
14929
  "resource": "ticket_attachments",
@@ -14547,8 +14937,9 @@ var CREATE_GUIDANCE = {
14547
14937
  "unproven": true,
14548
14938
  "blocker": {
14549
14939
  "kind": "picklist-unexposed",
14550
- "message": "re-verified 2026-10-06 (confirm-100 CONF100-1791187382; drift): the vendor validates Publish FIRST ('Picklist value [0] does not exist for Publish'); with a picklist-valid Publish the string Type values File/Document/Image/Other are SILENTLY rejected \u2014 'Field Type: Missing Required Field: Type' (10-04 text: 'Picklist value [File] does not exist for Type'). The Type picklist values remain unexposed to this API user (W-A4) \u2014 VENDOR-FIX required.",
14551
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI."
14940
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
14941
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
14942
+ "unsatisfiableViaApi": true
14552
14943
  },
14553
14944
  "vendorEvidence": [
14554
14945
  "Picklist value [File] does not exist for Type.",
@@ -14559,7 +14950,12 @@ var CREATE_GUIDANCE = {
14559
14950
  "available": true,
14560
14951
  "note": null
14561
14952
  },
14562
- "zone": "ww29"
14953
+ "zone": "ww29",
14954
+ "parentCompany": {
14955
+ "via": "ticketID",
14956
+ "resource": "tickets",
14957
+ "field": "companyID"
14958
+ }
14563
14959
  },
14564
14960
  {
14565
14961
  "resource": "ticket_change_request_approvals",
@@ -14569,8 +14965,8 @@ var CREATE_GUIDANCE = {
14569
14965
  "unproven": true,
14570
14966
  "blocker": {
14571
14967
  "kind": "blind-parent",
14572
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14573
- "remedy": "provision a parent record in the Autotask UI first \u2014 the tickets table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id."
14968
+ "message": "The create failed on the parent reference: the tickets table is blind for this API user, so no valid parent id can be read back.",
14969
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id."
14574
14970
  },
14575
14971
  "vendorEvidence": [
14576
14972
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_change_request_approvals.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"dcc063e9-eaf1-4e66-9bc9-cb5c4a4f3f71","message":"The Ticket id you ha'
@@ -14579,7 +14975,12 @@ var CREATE_GUIDANCE = {
14579
14975
  "available": true,
14580
14976
  "note": null
14581
14977
  },
14582
- "zone": "ww29"
14978
+ "zone": "ww29",
14979
+ "parentCompany": {
14980
+ "via": "ticketID",
14981
+ "resource": "tickets",
14982
+ "field": "companyID"
14983
+ }
14583
14984
  },
14584
14985
  {
14585
14986
  "resource": "ticket_charges",
@@ -14593,8 +14994,8 @@ var CREATE_GUIDANCE = {
14593
14994
  "unproven": true,
14594
14995
  "blocker": {
14595
14996
  "kind": "blind-parent",
14596
- "message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table is blind (0 rows) for this API user, so no valid parent id exists to satisfy it (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
14597
- "remedy": "provision a parent record in the Autotask UI first \u2014 the tickets table is blind (0 rows) for this API user (W-A6), so no valid parent id can be read back; then retry the create with the real parent id.",
14997
+ "message": "The create failed on the parent reference: the tickets table is blind for this API user, so no valid parent id can be read back.",
14998
+ "remedy": "Provision a parent record in the Autotask UI first, then retry the create with the real parent id.",
14598
14999
  "requires": {
14599
15000
  "anyOf": [
14600
15001
  "productID",
@@ -14609,7 +15010,12 @@ var CREATE_GUIDANCE = {
14609
15010
  "available": true,
14610
15011
  "note": null
14611
15012
  },
14612
- "zone": "ww29"
15013
+ "zone": "ww29",
15014
+ "parentCompany": {
15015
+ "via": "ticketID",
15016
+ "resource": "tickets",
15017
+ "field": "companyID"
15018
+ }
14613
15019
  },
14614
15020
  {
14615
15021
  "resource": "ticket_checklist_items",
@@ -14621,8 +15027,8 @@ var CREATE_GUIDANCE = {
14621
15027
  "unproven": false,
14622
15028
  "blocker": {
14623
15029
  "kind": "ok",
14624
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the record was cleaned (NOT_FOUND-verified)",
14625
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
15030
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
15031
+ "remedy": "None: create with the live-proven field set."
14626
15032
  },
14627
15033
  "vendorEvidence": [
14628
15034
  "verified-gone=True"
@@ -14631,7 +15037,12 @@ var CREATE_GUIDANCE = {
14631
15037
  "available": true,
14632
15038
  "note": null
14633
15039
  },
14634
- "zone": "ww29"
15040
+ "zone": "ww29",
15041
+ "parentCompany": {
15042
+ "via": "ticketID",
15043
+ "resource": "tickets",
15044
+ "field": "companyID"
15045
+ }
14635
15046
  },
14636
15047
  {
14637
15048
  "resource": "ticket_checklist_libraries",
@@ -14643,19 +15054,26 @@ var CREATE_GUIDANCE = {
14643
15054
  "unproven": true,
14644
15055
  "blocker": {
14645
15056
  "kind": "unknown",
14646
- "message": "W-A7 drift + parent wall, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor now answers HTML 404 ('Resource not found' \u2014 typed NOT_FOUND by the node) for checklistLibraryID=1: the checklist-library PARENT is blind/absent for this API user before the 10-04 200-shape drift can surface. The responseDrift pin remains for the post-parent shape.",
14647
- "remedy": "the checklist-library PARENT is blind for this user (HTML 404 before the 200 drift) \u2014 provision the library in the Autotask UI or use a user where the table is visible; the post-parent 200-shape drift (W-A7) still needs the vendor-side fix"
15057
+ "message": "The checklist-library parent is blind or absent for this API user: the vendor answers HTML 404 (typed NOT_FOUND) before a 200 response-shape drift can surface.",
15058
+ "remedy": "Provision the library in the Autotask UI or use a user who can read the table; the post-parent response-shape drift still needs a vendor-side fix."
14648
15059
  },
14649
15060
  "vendorEvidence": [
14650
15061
  "Expected OperationResultModel { itemId } (or { id }); got a different shape (ladder_decode.log, INVALID_RESPONSE)",
14651
15062
  "api-docs.json declares OperationResultModel for POST /V1.0/Tickets/{id}/TicketChecklistLibraries \u2014 the vendor deviates (W-A7 adjudication: vendor spec drift, not a node defect)",
14652
- '{"live": "2026-10-06 confirm-100", "message": "Resource not found: <!DOCTYPE html PUBLIC .../xhtml/1.0/Strict ...>"}'
15063
+ '{"live": "2026-10-06 confirm-100", "message": "Resource not found: <!DOCTYPE html PUBLIC .../xhtml/1.0/Strict ...>"}',
15064
+ "maintainer provenance (blocker.message): W-A7 drift + parent wall, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor now answers HTML 404 ('Resource not found' \u2014 typed NOT_FOUND by the node) for checklistLibraryID=1: the checklist-library PARENT is blind/absent for this API user before the 10-04 200-shape drift can surface. The responseDrift pin remains for the post-parent shape.",
15065
+ "maintainer provenance (blocker.remedy): the checklist-library PARENT is blind for this user (HTML 404 before the 200 drift) \u2014 provision the library in the Autotask UI or use a user where the table is visible; the post-parent 200-shape drift (W-A7) still needs the vendor-side fix"
14653
15066
  ],
14654
15067
  "deleteBoundary": {
14655
15068
  "available": false,
14656
15069
  "note": "the vendor defines no DELETE for ticket_checklist_libraries (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
14657
15070
  },
14658
- "zone": "ww29"
15071
+ "zone": "ww29",
15072
+ "parentCompany": {
15073
+ "via": "ticketID",
15074
+ "resource": "tickets",
15075
+ "field": "companyID"
15076
+ }
14659
15077
  },
14660
15078
  {
14661
15079
  "resource": "ticket_note_attachments",
@@ -14669,8 +15087,9 @@ var CREATE_GUIDANCE = {
14669
15087
  "unproven": true,
14670
15088
  "blocker": {
14671
15089
  "kind": "picklist-unexposed",
14672
- "message": "re-verified 2026-10-06 (confirm-100 CONF100-1791187382; drift): the vendor validates Publish FIRST ('Picklist value [0] does not exist for Publish'); with a picklist-valid Publish the string Type values File/Document/Image/Other are SILENTLY rejected \u2014 'Field Type: Missing Required Field: Type' (10-04 text: 'Picklist value [File] does not exist for Type'). The Type picklist values remain unexposed to this API user (W-A4) \u2014 VENDOR-FIX required.",
14673
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI."
15090
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
15091
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
15092
+ "unsatisfiableViaApi": true
14674
15093
  },
14675
15094
  "vendorEvidence": [
14676
15095
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_note_attachments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"52976761-8459-49af-8509-49e562e59dbb","message":"Field 'Type': Missing Requir`
@@ -14695,8 +15114,8 @@ var CREATE_GUIDANCE = {
14695
15114
  "unproven": false,
14696
15115
  "blocker": {
14697
15116
  "kind": "ok",
14698
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
14699
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
15117
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
15118
+ "remedy": "None: create with the live-proven field set."
14700
15119
  },
14701
15120
  "vendorEvidence": [
14702
15121
  'Executed "ticket_note_webhooks.create".'
@@ -14719,8 +15138,8 @@ var CREATE_GUIDANCE = {
14719
15138
  "unproven": false,
14720
15139
  "blocker": {
14721
15140
  "kind": "ok",
14722
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
14723
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
15141
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
15142
+ "remedy": "None: create with the live-proven field set."
14724
15143
  },
14725
15144
  "vendorEvidence": [
14726
15145
  'Executed "ticket_notes.create".'
@@ -14729,7 +15148,12 @@ var CREATE_GUIDANCE = {
14729
15148
  "available": false,
14730
15149
  "note": "the vendor defines no DELETE for ticket_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) \u2014 a create cannot be undone through the API; cleanup is UI-only."
14731
15150
  },
14732
- "zone": "ww29"
15151
+ "zone": "ww29",
15152
+ "parentCompany": {
15153
+ "via": "ticketID",
15154
+ "resource": "tickets",
15155
+ "field": "companyID"
15156
+ }
14733
15157
  },
14734
15158
  {
14735
15159
  "resource": "ticket_secondary_resources",
@@ -14739,8 +15163,8 @@ var CREATE_GUIDANCE = {
14739
15163
  "unproven": true,
14740
15164
  "blocker": {
14741
15165
  "kind": "unknown",
14742
- "message": "create refused (stage-11 apply-matrix, marker FULL100W-1791110339): the final vendor response is preserved verbatim in vendorEvidence (the campaign artifact; its 300-char detail truncation is as recorded on disk)",
14743
- "remedy": "the wall is opaque in the campaign record \u2014 inspect vendorEvidence for the exact vendor text, re-run the create with a live probe (dry-run first), and adjudicate against the vendored spec before retrying."
15166
+ "message": "The create was refused and the cause is not classified; the exact vendor text is preserved as evidence.",
15167
+ "remedy": "Dry-run the create first and check the field set against the vendored spec before retrying."
14744
15168
  },
14745
15169
  "vendorEvidence": [
14746
15170
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"ticket_secondary_resources.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"0965b007-8bd2-4d51-9967-257ab506a87a","message":"Value does not exist for '
@@ -14749,7 +15173,12 @@ var CREATE_GUIDANCE = {
14749
15173
  "available": true,
14750
15174
  "note": null
14751
15175
  },
14752
- "zone": "ww29"
15176
+ "zone": "ww29",
15177
+ "parentCompany": {
15178
+ "via": "ticketID",
15179
+ "resource": "tickets",
15180
+ "field": "companyID"
15181
+ }
14753
15182
  },
14754
15183
  {
14755
15184
  "resource": "ticket_webhooks",
@@ -14765,8 +15194,8 @@ var CREATE_GUIDANCE = {
14765
15194
  "unproven": false,
14766
15195
  "blocker": {
14767
15196
  "kind": "ok",
14768
- "message": "create succeeded live in the stage-11 apply-matrix (marker FULL100W-1791110339, ww29): the vendor accepted the create with the proven field set below; the create response exposed no id (blind surface \u2014 the record is marker-tagged residue, unknown id)",
14769
- "remedy": "none \u2014 create with the proven field set below; it is the live-verified contract for this tenant."
15197
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix). The create response exposes no record id, so the new record cannot be read back by id.",
15198
+ "remedy": "None: create with the live-proven field set."
14770
15199
  },
14771
15200
  "vendorEvidence": [
14772
15201
  'Executed "ticket_webhooks.create".'
@@ -14790,9 +15219,9 @@ var CREATE_GUIDANCE = {
14790
15219
  ],
14791
15220
  "unproven": false,
14792
15221
  "blocker": {
14793
- "kind": "delete-absent",
14794
- "message": "create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) \u2014 the record is residue (marker name FULL100W-1791110339 tickets); cleanup is UI-only.",
14795
- "remedy": "provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) \u2014 there is no API delete path."
15222
+ "kind": "ok",
15223
+ "message": "The vendor accepted a create with the live-proven field set (liveProvenPrefix).",
15224
+ "remedy": "None: create with the live-proven field set."
14796
15225
  },
14797
15226
  "vendorEvidence": [
14798
15227
  '{"error":true,"code":"CONFIG_ERROR","category":"validation","retryable":false,"operation":"tickets.delete","message":"invoke: unknown operation \\"tickets.delete\\" \u2014 it is not in the capability registr'
@@ -14811,13 +15240,15 @@ var CREATE_GUIDANCE = {
14811
15240
  "unproven": true,
14812
15241
  "blocker": {
14813
15242
  "kind": "resource-role-pair",
14814
- "message": "pair-scoped wall (confirm-100 CONF100-1791187382, 2026-10-06; scope re-stamped 2026-10-21): 3 live attempts with the API-only user's own resource 31131505 + roles 29685291/29682834/29683323 were refused with 'API-only user cannot be selected for this field' (10-04: 'The specified AssignedResourceID and AssignedRoleID combination is not currently defined'). This applies to creates selecting that resource+role pair; it is NOT a refusal of all time-entry writes \u2014 live creates succeeded on 2026-10-21 (pair not recorded). The authorised pair set has not been re-adjudicated by a live probe. createForResource (stage-11 proven, 10-04) was walled under the same pair on 10-06 and is unconfirmed for other pairs. Valid in-tenant pairs observed via postedWithin: (31131373, 29682834), (29869529, 29682834).",
14815
- "remedy": "vendor pair-eligibility, not missing tenant data: the API-only user's own resource is not selectable. Use a (resource, role) pair the tenant authorises for this user (creates succeeded 2026-10-21, pair not recorded), or record time in the Autotask UI; the working reads remain postedWithin / the window helpers (W-D3 pointer note)"
15243
+ "message": "The create is refused when it selects the API-only user's own resource ('API-only user cannot be selected for this field') or a (resourceID, roleID) pair the tenant has not defined ('The specified AssignedResourceID and AssignedRoleID combination is not currently defined'). This is a pair-scoped refusal, not a refusal of all time-entry creates: creates with a defined pair succeed.",
15244
+ "remedy": "Use a (resource, role) pair the tenant defines for the user, or record the time in the Autotask UI. Valid in-tenant pairs can be read through postedWithin."
14816
15245
  },
14817
15246
  "vendorEvidence": [
14818
15247
  "The specified AssignedResourceID and AssignedRoleID combination is not currently defined.",
14819
15248
  '{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"time_entries.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"c5ff4e59-bc8f-4f88-ad05-6445d8fddfa6","message":"API-only user cannot be selected for th',
14820
- '{"live": "2026-10-06 confirm-100", "message": "API-only user cannot be selected for this field."}'
15249
+ '{"live": "2026-10-06 confirm-100", "message": "API-only user cannot be selected for this field."}',
15250
+ "maintainer provenance (blocker.message): pair-scoped wall (confirm-100 CONF100-1791187382, 2026-10-06; scope re-stamped 2026-10-21): 3 live attempts with the API-only user's own resource 31131505 + roles 29685291/29682834/29683323 were refused with 'API-only user cannot be selected for this field' (10-04: 'The specified AssignedResourceID and AssignedRoleID combination is not currently defined'). This applies to creates selecting that resource+role pair; it is NOT a refusal of all time-entry writes \u2014 live creates succeeded on 2026-10-21 (pair not recorded). The authorised pair set has not been re-adjudicated by a live probe. createForResource (stage-11 proven, 10-04) was walled under the same pair on 10-06 and is unconfirmed for other pairs. Valid in-tenant pairs observed via postedWithin: (31131373, 29682834), (29869529, 29682834).",
15251
+ "maintainer provenance (blocker.remedy): vendor pair-eligibility, not missing tenant data: the API-only user's own resource is not selectable. Use a (resource, role) pair the tenant authorises for this user (creates succeeded 2026-10-21, pair not recorded), or record time in the Autotask UI; the working reads remain postedWithin / the window helpers (W-D3 pointer note)"
14821
15252
  ],
14822
15253
  "deleteBoundary": {
14823
15254
  "available": true,
@@ -14860,8 +15291,9 @@ var CREATE_GUIDANCE = {
14860
15291
  "unproven": true,
14861
15292
  "blocker": {
14862
15293
  "kind": "picklist-unexposed",
14863
- "message": "re-verified 2026-10-06 (confirm-100 CONF100-1791187382; drift): the vendor validates Publish FIRST ('Picklist value [0] does not exist for Publish'); with a picklist-valid Publish the string Type values File/Document/Image/Other are SILENTLY rejected \u2014 'Field Type: Missing Required Field: Type' (10-04 text: 'Picklist value [File] does not exist for Type'). The Type picklist values remain unexposed to this API user (W-A4) \u2014 VENDOR-FIX required.",
14864
- "remedy": "no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) \u2014 the attachment create is unsatisfiable via the API; attach the file through the UI."
15294
+ "message": "The Type picklist values are not exposed to this API user: File, Document, Image and Other are all rejected ('Missing Required Field: Type'), so no valid value can be supplied.",
15295
+ "remedy": "Unsatisfiable through the API: attach the file in the Autotask UI.",
15296
+ "unsatisfiableViaApi": true
14865
15297
  },
14866
15298
  "vendorEvidence": [
14867
15299
  `{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"time_entry_attachments.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"04f16a9b-daa6-4dc1-96a2-32508985ac71","message":"Field 'Type': Missing Require`,
@@ -14877,13 +15309,13 @@ var CREATE_GUIDANCE = {
14877
15309
  "counts": {
14878
15310
  "total": 97,
14879
15311
  "byKind": {
14880
- "ok": 31,
15312
+ "ok": 39,
14881
15313
  "blind-reference": 16,
14882
15314
  "blind-parent": 17,
14883
15315
  "picklist-unexposed": 5,
14884
15316
  "undocumented-ladder": 1,
14885
15317
  "resource-role-pair": 2,
14886
- "delete-absent": 8,
15318
+ "delete-absent": 0,
14887
15319
  "non-mutable": 0,
14888
15320
  "unknown": 17
14889
15321
  }
@@ -16791,6 +17223,28 @@ var HttpClient = class {
16791
17223
  }
16792
17224
  };
16793
17225
 
17226
+ // src/operations/requiredFields.ts
17227
+ function effectiveRequiredFields(record, zoneFacts) {
17228
+ const guidance = zoneFacts?.createGuidance;
17229
+ const prefix = guidance?.liveProvenPrefix;
17230
+ if (Array.isArray(prefix) && prefix.length > 0) {
17231
+ const gates = guidance?.requiresByValue;
17232
+ const gated = new Set((gates ?? []).flatMap((g) => [...g.requires.allOf ?? [], ...g.requires.anyOf ?? []]));
17233
+ return {
17234
+ fields: prefix.filter((f) => !gated.has(f)),
17235
+ from: "live-proven",
17236
+ unproven: guidance?.unproven === true,
17237
+ ...Array.isArray(gates) && gates.length > 0 ? { conditional: gates } : {}
17238
+ };
17239
+ }
17240
+ const zoneSet = zoneFacts?.createRequiredSet;
17241
+ if (Array.isArray(zoneSet) && zoneSet.length > 0) {
17242
+ return { fields: [...zoneSet], from: "zone", unproven: guidance?.unproven === true };
17243
+ }
17244
+ const spec = record?.requiredFields;
17245
+ return { fields: Array.isArray(spec) ? [...spec] : [], from: "spec", unproven: true };
17246
+ }
17247
+
16794
17248
  // src/pagination.ts
16795
17249
  var MAX_PAGES = 1e3;
16796
17250
  function clampPageSize(pageSize) {
@@ -20005,6 +20459,16 @@ var MutationBase = class extends MetaBase {
20005
20459
  warnings.push(`parent ${parentId} not found; the vendor would reject the create`);
20006
20460
  }
20007
20461
  }
20462
+ if (isRecord2(data)) {
20463
+ const eff = effectiveRequiredFields(void 0, RELATIONSHIP_MAP[this.config.key]?.zoneFacts ?? null);
20464
+ const missing = eff.fields.filter((f) => f !== this.config.parentField && data[f] === void 0);
20465
+ if (missing.length > 0) {
20466
+ warnings.push(`required field(s) not in the data: ${missing.join(", ")} (${eff.from}); the vendor would likely reject the create`);
20467
+ }
20468
+ }
20469
+ if (this.config.key === "companies") {
20470
+ warnings.push('the vendor auto-creates a "Primary Address" location for a new company (rename it with company_locations.update; it cannot be deleted via the API)');
20471
+ }
20008
20472
  return buildDryRunResult({
20009
20473
  operation: `${this.config.key}.create`,
20010
20474
  method: "POST",
@@ -20400,6 +20864,7 @@ export {
20400
20864
  mergePartialBody,
20401
20865
  blindStampFor,
20402
20866
  decodeFileData,
20867
+ effectiveRequiredFields,
20403
20868
  MAX_PAGES,
20404
20869
  clampPageSize,
20405
20870
  totalPagesFor,