node-autotask 0.8.3 → 0.10.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 (84) hide show
  1. package/ARCHITECTURE.md +13 -10
  2. package/MCP_TOOL_CATALOG.json +733 -251
  3. package/MCP_TOOL_MANIFEST.md +162 -133
  4. package/MCP_TOOL_OVERRIDES.json +2 -2
  5. package/N8N_MCP_MANIFEST.json +88 -25
  6. package/N8N_MCP_MANIFEST.md +26 -24
  7. package/README.md +12 -4
  8. package/capabilities.json +12503 -9316
  9. package/dist/capabilities.cjs +2 -3
  10. package/dist/capabilities.js +1 -2
  11. package/dist/{chunk-4WJCXIY2.js → chunk-3VB6N44U.js} +1141 -2977
  12. package/dist/{chunk-32AKZMY4.js → chunk-6KFP5HV3.js} +12502 -9316
  13. package/dist/chunk-DMMMWO6A.js +0 -0
  14. package/dist/chunk-FLB2X6O5.cjs +1 -0
  15. package/dist/{chunk-GYI4ZQID.js → chunk-HWC2WPX2.js} +4781 -89
  16. package/dist/chunk-IDPB4N2Q.cjs +1 -0
  17. package/dist/{chunk-F6YSQRZV.js → chunk-NVJ2PTN3.js} +7 -7
  18. package/dist/{chunk-5UGSQLLO.cjs → chunk-QUM74WLQ.cjs} +136 -136
  19. package/dist/{chunk-LAKEIYET.cjs → chunk-S7VMY5KN.cjs} +1468 -3304
  20. package/dist/chunk-UPQIUWOS.js +0 -0
  21. package/dist/{chunk-KNTUX3RR.cjs → chunk-WTVD2JZN.cjs} +12502 -9316
  22. package/dist/{chunk-V3XPLTIR.cjs → chunk-WTVLHMZA.cjs} +4784 -92
  23. package/dist/{index-B6JeThrY.d.ts → index-BOyh7S65.d.cts} +870 -79
  24. package/dist/{index-B0I2bGtx.d.cts → index-DGgMD8aq.d.ts} +870 -79
  25. package/dist/{index-DOCRp_83.d.cts → index-cQ6CRexR.d.cts} +158 -90
  26. package/dist/{index-DOCRp_83.d.ts → index-cQ6CRexR.d.ts} +158 -90
  27. package/dist/index.cjs +37 -22
  28. package/dist/index.d.cts +46 -5
  29. package/dist/index.d.ts +46 -5
  30. package/dist/index.js +48 -33
  31. package/dist/operations/index.cjs +480 -359
  32. package/dist/operations/index.d.cts +195 -16
  33. package/dist/operations/index.d.ts +195 -16
  34. package/dist/operations/index.js +370 -249
  35. package/dist/pool.cjs +36 -12
  36. package/dist/pool.d.cts +2 -3
  37. package/dist/pool.d.ts +2 -3
  38. package/dist/pool.js +33 -9
  39. package/dist/resources/index.cjs +5 -6
  40. package/dist/resources/index.d.cts +2 -2
  41. package/dist/resources/index.d.ts +2 -2
  42. package/dist/resources/index.js +4 -5
  43. package/dist/types/index.cjs +1 -2
  44. package/dist/types/index.d.cts +1 -1
  45. package/dist/types/index.d.ts +1 -1
  46. package/dist/types/index.js +1 -2
  47. package/dist/untrusted.cjs +0 -1
  48. package/dist/untrusted.js +0 -1
  49. package/docs/API.md +693 -48
  50. package/docs/N8N-ADAPTER.md +4 -4
  51. package/examples/basic.ts +1 -1
  52. package/package.json +5 -3
  53. package/dist/capabilities.cjs.map +0 -1
  54. package/dist/capabilities.js.map +0 -1
  55. package/dist/chunk-32AKZMY4.js.map +0 -1
  56. package/dist/chunk-4WJCXIY2.js.map +0 -1
  57. package/dist/chunk-5UGSQLLO.cjs.map +0 -1
  58. package/dist/chunk-CXM35TEC.cjs +0 -1
  59. package/dist/chunk-CXM35TEC.cjs.map +0 -1
  60. package/dist/chunk-F6YSQRZV.js.map +0 -1
  61. package/dist/chunk-GIVD2CQ3.js +0 -1
  62. package/dist/chunk-GIVD2CQ3.js.map +0 -1
  63. package/dist/chunk-GYI4ZQID.js.map +0 -1
  64. package/dist/chunk-KNTUX3RR.cjs.map +0 -1
  65. package/dist/chunk-LAKEIYET.cjs.map +0 -1
  66. package/dist/chunk-MHBMSBTA.js +0 -1
  67. package/dist/chunk-MHBMSBTA.js.map +0 -1
  68. package/dist/chunk-NZUFSSIZ.cjs +0 -1
  69. package/dist/chunk-NZUFSSIZ.cjs.map +0 -1
  70. package/dist/chunk-V3XPLTIR.cjs.map +0 -1
  71. package/dist/client-DHmr0Oyx.d.ts +0 -203
  72. package/dist/client-Q6NoqinP.d.cts +0 -203
  73. package/dist/index.cjs.map +0 -1
  74. package/dist/index.js.map +0 -1
  75. package/dist/operations/index.cjs.map +0 -1
  76. package/dist/operations/index.js.map +0 -1
  77. package/dist/pool.cjs.map +0 -1
  78. package/dist/pool.js.map +0 -1
  79. package/dist/resources/index.cjs.map +0 -1
  80. package/dist/resources/index.js.map +0 -1
  81. package/dist/types/index.cjs.map +0 -1
  82. package/dist/types/index.js.map +0 -1
  83. package/dist/untrusted.cjs.map +0 -1
  84. package/dist/untrusted.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/maxs/gitrepos/node-autotask/dist/chunk-V3XPLTIR.cjs","../src/logger.ts","../src/redact.ts","../src/errors.ts","../src/credential-shape.ts","../src/fieldCache.ts","../src/circuit-breaker.ts","../src/cooldown.ts","../src/cache.ts","../src/host-policy.ts","../src/config.ts","../src/utils/index.ts","../src/pagination.ts","../src/relationships.ts"],"names":["isPlainRecord","item","defaultStore"],"mappings":"AAAA;ACkBO,IAAM,WAAA,EAAqB,CAAC,CAAA;AAG5B,IAAM,SAAA,EAAW,YAAA;AAOjB,IAAM,wBAAA,EAA6C;AAAA,EACxD,oBAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAA;AAGA,SAAS,YAAA,CAAa,GAAA,EAAqB;AACzC,EAAA,OAAO,GAAA,CAAI,WAAA,CAAY,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC9C;AAEA,IAAM,mBAAA,EAA0C,IAAI,GAAA,CAAY,uBAAA,CAAwB,GAAA,CAAI,YAAY,CAAC,CAAA;AAGlG,SAAS,sBAAA,CAAuB,IAAA,EAAc,eAAA,EAA8C;AACjG,EAAA,MAAM,WAAA,EAAa,YAAA,CAAa,IAAI,CAAA;AACpC,EAAA,GAAA,CAAI,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA,EAAG,OAAO,IAAA;AAC/C,EAAA,GAAA,CAAI,gBAAA,IAAoB,KAAA,CAAA,EAAW,OAAO,KAAA;AAC1C,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,CAAC,KAAA,EAAA,GAAU,YAAA,CAAa,KAAK,EAAA,IAAM,UAAU,CAAA;AAC3E;AAGA,SAAS,aAAA,CAAc,KAAA,EAAkD;AACvE,EAAA,GAAA,CAAI,OAAO,MAAA,IAAU,SAAA,GAAY,MAAA,IAAU,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AAChF,EAAA,MAAM,MAAA,EAAQ,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AACzC,EAAA,OAAO,MAAA,IAAU,MAAA,CAAO,UAAA,GAAa,MAAA,IAAU,IAAA;AACjD;AAQO,SAAS,YAAA,CAAa,KAAA,EAAgB,eAAA,EAA8C;AACzF,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS,YAAA,CAAa,IAAA,EAAM,eAAe,CAAC,CAAA;AAAA,EAChE;AACA,EAAA,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,IAAA,EAA+B,CAAC,CAAA;AACtC,IAAA,IAAA,CAAA,MAAW,CAAC,GAAA,EAAK,IAAI,EAAA,GAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,MAAA,GAAA,CAAI,GAAG,EAAA,EAAI,sBAAA,CAAuB,GAAA,EAAK,eAAe,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,IAAA,EAAM,eAAe,CAAA;AAAA,IACzG;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;ADtCA;AACA;AEOO,IAAM,uBAAA,EAA4C;AAAA,EACvD,UAAA;AAAA;AAAA,EACA,WAAA;AAAA;AAAA,EACA;AAAA;AACF,CAAA;AAOO,IAAM,yBAAA,EAA8C;AAAA,EACzD,8BAAA;AAAA,EACA,oCAAA;AAAA,EACA,oCAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,oCAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,4BAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,0BAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,qCAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAQO,IAAM,6BAAA,EAAkD;AAAA,EAC7D,QAAA;AAAA,EACA,0BAAA;AAAA,EACA,2BAAA;AAAA,EACA,4BAAA;AAAA,EACA,gBAAA;AAAA,EACA,iCAAA;AAAA,EACA,yBAAA;AAAA,EACA,0BAAA;AAAA,EACA,4BAAA;AAAA,EACA,2BAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,WAAA,EAAa,IAAI,GAAA,CAAY,sBAAsB,CAAA;AACzD,IAAM,aAAA,kBAAe,IAAI,GAAA,CAAY,CAAC,GAAG,wBAAA,EAA0B,GAAG,4BAA4B,CAAC,CAAA;AAanG,SAASA,cAAAA,CAAc,KAAA,EAAkD;AACvE,EAAA,GAAA,CAAI,OAAO,MAAA,IAAU,SAAA,GAAY,MAAA,IAAU,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AAChF,EAAA,MAAM,MAAA,EAAQ,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AACzC,EAAA,OAAO,MAAA,IAAU,MAAA,CAAO,UAAA,GAAa,MAAA,IAAU,IAAA;AACjD;AAOO,SAAS,mBAAA,CAAoB,IAAA,EAAc,MAAA,EAAkC;AAClF,EAAA,OAAO,UAAA,CAAW,GAAA,CAAI,IAAI,EAAA,GAAM,MAAA,CAAO,mBAAA,GAAsB,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACpF;AASO,SAAS,kBAAA,CAAmB,KAAA,EAAgB,MAAA,EAAkC;AACnF,EAAA,MAAM,SAAA,EAAW,MAAA,CAAO,kBAAA;AACxB,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,EAAA,GAAU,kBAAA,CAAmB,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,EAC/D;AACA,EAAA,GAAA,CAAI,CAACA,cAAAA,CAAc,KAAK,CAAA,EAAG,OAAO,KAAA;AAClC,EAAA,MAAM,IAAA,EAA+B,CAAC,CAAA;AACtC,EAAA,IAAA,CAAA,MAAW,CAAC,GAAA,EAAK,KAAK,EAAA,GAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,MAAM,OAAA,EAAS,UAAA,CAAW,GAAA,CAAI,GAAG,EAAA,GAAM,SAAA,GAAY,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AACvE,IAAA,GAAA,CAAI,GAAG,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,kBAAA,CAAmB,KAAA,EAAO,MAAM,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,GAAA;AACT;AF1CA;AACA;AG3EA,SAAS,QAAA,CAAS,KAAA,EAAkD;AAClE,EAAA,GAAA,CAAI,OAAO,MAAA,IAAU,SAAA,GAAY,MAAA,IAAU,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AAChF,EAAA,MAAM,MAAA,EAAQ,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AACzC,EAAA,OAAO,MAAA,IAAU,MAAA,CAAO,UAAA,GAAa,MAAA,IAAU,IAAA;AACjD;AAEO,IAAM,cAAA,EAAN,MAAA,QAA4B,MAAM;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EAEA,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,KAAA,EAAO,eAAA;AACZ,IAAA,IAAA,CAAK,KAAA,mBAAO,OAAA,CAAQ,IAAA,UAAQ,kBAAA;AAC5B,IAAA,IAAA,CAAK,SAAA,mBAAW,OAAA,CAAQ,QAAA,UAAY,UAAA;AACpC,IAAA,IAAA,CAAK,UAAA,mBAAY,OAAA,CAAQ,SAAA,UAAa,OAAA;AACtC,IAAA,IAAA,CAAK,UAAA,EAAY,OAAA,CAAQ,SAAA;AACzB,IAAA,IAAA,CAAK,WAAA,EAAa,OAAA,CAAQ,UAAA;AAC1B,IAAA,IAAA,CAAK,YAAA,EAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,YAAA,EAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,gBAAA,EAAkB,OAAA,CAAQ,eAAA;AAC/B,IAAA,IAAA,CAAK,cAAA,EAAgB,OAAA,CAAQ,aAAA;AAC7B,IAAA,IAAA,CAAK,IAAA,EAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,QAAA,EAAU,OAAA,CAAQ,OAAA;AACvB,oBAAA,KAAA,mBAAM,iBAAA,0BAAA,CAAoB,IAAA,EAAM,IAAA,CAAK,WAAW,GAAA;AAAA,EAClD;AACF,CAAA;AAEO,IAAM,oBAAA,EAAN,MAAA,QAAkC,cAAc;AAAA,EACrD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,YAAA,EAAc,GAAG,QAAQ,CAAC,CAAA;AAC3E,IAAA,IAAA,CAAK,KAAA,EAAO,qBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,qBAAA,EAAN,MAAA,QAAmC,cAAc;AAAA,EACtD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS;AAAA,MACb,IAAA,EAAM,eAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,eAAA,mBAAiB,OAAA,CAAQ,eAAA,UAAmB,sDAAA;AAAA,MAC5C,GAAG;AAAA,IACL,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,EAAO,sBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,qBAAA,EAAN,MAAA,QAAmC,cAAc;AAAA,EACtD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS;AAAA,MACb,IAAA,EAAM,SAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,eAAA,mBAAiB,OAAA,CAAQ,eAAA,UAAmB,gDAAA;AAAA,MAC5C,GAAG;AAAA,IACL,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,EAAO,sBAAA;AAAA,EACd;AACF,CAAA;AAGO,IAAM,mBAAA,EAAN,MAAA,QAAiC,cAAc;AAAA,EACpD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,GAAG,QAAQ,CAAC,CAAA;AACrF,IAAA,IAAA,CAAK,KAAA,EAAO,oBAAA;AAAA,EACd;AACF,CAAA;AAGO,IAAM,sBAAA,EAAN,MAAA,QAAoC,cAAc;AAAA,EACvD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,mBAAA,EAAqB,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,KAAA,EAAO,GAAG,QAAQ,CAAC,CAAA;AAC9F,IAAA,IAAA,CAAK,KAAA,EAAO,uBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,gBAAA,EAAN,MAAA,QAA8B,cAAc;AAAA,EACjD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,aAAA,EAAe,QAAA,EAAU,YAAA,EAAc,GAAG,QAAQ,CAAC,CAAA;AAC1E,IAAA,IAAA,CAAK,KAAA,EAAO,iBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,kBAAA,EAAN,MAAA,QAAgC,cAAc;AAAA,EACnD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,GAAG,QAAQ,CAAC,CAAA;AACrE,IAAA,IAAA,CAAK,KAAA,EAAO,mBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,eAAA,EAAN,MAAA,QAA6B,cAAc;AAAA,EAChD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,MAAA,EAAQ,GAAG,QAAQ,CAAC,CAAA;AAClE,IAAA,IAAA,CAAK,KAAA,EAAO,gBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,cAAA,EAAN,MAAA,QAA4B,cAAc;AAAA,EAC/C,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,WAAA,EAAa,GAAG,QAAQ,CAAC,CAAA;AACvE,IAAA,IAAA,CAAK,KAAA,EAAO,eAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,cAAA,EAAN,MAAA,QAA4B,cAAc;AAAA,EAC/C,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,UAAA,EAAY,GAAG,QAAQ,CAAC,CAAA;AACrE,IAAA,IAAA,CAAK,KAAA,EAAO,eAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,yBAAA,EAAN,MAAA,QAAuC,cAAc;AAAA,EAC1D,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,mBAAA,EAAqB,QAAA,EAAU,YAAA,EAAc,GAAG,QAAQ,CAAC,CAAA;AAChF,IAAA,IAAA,CAAK,KAAA,EAAO,0BAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,eAAA,EAAN,MAAA,QAA6B,cAAc;AAAA;AAAA,EAEhD;AAAA;AAAA,EAEA;AAAA,EAEA,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,GAAG,QAAQ,CAAC,CAAA;AAC5F,IAAA,IAAA,CAAK,KAAA,EAAO,gBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,YAAA,EAAN,MAAA,QAA0B,cAAc;AAAA,EAC7C,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,IAAA,EAAM,GAAG,QAAQ,CAAC,CAAA;AACxF,IAAA,IAAA,CAAK,KAAA,EAAO,aAAA;AAAA,EACd;AACF,CAAA;AAeO,IAAM,2BAAA,EAAN,MAAA,QAAyC,cAAc;AAAA,EAC5D,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,yBAAA,EAA2B,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,IAAA,EAAM,GAAG,QAAQ,CAAC,CAAA;AACnG,IAAA,IAAA,CAAK,KAAA,EAAO,4BAAA;AAAA,EACd;AACF,CAAA;AAWO,IAAM,mBAAA,EAAN,MAAA,QAAiC,cAAc;AAAA,EACpD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,gBAAA,EAAkB,QAAA,EAAU,QAAA,EAAU,GAAG,QAAQ,CAAC,CAAA;AACzE,IAAA,IAAA,CAAK,KAAA,EAAO,oBAAA;AAAA,EACd;AACF,CAAA;AAcO,IAAM,oBAAA,EAAN,MAAA,QAAkC,cAAc;AAAA;AAAA,EAErD;AAAA;AAAA,EAEA;AAAA,EAEA,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,sBAAA,EAAwB,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,IAAA,EAAM,GAAG,QAAQ,CAAC,CAAA;AAChG,IAAA,IAAA,CAAK,KAAA,EAAO,qBAAA;AAAA,EACd;AACF,CAAA;AAaO,IAAM,sBAAA,EAAN,MAAA,QAAoC,cAAc;AAAA,EACvD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,IAAA,EAAM,oBAAA,EAAsB,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,KAAA,EAAO,GAAG,QAAQ,CAAC,CAAA;AAC/F,IAAA,IAAA,CAAK,KAAA,EAAO,uBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,gBAAA,EAAN,MAAA,QAA8B,cAAc;AAAA,EACjD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS;AAAA,MACb,IAAA,EAAM,OAAA,CAAQ,KAAA,IAAS,KAAA,EAAA,EAAY,uBAAA,EAAyB,OAAA,CAAQ,IAAA;AAAA,MACpE,QAAA,EAAU,YAAA;AAAA,MACV,GAAG;AAAA,IACL,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,EAAO,iBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,qBAAA,EAAN,MAAA,QAAmC,cAAc;AAAA,EACtD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS;AAAA,MACb,IAAA,EAAM,kBAAA;AAAA,MACN,QAAA,EAAU,QAAA;AAAA,MACV,eAAA,mBACE,OAAA,CAAQ,eAAA,UACR,uFAAA;AAAA,MACF,GAAG;AAAA,IACL,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,EAAO,sBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,kBAAA,EAAN,MAAA,QAAgC,cAAc;AAAA,EACnD,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAgC,CAAC,CAAA,EAAG;AAC/D,IAAA,KAAA,CAAM,OAAA,EAAS;AAAA,MACb,IAAA,EAAM,gBAAA;AAAA,MACN,QAAA,EAAU,QAAA;AAAA,MACV,eAAA,mBACE,OAAA,CAAQ,eAAA,UACR,8FAAA;AAAA,MACF,GAAG;AAAA,IACL,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,EAAO,mBAAA;AAAA,EACd;AACF,CAAA;AAoBA,IAAM,uBAAA,EAAyB,qDAAA;AAExB,SAAS,iBAAA,CAAkB,IAAA,EAA+C;AAC/E,EAAA,GAAA,CAAI,CAAC,QAAA,CAAS,IAAI,EAAA,GAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG,OAAO,KAAA,CAAA;AAC3D,EAAA,MAAM,IAAA,EAA0B,CAAC,CAAA;AACjC,EAAA,IAAA,CAAA,MAAW,MAAA,GAAS,IAAA,CAAK,MAAA,EAAQ;AAC/B,IAAA,GAAA,CAAI,OAAO,MAAA,IAAU,QAAA,EAAU;AAC7B,MAAA,MAAMC,MAAAA,EAAyB,EAAE,OAAA,EAAS,MAAM,CAAA;AAChD,MAAA,MAAM,EAAA,EAAI,sBAAA,CAAuB,IAAA,CAAK,KAAK,CAAA;AAC3C,MAAA,GAAA,CAAI,CAAA,EAAGA,KAAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,CAAC,CAAA;AACvB,MAAA,GAAA,CAAI,IAAA,CAAKA,KAAI,CAAA;AACb,MAAA,QAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,QAAA;AACtB,IAAA,MAAM,KAAA,EAAyB,CAAC,CAAA;AAChC,IAAA,GAAA,CAAI,OAAO,KAAA,CAAM,QAAA,IAAY,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,KAAA,CAAM,OAAA;AAC5D,IAAA,GAAA,CAAI,OAAO,KAAA,CAAM,MAAA,IAAU,QAAA,EAAU,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,KAAA;AACxD,IAAA,GAAA,CAAI,OAAO,KAAA,CAAM,KAAA,IAAS,QAAA,EAAU,IAAA,CAAK,KAAA,EAAO,KAAA,CAAM,IAAA;AACtD,IAAA,GAAA,CAAI,IAAA,CAAK,QAAA,IAAY,KAAA,EAAA,GAAa,IAAA,CAAK,MAAA,IAAU,KAAA,EAAA,GAAa,IAAA,CAAK,KAAA,IAAS,KAAA,CAAA,EAAW;AACrF,MAAA,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AASA,IAAM,iCAAA,EAAsD,CAAC,yBAAyB,CAAA;AAS/E,SAAS,wBAAA,CAAyB,OAAA,EAAkD;AACzF,EAAA,GAAA,CAAI,QAAA,IAAY,KAAA,CAAA,EAAW,OAAO,KAAA;AAClC,EAAA,OAAO,OAAA,CAAQ,IAAA;AAAA,IACb,CAAC,KAAA,EAAA,GAAU,KAAA,CAAM,QAAA,IAAY,KAAA,EAAA,GAAa,gCAAA,CAAiC,IAAA,CAAK,CAAC,MAAA,EAAA,GAAW,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAiB,CAAC;AAAA,EAClI,CAAA;AACF;AAGA,SAAS,iBAAA,CAAkB,KAAA,EAAiC;AAC1D,EAAA,MAAM,MAAA,EAAkB,CAAC,CAAA;AACzB,EAAA,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,CAAA,CAAG,CAAA;AAC5C,EAAA,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,CAAA,EAAA,CAAI,CAAA;AACrD,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC3C,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AACvB;AAMO,SAAS,kBAAA,CAAmB,IAAA,EAAmC;AACpE,EAAA,MAAM,QAAA,EAAU,iBAAA,CAAkB,IAAI,CAAA;AACtC,EAAA,GAAA,CAAI,QAAA,GAAW,OAAA,CAAQ,OAAA,EAAS,CAAA,EAAG;AACjC,IAAA,MAAM,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,iBAAiB,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,EAAA,GAAS,IAAA,CAAK,OAAA,EAAS,CAAC,CAAA;AACjF,IAAA,GAAA,CAAI,SAAA,CAAU,OAAA,EAAS,CAAA,EAAG,OAAO,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA;AAAA,EACvD;AACA,EAAA,GAAA,CAAI,QAAA,CAAS,IAAI,EAAA,GAAK,OAAO,IAAA,CAAK,QAAA,IAAY,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,CAAA,CAAE,OAAA,EAAS,CAAA,EAAG;AACxF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,KAAA,CAAA;AACT;AAOA,SAAS,aAAA,CAAc,IAAA,EAAuB;AAC5C,EAAA,OAAO,gCAAA,CAAiC,IAAA,CAAK,IAAI,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AACtE;AAMA,SAAS,mBAAA,CAAoB,MAAA,EAAkC;AAC7D,EAAA,OAAA,CAAQ,MAAA,EAAQ;AAAA,IACd,KAAK,GAAA;AAAK,MAAA,OAAO,eAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,iBAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,cAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,aAAA;AAAA,IACjB,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AAAK,MAAA,OAAO,aAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,wBAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,cAAA;AAAA,IACjB,OAAA;AACE,MAAA,OAAO,OAAA,GAAU,IAAA,GAAO,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,IAAA;AAAA,EACzD;AACF;AAEA,SAAS,oBAAA,CAAqB,MAAA,EAAwB;AACpD,EAAA,OAAA,CAAQ,MAAA,EAAQ;AAAA,IACd,KAAK,GAAA;AAAK,MAAA,OAAO,4CAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,oBAAA;AAAA,IACjB,OAAA;AAAS,MAAA,OAAO,CAAA,wCAAA,EAA2C,MAAM,CAAA,CAAA;AACnE,EAAA;AACF;AAGiC;AAQ4B;AACH,EAAA;AACH,EAAA;AACQ,EAAA;AAC/D;AAiBE;AAEA;AAIA;AAWqC;AACA,EAAA;AAEjC,EAAA;AAEuD,EAAA;AAC7D;AASuC;AACN,EAAA;AACC,EAAA;AACL,EAAA;AAC7B;AAEsE;AACpD,EAAA;AACT,IAAA;AACA,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACA,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACT,IAAA;AACyB,MAAA;AAC3B,EAAA;AACF;AAyBE;AAG4C,EAAA;AACJ,EAAA;AAGI,EAAA;AACO,IAAA;AACnD,EAAA;AAC+D,EAAA;AAExB,EAAA;AACE,EAAA;AACP,EAAA;AAC2B,EAAA;AACnB,EAAA;AAEV,EAAA;AAOW,EAAA;AACmB,EAAA;AAChC,EAAA;AAC6B,IAAA;AAC7C,IAAA;AACC,IAAA;AACb,IAAA;AACA,IAAA;AACuC,IAAA;AACS,IAAA;AACc,IAAA;AAC/D,EAAA;AACsC,EAAA;AAMiB,EAAA;AACtC,IAAA;AACyC,IAAA;AACE,IAAA;AACL,IAAA;AAEpD,IAAA;AAIJ,EAAA;AACO,EAAA;AACT;AAQoD;AACe,EAAA;AAChD,IAAA;AACP,MAAA;AACI,MAAA;AACO,MAAA;AACd,MAAA;AACJ,IAAA;AACW,IAAA;AACd,EAAA;AACF;AAM6D;AACM,EAAA;AACL,IAAA;AAC9C,IAAA;AACd,EAAA;AACF;AASuD;AACY,EAAA;AACX,IAAA;AACxC,IAAA;AACd,EAAA;AACF;AASuD;AACY,EAAA;AACV,IAAA;AACzC,IAAA;AACd,EAAA;AACF;AAQ0D;AACS,EAAA;AACR,IAAA;AAC3C,IAAA;AACd,EAAA;AACF;AAGsD;AACtC,EAAA;AACP,IAAA;AAAwB,MAAA;AACxB,IAAA;AAA0B,MAAA;AAC1B,IAAA;AAAuB,MAAA;AACvB,IAAA;AAAsB,MAAA;AACtB,IAAA;AAAsB,MAAA;AACtB,IAAA;AAAiC,MAAA;AACjC,IAAA;AAAuB,MAAA;AAC5B,IAAA;AAAgB,MAAA;AAClB,EAAA;AACF;AAGoE;AAC5C,EAAA;AACxB;AHzK+D;AACA;AIlfzB;AAGuB;AAC9B,EAAA;AACR,EAAA;AACwC,EAAA;AAC/D;AAUsC;AACH,EAAA;AACD,IAAA;AACA,IAAA;AAChC,EAAA;AAC2D,EAAA;AAClD,IAAA;AACT,EAAA;AACiC,EAAA;AAC1B,EAAA;AACT;AAIE;AAOuC;AAOqB;AAEjD,EAAA;AAEb;AJwd+D;AACA;AKpfvB;AAGiB;AAWjC;AAAA;AAEb,EAAA;AAAA;AAEA,EAAA;AACsD,iBAAA;AACO,kBAAA;AAEK,EAAA;AAC7B,IAAA;AACZ,MAAA;AAChC,IAAA;AACwD,IAAA;AACxB,MAAA;AAChC,IAAA;AACa,IAAA;AACM,IAAA;AACrB,EAAA;AAAA;AAG8D,EAAA;AAC/B,IAAA;AAC/B,EAAA;AAAA;AAAA;AAAA;AAAA;AAMwD,EAAA;AACG,IAAA;AACzB,IAAA;AACG,IAAA;AACkB,MAAA;AAC5C,MAAA;AACT,IAAA;AAEkC,IAAA;AACpC,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQqE,EAAA;AACpC,IAAA;AACa,IAAA;AACI,IAAA;AAER,MAAA;AACU,MAAA;AAClD,IAAA;AAGqB,IAAA;AACgC,IAAA;AACvD,EAAA;AAAA;AAGwC,EAAA;AACY,IAAA;AACA,IAAA;AACO,IAAA;AAClD,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOkF,EAAA;AACxB,IAAA;AAC1D,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ8F,EAAA;AAChD,IAAA;AACX,IAAA;AAIzB,IAAA;AACA,MAAA;AACuB,QAAA;AAC7B,MAAA;AACM,MAAA;AACuB,QAAA;AAC7B,MAAA;AACF,IAAA;AACO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOsC,EAAA;AACE,IAAA;AACQ,MAAA;AACvB,MAAA;AACM,MAAA;AAC7B,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOsF,EAAA;AAC3B,IAAA;AACC,IAAA;AACzB,MAAA;AACjC,IAAA;AACyD,IAAA;AAC3D,EAAA;AAAA;AAGuB,EAAA;AACA,IAAA;AACP,IAAA;AACyB,IAAA;AACT,MAAA;AACL,QAAA;AACV,QAAA;AACb,MAAA;AACF,IAAA;AACO,IAAA;AACT,EAAA;AAAA;AAGmB,EAAA;AACC,IAAA;AACpB,EAAA;AAAA;AAGc,EAAA;AACK,IAAA;AACM,IAAA;AACzB,EAAA;AACF;ALud+D;AACA;AMjlBd;AAEQ;AAEF;AAEG;AAEP;AASqB;AACrD,EAAA;AAC8C,kBAAA;AAE9B,EAAA;AACuB,IAAA;AAChC,MAAA;AACtB,IAAA;AACkB,IAAA;AACpB,EAAA;AAEsD,EAAA;AACtB,IAAA;AAChC,EAAA;AAEuD,EAAA;AACvB,IAAA;AACE,MAAA;AAC9B,MAAA;AACF,IAAA;AACyC,IAAA;AACnC,MAAA;AACwB,MAAA;AACQ,MAAA;AACqB,QAAA;AACxB,QAAA;AACZ,UAAA;AACR,UAAA;AACX,QAAA;AACF,MAAA;AACmD,MAAA;AACrD,IAAA;AAC8B,IAAA;AAChC,EAAA;AAE8B,EAAA;AACF,IAAA;AAC5B,EAAA;AAAA;AAGc,EAAA;AACM,IAAA;AACpB,EAAA;AACF;AASI;AAG8D;AACb,EAAA;AAC5C,EAAA;AACT;AAGwD;AAClC,kBAAA;AACtB;AAUyD;AACd,EAAA;AAC3C;AAe8D;AAMA,EAAA;AAEA,EAAA;AACzC,EAAA;AACc,EAAA;AACN,EAAA;AACQ,EAAA;AAGK,IAAA;AACxC,EAAA;AAGoB,EAAA;AACtB;ANqhB+D;AACA;AO7sBd;AAEN;AAEC;AAEZ;AAEI;AAOwB;AACzC,EAAA;AACoC,kBAAA;AAEU,EAAA;AACP,IAAA;AAChC,MAAA;AACtB,IAAA;AACkB,IAAA;AACpB,EAAA;AAE2C,EAAA;AACN,IAAA;AACrC,EAAA;AAE+C,EAAA;AACV,IAAA;AACK,MAAA;AACtC,MAAA;AACF,IAAA;AAC4C,IAAA;AACtC,MAAA;AACwB,MAAA;AACW,MAAA;AACb,QAAA;AACL,UAAA;AACR,UAAA;AACX,QAAA;AACF,MAAA;AACsD,MAAA;AACxD,IAAA;AACsC,IAAA;AACxC,EAAA;AAEgC,EAAA;AACC,IAAA;AACjC,EAAA;AAAA;AAGc,EAAA;AACS,IAAA;AACvB,EAAA;AACF;AAOIC;AAGkD;AACD,EAAA;AAC5CA,EAAAA;AACT;AAGkD;AAC5B,kBAAA;AACtB;AAO0E;AACd,EAAA;AAC5D;AAYU;AACkB,EAAA;AAEX,IAAA;AAEc,IAAA;AAC7B,EAAA;AAC8D,EAAA;AAC7B,EAAA;AACnC;APmqB+D;AACA;AQ5vBzB;AASf;AAAA;AAEZ,EAAA;AAAA;AAEA,EAAA;AACiD,kBAAA;AAEY,EAAA;AACxB,IAAA;AACZ,MAAA;AAChC,IAAA;AAGoC,IAAA;AAGzB,MAAA;AAGG,QAAA;AACR,UAAA;AACF,QAAA;AACF,MAAA;AAC0C,MAAA;AACxB,QAAA;AACgB,UAAA;AAChC,QAAA;AAC4C,QAAA;AAChC,UAAA;AACqB,YAAA;AAC/B,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACa,IAAA;AACW,IAAA;AAC1B,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOkC,EAAA;AACwB,IAAA;AACP,MAAA;AACZ,MAAA;AACrC,IAAA;AACY,IAAA;AACd,EAAA;AAAA;AAAA;AAAA;AAAA;AAM0B,EAAA;AACQ,IAAA;AACA,IAAA;AACG,IAAA;AACZ,MAAA;AACd,MAAA;AACT,IAAA;AAEkC,IAAA;AACpC,EAAA;AAAA;AAAA;AAI0D,EAAA;AACF,IAAA;AAEd,MAAA;AACU,MAAA;AAClD,IAAA;AAGqB,IAAA;AACgC,IAAA;AACvD,EAAA;AAAA;AAGuB,EAAA;AACA,IAAA;AACP,IAAA;AACyB,IAAA;AACT,MAAA;AACL,QAAA;AACV,QAAA;AACb,MAAA;AACF,IAAA;AACO,IAAA;AACT,EAAA;AAAA;AAGmB,EAAA;AACC,IAAA;AACpB,EAAA;AAAA;AAG6B,EAAA;AACC,IAAA;AAC9B,EAAA;AAAA;AAGc,EAAA;AACK,IAAA;AACnB,EAAA;AACF;ARouB+D;AACA;AS12BT;AAC7B,EAAA;AACzB;AAGwD;AAC/B,EAAA;AACzB;AAGwD;AACvB,EAAA;AACF,EAAA;AACG,EAAA;AACpB,EAAA;AACgB,EAAA;AACW,IAAA;AACf,IAAA;AACF,IAAA;AACE,IAAA;AACxB,EAAA;AACiB,EAAA;AACnB;AAEe;AAGsC;AACpB,EAAA;AACC,EAAA;AAGhB,EAAA;AAMlB;AAEyE;AACtC,EAAA;AACF,EAAA;AAC+B,EAAA;AAC5B,EAAA;AACpC;AAG8C;AACnB,EAAA;AAC3B;AAOoE;AACrC,EAAA;AACC,EAAA;AAGM,EAAA;AACmB,EAAA;AAGf,EAAA;AACiB,EAAA;AACjC,EAAA;AAK8B,EAAA;AACA,EAAA;AACG,EAAA;AACD,EAAA;AAC1D;AAW0C;AACY,EAAA;AACE,EAAA;AACxD;AAGyD;AACvB,EAAA;AACD,EAAA;AACkB,EAAA;AACT,EAAA;AACkB,EAAA;AACG,EAAA;AACL,EAAA;AACd,EAAA;AAChB,EAAA;AACA,EAAA;AACmB,IAAA;AACX,IAAA;AAClC,EAAA;AAC2D,EAAA;AACjC,EAAA;AACmB,IAAA;AACX,IAAA;AAClC,EAAA;AACsC,EAAA;AACxC;AASqD;AACnB,EAAA;AACE,EAAA;AACN,EAAA;AACwB,EAAA;AACK,EAAA;AACxB,EAAA;AACN,IAAA;AACiC,IAAA;AAC5D,EAAA;AACO,EAAA;AACT;AAGkD;AACH,EAAA;AACE,EAAA;AACjB,EAAA;AACkB,EAAA;AAClD;AASqD;AACrB,EAAA;AACQ,EAAA;AACe,EAAA;AACpB,EAAA;AACP,EAAA;AAC5B;AAG8E;AAC/C,EAAA;AAC+B,EAAA;AAC7C,EAAA;AACjB;AAQiH;AACvE,EAAA;AACW,EAAA;AACJ,IAAA;AAC/C,EAAA;AACsB,EAAA;AACuB,EAAA;AACK,IAAA;AAClD,EAAA;AACO,EAAA;AACT;AAO6F;AACzC,EAAA;AACG,EAAA;AAG/C,EAAA;AAEI,EAAA;AAC0C,IAAA;AACK,IAAA;AACzD,EAAA;AACF;AT6xB+D;AACA;AUx+BQ;AACtD,EAAA;AACG,EAAA;AACC,EAAA;AACG,EAAA;AACN,EAAA;AACE,EAAA;AACA,EAAA;AACF,EAAA;AACE,EAAA;AACA,EAAA;AACA,EAAA;AACZ,EAAA;AACC,EAAA;AACA,EAAA;AACW,EAAA;AACF,EAAA;AACD,EAAA;AACG,EAAA;AACA,EAAA;AACR,EAAA;AACH,EAAA;AACI,EAAA;AACF,EAAA;AACX;AAG0C;AACxC,EAAA;AAAe,EAAA;AAAkB,EAAA;AAAmB,EAAA;AACpD,EAAA;AAAgB,EAAA;AAAkB,EAAA;AAClC,EAAA;AAAgB,EAAA;AAAkB,EAAA;AAAkB,EAAA;AACpD,EAAA;AAAM,EAAA;AAAO,EAAA;AACb,EAAA;AACA,EAAA;AAAgB,EAAA;AAChB,EAAA;AAAkB,EAAA;AAClB,EAAA;AAAU,EAAA;AAAO,EAAA;AACjB,EAAA;AACF;AAGsC;AAkBT;AAAA;AAEC,EAAA;AAAA;AAElB,EAAA;AAAA;AAEG,EAAA;AACF,EAAA;AACC,EAAA;AACG,EAAA;AAAA;AAEc,EAAA;AACsB,EAAA;AACrD;AAEiC;AACJ;AACK;AACC;AACG;AAEgB;AAEd;AACF;AAyRU;AACjB,EAAA;AACU,EAAA;AACM,IAAA;AAC7C,EAAA;AACO,EAAA;AACT;AAG+C;AACzC,EAAA;AACA,EAAA;AACe,IAAA;AACX,EAAA;AACmD,IAAA;AAC3D,EAAA;AAC2D,EAAA;AAC3B,IAAA;AAChC,EAAA;AAC4C,EAAA;AACjB,EAAA;AAC7B;AAEsD;AACyB,EAAA;AAC/E;AAMuF;AAC1B,EAAA;AAC7B,EAAA;AACE,IAAA;AAChC,EAAA;AAC2C,EAAA;AAC7C;AAGkE;AACjC,EAAA;AACS,IAAA;AACxC,EAAA;AAC2B,EAAA;AACD,EAAA;AACc,IAAA;AACxC,EAAA;AAOgD,EAAA;AACvB,EAAA;AACmB,IAAA;AAClC,MAAA;AAEJ,MAAA;AAGH,IAAA;AACH,EAAA;AACO,EAAA;AACT;AAG8E;AACzB,EAAA;AACS,IAAA;AAC5D,EAAA;AAIkC,EAAA;AACgB,EAAA;AACtC,IAAA;AACkC,MAAA;AAC5C,IAAA;AACF,EAAA;AAC0B,EAAA;AAEA,EAAA;AAEkC,EAAA;AAChD,IAAA;AACR,MAAA;AACF,IAAA;AACF,EAAA;AACI,EAAA;AACA,EAAA;AACuB,EAAA;AACiB,IAAA;AACL,IAAA;AACR,EAAA;AACL,IAAA;AAGZ,MAAA;AAC0C,QAAA;AACpD,MAAA;AACF,IAAA;AACsB,IAAA;AACU,MAAA;AAChC,IAAA;AAC8B,IAAA;AACf,IAAA;AACV,EAAA;AACiC,IAAA;AACvB,IAAA;AACjB,EAAA;AAOI,EAAA;AACiC,EAAA;AAChB,IAAA;AAC0B,IAAA;AACb,MAAA;AAChC,IAAA;AACsD,IAAA;AACtB,MAAA;AAChC,IAAA;AACI,IAAA;AACkC,IAAA;AACU,MAAA;AACd,QAAA;AAChC,MAAA;AACI,MAAA;AAC2C,QAAA;AACvC,MAAA;AACwB,QAAA;AAChC,MAAA;AACF,IAAA;AAC+C,IAAA;AACO,IAAA;AAC1C,MAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AAC6C,IAAA;AAKX,IAAA;AACP,MAAA;AACE,MAAA;AAC5B,IAAA;AACH,EAAA;AAEoD,EAAA;AACA,EAAA;AACI,EAAA;AAEpD,EAAA;AAC8C,EAAA;AACG,IAAA;AACrD,EAAA;AAI2D,EAAA;AACR,EAAA;AACnB,IAAA;AAChC,EAAA;AAGkD,EAAA;AAEW,EAAA;AACT,EAAA;AACpB,IAAA;AAChC,EAAA;AAEiD,EAAA;AACI,EAAA;AACrB,IAAA;AAChC,EAAA;AAEuD,EAAA;AACK,EAAA;AAC5B,IAAA;AAChC,EAAA;AAE6D,EAAA;AAClB,EAAA;AACX,IAAA;AAChC,EAAA;AAEI,EAAA;AACmD,EAAA;AACd,IAAA;AAGzB,MAAA;AACP,IAAA;AAC4B,MAAA;AACe,MAAA;AAChB,QAAA;AAChC,MAAA;AACsB,MAAA;AACxB,IAAA;AACgB,EAAA;AACuC,IAAA;AACzD,EAAA;AAIoD,EAAA;AACJ,EAAA;AACY,EAAA;AAC5B,IAAA;AAChC,EAAA;AACwD,EAAA;AACZ,EAAA;AACZ,IAAA;AAChC,EAAA;AACuC,EAAA;AAGf,EAAA;AAIQ,IAAA;AAChC,EAAA;AACiB,EAAA;AACN,IAAA;AACF,IAAA;AACI,IAAA;AACJ,IAAA;AACT,EAAA;AAMyD,EAAA;AACV,EAAA;AACc,EAAA;AAC7B,IAAA;AAChC,EAAA;AACgD,EAAA;AACL,EAAA;AACX,IAAA;AAChC,EAAA;AACoD,EAAA;AACL,EAAA;AACf,IAAA;AAChC,EAAA;AACuD,EAAA;AACL,EAAA;AAClB,IAAA;AAChC,EAAA;AACqD,EAAA;AACL,EAAA;AAChB,IAAA;AAChC,EAAA;AAIqD,EAAA;AACzC,IAAA;AAC+C,MAAA;AACzD,IAAA;AACF,EAAA;AAC4C,EAAA;AAGb,EAAA;AAIC,IAAA;AAChC,EAAA;AACgD,EAAA;AACH,EAAA;AACb,IAAA;AAChC,EAAA;AACuB,EAAA;AACZ,IAAA;AACQ,IAAA;AACC,IAAA;AACH,IAAA;AACG,IAAA;AACF,IAAA;AACT,IAAA;AACI,IAAA;AACb,EAAA;AAE6D,EAAA;AACA,EAAA;AAC7B,IAAA;AAChC,EAAA;AACyD,EAAA;AACA,EAAA;AACzB,IAAA;AAChC,EAAA;AAEwD,EAAA;AAM9C,EAAA;AAKJ,EAAA;AAGuD,EAAA;AAIJ,EAAA;AAEzB,EAAA;AAIS,EAAA;AACD,IAAA;AAC/B,oBAAA;AACsC,MAAA;AAC7C,IAAA;AACF,EAAA;AAEO,EAAA;AACL,IAAA;AACS,IAAA;AACH,IAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACU,IAAA;AACV,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAC2C,IAAA;AAC3B,IAAA;AAChB,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AV0mB+D;AACA;AWp2CpC;AAKgD;AACZ,EAAA;AAC/D;AAMqF;AAC7D,EAAA;AACqC,IAAA;AAChB,IAAA;AACjC,MAAA;AACI,MAAA;AACC,MAAA;AACZ,IAAA;AACH,EAAA;AACO,EAAA;AACT;AAGuE;AAChD,EAAA;AACvB;AAOqG;AACpD,EAAA;AACM,EAAA;AAC1B,IAAA;AACC,IAAA;AAGpB,IAAA;AAER,EAAA;AACO,EAAA;AACT;AAM+D;AACP,EAAA;AACxD;AAiB0E;AACzC,EAAA;AACkB,IAAA;AACP,MAAA;AACxC,IAAA;AACO,IAAA;AACT,EAAA;AAC+B,EAAA;AAI4B,IAAA;AACnB,IAAA;AACxC,EAAA;AAC2B,EAAA;AACC,EAAA;AACY,IAAA;AACxC,EAAA;AAC0C,EAAA;AACA,EAAA;AACnC,EAAA;AACT;AAW+B;AACK,EAAA;AACe,EAAA;AAC7B,EAAA;AACa,EAAA;AACT,EAAA;AACoC,IAAA;AACA,IAAA;AAClB,IAAA;AAC1C,EAAA;AACO,EAAA;AACT;AAG2C;AACvB,EAAA;AACpB;AAuBE;AAEuD;AACD,EAAA;AACzB,EAAA;AACS,EAAA;AACY,EAAA;AACQ,IAAA;AAC1D,EAAA;AACO,EAAA;AACT;AAG8C;AACkB,EAAA;AAChE;AXqxC+D;AACA;AY35CtC;AAc+B;AACzB,EAAA;AACyB,EAAA;AACxD;AAG8E;AAC9C,EAAA;AACyB,EAAA;AACzD;AAUiC;AACiB,EAAA;AACrC,EAAA;AACF,EAAA;AACe,IAAA;AACV,MAAA;AACwB,QAAA;AAClC,MAAA;AACF,IAAA;AACwC,IAAA;AAClC,IAAA;AACkC,IAAA;AAChC,IAAA;AACV,EAAA;AACF;AAM2B;AAC2B,EAAA;AACb,IAAA;AACvC,EAAA;AACF;AAGyG;AACrF,EAAA;AACD,EAAA;AACmC,EAAA;AAC5B,IAAA;AACqB,IAAA;AAC/B,MAAA;AAC8B,QAAA;AACnB,QAAA;AACrB,MAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAGuE;AACnD,EAAA;AAC0B,EAAA;AACrC,EAAA;AACT;AZ43C+D;AACA;AanxC9B;AACvB,EAAA;AACC,EAAA;AACK,EAAA;AAChB;AAGsE;AACpD,EAAA;AACF,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACG,IAAA;AACE,IAAA;AACA,MAAA;AACG,MAAA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACJ,IAAA;AACO,MAAA;AACJ,QAAA;AACI,QAAA;AACI,QAAA;AAClB,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACY,QAAA;AACD,QAAA;AACD,UAAA;AACG,UAAA;AACD,UAAA;AACZ,QAAA;AACkB,QAAA;AAChB,UAAA;AACF,QAAA;AACkB,QAAA;AACH,UAAA;AACL,UAAA;AACV,QAAA;AACQ,QAAA;AACV,MAAA;AACF,IAAA;AACkB,IAAA;AACH,IAAA;AACjB,EAAA;AACiB,EAAA;AACH,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACG,IAAA;AACE,IAAA;AACA,MAAA;AACG,MAAA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACN,MAAA;AACC,QAAA;AACA,QAAA;AACV,MAAA;AACS,MAAA;AACC,QAAA;AACA,QAAA;AACV,MAAA;AACF,IAAA;AACa,IAAA;AACD,MAAA;AACR,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACkB,IAAA;AACH,IAAA;AACjB,EAAA;AACiB,EAAA;AACH,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACG,IAAA;AACE,IAAA;AACA,MAAA;AACG,MAAA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACJ,IAAA;AACK,IAAA;AACH,IAAA;AACjB,EAAA;AACwB,EAAA;AACV,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACG,IAAA;AACE,IAAA;AACA,MAAA;AACG,MAAA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACJ,IAAA;AACO,MAAA;AACJ,QAAA;AACI,QAAA;AACK,QAAA;AACT,QAAA;AACD,QAAA;AACD,UAAA;AACG,UAAA;AACD,UAAA;AACZ,QAAA;AACkB,QAAA;AAChB,UAAA;AACF,QAAA;AACkB,QAAA;AACH,UAAA;AACL,UAAA;AACV,QAAA;AACQ,QAAA;AACV,MAAA;AACF,IAAA;AACkB,IAAA;AACH,IAAA;AACjB,EAAA;AACuB,EAAA;AACT,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACE,IAAA;AACV,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACF,IAAA;AACe,IAAA;AACA,MAAA;AACG,MAAA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACJ,IAAA;AACO,MAAA;AACJ,QAAA;AACI,QAAA;AACI,QAAA;AAClB,UAAA;AACA,UAAA;AACF,QAAA;AACY,QAAA;AACD,QAAA;AACD,UAAA;AACG,UAAA;AACD,UAAA;AACZ,QAAA;AACkB,QAAA;AAChB,UAAA;AACF,QAAA;AACkB,QAAA;AACH,UAAA;AACL,UAAA;AACV,QAAA;AACQ,QAAA;AACV,MAAA;AACF,IAAA;AACkB,IAAA;AACH,IAAA;AACjB,EAAA;AACqC,EAAA;AACvB,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACI,MAAA;AACD,MAAA;AACF,MAAA;AACX,IAAA;AACa,IAAA;AACE,IAAA;AACA,MAAA;AACG,MAAA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACJ,IAAA;AACO,MAAA;AACJ,QAAA;AACI,QAAA;AACI,QAAA;AAClB,UAAA;AACF,QAAA;AACY,QAAA;AACD,QAAA;AACD,UAAA;AACG,UAAA;AACD,UAAA;AACZ,QAAA;AACkB,QAAA;AAChB,UAAA;AACF,QAAA;AACkB,QAAA;AACH,UAAA;AACL,UAAA;AACV,QAAA;AACQ,QAAA;AACV,MAAA;AACF,IAAA;AACkB,IAAA;AACH,IAAA;AACjB,EAAA;AACwB,EAAA;AACV,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACG,IAAA;AACE,IAAA;AACA,MAAA;AACG,MAAA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACJ,IAAA;AACK,IAAA;AACH,IAAA;AACjB,EAAA;AACa,EAAA;AACC,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACE,IAAA;AACV,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,U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AA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACJ,IAAA;AACO,MAAA;AACJ,QAAA;AACI,QAAA;AACI,QAAA;AAClB,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACY,QAAA;AACD,QAAA;AACD,UAAA;AACG,UAAA;AACD,UAAA;AACZ,QAAA;AACkB,QAAA;AAChB,UAAA;AACF,QAAA;AACkB,QAAA;AACH,UAAA;AACL,UAAA;AACV,QAAA;AACQ,QAAA;AACV,MAAA;AACF,IAAA;AACkB,IAAA;AACH,IAAA;AACjB,EAAA;AACuB,EAAA;AACT,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACE,IAAA;AACV,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA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A;AACF,QAAA;AACkB,QAAA;AACH,UAAA;AACL,UAAA;AACV,QAAA;AACQ,QAAA;AACV,MAAA;AACF,IAAA;AACkB,IAAA;AACR,MAAA;AACC,MAAA;AACX,IAAA;AACe,IAAA;AACjB,EAAA;AACa,EAAA;AACC,IAAA;AACC,IAAA;AACL,IAAA;AACA,IAAA;AACQ,IAAA;AACR,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACE,IAAA;AACV,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACN,QAAA;AACZ,UAAA;AACF,QAAA;AACgB,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE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R,IAAA;AACY,IAAA;AACX,IAAA;AACC,IAAA;AACE,IAAA;AACV,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACN,QAAA;AACZ,UAAA;AACF,QAAA;AACgB,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACN,QAAA;AACZ,UAAA;AACA,UAAA;AACF,QAAA;AACgB,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACF,IAAA;AACe,IAAA;AACA,MAAA;AACG,MAAA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACJ,IAAA;AACD,MAAA;AACR,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACkB,IAAA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CgB,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACA,MAAA;AACc,QAAA;AACC,QAAA;AACE,QAAA;AACE,QAAA;AACT,QAAA;AACY,QAAA;AACL,QAAA;AACC,QAAA;AACH,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,UAAA;AACZ,QAAA;AACF,MAAA;AACF,IAAA;AACe,IAAA;AACA,MAAA;AACG,MAAA;AACN,MAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AACiB,IAAA;AACN,MAAA;AACC,QAAA;AACA,QAAA;AACV,MAAA;AACS,MAAA;AACC,QAAA;AACA,QAAA;AACV,MAAA;AACF,IAAA;AACa,IAAA;AACU,MAAA;AACnB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACU,MAAA;AACR,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACkB,MAA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AAA;AACL,MAAA;AACb,IAAA;AACiB,IAAA;AACJ,IAAA;AACK,IAAA;AACH,IAAA;AACjB,EAAA;AACF;AAGkG;AACnF,EAAA;AACF,IAAA;AACI,MAAA;AACH,MAAA;AACA,MAAA;AACK,MAAA;AACL,MAAA;AACV,IAAA;AACS,IAAA;AACI,MAAA;AACH,MAAA;AACA,MAAA;AACK,MAAA;AACL,MAAA;AACV,IAAA;AACF,EAAA;AACW,EAAA;AACA,IAAA;AACI,MAAA;AACH,MAAA;AACA,MAAA;AACK,MAAA;AACL,MAAA;AACV,IAAA;AACS,IAAA;AACI,MAAA;AACH,MAAA;AACA,MAAA;AACK,MAAA;AACL,MAAA;AACV,IAAA;AACF,EAAA;AACiB,EAAA;AACN,IAAA;AACI,MAAA;AACH,MAAA;AACA,MAAA;AACK,MAAA;AACL,MAAA;AACV,IAAA;AACS,IAAA;AACI,MAAA;AACH,MAAA;AACA,MAAA;AACK,MAAA;AACL,MAAA;AACV,IAAA;AACF,EAAA;AACF;AAQ6D;AAC9C,EAAA;AACI,EAAA;AACgB,EAAA;AACL,EAAA;AACL,EAAA;AACQ,EAAA;AACZ,EAAA;AACI,EAAA;AACL,EAAA;AACA,EAAA;AACI,EAAA;AACC,EAAA;AACS,EAAA;AACO,EAAA;AACX,EAAA;AACP,EAAA;AACQ,EAAA;AAChB,EAAA;AACE,EAAA;AACM,EAAA;AACJ,EAAA;AACE,EAAA;AACF,EAAA;AACP,EAAA;AACS,EAAA;AACP,EAAA;AACK,EAAA;AACL,EAAA;AACqB,EAAA;AACT,EAAA;AACL,EAAA;AACA,EAAA;AACT,EAAA;AACc,EAAA;AACf,EAAA;AACG,EAAA;AACH,EAAA;AACqB,EAAA;AACd,EAAA;AACL,EAAA;AACb;AAKqD;AACtC,EAAA;AACI,EAAA;AACgB,EAAA;AACL,EAAA;AACL,EAAA;AACA,EAAA;AACL,EAAA;AACL,EAAA;AACE,EAAA;AACM,EAAA;AACF,EAAA;AACF,EAAA;AACL,EAAA;AACK,EAAA;AACP,EAAA;AACD,EAAA;AACG,EAAA;AACF,EAAA;AACD,EAAA;AACG,EAAA;AA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;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACA,IAAA;AACc,MAAA;AACL,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACQ,MAAA;AACU,MAAA;AACL,MAAA;AACL,MAAA;AACC,MAAA;AACX,IAAA;AACF,EAAA;AACU,EAAA;AACC,IAAA;AACG,IAAA;AACH,IAAA;AACC,IAAA;AACZ,EAAA;AACY,EAAA;AACV,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACY,EAAA;AACC,IAAA;AACG,IAAA;AACK,MAAA;AACJ,MAAA;AACF,MAAA;AACb,IAAA;AACF,EAAA;AACF;AAS0D;AAC1C,EAAA;AACH,EAAA;AACK,EAAA;AACJ,EAAA;AACM,EAAA;AAChB,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAYqD;AAC3C,EAAA;AACC,EAAA;AACK,EAAA;AACN,EAAA;AACN,IAAA;AACc,MAAA;AACA,MAAA;AACI,MAAA;AACI,MAAA;AAClB,QAAA;AAC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AA;AACF,MAAA;AACY,MAAA;AACD,MAAA;AACD,QAAA;AACG,QAAA;AACD,QAAA;AACZ,MAAA;AACkB,MAAA;AAChB,QAAA;AACA,QAAA;AACF,MAAA;AACkB,MAAA;AACH,QAAA;AACL,QAAA;AACV,MAAA;AACQ,MAAA;AACV,IAAA;AACF,EAAA;AACU,EAAA;AACC,IAAA;AACC,IAAA;AACF,MAAA;AACa,MAAA;AACH,MAAA;AACM,MAAA;AACC,MAAA;AACD,MAAA;AACL,MAAA;AACF,MAAA;AACJ,MAAA;AACb,IAAA;AACF,EAAA;AACF;AbssC+D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/maxs/gitrepos/node-autotask/dist/chunk-V3XPLTIR.cjs","sourcesContent":[null,"/**\n * Logger hook + credential redaction (ARCHITECTURE sections 14, 9).\n *\n * The transport logs at `debug` per request (method and path only — never query\n * values, never header values) and at `warn` on retry/429. The redaction set\n * covers the four credential-shaped header names plus `authToken`\n * (name-based, case-insensitive, caller-extensible). `NoopLogger` is the\n * default sink; `Logger` methods are all optional so `console` is assignable.\n */\n\nexport interface Logger {\n debug?(message: string, ...args: unknown[]): void;\n info?(message: string, ...args: unknown[]): void;\n warn?(message: string, ...args: unknown[]): void;\n error?(message: string, ...args: unknown[]): void;\n}\n\n/** Default no-op logger. */\nexport const NoopLogger: Logger = {};\n\n/** Replacement value written over every credential-shaped value. */\nexport const REDACTED = '[REDACTED]';\n\n/**\n * Credential-shaped header names redacted by name (case-insensitive,\n * separator-insensitive). `authToken` included: token responses are credential\n * payloads (ARCHITECTURE section 9).\n */\nexport const CREDENTIAL_HEADER_NAMES: readonly string[] = [\n 'ApiIntegrationCode',\n 'UserName',\n 'Secret',\n 'ImpersonationResourceId',\n 'authToken',\n];\n\n/** Keys are compared lower-cased with `_`/`-` removed, so every spelling of the same name matches. */\nfunction normalizeKey(key: string): string {\n return key.toLowerCase().replace(/[_-]/g, '');\n}\n\nconst CREDENTIAL_KEY_SET: ReadonlySet<string> = new Set<string>(CREDENTIAL_HEADER_NAMES.map(normalizeKey));\n\n/** True when `name` matches a credential-shaped key (built-in set or `extraSecretKeys`). */\nexport function isCredentialHeaderName(name: string, extraSecretKeys?: readonly string[]): boolean {\n const normalized = normalizeKey(name);\n if (CREDENTIAL_KEY_SET.has(normalized)) return true;\n if (extraSecretKeys === undefined) return false;\n return extraSecretKeys.some((extra) => normalizeKey(extra) === normalized);\n}\n\n/** A plain record: object whose prototype is Object.prototype or null. */\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Recursively replace credential-shaped keys with `[REDACTED]`. Returns a copy\n * — the input is never mutated. The one redactor used for audit payloads and\n * log-side data (the transport never interpolates header values into log lines).\n * Class instances (Date, Blob, ...) are opaque and passed through unchanged.\n */\nexport function redactRecord(value: unknown, extraSecretKeys?: readonly string[]): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => redactRecord(item, extraSecretKeys));\n }\n if (isPlainRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n out[key] = isCredentialHeaderName(key, extraSecretKeys) ? REDACTED : redactRecord(item, extraSecretKeys);\n }\n return out;\n }\n return value;\n}\n","/**\n * Response-side field redaction (the INV-A1 leak hotfix).\n *\n * The A1 leak audit (.run/reports/leak-audit.md) confirmed the SDK response\n * path is a pass-through: plaintext credential field values (password,\n * secretKey, secret) and personal/business-sensitive data reach every caller.\n * This module is the single transform applied at the two response sites:\n *\n * - the 2xx branch of `HttpClient.request()` (src/http.ts) — the choke point\n * for every JSON response surface (dedicated tools, invoke, compositions);\n * - `errorFromStatus` (src/errors.ts) — the vendor 4xx/5xx body (vendorError\n * + the adopted message), which may echo a request body that carried a\n * secret.\n *\n * Two classes, two behaviors (the A1 design):\n *\n * - SECRET (always redacted, NO opt-out): the pinned exact vendor-casing key\n * set `password` / `secretKey` / `secret`. The A1 census proves these 3\n * names are secret-only across all 787 swagger definitions (17,167 leaf\n * fields), so name-based matching is safe — exact case-sensitive keys, no\n * regex. The SDK is the only permission boundary (the vendor API has no\n * read-only key), so credential values never cross the SDK boundary in a\n * response.\n * - PII + CONFIDENTIAL (redacted by DEFAULT, opt-out via\n * `redactPersonalData: false`): the pinned name sets from the A1 artifacts\n * (41 personal + 12 confidential, exact vendor casing).\n *\n * EXEMPT: `authToken` (AuthTokenResultModel, GET /V1.0/Authenticate) — the\n * endpoint's purpose is token issuance; it is in no pinned set and is never\n * redacted (pinned by test).\n *\n * RESPONSE-ONLY by design: request bodies are NEVER redacted (password /\n * secretKey legitimately travel IN create/patch requests; the G10b\n * request-body-audit redaction in utils/index.ts is a separate mechanism and\n * is untouched). The transform redacts a key wherever it appears in the\n * parsed body (deep — object values, arrays of items, nested models),\n * replaces the VALUE with the existing `REDACTED` marker (src/logger.ts),\n * keeps the key (stable shape), returns a copy, and never mutates the input.\n */\nimport { REDACTED } from './logger.js';\n\n/**\n * The SECRET class — ALWAYS redacted, no opt-out. Pinned exact vendor casing\n * (case-sensitive; the A1 census: each name appears only on secret-bearing\n * models). A pinned set, not a regex — see the module header for why.\n */\nexport const SECRET_RESPONSE_FIELDS: readonly string[] = [\n 'password', // ClientPortalUserModel\n 'secretKey', // the 5 webhook models\n 'secret', // IntegrationVendorInsightModel, IntegrationVendorWidgetModel\n];\n\n/**\n * The PII class — redacted by default, opt-out via `redactPersonalData:\n * false`. The 41 personal-data names from the A1 artifact (pii-refined.json\n * \"personal\"), exact vendor casing as found in the vendored swagger.\n */\nexport const PERSONAL_RESPONSE_FIELDS: readonly string[] = [\n 'additionalAddressInformation',\n 'additionalBillToAddressInformation',\n 'additionalShipToAddressInformation',\n 'address1',\n 'address2',\n 'addressLine',\n 'addressLine1',\n 'alternatePhone',\n 'alternatePhone1',\n 'alternatePhone2',\n 'billingAddress1',\n 'billingAddress2',\n 'billToAdditionalAddressInformation',\n 'billToCity',\n 'billToPostalCode',\n 'billToZipCode',\n 'city',\n 'email',\n 'email2',\n 'email3',\n 'emailAddress',\n 'emailAddress2',\n 'emailAddress3',\n 'extApprovalContactResponse',\n 'fax',\n 'faxNumber',\n 'gender',\n 'homePhone',\n 'mobilePhone',\n 'notificationEmailAddress',\n 'officePhone',\n 'phone',\n 'postalCode',\n 'recipientEmailAddress',\n 'rmmIsMobileDeviceManagementEnrolled',\n 'shipToAddress1',\n 'shipToAddress2',\n 'shipToCity',\n 'shipToPostalCode',\n 'userName',\n 'zipCode',\n];\n\n/**\n * The CONFIDENTIAL class (business/device-sensitive) — redacted by default,\n * opt-out via `redactPersonalData: false`. The 12 names from the A1 artifact\n * (pii-refined.json \"business\"), exact vendor casing (note `taxID`, not\n * `taxId`; `rmmDeviceAuditSNMPContact` with the vendor's SNMP casing).\n */\nexport const CONFIDENTIAL_RESPONSE_FIELDS: readonly string[] = [\n 'domain',\n 'domainExpirationDateTime',\n 'domainLastUpdatedDateTime',\n 'domainRegistrationDateTime',\n 'primaryContact',\n 'rmmDeviceAuditExternalIPAddress',\n 'rmmDeviceAuditIPAddress',\n 'rmmDeviceAuditMacAddress',\n 'rmmDeviceAuditMobileNumber',\n 'rmmDeviceAuditSNMPContact',\n 'taxID',\n 'webAddress',\n];\n\nconst SECRET_SET = new Set<string>(SECRET_RESPONSE_FIELDS);\nconst OPTIONAL_SET = new Set<string>([...PERSONAL_RESPONSE_FIELDS, ...CONFIDENTIAL_RESPONSE_FIELDS]);\n\n/** The redaction policy for one transform run (resolved from AutotaskConfig). */\nexport interface RedactionPolicy {\n /**\n * Redact the PII + CONFIDENTIAL classes. `false` (the `redactPersonalData:\n * false` opt-out) passes those fields through unredacted; the SECRET class\n * is ALWAYS redacted regardless.\n */\n redactPersonalData: boolean;\n}\n\n/** A plain record (prototype Object.prototype or null) — class instances are opaque. */\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Whether a field NAME is redacted under the policy (the SAME key-name sets\n * the response transform uses: SECRET always; PII + CONFIDENTIAL when\n * `redactPersonalData` is on). Exact vendor casing, case-sensitive.\n */\nexport function isRedactedFieldName(name: string, policy: RedactionPolicy): boolean {\n return SECRET_SET.has(name) || (policy.redactPersonalData && OPTIONAL_SET.has(name));\n}\n\n/**\n * Deep-redact the pinned response field names. Returns a copy (the input is\n * never mutated); the value of every key in a pinned set is replaced with the\n * `REDACTED` marker ('[REDACTED]'), the key itself is kept (stable shape).\n * Keys are matched by exact vendor casing (case-sensitive); scalars, null,\n * class instances and empty containers pass through unchanged.\n */\nexport function redactResponseBody(value: unknown, policy: RedactionPolicy): unknown {\n const personal = policy.redactPersonalData;\n if (Array.isArray(value)) {\n return value.map((entry) => redactResponseBody(entry, policy));\n }\n if (!isPlainRecord(value)) return value;\n const out: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n const pinned = SECRET_SET.has(key) || (personal && OPTIONAL_SET.has(key));\n out[key] = pinned ? REDACTED : redactResponseBody(entry, policy);\n }\n return out;\n}\n","import { redactResponseBody } from './redact.js';\n\n/**\n * AutotaskError hierarchy (ARCHITECTURE section 10).\n *\n * Every error carries the structured contract: `code` (stable SCREAMING_SNAKE\n * machine code), `category`, `retryable`, plus `operation`, `httpStatus`,\n * `vendorError` (the vendor payload under a documented key, deep-redacted —\n * the INV-A1 hotfix), `resourceIds`,\n * `suggestedAction` (deterministic next step only), `correlationId` and `url`.\n *\n * `item: null` on a single GET (HTTP 200) is a NOT FOUND, not a success — the\n * vendor's not-found signal (G1 envelope.md). The vendor documents no error\n * bodies; the shape `{ errors: [{ message, field?, code? }] }` is pinned from\n * the node's errorHandler and parsed defensively here.\n */\n\nexport type ErrorCategory =\n | 'auth'\n | 'not_found'\n | 'validation'\n | 'conflict'\n | 'rate_limit'\n | 'server'\n | 'network'\n | 'timeout'\n | 'resolution'\n | 'policy';\n\nexport interface AutotaskErrorOptions {\n code?: string;\n category?: ErrorCategory;\n operation?: string;\n httpStatus?: number;\n vendorError?: unknown;\n resourceIds?: (number | string)[];\n suggestedAction?: string;\n correlationId?: string;\n retryable?: boolean;\n url?: string;\n /**\n * The structured, deterministic extras that ride on the error WITHOUT\n * changing its contract: issue #9 — the recovery refusals' payload\n * (`{ resource, reason/note, ... }` on DELETE_BOUNDARY /\n * MARKER_UNSAFE_ID / RECOVERY_TRUNCATED); issue #14 — `emptyReason`\n * (the typed reason a miss / drift carries — { kind, note, authority,\n * remedy }) and `pointerNote` (the known-unusable-op pointer sentence).\n * Additive only — the status, code, message and retryability are never\n * derived from it.\n */\n details?: Record<string, unknown>;\n}\n\n/** A plain object record (prototype Object.prototype or null). */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nexport class AutotaskError extends Error {\n code: string;\n category: ErrorCategory;\n operation?: string;\n httpStatus?: number;\n vendorError?: unknown;\n resourceIds?: (number | string)[];\n suggestedAction?: string;\n correlationId?: string;\n retryable: boolean;\n url?: string;\n /** Issue #9/#14: the additive structured extras (recovery refusal payload; emptyReason / pointerNote) — never changes the error contract. */\n details?: Record<string, unknown>;\n\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message);\n this.name = 'AutotaskError';\n this.code = options.code ?? 'AUTOTASK_ERROR';\n this.category = options.category ?? 'server';\n this.retryable = options.retryable ?? false;\n this.operation = options.operation;\n this.httpStatus = options.httpStatus;\n this.vendorError = options.vendorError;\n this.resourceIds = options.resourceIds;\n this.suggestedAction = options.suggestedAction;\n this.correlationId = options.correlationId;\n this.url = options.url;\n this.details = options.details;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\n\nexport class AutotaskConfigError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'CONFIG_ERROR', category: 'validation', ...options });\n this.name = 'AutotaskConfigError';\n }\n}\n\nexport class AutotaskNetworkError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, {\n code: 'NETWORK_ERROR',\n category: 'network',\n retryable: true,\n suggestedAction: options.suggestedAction ?? 'Check connectivity to the Autotask zone and retry.',\n ...options,\n });\n this.name = 'AutotaskNetworkError';\n }\n}\n\nexport class AutotaskTimeoutError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, {\n code: 'TIMEOUT',\n category: 'timeout',\n retryable: true,\n suggestedAction: options.suggestedAction ?? 'Retry, narrow the query, or raise timeoutMs.',\n ...options,\n });\n this.name = 'AutotaskTimeoutError';\n }\n}\n\n/** The caller's `AbortSignal` fired: distinct from a timeout, never retried. */\nexport class AutotaskAbortError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'ABORTED', category: 'network', retryable: false, ...options });\n this.name = 'AutotaskAbortError';\n }\n}\n\n/** A response (or redirect) the transport refuses by policy: non-retryable. */\nexport class ResponseRejectedError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'RESPONSE_REJECTED', category: 'policy', retryable: false, ...options });\n this.name = 'ResponseRejectedError';\n }\n}\n\nexport class BadRequestError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'BAD_REQUEST', category: 'validation', ...options });\n this.name = 'BadRequestError';\n }\n}\n\nexport class UnauthorizedError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'UNAUTHORIZED', category: 'auth', ...options });\n this.name = 'UnauthorizedError';\n }\n}\n\nexport class ForbiddenError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'FORBIDDEN', category: 'auth', ...options });\n this.name = 'ForbiddenError';\n }\n}\n\nexport class NotFoundError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'NOT_FOUND', category: 'not_found', ...options });\n this.name = 'NotFoundError';\n }\n}\n\nexport class ConflictError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'CONFLICT', category: 'conflict', ...options });\n this.name = 'ConflictError';\n }\n}\n\nexport class UnprocessableEntityError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'VALIDATION_FAILED', category: 'validation', ...options });\n this.name = 'UnprocessableEntityError';\n }\n}\n\nexport class RateLimitError extends AutotaskError {\n /** Seconds the server asked the client to wait (`Retry-After`), when present. */\n retryAfter?: number;\n /** True when the call was refused locally (the tenant cooldown gate) and never sent. */\n notSent?: boolean;\n\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'RATE_LIMITED', category: 'rate_limit', retryable: true, ...options });\n this.name = 'RateLimitError';\n }\n}\n\nexport class ServerError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'SERVER_ERROR', category: 'server', retryable: true, ...options });\n this.name = 'ServerError';\n }\n}\n\n/**\n * Issue #24: a 2xx whose body does not parse as JSON and whose `Content-Type`\n * is NOT a JSON media type (the vendor maintenance / edge HTML page). The\n * vendor never processed the request — `retryable` is advisory (the transport\n * retries it per policy on idempotent methods only). The raw, HOST-SOURCED\n * free text lives ONLY in `details.bodySnippet` (the first 256 bytes,\n * truncation-only — name-based redaction is a no-op on free text; untrusted\n * host content for the served surface). A JSON-ish header\n * (`application/json*` or a plus-json suffix media type) or an ABSENT\n * header keeps `INVALID_RESPONSE` (the #13/W-A7 shape-drift key); JSON\n * under any other header still decodes (the decode attempt is\n * unconditional).\n */\nexport class UnexpectedContentTypeError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'UNEXPECTED_CONTENT_TYPE', category: 'server', retryable: true, ...options });\n this.name = 'UnexpectedContentTypeError';\n }\n}\n\n/**\n * Issue #25: a 2xx with an EMPTY body where a result was expected (the\n * transport's `expectBody` contract — non-DELETE by default; DELETE and 204\n * keep returning `undefined`). A blank 200 from a proxy or maintenance edge\n * is a transport fault, not \"no data\". `retryable` is advisory (true for\n * non-DELETE reads — the loop never retries 2xx). `details = { httpStatus,\n * method }`. The transport attaches the typed empty-reason details (issue\n * #14) on it before throwing, so a pinned blind surface keeps its stamp.\n */\nexport class EmptyResponseError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'EMPTY_RESPONSE', category: 'server', ...options });\n this.name = 'EmptyResponseError';\n }\n}\n\n/**\n * Issue #26: the host circuit breaker is OPEN and the call was refused\n * LOCALLY (pre-send — zero upstream calls, no hourly-limiter stamp, the\n * #6 cooldown gate's slot). `retryable: true` is a DELIBERATE divergence\n * from #6's `RATE_LIMITED_COOLDOWN` (`retryable: false`): the open period\n * is bounded and advertised via `retryAfter`, so retrying the SAME call\n * after the wait is the correct caller behaviour (service health, not\n * request shape — no narrowing needed). `notSent: true` is the shared\n * local-refusal marker. `details = { state: 'open' | 'half-open',\n * retryAfterMs, failureCount }` rides the error (and the MCP served\n * payload) verbatim.\n */\nexport class CircuitBreakerError extends AutotaskError {\n /** Seconds remaining in the open period (absent when the half-open probe budget is in flight). */\n retryAfter?: number;\n /** True when the call was refused locally (the circuit is open) and never sent. */\n notSent?: boolean;\n\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'CIRCUIT_BREAKER_OPEN', category: 'policy', retryable: true, ...options });\n this.name = 'CircuitBreakerError';\n }\n}\n\n/**\n * Skill 3.5.0 / L2 (finding A1): an opt-in `hostPolicy` bound refused the\n * configured (or discovery-provided) host at CONFIG resolution — a typed\n * config error, thrown BEFORE any wire activity (zero fetch; the issue-#43\n * re-point never happens and the original 401 propagates untouched).\n * `retryable: false` (the same contract as the #6 cooldown refusal): the\n * bound is a caller policy, not service health, so retrying the identical\n * call cannot succeed. `details = { bound: 'private' | 'allowlist',\n * origin }` rides the error verbatim and names the offending canonical\n * origin.\n */\nexport class HostPolicyDeniedError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'HOST_POLICY_DENIED', category: 'policy', retryable: false, ...options });\n this.name = 'HostPolicyDeniedError';\n }\n}\n\nexport class ResolutionError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, {\n code: options.code === undefined ? 'RESOLUTION_AMBIGUOUS' : options.code,\n category: 'resolution',\n ...options,\n });\n this.name = 'ResolutionError';\n }\n}\n\nexport class PaginationLimitError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, {\n code: 'PAGINATION_LIMIT',\n category: 'policy',\n suggestedAction:\n options.suggestedAction ??\n 'Narrow the query with a tighter filter so the walk stays under the 1000-page limit.',\n ...options,\n });\n this.name = 'PaginationLimitError';\n }\n}\n\nexport class QueryTooLongError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, {\n code: 'QUERY_TOO_LONG',\n category: 'policy',\n suggestedAction:\n options.suggestedAction ??\n 'Use the default POST query path (omit via: \"get\") for filters above the 2048-char GET cap.',\n ...options,\n });\n this.name = 'QueryTooLongError';\n }\n}\n\n/** One vendor field rejection, parsed from the error body. */\nexport interface VendorFieldError {\n message?: string;\n field?: string;\n code?: string;\n}\n\n/**\n * Parse the vendor `errors` array defensively (swagger documents no error\n * bodies). TWO live-verified shapes:\n * 1. object entries `[{ message, field?, code? }]` (the node seed shape);\n * 2. STRING entries (the ww29 live-verified shape — S12-A discovery,\n * e.g. `errors: [\"Missing Required Field: title.\", \"Data violation: ...\",\n * \"Error updating entity for record number [1].\"]`). A string entry\n * matching `Missing Required Field: <name>` yields `{ field: <name>,\n * message: <the string> }`; any other string yields `{ message }`.\n * Mixed arrays are supported; other entry types are dropped.\n */\nconst MISSING_REQUIRED_FIELD = /^Missing Required Field:\\s*([A-Za-z_][A-Za-z0-9_]*)/;\n\nexport function parseVendorErrors(body: unknown): VendorFieldError[] | undefined {\n if (!isRecord(body) || !Array.isArray(body.errors)) return undefined;\n const out: VendorFieldError[] = [];\n for (const entry of body.errors) {\n if (typeof entry === 'string') {\n const item: VendorFieldError = { message: entry };\n const m = MISSING_REQUIRED_FIELD.exec(entry);\n if (m) item.field = m[1];\n out.push(item);\n continue;\n }\n if (!isRecord(entry)) continue;\n const item: VendorFieldError = {};\n if (typeof entry.message === 'string') item.message = entry.message;\n if (typeof entry.field === 'string') item.field = entry.field;\n if (typeof entry.code === 'string') item.code = entry.code;\n if (item.message !== undefined || item.field !== undefined || item.code !== undefined) {\n out.push(item);\n }\n }\n return out;\n}\n\n/**\n * #23: the deterministic vendor 500 phrase list — a documented HEURISTIC that\n * holds only wording seen in real responses (the vendor answers some rejected\n * input with a 500, e.g. a field value over its maxLength). Anything not\n * matched stays a plain (retryable) server error. Extend only with a new\n * live-verified phrase.\n */\nconst DETERMINISTIC_VENDOR_500_PHRASES: readonly RegExp[] = [/exceeds maximum length/i];\n\n/**\n * #23: true when the parsed vendor `errors[]` entries of a 500 name a known\n * deterministic field-validation phrase (case-insensitive, over every\n * entry's message — string and object entries alike; `parseVendorErrors`\n * normalises both). The shared signal for the transport's no-retry decision\n * and the #26 breaker predicate (key on this, never on INVALID_RESPONSE).\n */\nexport function isDeterministicVendor500(entries: VendorFieldError[] | undefined): boolean {\n if (entries === undefined) return false;\n return entries.some(\n (entry) => entry.message !== undefined && DETERMINISTIC_VENDOR_500_PHRASES.some((phrase) => phrase.test(entry.message as string)),\n );\n}\n\n/** Format one vendor entry as `[<code>] Field '<field>': <message>` (absent parts dropped). */\nfunction formatVendorEntry(entry: VendorFieldError): string {\n const parts: string[] = [];\n if (entry.code) parts.push(`[${entry.code}]`);\n if (entry.field) parts.push(`Field '${entry.field}':`);\n if (entry.message) parts.push(entry.message);\n return parts.join(' ');\n}\n\n/**\n * The vendor detail line: entries joined with ` | `, or the top-level vendor\n * `message`, or undefined when the body names nothing.\n */\nexport function formatVendorDetail(body: unknown): string | undefined {\n const entries = parseVendorErrors(body);\n if (entries && entries.length > 0) {\n const formatted = entries.map(formatVendorEntry).filter((line) => line.length > 0);\n if (formatted.length > 0) return formatted.join(' | ');\n }\n if (isRecord(body) && typeof body.message === 'string' && body.message.trim().length > 0) {\n return body.message.trim();\n }\n return undefined;\n}\n\n/**\n * A vendor code adopted as the stable machine code: a single token of at least\n * 3 chars containing at least one digit (e.g. `Itgenatr005`, `E001`). Plain\n * words (`Invalid`) and sentences are not machine codes.\n */\nfunction isMachineCode(code: string): boolean {\n return /^[A-Za-z0-9][A-Za-z0-9_-]{2,}$/.test(code) && /\\d/.test(code);\n}\n\n/** The class for a documented status (unmapped statuses return the base). */\ntype ErrorCtor = new (message: string, options: AutotaskErrorOptions) => AutotaskError;\n\n/** The class for a documented status (4xx table + 5xx ServerError); unmapped → null. */\nfunction errorClassForStatus(status: number): ErrorCtor | null {\n switch (status) {\n case 400: return BadRequestError;\n case 401: return UnauthorizedError;\n case 403: return ForbiddenError;\n case 404: return NotFoundError;\n case 409:\n case 412: return ConflictError;\n case 422: return UnprocessableEntityError;\n case 429: return RateLimitError;\n default:\n return status >= 500 && status < 600 ? ServerError : null;\n }\n}\n\nfunction statusDefaultMessage(status: number): string {\n switch (status) {\n case 401: return 'Authentication failed: Invalid credentials';\n case 404: return 'Resource not found';\n default: return `Autotask API request failed with status ${status}`;\n }\n}\n\n/** Suffix length cap for the vendor body appended to the default status message. */\nconst VENDOR_BODY_SUFFIX_LIMIT = 200;\n\n/**\n * Render the (already redacted) vendor body as a short suffix for the default\n * status message. Parsed bodies are JSON.stringified; a raw non-JSON text body\n * passes through as text. Absent and empty bodies (`{}`, `[]`) render nothing\n * — the message stays exactly the status default.\n */\nfunction vendorBodySuffix(body: unknown): string | undefined {\n const rendered = typeof body === 'string' ? body : JSON.stringify(body);\n if (rendered === undefined || rendered === 'null' || rendered === '{}' || rendered === '[]') return undefined;\n return rendered.length > VENDOR_BODY_SUFFIX_LIMIT ? rendered.slice(0, VENDOR_BODY_SUFFIX_LIMIT) : rendered;\n}\n\n/**\n * What the transport knows about the credential values it actually put on the wire for the failed\n * attempt. Only the header NAMES are carried — a value never leaves the transport.\n */\nexport interface CredentialShapeExpectation {\n /** Credential header names whose values were sent. */\n headerNames: readonly string[];\n /** True when EVERY one of those values had a clean shape. */\n allValuesClean: boolean;\n /** The shape artifact found, when one was found (never the value itself). */\n problem?: string;\n}\n\n/** The two fixed, value-free 401 sentences. */\nconst DIAGNOSTIC_SHAPE_ANOMALY =\n 'sent value shows shell-quoting/line-break artifacts — check your env load';\nconst DIAGNOSTIC_NO_ANOMALY =\n 'sent value shows no shape anomalies — credentials or account state are the likely cause';\n\n/** The pointer a 401's shape diagnostic carries to the canonical env load. */\nexport const CREDENTIAL_SHAPE_POINTER =\n 'Load the credential the way the file documents: shell-sourced (`set -a; . ./.env; set +a`) or ' +\n 'via loadAutotaskCredentialsFromEnv() from node-autotask — a quote-preserving parser hands the ' +\n 'value over with its quotes intact, which the vendor rejects as invalid credentials.';\n\n/**\n * The `details` extras a 401 gains from the credential shape of the sent value. Returns `undefined`\n * when there is nothing to say (no expectation supplied), so an `errorFromStatus(401, body)` call\n * behaves exactly as before.\n */\nfunction credentialDiagnosticDetails(\n credential: CredentialShapeExpectation | undefined,\n): Record<string, unknown> | undefined {\n if (credential === undefined) return undefined;\n const diagnostic = credential.allValuesClean\n ? DIAGNOSTIC_NO_ANOMALY\n : `${DIAGNOSTIC_SHAPE_ANOMALY} (${credential.problem ?? 'shape anomaly detected'})`;\n return { diagnostic, pointerNote: CREDENTIAL_SHAPE_POINTER };\n}\n\n/**\n * Merge the extras a 401 already carries (the issue-#43 `zoneRecovery` detail, the issue-#14\n * pointer/emptyReason) with the C3 credential diagnostic, field by field. Later fields win.\n */\nexport function mergeDetails(\n base: Record<string, unknown> | undefined,\n extra: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (base === undefined) return extra;\n if (extra === undefined) return base;\n return { ...base, ...extra };\n}\n\nfunction suggestedActionForStatus(status: number): string | undefined {\n switch (status) {\n case 400:\n case 422:\n return 'Fix the request payload; see the vendor error for the offending field.';\n case 401:\n return 'Check the API integration code, username and secret (3-header auth).';\n case 403:\n return 'Verify permissions; if ImpersonationResourceId is set, retry without it.';\n case 404:\n return 'Verify the id, or resolve the record by name first.';\n case 409:\n case 412:\n return 'Re-read the record and retry with current values.';\n case 429:\n return 'Back off and retry; honour Retry-After.';\n default:\n return status >= 500 ? 'Retry with backoff; the server error is transient.' : undefined;\n }\n}\n\n/**\n * Map an HTTP status + raw vendor body to the typed error (ARCHITECTURE\n * section 10). Keeps the raw body under `vendorError` and adopts a vendor\n * `code` that looks like a stable machine code (top-level, then the first\n * entry's) — otherwise the status-derived code is kept.\n *\n * The INV-A1 hotfix (second site): the vendor body is deep-redacted ONCE,\n * before anything is derived from it — so `vendorError` and the adopted\n * message (computed from the redacted body) never carry a pinned field value\n * (a 4xx that echoes a request body which carried a secret would otherwise\n * leak through the error path). `redactPersonalData` (default true) gates\n * the PII/CONFIDENTIAL classes; the SECRET class is always redacted.\n *\n * When the body names nothing (no `errors[]` entry, no top-level `message`),\n * the default status message gains a `: <body>` suffix — the redacted body\n * (parsed → JSON text, raw → text) truncated to 200 chars — so 4xx/5xx\n * triage sees the vendor text in the message itself.\n */\nexport function errorFromStatus(\n status: number,\n body: unknown,\n url?: string,\n operation?: string,\n redactPersonalData = true,\n credential?: CredentialShapeExpectation,\n): AutotaskError {\n const safeBody = redactResponseBody(body, { redactPersonalData });\n let detail = formatVendorDetail(safeBody);\n // message hygiene: the parsed-entry detail honors the same 200-char bound\n // as the raw-body suffix (a long vendor error string never floods the message)\n if (detail !== undefined && detail.length > VENDOR_BODY_SUFFIX_LIMIT) {\n detail = detail.slice(0, VENDOR_BODY_SUFFIX_LIMIT);\n }\n const suffix = detail === undefined ? vendorBodySuffix(safeBody) : undefined;\n const message =\n detail ?? (suffix !== undefined ? `${statusDefaultMessage(status)}: ${suffix}` : statusDefaultMessage(status));\n const mapped = errorClassForStatus(status);\n const Ctor: ErrorCtor = mapped ?? AutotaskError;\n const code = mapped !== null ? defaultCodeForClass(mapped) : `HTTP_${status}`;\n const entries = parseVendorErrors(safeBody);\n const vendorCodeCandidate =\n (isRecord(safeBody) && typeof safeBody.code === 'string' ? safeBody.code : undefined) ??\n (entries?.[0]?.code ?? undefined);\n // C3 (2026-10-07 incident class): a 401 whose sent credential values carried a shell-quoting or\n // line-break artifact gains a value-free `details.diagnostic` naming the env load as the suspect.\n // The message and `suggestedAction` are unchanged (append, never replace) — the diagnostic rides\n // as a separate field, and a direct `errorFromStatus(401, body)` call (no expectation supplied)\n // behaves exactly as before.\n const credentialDetails = status === 401 ? credentialDiagnosticDetails(credential) : undefined;\n const extraDetails = mergeDetails(undefined, credentialDetails);\n const err = new Ctor(message, {\n code: vendorCodeCandidate !== undefined && isMachineCode(vendorCodeCandidate) ? vendorCodeCandidate : code,\n httpStatus: status,\n vendorError: safeBody,\n url,\n operation,\n retryable: status === 429 || status >= 500,\n suggestedAction: suggestedActionForStatus(status),\n ...(extraDetails !== undefined ? { details: extraDetails } : {}),\n });\n if (Ctor === AutotaskError) err.name = 'AutotaskError';\n // #23: a deterministic vendor field-validation 500 (a known phrase) is a\n // PERMANENT failure — the same body fails identically on retry. Keep the\n // class (ServerError) + code (SERVER_ERROR) + httpStatus (500), override\n // the 5xx retryable default, and point at the field catalog (the\n // deterministic suggestedAction — no vendor free text).\n if (status >= 500 && isDeterministicVendor500(entries)) {\n err.retryable = false;\n err.details = mergeDetails(err.details, { deterministic: true });\n const dot = operation !== undefined ? operation.indexOf('.') : -1;\n const resource = operation !== undefined && dot > 0 ? operation.slice(0, dot) : undefined;\n err.suggestedAction =\n 'Deterministic field rejection — fix the value, do not retry. ' +\n (resource !== undefined\n ? `Consult ${resource}.getFieldInfo for the field catalog (types, required, maxLength).`\n : \"Consult the resource's getFieldInfo for the field catalog (types, required, maxLength).\");\n }\n return err;\n}\n\n/**\n * Stale-object protection (ARCHITECTURE section 19.3): the caller-supplied\n * `lastModifiedDate` no longer matches the vendor's current value. No\n * `If-Match`/ETag exists in the API — the plan's `staleCheck` field is the\n * comparison.\n */\nexport class StaleObjectError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, {\n code: 'STALE_OBJECT',\n category: 'conflict',\n suggestedAction: 'Re-read the record and retry with the fresh lastModifiedDate.',\n ...options,\n });\n this.name = 'StaleObjectError';\n }\n}\n\n/**\n * A deliberate-act refusal (section 19.5 R4): a destructive or\n * approval-gated operation was invoked without its exact confirmation flag.\n */\nexport class ConfirmationRequiredError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'CONFIRMATION_REQUIRED', category: 'policy', ...options });\n this.name = 'ConfirmationRequiredError';\n }\n}\n\n/**\n * Issue #9 (P1): the vendor defines no DELETE for the requested resource —\n * a `recovery` delete refused PRE-SEARCH (zero wire). The note carries the\n * spec-derived boundary sentence (plan.deleteBoundaries) + the UI-only\n * cleanup remedy. Never a raw vendor 405: the boundary is known locally\n * (the vendored spec audit) and the refusal happens before any request.\n */\nexport class DeleteBoundaryError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'DELETE_BOUNDARY', category: 'policy', ...options });\n this.name = 'DeleteBoundaryError';\n }\n}\n\n/**\n * Issue #9 (P1): a matched record's id is NOT representable as a safe JS\n * integer (beyond Number.MAX_SAFE_INTEGER) — the match CANNOT be addressed\n * through the SDK's typed delete surface. Never a silent skip: the op\n * refuses with this code (delete) or marks the match id null (find) so the\n * caller sees the unaddressable record and can clean it up via the UI.\n */\nexport class MarkerUnsafeIdError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'MARKER_UNSAFE_ID', category: 'policy', ...options });\n this.name = 'MarkerUnsafeIdError';\n }\n}\n\n/**\n * Issue #9: the recovery's bounded search TRIPPED its match cap (more\n * matches exist than `limit`) — the op refuses instead of returning a\n * silently truncated (or silently empty) result. Retry with a higher\n * `limit` (max 100) or a narrower `marker` / `filter`.\n */\nexport class RecoveryTruncatedError extends AutotaskError {\n constructor(message: string, options: AutotaskErrorOptions = {}) {\n super(message, { code: 'RECOVERY_TRUNCATED', category: 'policy', ...options });\n this.name = 'RecoveryTruncatedError';\n }\n}\n\n/** The status-derived machine code for each documented class. */\nfunction defaultCodeForClass(Ctor: ErrorCtor): string {\n switch (Ctor) {\n case BadRequestError: return 'BAD_REQUEST';\n case UnauthorizedError: return 'UNAUTHORIZED';\n case ForbiddenError: return 'FORBIDDEN';\n case NotFoundError: return 'NOT_FOUND';\n case ConflictError: return 'CONFLICT';\n case UnprocessableEntityError: return 'VALIDATION_FAILED';\n case RateLimitError: return 'RATE_LIMITED';\n default: return 'SERVER_ERROR';\n }\n}\n\n/** Type guard for the hierarchy. */\nexport function isAutotaskError(err: unknown): err is AutotaskError {\n return err instanceof AutotaskError;\n}\n","/**\n * Credential VALUE shape checks — the intake guard for the 2026-10-07 incident class.\n *\n * A `.env` file may SINGLE-QUOTE a value on purpose (a secret containing `$` must be\n * single-quoted so the shell does not expand it). The shell strips those quotes when the file\n * is loaded with `set -a; . ./.env; set +a`; a quote-PRESERVING loader (most `dotenv` variants,\n * a hand-rolled `split('=')`) hands the value over with its quotes intact. Such a value is\n * printable ASCII, so it passes every check in the transport, reaches the vendor as\n * `Secret: 'a$b'` and comes back as an opaque 401 that looks like bad credentials. The\n * incidents this guards against cost three probe cycles before anyone suspected the load.\n *\n * `credentialShapeProblem()` names the artifact WITHOUT ever repeating the value; callers turn it\n * into a typed, value-free error (construction) or a value-free `diagnostic` (401 annotation).\n *\n * Two knobs match the two call sites:\n * - interior CR/LF is always reported (a leak risk and a fetch `TypeError` risk, unhealthy for a\n * value however it was loaded);\n * - edge whitespace and surrounding quotes are reported by default and only skipped where the\n * caller legitimately normalizes blank/trim (`skipEdgeWhitespace`, `skipSurroundingQuotes`).\n */\n\n/** The shape artifacts a loaded credential value can carry. */\nexport type CredentialShapeProblem =\n | 'leading whitespace'\n | 'trailing whitespace'\n | 'single- or double-quote surrounding the value'\n | 'carriage return';\n\n/** Where the guards do not apply, because the caller normalizes that artifact itself. */\nexport interface CredentialShapeOptions {\n /** Skip the edge-whitespace check (call sites that refuse whitespace-only values). */\n skipEdgeWhitespace?: boolean;\n /** Skip the surrounding-quote check (call sites that refuse whitespace-only values). */\n skipSurroundingQuotes?: boolean;\n}\n\nconst QUOTE_CHARS = new Set([\"'\", '\"']);\n\n/** True when `value` starts AND ends with a quote character (one shell-quote artifact). */\nexport function hasSurroundingQuotes(value: string): boolean {\n if (value.length < 2) return false;\n const first = value[0] as string;\n return QUOTE_CHARS.has(first) && value[value.length - 1] === first;\n}\n\n/**\n * The FIRST shape problem in `value`, or `undefined` when its shape is clean. Value-free by\n * construction: the result is one of the fixed strings in {@link CredentialShapeProblem}.\n * A CR is reported even in the middle of a value; CRLF is caught by the same check.\n */\nexport function credentialShapeProblem(\n value: string,\n options: CredentialShapeOptions = {},\n): CredentialShapeProblem | undefined {\n if (!options.skipEdgeWhitespace) {\n if (/^\\s/.test(value)) return 'leading whitespace';\n if (/\\s$/.test(value)) return 'trailing whitespace';\n }\n if (!options.skipSurroundingQuotes && hasSurroundingQuotes(value)) {\n return 'single- or double-quote surrounding the value';\n }\n if (value.includes('\\r')) return 'carriage return';\n return undefined;\n}\n\n/** The env-load pitfall every shape rejection points at, without claiming which loader was used. */\nexport const CREDENTIAL_ENV_LOAD_ACTION =\n 'value appears shell-quoted or line-break contaminated — check how your env file was loaded ' +\n '(single-quoted values must be shell-sourced, not parsed by a quote-preserving loader)';\n\n/**\n * Shortest value the 2-character prefix summary is printed for. Below it a prefix is a large\n * fraction of the secret, so the summary prints `(short)` instead of two characters.\n */\nexport const MIN_PREFIX_SUMMARY_LENGTH = 4;\n\n/**\n * A value-free summary of a credential value: its LENGTH and its FIRST TWO CHARACTERS only, or\n * `(short)` when the value is too short for a 2-character prefix to be safe. The rest of the\n * value is never reproduced, so the summary is safe to print in a log, a CLI report or a test.\n */\nexport function credentialValueSummary(value: string): string {\n return value.length >= MIN_PREFIX_SUMMARY_LENGTH\n ? `len ${value.length}, starts \"${value.slice(0, 2)}\"`\n : 'short value (length withheld)';\n}\n","/**\n * Opt-in live field-metadata TTL cache (issue #31 — the field channel).\n *\n * Mirrors the `ReadCache` idiom (`src/cache.ts`) deliberately: a plain\n * in-memory `Map`, no disk, no dependency; `structuredClone` on get and\n * set (a caller mutating its result cannot corrupt a later hit); lazy\n * purge on read; on `set` past the cap, purge expired first, then evict\n * the oldest-inserted. The client owns ONE instance\n * (`fieldCache: { ttlMs, maxEntities }` -> the resolved config's\n * `fieldCache`, threaded through the shared `HttpClient`); the base\n * metadata path (resources/base.ts, the entityInformation trio)\n * consults it before issuing a wire GET.\n *\n * What is cached — and only that: SUCCESSFUL entity-metadata reads — the\n * UNWRAPPED values of the `getEntityInfo` / `getFieldInfo` /\n * `getUdfInfo` trio (the `info` model, the `fields[]` catalogs, the\n * `userDefinedFields[]` catalog). Keyed by `${resourceKey}:${kind}` —\n * one entity's three catalogs, e.g. `tickets:fields`.\n *\n * What is NEVER cached: an EMPTY result (`[]` / `{}` / null — an empty\n * is not an answer: a transient vendor hiccup must not become a\n * permanent lie), and a FAILURE (errors reject before any `set` can run).\n *\n * Three behaviours this channel needs that `ReadCache` does not:\n * - IN-FLIGHT DE-DUPLICATION (`inflight` / `track`): an MCP server may\n * serve several tool calls concurrently — concurrent callers for the\n * same (entity, kind) share ONE wire request (the promise is dropped\n * on settle, success OR failure);\n * - FIRST-CLASS `invalidate(resourceKey)`: the drift signal — a\n * deterministic vendor field-validation 500 (the vendor just said our\n * field belief is wrong) or an INVALID_RESPONSE on a metadata read\n * (the catalog shape moved) drops the ONE entity's entries so the next\n * call refetches; an ordinary record write says nothing about the\n * field catalog and never invalidates;\n * - `peek(resourceKey, kind)`: a non-mutating `{ hit, age }` probe the\n * served op (operations.fieldCatalog) uses for its per-row\n * `cache: { hit, age }` reporting without consuming the entry.\n *\n * Staleness contract (the documented trade of opting in): a vendor\n * drift (a field-ladder 500 carrying `details.deterministic: true`, or\n * an INVALID_RESPONSE shape drift) invalidates the entity's entries;\n * anything the drift signals do not name shows up once `ttlMs` expires.\n * Field metadata only — record reads are `cache` (a different channel\n * with a different key and invalidation signal). Off by default: with\n * `fieldCache` unset there is no `FieldCache` instance at all and the\n * trio's wire path is bit-for-bit the uncached one.\n */\nimport { AutotaskConfigError } from './errors.js';\n\n/** One stored metadata read: the (unwrapped) value + its expiry instant. */\ninterface FieldCacheEntry {\n value: unknown;\n /** `Date.now()` instant at which the entry stops being served. */\n expiresAt: number;\n}\n\n/** Memory guard: the default entity bound (a long-lived MCP server must\n * not grow without bound between lazy purges). */\nexport const FIELD_CACHE_MAX_ENTITIES = 256;\n\n/** The three metadata reads one entity can serve (closed set). */\nexport const FIELD_CACHE_KINDS = ['info', 'fields', 'udf'] as const;\n\n/** One of the three per-entity metadata channels. */\nexport type FieldCacheKind = (typeof FIELD_CACHE_KINDS)[number];\n\n/**\n * A read-through TTL cache for successful entity-metadata reads (lazy\n * purge on read; expiry is `Date.now()` based). Constructed by\n * `resolveConfig` from `fieldCache: { ttlMs, maxEntities }` — a\n * positive-integer `ttlMs` is required (validated here, as in ReadCache).\n */\nexport class FieldCache {\n /** The configured TTL in ms. */\n readonly ttlMs: number;\n /** The entity bound (the cap applies to STORED entries; inflight never counts). */\n readonly maxEntities: number;\n private readonly store: Map<string, FieldCacheEntry> = new Map();\n private readonly inflightMap: Map<string, Promise<unknown>> = new Map();\n\n constructor(ttlMs: number, maxEntities: number = FIELD_CACHE_MAX_ENTITIES) {\n if (!Number.isInteger(ttlMs) || ttlMs <= 0) {\n throw new AutotaskConfigError(`fieldCache.ttlMs must be a positive integer (got ${ttlMs})`);\n }\n if (!Number.isInteger(maxEntities) || maxEntities <= 0) {\n throw new AutotaskConfigError(`fieldCache.maxEntities must be a positive integer (got ${maxEntities})`);\n }\n this.ttlMs = ttlMs;\n this.maxEntities = maxEntities;\n }\n\n /** The composite key: one entity's catalogs are one key apart. */\n static key(resourceKey: string, kind: FieldCacheKind): string {\n return `${resourceKey}:${kind}`;\n }\n\n /**\n * Read-through lookup: the live entry's value (a copy), or `undefined`\n * (absent OR expired — an expired entry is purged lazily on this read).\n */\n get(resourceKey: string, kind: FieldCacheKind): unknown {\n const entry = this.store.get(FieldCache.key(resourceKey, kind));\n if (entry === undefined) return undefined;\n if (entry.expiresAt <= Date.now()) {\n this.store.delete(FieldCache.key(resourceKey, kind));\n return undefined;\n }\n // A copy: a caller mutating its result must not corrupt later hits.\n return structuredClone(entry.value);\n }\n\n /**\n * Store a SUCCESSFUL, NON-EMPTY metadata value under (entity, kind),\n * live for `ttlMs`. An EMPTY value (`[]` / `{}` / null) is refused\n * silently (never cached — an empty is not an answer): the next call\n * refetches.\n */\n set(resourceKey: string, kind: FieldCacheKind, value: unknown): void {\n if (FieldCache.isEmpty(value)) return;\n const key = FieldCache.key(resourceKey, kind);\n if (this.store.size >= this.maxEntities && this.purgeExpired() === 0) {\n // all live: evict the oldest-inserted entry so the cache stays bounded\n const oldest = this.store.keys().next();\n if (!oldest.done) this.store.delete(oldest.value);\n }\n // Map keeps insertion order: refreshes re-insert so the memory guard\n // drops the OLDEST-inserted entries first on the next purge.\n this.store.delete(key);\n this.store.set(key, { value: structuredClone(value), expiresAt: Date.now() + this.ttlMs });\n }\n\n /** True for the values that must never be cached (an empty is not an answer). */\n static isEmpty(value: unknown): boolean {\n if (value === null || value === undefined) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === 'object') return Object.keys(value).length === 0;\n return false;\n }\n\n /**\n * In-flight de-duplication: the shared in-flight promise for\n * (entity, kind), or `undefined` (nothing in flight — the caller\n * issues the request and registers it with `track`).\n */\n inflight(resourceKey: string, kind: FieldCacheKind): Promise<unknown> | undefined {\n return this.inflightMap.get(FieldCache.key(resourceKey, kind));\n }\n\n /**\n * Register an in-flight metadata read: concurrent callers for the same\n * (entity, kind) await the SAME promise (one wire request). The entry\n * is dropped on settle — success OR failure (a failure is never\n * cached; the next caller refetches).\n */\n track(resourceKey: string, kind: FieldCacheKind, promise: Promise<unknown>): Promise<unknown> {\n const key = FieldCache.key(resourceKey, kind);\n this.inflightMap.set(key, promise);\n // Drop the entry on settle (success OR failure). The two-armed `.then`\n // keeps the DERIVED promise resolved, so a failing read can never\n // surface as an unhandled rejection through this bookkeeping.\n promise.then(\n () => {\n this.inflightMap.delete(key);\n },\n () => {\n this.inflightMap.delete(key);\n },\n );\n return promise;\n }\n\n /**\n * The drift signal: drop the entity's STORED entries AND its in-flight\n * promise (a refetch must not join a request whose premise just moved).\n * A no-op when the entity holds nothing.\n */\n invalidate(resourceKey: string): void {\n for (const kind of FIELD_CACHE_KINDS) {\n const key = FieldCache.key(resourceKey, kind);\n this.store.delete(key);\n this.inflightMap.delete(key);\n }\n }\n\n /**\n * A non-mutating probe for the served op's per-row `cache` report:\n * `hit` = a live (unexpired) entry exists; `age` = ms since that entry\n * was stored (null when `hit` is false). Never purges, never clones.\n */\n peek(resourceKey: string, kind: FieldCacheKind): { hit: boolean; age: number | null } {\n const entry = this.store.get(FieldCache.key(resourceKey, kind));\n if (entry === undefined || entry.expiresAt <= Date.now()) {\n return { hit: false, age: null };\n }\n return { hit: true, age: Date.now() - (entry.expiresAt - this.ttlMs) };\n }\n\n /** Drop every expired entry (returns the number removed). */\n purgeExpired(): number {\n const now = Date.now();\n let removed = 0;\n for (const [key, entry] of this.store) {\n if (entry.expiresAt <= now) {\n this.store.delete(key);\n removed += 1;\n }\n }\n return removed;\n }\n\n /** Current entry count (live + not-yet-purged expired). */\n get size(): number {\n return this.store.size;\n }\n\n /** Drop everything (e.g. a caller that knows the tenant was reset). */\n clear(): void {\n this.store.clear();\n this.inflightMap.clear();\n }\n}\n","/**\n * The optional per-host circuit breaker at the transport (issue #26).\n *\n * #6 gates a TENANT after a 429. Nothing equivalent existed for a vendor\n * that is DOWN: during an outage or a maintenance window every call burns\n * its full retry budget and the agent keeps issuing new ones. The breaker\n * counts SERVICE-FAILURE outcomes per HOST (a zone outage hits every tenant\n * on that zone — vendor health is host-scoped, so the key is the host of\n * the configured base URL, not #6's `user@host`) and fails further calls\n * for that host LOCALLY — a typed `CircuitBreakerError` (`code:\n * 'CIRCUIT_BREAKER_OPEN'`, `notSent: true`, `retryable: true`, `retryAfter`\n * = the remaining open time) with zero upstream calls — until the open\n * period passes and `successesToClose` probe successes prove the host is\n * healthy again.\n *\n * OFF by default (`circuitBreaker: { enabled: true }` opts in). Defaults\n * from the prior art (tphakala/go-autotask `circuitbreaker.go`): 5 counted\n * failures in a 10-second window open the circuit for 30 seconds;\n * `successesToClose` 2 probe successes close it; `halfOpenProbes` bounds the\n * probes admitted while half-open (default `= successesToClose`, validated\n * `>= successesToClose` — a breaker that can never close is a misconfiguration\n * and is refused fail-closed at construction).\n *\n * Timer-free (the #6 cooldown design decision): the state is pure\n * timestamps and everything is derived from `Date.now()` lazily at each\n * request — `closed` (no entry / nothing armed), `open` (until\n * `openedAt + openTimeoutMs`), then the lazy `half-open` transition on the\n * first request after the open period. No `setInterval`, no injected clock\n * (the test suite fakes time with `vi.useFakeTimers()`, exactly like\n * `test/cooldown.test.ts`).\n *\n * The DEFAULT failure predicate counts exactly: `NETWORK_ERROR`, `TIMEOUT`,\n * a vendor 429 (by status — a surfaced 429 may carry an ADOPTED vendor\n * machine code, e.g. the thread-threshold `Itgenatr005`), a 5xx EXCEPT the\n * deterministic field-validation 500 (keyed on #23's `details.deterministic`\n * signal — by that signal only), and `UNEXPECTED_CONTENT_TYPE` (the #24\n * maintenance page, by code — NEVER `INVALID_RESPONSE`: the W-A7 shape-drift\n * and the #13 marker-recovery key are untouched). Never counted: `ABORTED`\n * (a caller's cancellation says nothing about service health), any 4xx, and\n * local/policy refusals (the cooldown gate's `notSent` refusal, the local\n * hourly limiter, config errors) — a call that never reached the vendor is\n * never a service failure.\n *\n * Store: the default is the in-process in-memory map shared by every client\n * instance (entries capped at 1024, evicting the OLDEST last-activity first\n * — failing open: the longest-idle host loses state, an actively failing or\n * open host keeps its). The default store is deliberately NOT anchored on\n * globalThis (the #6 precedent): a process that loads both the ESM and the\n * CJS build gets one map per build — inject one shared `CircuitBreakerStore`\n * if you need cross-build sharing (the interface leaves room for a\n * Redis-backed store). The state RIDES THE STORE, not the client: a pool\n * LRU eviction of a tenant client loses nothing (an evicted-then-recreated\n * tenant on the same host hits the same shared state). On a shared-host\n * gateway (one host, many credential tuples) the breaker is PER HOST — one\n * tenant's outage opens the circuit for that host's other tenants too (the\n * documented consequence of the host-only key; `enabled` is off by default,\n * so nothing changes unless opted in). `thresholdInformation.get()` bypasses\n * the REFUSAL so a downed host can still be probed for headroom — its\n * outcome is still RECORDED (a 2xx closes toward recovery; a failure\n * re-arms; the #6 ThresholdInformation-bypass semantics).\n */\n\nimport type { AutotaskError } from './errors.js';\n\n/**\n * One host's breaker state (all epoch ms). `openedAt === null` = closed;\n * `openedAt + openTimeoutMs > now` = open; after that the state is\n * half-open (the lazy transition — no timers). `probes` bounds the probes\n * admitted while half-open (`halfOpenProbes`); every probe completion\n * (success OR failure) decrements it. The transport never stores an empty\n * closed entry: closing the circuit DELETES the entry (a healthy host\n * leaves no trace — the #6 delete-on-2xx precedent).\n */\nexport interface CircuitBreakerState {\n /** Counted-failure timestamps (pruned to the failure window at record time). */\n failures: number[];\n /** When the circuit (re)opened (epoch ms); null while closed. */\n openedAt: number | null;\n /** Probe successes toward `successesToClose` (the current open/half-open phase). */\n successes: number;\n /** Probes admitted while half-open (in flight or awaiting a verdict). */\n probes: number;\n}\n\n/**\n * Per-host breaker state: the SAME get/set/delete shape as `CooldownStore`\n * (`src/cooldown.ts`), over the richer `CircuitBreakerState` (a single\n * deadline number cannot hold a state machine + counters).\n */\nexport interface CircuitBreakerStore {\n /** The host's state, or undefined when nothing is recorded for it (= closed). */\n get(hostKey: string): CircuitBreakerState | undefined;\n /** Store (or replace) the host's state. */\n set(hostKey: string, state: CircuitBreakerState): void;\n /** Delete the host's entry (close reset, a healthy host leaves no trace). */\n delete(hostKey: string): void;\n}\n\n/** Counted-failure window: \"5 failures in 10 s\" (the prior-art default). */\nexport const DEFAULT_CIRCUIT_BREAKER_WINDOW_MS = 10_000;\n/** Counted failures inside the window that open the circuit. */\nexport const DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD = 5;\n/** How long the circuit stays open before the half-open probes. */\nexport const DEFAULT_CIRCUIT_BREAKER_OPEN_TIMEOUT_MS = 30_000;\n/** Probe successes that close the circuit. */\nexport const DEFAULT_CIRCUIT_BREAKER_SUCCESSES_TO_CLOSE = 2;\n/** Entry cap of the default in-memory store. */\nexport const DEFAULT_CIRCUIT_BREAKER_MAX_ENTRIES = 1024;\n\n/**\n * The default in-memory store: a capped Map, evicting the entry with the\n * OLDEST last-activity first when full (failing open — the longest-idle\n * host goes; an actively failing or an open host keeps its state).\n * Last-activity = `openedAt` when armed, else the newest `failures`\n * timestamp (a closed entry always carries >= 1 failure).\n */\nexport class InMemoryCircuitBreakerStore implements CircuitBreakerStore {\n private readonly maxEntries: number;\n private readonly states = new Map<string, CircuitBreakerState>();\n\n constructor(maxEntries: number = DEFAULT_CIRCUIT_BREAKER_MAX_ENTRIES) {\n if (!Number.isInteger(maxEntries) || maxEntries <= 0) {\n throw new TypeError(`InMemoryCircuitBreakerStore maxEntries must be a positive integer (got ${String(maxEntries)})`);\n }\n this.maxEntries = maxEntries;\n }\n\n get(hostKey: string): CircuitBreakerState | undefined {\n return this.states.get(hostKey);\n }\n\n set(hostKey: string, state: CircuitBreakerState): void {\n if (this.states.has(hostKey)) {\n this.states.set(hostKey, state);\n return;\n }\n if (this.states.size >= this.maxEntries) {\n let victim: string | undefined;\n let victimActivity = Number.POSITIVE_INFINITY;\n for (const [key, s] of this.states) {\n const activity = s.openedAt !== null ? s.openedAt : (s.failures.length > 0 ? (s.failures[s.failures.length - 1] as number) : 0);\n if (activity < victimActivity) {\n victimActivity = activity;\n victim = key;\n }\n }\n if (victim !== undefined) this.states.delete(victim);\n }\n this.states.set(hostKey, state);\n }\n\n delete(hostKey: string): void {\n this.states.delete(hostKey);\n }\n\n /** Drop every entry (test helper surface; also used by resetDefaultCircuitBreakerStore). */\n clear(): void {\n this.states.clear();\n }\n}\n\n/**\n * The shared default store (one per process, per module build — see the\n * module header). Lazily created on first use; never re-created behind a\n * holder's back (resetDefaultCircuitBreakerStore CLEARS, it does not\n * replace). Survives pool LRU eviction (the state rides the store, not the\n * client).\n */\nlet defaultStore: InMemoryCircuitBreakerStore | undefined;\n\n/** The default in-process store, created on first call. */\nexport function defaultCircuitBreakerStore(): CircuitBreakerStore {\n if (defaultStore === undefined) defaultStore = new InMemoryCircuitBreakerStore();\n return defaultStore;\n}\n\n/** Reset helper for tests: clears the shared default store. */\nexport function resetDefaultCircuitBreakerStore(): void {\n defaultStore?.clear();\n}\n\n/**\n * The breaker key: the lowercased HOST of the (normalised) base URL —\n * host-only (issue #26's \"per-host keying\"; decision: vendor health is\n * host-scoped, not credential-scoped). A host can never contain `@` or\n * `:`-ambiguity beyond the standard `host:port` form; impersonation (a\n * header, not key material) does not change it. The same derivation as\n * `buildTenantKey`'s host part (`src/cooldown.ts`).\n */\nexport function buildBreakerKey(baseUrl: string): string {\n return new URL(baseUrl).host.toLowerCase();\n}\n\n/**\n * The DEFAULT failure predicate (injectable via\n * `config.circuitBreaker.isFailure`): what counts against the circuit.\n * Counts exactly — `NETWORK_ERROR`, `TIMEOUT`, a vendor 429 (by STATUS: a\n * surfaced 429 may carry an adopted vendor machine code as its stable\n * code, e.g. the thread-threshold `Itgenatr005`), a 5xx EXCEPT the\n * deterministic field-validation 500 (#23's `details.deterministic`\n * signal — by that signal only), and `UNEXPECTED_CONTENT_TYPE` (the #24\n * maintenance page, by code). Never counts: `ABORTED`, any 4xx, a\n * local/policy refusal (`notSent` — a local refusal, the cooldown's or the\n * breaker's own, never reached the vendor), or `INVALID_RESPONSE` (the\n * W-A7 shape-drift / #13 marker-recovery key).\n */\nexport function isBreakerFailure(err: AutotaskError): boolean {\n // A local refusal is never a service failure: the call never reached the\n // vendor (defense in depth — the gate's own refusals are thrown pre-loop\n // and never reach a recording site). `notSent` is the shared local-refusal\n // marker (the cooldown's RateLimitError and the breaker's own\n // CircuitBreakerError both carry it; the base class does not).\n if ((err as { notSent?: boolean }).notSent === true) return false;\n // Transport-class failures (stable codes, no vendor status).\n if (err.code === 'NETWORK_ERROR' || err.code === 'TIMEOUT') return true;\n const status = err.httpStatus;\n if (status === undefined) return false; // a local error: nothing reached the vendor\n if (status === 429) return true; // a 429 the vendor actually sent\n if (status >= 500 && status < 600) {\n // A 5xx — EXCEPT the deterministic field-validation 500 (the same body\n // fails identically on retry; it says nothing about service health).\n return err.details?.deterministic !== true;\n }\n // A non-JSON 2xx (the #24 maintenance/edge page). The 2xx path never\n // adopts a vendor code, so the code is stable here.\n return err.code === 'UNEXPECTED_CONTENT_TYPE';\n}\n","/**\n * Per-tenant 429 cooldown gate (issue #6).\n *\n * Once the transport has used up its retries on a 429 (or the Retry-After is\n * too long to wait, or the method is non-retriable), the vendor has said\n * \"stop\" — but an agent that repeats the same calls within seconds keeps\n * hitting a tenant that is already over its threshold, and the repeats can\n * prolong the throttle. The gate remembers the cooldown DEADLINE per tenant\n * (lowercased username + lowercased host; impersonation does not change the\n * key) and fails every further call for that tenant LOCALLY — a typed\n * `RateLimitError` with `notSent: true`, zero upstream calls — until the\n * deadline passes.\n *\n * Defaults (decisions from the issue): ON by default with a 15-minute hard\n * cap; `Retry-After` missing or unparseable -> a 60-second window; the\n * thread-threshold 429 (vendor code `Itgenatr005`, clears in seconds) arms\n * only a short window: min(Retry-After, 10 s), default 5 s. A 2xx from a\n * call that got through clears the gate early; expiry is lazy (the first\n * call after the deadline deletes the entry and proceeds); a hostile\n * Retry-After is clamped to the cap, so a lock-out is always bounded.\n *\n * Store: the default is the in-process in-memory map shared by every client\n * instance (entries capped at 1024, evicting the EARLIEST deadline first —\n * failing open; a tenant that keeps 429-ing keeps its fresh deadline). The\n * default store is deliberately NOT anchored on globalThis: a process that\n * loads both the ESM and the CJS build gets one map per build — inject one\n * shared `CooldownStore` if you need cross-build sharing (the interface\n * leaves room for a Redis-backed store). `thresholdInformation.get()`\n * bypasses the gate so a throttled tenant can still read its own headroom\n * (a 2xx clears; a 429 re-arms).\n */\n\n/** One tenant's armed cooldown: get/set/delete of the deadline (epoch ms). */\nexport interface CooldownStore {\n /** The armed deadline (epoch ms) for the tenant key, or undefined when not armed. */\n get(tenantKey: string): number | undefined;\n /** Arm (or re-arm) the tenant's gate until `deadline` (epoch ms). */\n set(tenantKey: string, deadline: number): void;\n /** Delete the tenant's entry (lazy expiry, early clear on 2xx). */\n delete(tenantKey: string): void;\n}\n\n/** Hard cap on a tenant lock-out: a hostile `Retry-After` is clamped here. */\nexport const DEFAULT_COOLDOWN_MAX_MS = 15 * 60 * 1000;\n/** Window when `Retry-After` is missing or unparseable. */\nexport const DEFAULT_COOLDOWN_DEFAULT_MS = 60_000;\n/** Entry cap of the default in-memory store. */\nexport const DEFAULT_COOLDOWN_MAX_ENTRIES = 1024;\n/** Thread-threshold 429 (`Itgenatr005`) window: min(Retry-After, 10 s). */\nconst THREAD_THRESHOLD_MAX_MS = 10_000;\n/** Thread-threshold 429 window when Retry-After is missing/unparseable. */\nconst THREAD_THRESHOLD_DEFAULT_MS = 5_000;\n\n/**\n * The default in-memory store: a capped Map, evicting the entry with the\n * EARLIEST deadline first when full (failing open — a tenant that keeps\n * 429-ing keeps its fresh deadline; the soonest-to-expire entries go).\n */\nexport class InMemoryCooldownStore implements CooldownStore {\n private readonly maxEntries: number;\n private readonly deadlines = new Map<string, number>();\n\n constructor(maxEntries: number = DEFAULT_COOLDOWN_MAX_ENTRIES) {\n if (!Number.isInteger(maxEntries) || maxEntries <= 0) {\n throw new TypeError(`InMemoryCooldownStore maxEntries must be a positive integer (got ${String(maxEntries)})`);\n }\n this.maxEntries = maxEntries;\n }\n\n get(tenantKey: string): number | undefined {\n return this.deadlines.get(tenantKey);\n }\n\n set(tenantKey: string, deadline: number): void {\n if (this.deadlines.has(tenantKey)) {\n this.deadlines.set(tenantKey, deadline);\n return;\n }\n if (this.deadlines.size >= this.maxEntries) {\n let victim: string | undefined;\n let victimDeadline = Number.POSITIVE_INFINITY;\n for (const [key, d] of this.deadlines) {\n if (d < victimDeadline) {\n victimDeadline = d;\n victim = key;\n }\n }\n if (victim !== undefined) this.deadlines.delete(victim);\n }\n this.deadlines.set(tenantKey, deadline);\n }\n\n delete(tenantKey: string): void {\n this.deadlines.delete(tenantKey);\n }\n\n /** Drop every entry (test helper surface; also used by resetDefaultCooldownStore). */\n clear(): void {\n this.deadlines.clear();\n }\n}\n\n/**\n * The shared default store (one per process, per module build — see the\n * module header). Lazily created on first use; never re-created behind a\n * holder's back (resetDefaultCooldownStore CLEARS, it does not replace).\n */\nlet defaultStore: InMemoryCooldownStore | undefined;\n\n/** The default in-process store, created on first call. */\nexport function defaultCooldownStore(): CooldownStore {\n if (defaultStore === undefined) defaultStore = new InMemoryCooldownStore();\n return defaultStore;\n}\n\n/** Reset helper for tests: clears the shared default store. */\nexport function resetDefaultCooldownStore(): void {\n defaultStore?.clear();\n}\n\n/**\n * The tenant key: lowercased username + `@` + lowercased host. A host can\n * never contain `@`, so the key is unambiguous; impersonation (a header,\n * not part of the key) does not change it.\n */\nexport function buildTenantKey(userName: string, baseUrl: string): string {\n return `${userName.toLowerCase()}@${new URL(baseUrl).host.toLowerCase()}`;\n}\n\n/**\n * The cooldown window (ms) for a 429 about to surface. `retryAfterSecs` is\n * the parsed `Retry-After` (undefined when missing/unparseable — the parser\n * never returns negatives). Normal 429: Retry-After clamped to `maxMs`,\n * defaulting to `defaultMs`. Thread-threshold 429 (`Itgenatr005`): a short\n * window — min(Retry-After, 10 s), default 5 s — it clears in seconds.\n */\nexport function cooldownDurationMs(\n retryAfterSecs: number | undefined,\n opts: { maxMs: number; defaultMs: number; threadThreshold?: boolean },\n): number {\n if (opts.threadThreshold) {\n const secs = retryAfterSecs !== undefined\n ? Math.min(retryAfterSecs, Math.round(THREAD_THRESHOLD_MAX_MS / 1000))\n : Math.round(THREAD_THRESHOLD_DEFAULT_MS / 1000);\n return Math.max(0, secs) * 1000;\n }\n const rawMs = retryAfterSecs !== undefined ? retryAfterSecs * 1000 : opts.defaultMs;\n return Math.min(rawMs, opts.maxMs);\n}\n","/**\n * Read-through TTL cache for successful single-record reads (ARCHITECTURE\n * section 10, `cache: { ttlMs, perResourceTtlMs? }` — R-F3a; issue #32\n * adds the per-resource TTL overrides).\n *\n * Zero runtime dependencies: a plain in-memory `Map`, no external library,\n * no disk. The client owns ONE instance (`config.cache` -> the resolved\n * config's `readCache`, threaded through the shared `HttpClient`); the base\n * read path (resources/base.ts) consults it before issuing a wire GET.\n *\n * What is cached — and only that:\n * - SUCCESSFUL single-record reads: the get-by-id path (global and\n * parent-scoped) and the numeric-id branch of `resolve` (the shared\n * `fetchRecordRaw`). Keyed by (resource, id) — the exact read path,\n * e.g. `/V1.0/Companies/42` (a parent-scoped read's path carries the\n * parent id, so ids under different parents never collide);\n * - the CACHED PAYLOAD is the same redacted shape the transport returns:\n * the shared redaction transform (`redactResponseBody`) runs inside\n * `HttpClient.request` BEFORE the value ever reaches the cache —\n * pre-redaction data never enters it.\n *\n * What is NEVER cached: mutations (create/update/delete — the base\n * primitives never touch the cache), list/query reads (every `query`/\n * `count`/walk goes straight to the wire), and error results (a failure\n * throws before a `set` can run — a 5xx/shape-drift fault is never stored).\n * ONE exception (issue #36): the composite context fetch (`contextFetch`)\n * stores the vendor's TRUE not-found on an FK target (the HTTP 404 or the\n * 200 `item: null` signal) as an 'absent' marker under a namespaced key the\n * positive path never constructs — the repeat composite serves 'absent'\n * with zero wire; the marker expires on the read entity's TTL and dies with\n * any real write. The positive `.get`/`resolve` 404 behaviour is untouched\n * (a `.get` miss still re-wires, as before).\n *\n * Staleness contract (the documented trade of opting in): the vendor is\n * STATEFUL. A cached read is a snapshot AT FETCH TIME. Mutations are never\n * cached, and any real write through this client clears the whole cache\n * (`HttpClient.request`), so a write-then-read on the SAME client\n * re-fetches. Writes made elsewhere (another client, the Autotask UI) show\n * up only once `ttlMs` expires. Mutation-path reads (the stale-object guard,\n * dry-run diffs) bypass the cache entirely. Per-resource overrides\n * (issue #32): `cache.perResourceTtlMs` maps a resource plan key to its\n * own TTL in ms — `set` keys the entry's expiry by the plan key of the\n * entity the cache key (the wire path) points to, falling back to\n * `ttlMs` when the map is absent or does not name the resource (absent\n * map = bit-for-bit the pre-#32 behaviour). Off by default:\n * with `cache` unset there is no `ReadCache` instance at all and the read\n * path is bit-for-bit the uncached one.\n */\nimport { AutotaskConfigError } from './errors.js';\n\n/** One stored read: the (redacted) payload + its expiry instant. */\ninterface CacheEntry {\n value: unknown;\n /** `Date.now()` instant at which the entry stops being served. */\n expiresAt: number;\n}\n\n/** Memory guard: when the entry count reaches this on a `set`, expired\n * entries are purged first (a long-lived MCP server must not grow without\n * bound between lazy purges). */\nexport const READ_CACHE_MAX_ENTRIES = 4096;\n\n/**\n * A read-through TTL cache (lazy purge on read; expiry is `Date.now()`\n * based). Constructed by `resolveConfig` from `cache: { ttlMs,\n * perResourceTtlMs? }` — a positive-integer `ttlMs` is required\n * (validated there too); every `perResourceTtlMs` value is a positive\n * integer, validated fail-closed the same way (issue #32).\n */\nexport class ReadCache {\n /** The configured TTL in ms (the fallback for resources without an override). */\n readonly ttlMs: number;\n /** The per-resource TTL overrides (issue #32; absent = every resource uses `ttlMs`). */\n readonly perResourceTtlMs?: Readonly<Record<string, number>>;\n private readonly store: Map<string, CacheEntry> = new Map();\n\n constructor(ttlMs: number, perResourceTtlMs?: Record<string, number>) {\n if (!Number.isInteger(ttlMs) || ttlMs <= 0) {\n throw new AutotaskConfigError(`cache.ttlMs must be a positive integer (got ${ttlMs})`);\n }\n // issue #32: the per-resource overrides — fail closed like ttlMs (a\n // bad override value is a config error, never a silently-short TTL).\n if (perResourceTtlMs !== undefined) {\n if (\n perResourceTtlMs === null ||\n typeof perResourceTtlMs !== 'object' ||\n Array.isArray(perResourceTtlMs)\n ) {\n throw new AutotaskConfigError(\n `cache.perResourceTtlMs must be an object of resource key -> ms (got ${String(perResourceTtlMs)})`,\n );\n }\n for (const [key, value] of Object.entries(perResourceTtlMs)) {\n if (key === '') {\n throw new AutotaskConfigError('cache.perResourceTtlMs keys must be non-empty resource keys');\n }\n if (!Number.isInteger(value) || value <= 0) {\n throw new AutotaskConfigError(\n `cache.perResourceTtlMs.${key} must be a positive integer (got ${String(value)})`,\n );\n }\n }\n }\n this.ttlMs = ttlMs;\n this.perResourceTtlMs = perResourceTtlMs;\n }\n\n /**\n * The TTL (ms) for a resource plan key: the `perResourceTtlMs` override\n * when the map is present and names the resource, else the base\n * `ttlMs` (absent map, absent key, and `undefined` all fall back).\n */\n ttlFor(resource?: string): number {\n if (resource !== undefined && this.perResourceTtlMs !== undefined) {\n const override = this.perResourceTtlMs[resource];\n if (override !== undefined) return override;\n }\n return this.ttlMs;\n }\n\n /**\n * Read-through lookup: the live entry's value, or `undefined` (absent OR\n * expired — an expired entry is purged lazily on this read).\n */\n get(key: string): unknown {\n const entry = this.store.get(key);\n if (entry === undefined) return undefined;\n if (entry.expiresAt <= Date.now()) {\n this.store.delete(key);\n return undefined;\n }\n // A copy: a caller mutating its result must not corrupt later hits.\n return structuredClone(entry.value);\n }\n\n /** Store a successful read payload under `key`, live for `ttlFor(resource)`:\n * the per-resource override (issue #32) when named, else `ttlMs`. */\n set(key: string, value: unknown, resource?: string): void {\n if (this.store.size >= READ_CACHE_MAX_ENTRIES && this.purgeExpired() === 0) {\n // all live: evict the oldest-inserted entry so the cache stays bounded\n const oldest = this.store.keys().next();\n if (!oldest.done) this.store.delete(oldest.value);\n }\n // Map keeps insertion order: refreshes re-insert so the memory guard\n // drops the OLDEST-inserted entries first on the next purge.\n this.store.delete(key);\n this.store.set(key, { value: structuredClone(value), expiresAt: Date.now() + this.ttlFor(resource) });\n }\n\n /** Drop every expired entry (returns the number removed). */\n purgeExpired(): number {\n const now = Date.now();\n let removed = 0;\n for (const [key, entry] of this.store) {\n if (entry.expiresAt <= now) {\n this.store.delete(key);\n removed += 1;\n }\n }\n return removed;\n }\n\n /** Current entry count (live + not-yet-purged expired). */\n get size(): number {\n return this.store.size;\n }\n\n /** Drop one key (issue #36: a later positive outcome clears a stale 'absent' marker). */\n delete(key: string): boolean {\n return this.store.delete(key);\n }\n\n /** Drop everything (e.g. a caller that knows the tenant was reset). */\n clear(): void {\n this.store.clear();\n }\n}\n","/**\n * Config-time host bounds (skill 3.5.0 / L2, finding A1) — PURE functions:\n * no IO, no DNS, no state. Opt-in and OFF by default: an absent\n * `hostPolicy` config block leaves the resolved config byte-identical to\n * before (nothing here runs).\n *\n * Two bounds are expressible, both fail-closed when a host violates them:\n *\n * - `blockPrivateHosts` — refuse a LITERAL private / loopback / link-local\n * host (IPv4 and IPv6). Hostnames are NEVER blocked: there are no DNS\n * lookups, so a literal-IP check cannot see where a name resolves.\n * - `allowedOrigins` — an exact normalised-origin allow-list; every\n * resolved base URL must match an entry (scheme + host:port, default\n * ports dropped by WHATWG canonicalisation).\n *\n * The private bound is checked FIRST and WINS: a host that is both private\n * and explicitly allow-listed is still refused (the allow-list can never\n * widen the private bound away).\n *\n * Every check runs on the CANONICAL host from `new URL(origin).host` — the\n * WHATWG parser hex-canonicalises an embedded IPv4 inside an IPv6 literal,\n * so `::ffff:127.0.0.1` is seen as `::ffff:7f00:1` and must still classify\n * as the private IPv4 `127.0.0.1` (the mapped-IPv4 delegation below).\n */\nimport { HostPolicyDeniedError } from './errors.js';\n\n/** A violation decision — `null` when the host passes the active bounds. */\nexport interface HostPolicyViolation {\n /** The bound that refused the host. */\n bound: 'private' | 'allowlist';\n /** The offending origin, as `new URL(...).origin` canonicalises it. */\n origin: string;\n}\n\n/** Options for {@link isHostAllowed}: omit a bound to leave it inactive. */\nexport interface HostPolicyDecisionOptions {\n /** Refuse literal private / loopback / link-local hosts. */\n blockPrivate?: boolean;\n /** Exact normalised-origin allow-list (already canonicalised by the caller or by {@link normalizeAllowedOrigins}). */\n allowedOrigins?: readonly string[];\n}\n\n/** The canonical host of an origin (WHATWG `URL#host`, lowercased + IP-canonicalised). */\nexport function canonicalHost(origin: string): string {\n return new URL(origin).host;\n}\n\n/** The canonical origin of a base URL (WHATWG `URL#origin`; default ports dropped). */\nexport function canonicalOrigin(origin: string): string {\n return new URL(origin).origin;\n}\n\n/** Dotted-quad → the 32-bit unsigned value, or undefined when malformed. */\nfunction ipv4ToUint32(part: string): number | undefined {\n if (part.includes(':')) return undefined;\n const octets = part.split('.');\n if (octets.length !== 4) return undefined;\n let value = 0;\n for (const octet of octets) {\n if (!/^\\d{1,3}$/.test(octet)) return undefined;\n const n = Number(octet);\n if (n > 255) return undefined;\n value = value * 256 + n;\n }\n return value >>> 0;\n}\n\nconst UINT32 = 0xffffffff;\n\n/** IPv4 literal: 10/8, 172.16/12, 192.168/16, 127/8, 169.254/16 (\"this host on this network\" 0/8 included). */\nexport function isPrivateIpv4(host: string): boolean {\n const value = ipv4ToUint32(host);\n if (value === undefined) return false;\n return (\n within(value, '0.0.0.0', 8) ||\n within(value, '10.0.0.0', 8) ||\n within(value, '127.0.0.0', 8) ||\n within(value, '169.254.0.0', 16) ||\n within(value, '172.16.0.0', 12) ||\n within(value, '192.168.0.0', 16)\n );\n}\n\nfunction within(value: number, network: string, prefix: number): boolean {\n const base = ipv4ToUint32(network);\n if (base === undefined) return false;\n const mask = prefix === 0 ? 0 : (UINT32 << (32 - prefix)) >>> 0;\n return (value & mask) === (base & mask);\n}\n\n/** A 4-digit hex group → its numeric value. */\nfunction parseHexGroup(group: string): number {\n return parseInt(group, 16);\n}\n\n/**\n * The two-hextet tail of an IPv4-mapped IPv6 literal → the dotted-quad, or\n * undefined when the address is not `::ffff:a.b.c.d` (or its canonical\n * hex form `::ffff:7f00:1`, which is what WHATWG produces).\n */\nexport function ipv4MappedAddress(host: string): string | undefined {\n const groups = host.split(':');\n if (groups.length < 3) return undefined;\n // The marker `ffff` sits immediately BEFORE the two IPv4 hextets, so find\n // it from the END: `::ffff:7f00:1` and `::ffff:808:808` both end with it.\n const markerIndex = groups.length - 3;\n if (markerIndex < 0 || groups[markerIndex] !== 'ffff') return undefined;\n // Everything before the marker must be the run of zero groups (\"::\" or\n // \"0:...:0\") — i.e. an IPv4-mapped address, not a global one.\n const head = groups.slice(0, markerIndex);\n const areAllZero = head.every((group) => group === '' || group === '0');\n if (!areAllZero) return undefined;\n // The two hextets after the marker are the embedded IPv4 (0..0xffff each).\n // WHATWG hex-canonicalises an embedded `a.b.c.d` into these groups, so\n // `::ffff:127.0.0.1` arrives as `::ffff:7f00:1` and `::ffff:8.8.8.8` as\n // `::ffff:808:808`.\n const hi = parseHexGroup(groups[markerIndex + 1] ?? '');\n const lo = parseHexGroup(groups[markerIndex + 2] ?? '');\n if (!Number.isFinite(hi) || !Number.isFinite(lo)) return undefined;\n return `${hi >>> 8}.${hi & 0xff}.${lo >>> 8}.${lo & 0xff}`;\n}\n\ninterface Ipv6Range {\n /** First hextet of the range, compared NUMERICALLY. */\n firstHextet: number;\n /** Bit prefix of the range (all IPv6 special-purpose ranges here are >= 10). */\n prefix: number;\n label: string;\n}\n\n/** fc00::/7 (unique-local), fe80::/10 (link-local), ::1 (loopback). */\nconst IPV6_RANGES: readonly Ipv6Range[] = [\n { firstHextet: 0xfc00, prefix: 7, label: 'fc00::/7' },\n { firstHextet: 0xfe80, prefix: 10, label: 'fe80::/10' },\n];\n\n/** Split an IPv6 literal into its 8 hextets (numeric), or undefined when it is not one. */\nfunction ipv6Hextets(host: string): number[] | undefined {\n if (!host.includes(':')) return undefined;\n if (host.includes('.')) return undefined;\n const [headText = '', tailText] = host.split('::');\n if (host.split('::').length > 2) return undefined;\n const head = headText.length > 0 ? headText.split(':') : [];\n const tail = tailText !== undefined && tailText.length > 0 ? tailText.split(':') : [];\n if (tailText === undefined && head.length !== 8) return undefined;\n if (head.length + tail.length > 8) return undefined;\n const groups: number[] = [];\n for (const group of head) {\n if (!/^[0-9a-f]{1,4}$/.test(group)) return undefined;\n groups.push(parseHexGroup(group));\n }\n for (let i = 0; i < 8 - head.length - tail.length; i += 1) groups.push(0);\n for (const group of tail) {\n if (!/^[0-9a-f]{1,4}$/.test(group)) return undefined;\n groups.push(parseHexGroup(group));\n }\n return groups.length === 8 ? groups : undefined;\n}\n\n/** The first hextet of an IPv6 literal (0 when the address starts with \"::\"), or undefined when not IPv6. */\nexport function ipv6FirstHextet(host: string): number | undefined {\n const hextets = ipv6Hextets(host);\n return hextets === undefined ? undefined : hextets[0];\n}\n\n/** IPv6 literal membership in ::1, fc00::/7 or fe80::/10 — FIRST HEXTET COMPARED NUMERICALLY. */\nexport function isPrivateIpv6(host: string): boolean {\n const hextets = ipv6Hextets(host);\n if (hextets === undefined) return false;\n const first = hextets[0] ?? 0;\n if (hextets.every((hextet) => hextet === 0)) return true; // \"::\" — this host\n if (first === 0 && hextets.slice(0, 7).every((hextet) => hextet === 0) && hextets[7] === 1) return true; // ::1\n for (const range of IPV6_RANGES) {\n const shift = 16 - range.prefix;\n if (first >> shift === range.firstHextet >> shift) return true;\n }\n return false;\n}\n\n/** The IPv6 literal of a canonical WHATWG host (`[::1]:4010` -> `::1`), or the host unchanged. */\nexport function literalIpOf(host: string): string {\n const bracketed = /^\\[([^\\]]+)\\]:?/.exec(host);\n if (bracketed !== null) return bracketed[1] ?? '';\n const colon = host.indexOf(':');\n return colon === -1 ? host : host.slice(0, colon);\n}\n\n/**\n * A LITERAL private / loopback / link-local host? Bracketed IPv6 (`[::1]`)\n * and a trailing port are stripped first, and an IPv4-mapped IPv6 literal\n * (`::ffff:127.0.0.1`, canonicalised by WHATWG to `::ffff:7f00:1`)\n * delegates to the IPv4 rules. A hostname (`api.example.com`) is never\n * private — no DNS lookups exist.\n */\nexport function isPrivateHost(host: string): boolean {\n const plain = literalIpOf(host);\n const mapped = ipv4MappedAddress(plain);\n if (mapped !== undefined) return isPrivateIpv4(mapped);\n if (isPrivateIpv4(plain)) return true;\n return isPrivateIpv6(plain);\n}\n\n/** Canonicalise + de-duplicate allow-list entries (WHATWG origins; default ports dropped). */\nexport function normalizeAllowedOrigins(origins: readonly string[]): string[] {\n const seen = new Set<string>();\n for (const entry of origins) seen.add(canonicalOrigin(entry));\n return [...seen];\n}\n\n/**\n * The ONE decision function config validation and the transport both\n * consume. `null` means the host passes the active bounds; a violation\n * carries the bound that refused it and the canonical origin. The private\n * bound is checked FIRST and wins over the allow-list.\n */\nexport function decideHostPolicy(origin: string, options: HostPolicyDecisionOptions): HostPolicyViolation | null {\n const canonical = canonicalOrigin(origin);\n if (options.blockPrivate === true && isPrivateHost(canonicalHost(canonical))) {\n return { bound: 'private', origin: canonical };\n }\n const allow = options.allowedOrigins;\n if (allow !== undefined && allow.length > 0) {\n if (!allow.includes(canonical)) return { bound: 'allowlist', origin: canonical };\n }\n return null;\n}\n\n/**\n * Throwing wrapper for config validation + the issue-#43 re-point gate:\n * throws `HostPolicyDeniedError` (`HOST_POLICY_DENIED`, category \"policy\",\n * `retryable: false`) naming the offending origin, else returns the origin.\n */\nexport function assertHostPolicy(origin: string, options: HostPolicyDecisionOptions): string {\n const violation = decideHostPolicy(origin, options);\n if (violation === null) return canonicalOrigin(origin);\n const bound =\n violation.bound === 'private'\n ? 'the host is a literal private / loopback / link-local address'\n : 'the host is not on the configured allowedOrigins list';\n throw new HostPolicyDeniedError(\n `Host policy denied \"${violation.origin}\": ${bound} (hostPolicy is opt-in; remove the bound or use a permitted origin)`,\n { details: { bound: violation.bound, origin: violation.origin } },\n );\n}\n","/**\n * Configuration, zone catalog and fail-closed validation (ARCHITECTURE section 6).\n *\n * Validation runs in the `AutotaskClient` constructor — fail closed, before any\n * request. Exactly ONE of `baseUrl` / `zone` is effective (`zone: 'other'`\n * requires `baseUrl`); credentials are required and non-empty after trim;\n * `pageSize` is an integer in 1..500 (vendor max, default 10). No zone logic\n * leaks into resources — they see one resolved base URL.\n */\nimport { ReadCache } from './cache.js';\nimport { CREDENTIAL_ENV_LOAD_ACTION, credentialShapeProblem } from './credential-shape.js';\nimport { FIELD_CACHE_MAX_ENTITIES, FieldCache } from './fieldCache.js';\nimport {\n DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD,\n DEFAULT_CIRCUIT_BREAKER_OPEN_TIMEOUT_MS,\n DEFAULT_CIRCUIT_BREAKER_SUCCESSES_TO_CLOSE,\n DEFAULT_CIRCUIT_BREAKER_WINDOW_MS,\n type CircuitBreakerStore,\n} from './circuit-breaker.js';\nimport { DEFAULT_COOLDOWN_DEFAULT_MS, DEFAULT_COOLDOWN_MAX_MS, type CooldownStore } from './cooldown.js';\nimport { AutotaskConfigError, type AutotaskError } from './errors.js';\nimport { assertHostPolicy, normalizeAllowedOrigins } from './host-policy.js';\nimport { NoopLogger, type Logger } from './logger.js';\n\n/** The 23 named zones (catalog pinned from the node credential definition, G1 api-behavior section 2). */\nexport type ZoneName =\n | 'pre-release' | 'pre-release-uk' | 'limited-release' | 'limited-release-uk'\n | 'america-east' | 'america-east-2' | 'america-east-3'\n | 'america-west' | 'america-west-2' | 'america-west-3' | 'america-west-4'\n | 'uk' | 'uk2' | 'uk3'\n | 'old-australian' // default — webservices6\n | 'australia-nz' | 'australia-2'\n | 'pre-release-de' | 'pre-release-es'\n | 'german' | 'eu1' | 'spanish'\n | 'other'; // custom baseUrl required\n\n/**\n * Zone catalog: zone name -> base URL including the `/atservicesrest` version\n * path (lowercase on every zone). `other` has no catalog URL — a user-supplied\n * `baseUrl` is required.\n */\nexport const ZONE_CATALOG: Readonly<Record<ZoneName, string | null>> = {\n 'pre-release': 'https://webservices2.autotask.net/atservicesrest',\n 'pre-release-uk': 'https://webservices11.autotask.net/atservicesrest',\n 'limited-release': 'https://webservices1.autotask.net/atservicesrest',\n 'limited-release-uk': 'https://webservices17.autotask.net/atservicesrest',\n 'america-east': 'https://webservices3.autotask.net/atservicesrest',\n 'america-east-2': 'https://webservices14.autotask.net/atservicesrest',\n 'america-east-3': 'https://webservices22.autotask.net/atservicesrest',\n 'america-west': 'https://webservices5.autotask.net/atservicesrest',\n 'america-west-2': 'https://webservices15.autotask.net/atservicesrest',\n 'america-west-3': 'https://webservices24.autotask.net/atservicesrest',\n 'america-west-4': 'https://webservices25.autotask.net/atservicesrest',\n 'uk': 'https://webservices4.autotask.net/atservicesrest',\n 'uk2': 'https://webservices16.autotask.net/atservicesrest',\n 'uk3': 'https://webservices28.autotask.net/atservicesrest',\n 'old-australian': 'https://webservices6.autotask.net/atservicesrest',\n 'australia-nz': 'https://webservices29.autotask.net/atservicesrest',\n 'australia-2': 'https://webservices26.autotask.net/atservicesrest',\n 'pre-release-de': 'https://prde.autotask.net/atservicesrest',\n 'pre-release-es': 'https://pres.autotask.net/atservicesrest',\n 'german': 'https://webservices18.autotask.net/atservicesrest',\n 'eu1': 'https://webservices19.autotask.net/atservicesrest',\n 'spanish': 'https://webservices12.autotask.net/atservicesrest',\n 'other': null,\n};\n\n/** All zone names, in catalog order (includes `'other'`). */\nexport const ZONES: readonly ZoneName[] = [\n 'pre-release', 'pre-release-uk', 'limited-release', 'limited-release-uk',\n 'america-east', 'america-east-2', 'america-east-3',\n 'america-west', 'america-west-2', 'america-west-3', 'america-west-4',\n 'uk', 'uk2', 'uk3',\n 'old-australian',\n 'australia-nz', 'australia-2',\n 'pre-release-de', 'pre-release-es',\n 'german', 'eu1', 'spanish',\n 'other',\n];\n\n/** Default zone — 'old-australian' (webservices6). */\nexport const DEFAULT_ZONE: ZoneName = 'old-australian';\n\n/** The named config profiles (issue #4). `library` is the default and changes nothing. */\nexport type ConfigProfile = 'library' | 'agent';\n\n/**\n * Conservative limits for LLM-driven (agent) workloads (issue #4) — plain\n * data, exported for inspection and pinning. A looping agent can use up the\n * tenant's ~10,000 req/hour vendor budget, hold all 10 concurrent threads\n * (starving other integrations), and every retry spends budget, because the\n * limiter counts each attempt. The hourly limit is 80% of the vendor cap —\n * 2,000/hr stay available for the other integrations on the tenant.\n *\n * Resolution order: EXPLICIT config > profile > library default (the\n * existing validation runs on the final values). In agent mode the page size\n * is additionally CAPPED at `maxPageSize` (an explicit value above the cap\n * is clamped, not rejected).\n */\nexport const AGENT_PROFILE = {\n /** 80% of the 10,000/hr vendor cap. */\n rateLimit: { perHour: 8_000 },\n /** Default page size in agent mode. */\n pageSize: 25,\n /** Agent-mode page-size cap (explicit values above it are clamped). */\n maxPageSize: 100,\n timeoutMs: 20_000,\n maxRetries: 1,\n maxConcurrent: 3,\n /** 4 MiB — an agent should not pull a 64 MiB body. */\n maxResponseBytes: 4 * 1024 * 1024,\n resolution: { maxScanRecords: 200, maxScanPages: 2 },\n} as const;\n\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const MAX_PAGE_SIZE = 500;\nexport const DEFAULT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_MAX_RETRIES = 3;\nexport const DEFAULT_MAX_CONCURRENT = 10;\n/** Default response-size cap (64 MiB) — bounds a runaway/hostile body in memory. */\nexport const DEFAULT_MAX_RESPONSE_BYTES = 64 * 1024 * 1024;\n/** Bounded client-scan caps for resolution (section 19.2). */\nexport const DEFAULT_MAX_SCAN_RECORDS = 500;\nexport const DEFAULT_MAX_SCAN_PAGES = 4;\n\nexport interface AutotaskConfig {\n /**\n * Config profile (issue #4): `'library'` (default — changes nothing) or\n * `'agent'` (the conservative AGENT_PROFILE limits for LLM-driven\n * workloads). Resolution order: explicit config > profile > library\n * default; the existing validation runs on the final values.\n */\n profile?: ConfigProfile;\n /**\n * Full base URL incl. version path, e.g. 'https://webservices6.autotask.net/atservicesrest'.\n * Origin+path only — no entity path, no trailing slash. Exactly one of baseUrl/zone.\n */\n baseUrl?: string;\n /** Named zone from the catalog (default 'old-australian' = webservices6). */\n zone?: ZoneName;\n /** Autotask API integration code (header ApiIntegrationCode). Required. */\n apiIntegrationCode: string;\n /** Autotask username (header UserName). Required. */\n userName: string;\n /** Autotask secret (header Secret). Required. */\n secret: string;\n /** Optional ImpersonationResourceId header value (sent on every request when set). */\n impersonationResourceId?: string;\n /** Default page size for query walks. Default 10, must be 1..500. */\n pageSize?: number;\n /** HTTP timeout in ms (whole-call budget). Default 30_000. */\n timeoutMs?: number;\n /** Retry budget for idempotent requests on 429/5xx. Default 3 (0 disables). */\n maxRetries?: number;\n /** Optional request log sink. Default: no-op. */\n logger?: Logger;\n /** Concurrency guard (API allows <=10 concurrent). Default 10. */\n maxConcurrent?: number;\n /** Largest response body the transport will read, in bytes. Default 64 MiB; larger responses throw `RESPONSE_TOO_LARGE`. */\n maxResponseBytes?: number;\n /**\n * Opt-in client-side hourly limiter (API allows 10,000 req/hour): waits\n * within the call deadline, else throws `RateLimitError`. Off by default\n * (the `agent` profile turns it on at AGENT_PROFILE.rateLimit.perHour).\n * `perHour: null` is the explicit \"disabled\" value — the only way to beat\n * a profile's value (an ABSENT perHour means \"use the profile/default\").\n */\n rateLimit?: { perHour?: number | null };\n /**\n * Per-tenant 429 cooldown gate (issue #6): ON by default. After a 429\n * exhausts the transport's retries (or carries a Retry-After we will not\n * wait out, on a non-retriable method), further calls for that tenant\n * (lowercased username + lowercased host) fail LOCALLY with\n * `RateLimitError` (`code: 'RATE_LIMITED_COOLDOWN'`, `notSent: true`)\n * until the deadline passes — zero upstream calls. `enabled: false`\n * disables the gate; `maxMs` caps the window (default 15 minutes);\n * `defaultMs` is the window when Retry-After is missing/unparseable\n * (default 60 s); `store` injects a custom `CooldownStore` (the default\n * is the in-process in-memory map shared by every client instance).\n */\n cooldown?: { enabled?: boolean; maxMs?: number; defaultMs?: number; store?: CooldownStore };\n /**\n * Optional per-host circuit breaker at the transport (issue #26): OFF by\n * default. Counts SERVICE-FAILURE outcomes per host (the host of the\n * base URL — a zone outage hits every tenant on that zone, so the key is\n * host-only; a different tenant on a different host is unaffected, and\n * on a shared host one tenant's outage opens the circuit for the others\n * — the documented consequence of the host-only key) and, once\n * `failureThreshold` counted failures land inside the `failureWindowMs`\n * window, refuses further calls for that host LOCALLY (`CircuitBreakerError`,\n * `code: 'CIRCUIT_BREAKER_OPEN'`, `notSent: true`, `retryable: true`,\n * `retryAfter` = remaining open seconds — the deliberate divergence from\n * #6's `retryable: false`: the open period is bounded and advertised)\n * until `openTimeoutMs` passes and `successesToClose` probe successes\n * close it. `halfOpenProbes` bounds the probes admitted while half-open\n * (default `= successesToClose`; MUST be `>= successesToClose` — a\n * breaker that can never close is refused fail-closed at construction).\n * `store` injects a custom `CircuitBreakerStore` (the default is the\n * in-process in-memory map shared by every client instance); `isFailure`\n * injects the failure predicate (the default counts NETWORK_ERROR,\n * TIMEOUT, a vendor 429, a 5xx EXCEPT the deterministic validation 500,\n * and UNEXPECTED_CONTENT_TYPE — never ABORTED, a 4xx, or a local\n * refusal). Gated calls emit the audit event with `notSent` and consume\n * no `rateLimit.perHour` stamp; `thresholdInformation.get()` bypasses the\n * refusal (its outcome is still recorded). Timer-free: everything is\n * derived from `Date.now()` lazily, like the #6 cooldown.\n */\n circuitBreaker?: {\n enabled?: boolean;\n failureWindowMs?: number;\n failureThreshold?: number;\n openTimeoutMs?: number;\n successesToClose?: number;\n halfOpenProbes?: number;\n store?: CircuitBreakerStore;\n isFailure?: (err: AutotaskError) => boolean;\n };\n /**\n * Bounded client-scan caps for resolution (section 19.2): the scan is only\n * the fallback for an inconclusive server answer, and these caps bound it.\n * Defaults 500 records / 4 pages; each must be an integer >= 1.\n */\n resolution?: { maxScanRecords?: number; maxScanPages?: number };\n /**\n * Optional audit hook (section 19.3): one event per completed request,\n * carrying the correlation id, method, path, status, duration and the\n * redacted request body. Never called before the request settles.\n */\n onAudit?: (event: import('./types/common.js').AuditEvent) => void;\n /**\n * Response redaction for personal + business-sensitive field values\n * (default `true` = redacted). Setting `false` returns PII and\n * confidential fields (emails, phones, addresses, device IP/MAC, tax ids)\n * UNREDACTED to the caller — for regulated workflows that need raw\n * personal data and keep model transcripts inside your control. The\n * SECRET class (`password`, `secretKey`, `secret`) is ALWAYS redacted\n * regardless of this flag: the SDK is the only permission boundary (the\n * vendor API has no read-only key), so credential values never cross the\n * SDK boundary in a response. Request bodies are never redacted\n * (credentials travel in writes by design). See docs/API.md section 10.\n */\n redactPersonalData?: boolean;\n /**\n * Opt-in read-through TTL cache for successful single-record reads\n * (get-by-id and the id branch of `resolve`). OFF by default (absent =\n * no cache). A cached read is a snapshot at fetch time: mutations are\n * never cached, so a write-then-read returns the stale snapshot until\n * `ttlMs` elapses. `ttlMs` must be a positive integer (ms).\n * `perResourceTtlMs` (issue #32) is an optional map of resource plan\n * key -> TTL in ms: a resource named in the map expires on its own TTL;\n * every other resource — and an absent map — falls back to `ttlMs`\n * (absent map = bit-for-bit the pre-#32 behaviour). Every value is a\n * positive integer (validated fail-closed like `ttlMs`). The key\n * contract (docs section 11.15): the entry takes the override for the\n * plan key of the entity the read path points to — a contact read\n * through `tickets.getContext` expires on the contact's TTL. The\n * plan-derived default table (`DEFAULT_PER_RESOURCE_TTL_MS` in\n * `src/cache-ttl-tables.ts`, reference class 1h vs default class 5min)\n * is a REFERENCE for building this map — never applied implicitly.\n */\n cache?: { ttlMs: number; perResourceTtlMs?: Record<string, number> };\n /**\n * Opt-in live field-metadata channel for the entityInformation trio\n * (`getEntityInfo` / `getFieldInfo` / `getUdfInfo`). OFF by default\n * (absent = no cache instance, and the trio is the uncached wire path,\n * bit-for-bit). Live reads are snapshots at fetch time: a vendor drift\n * (a deterministic validation 500, or an INVALID_RESPONSE on a metadata\n * read) invalidates the entity's entries so the next call refetches;\n * anything the drift signals do not name shows up once `ttlMs` expires.\n * Field metadata only — record reads are `cache`, a different channel.\n * `ttlMs` must be a positive integer (ms); `maxEntities` (optional,\n * positive integer) bounds the in-memory store.\n */\n fieldCache?: { ttlMs: number; maxEntities?: number };\n /**\n * Opt-in PUT item-path fallback for updates (issue #34). OFF by default\n * (absent = the spec-derived route contract is unchanged: a 404 on the\n * pinned update route surfaces the typed error). With `putFallback: true`,\n * a TYPED 404 on a NON-collectionUpdate update route (the scoped\n * collection PATCH; the top-level item-path PUT) retries ONCE as\n * `PUT /{Entity}/{id}` — the retry body is the caller's fields merged onto\n * a fresh unredacted read of the current record, so a fallback PUT is\n * never a null-clearing partial. Never retried: 400/405/422/5xx,\n * collectionUpdate routes (the spec defines no item-path update there) and\n * `raw: true` updates (the raw path issues exactly what it was told). A\n * declined gate throws the self-explaining typed error naming the route,\n * the status and the opt-in (`details.putFallback`).\n */\n update?: { putFallback?: boolean };\n /**\n * Opt-in zone re-resolution on 401 (issue #43). OFF by default (absent or\n * not exactly `true` = today's behaviour byte-identically: a 401 surfaces\n * the typed `UnauthorizedError` with no discovery call and no second\n * request). With `reResolveZoneOn401: true`, a 401 on a RELATIVE path\n * against a CATALOG base (an explicit `baseUrl` is never re-pointed — the\n * operator said where to go) makes ONE unauthenticated vendor\n * zone-discovery call\n * (`GET https://webservices.autotask.net/atservicesrest/v1.0/zoneInformation?user=<userName>`);\n * the response's `url` is the ONLY accepted re-point target (a 401\n * body-injected URL never receives the credentials). If the resolved zone\n * base DIFFERS from the client's live base: the client re-points its live\n * base URL (process-lifetime — never persisted) and retries the SAME\n * request ONCE against it; the re-pointed host starts with fresh per-host\n * transport state (no cooldown/breaker inheritance from the stale host).\n * A resolved base identical to the live one, or a discovery fault\n * (network / non-200 / malformed / missing `url`), propagates today's\n * typed 401 untouched (zero retry — the recovery must not turn a\n * credential fault into a discovery fault). A retry that 401s again\n * propagates the typed `UnauthorizedError` with\n * `details.zoneRecovery = { from, to, retried: true }`. See docs/API.md\n * section 11.19.\n */\n reResolveZoneOn401?: boolean;\n /**\n * Opt-in config-time HOST BOUNDS (skill 3.5.0 / L2, finding A1): OFF by\n * default — an absent block leaves the resolved config byte-identical\n * (no bound runs). When present, the RESOLVED base URL (explicit\n * `baseUrl` or zone-derived) must pass every ACTIVE bound at\n * construction time, before any wire activity; a violation throws\n * `HostPolicyDeniedError` (`code: 'HOST_POLICY_DENIED'`, category\n * \"policy\", `retryable: false`) naming the offending origin. With the\n * issue-#43 zone recovery enabled, the same bounds gate the\n * discovery-provided re-point target — a refused host is a discovery\n * fault (the original 401 propagates byte-identically, zero wire to the\n * refused host).\n *\n * `blockPrivateHosts` refuses a LITERAL private / loopback / link-local\n * host (IPv4 10/8, 172.16/12, 192.168/16, 127/8, 169.254/16, 0/8;\n * IPv6 ::1, fc00::/7, fe80::/10, and IPv4-mapped `::ffff:a.b.c.d`).\n * Checks run on the canonical `new URL(origin).host`; HOSTNAMES are\n * never blocked — there are no DNS lookups, so the bound sees literal\n * IPs only. `allowedOrigins` is an EXACT normalised-origin allow-list\n * (scheme + host[:port] — entries are canonicalised with the same WHATWG\n * origin rules, so `https://api.example.com:443` matches\n * `https://api.example.com`). The private bound is checked FIRST and\n * wins: a host that is both private and allow-listed is still refused.\n * FAIL-CLOSED: a PRESENT block with NO active bound (neither\n * `blockPrivateHosts: true` nor a non-empty `allowedOrigins`) is refused\n * at config validation — an empty policy would silently read as\n * \"unbounded\".\n */\n hostPolicy?: { blockPrivateHosts?: boolean; allowedOrigins?: readonly string[] };\n}\n\n/** Resolved + validated config; every field final (no optional numbers left). */\nexport interface ResolvedAutotaskConfig {\n /** The effective profile (resolved; `'library'` when absent). */\n profile: ConfigProfile;\n /** Resolved base URL (no trailing slash). */\n baseUrl: string;\n /** The named zone, when one was used (undefined for a bare explicit baseUrl). */\n zone?: ZoneName;\n apiIntegrationCode: string;\n userName: string;\n secret: string;\n impersonationResourceId?: string;\n pageSize: number;\n timeoutMs: number;\n maxRetries: number;\n maxConcurrent: number;\n maxResponseBytes: number;\n logger: Logger;\n rateLimit?: { perHour: number };\n /** Resolved tenant 429 cooldown gate (final values; ON by default). */\n cooldown: { enabled: boolean; maxMs: number; defaultMs: number; store?: CooldownStore };\n /**\n * Resolved per-host circuit breaker (final values; OFF by default). When\n * `enabled` is false the transport keeps no breaker state at all.\n */\n circuitBreaker: {\n enabled: boolean;\n failureWindowMs: number;\n failureThreshold: number;\n openTimeoutMs: number;\n successesToClose: number;\n halfOpenProbes: number;\n store?: CircuitBreakerStore;\n isFailure?: (err: AutotaskError) => boolean;\n };\n /** Resolved scan caps (final values; defaults 500 records / 4 pages). */\n resolution: { maxScanRecords: number; maxScanPages: number };\n /** Audit hook (absent when the caller provided none). */\n onAudit?: (event: import('./types/common.js').AuditEvent) => void;\n /** Response redaction for PII + CONFIDENTIAL fields (resolved; default true). */\n redactPersonalData: boolean;\n /** The read cache (absent unless `cache: { ttlMs }` was set). */\n readCache?: ReadCache;\n /** The field-metadata cache (absent unless `fieldCache: { ttlMs }` was set). */\n fieldCache?: FieldCache;\n /** Resolved update fallback gate (final value; OFF by default, issue #34). */\n update: { putFallback: boolean };\n /** Resolved zone re-resolution gate (final value; OFF by default, issue #43). */\n reResolveZoneOn401: boolean;\n /**\n * Resolved host bounds (absent when the opt-in block was not supplied —\n * byte-identical default; skill 3.5.0 / L2, finding A1). `blockPrivate`\n * and `allowedOrigins` are the ACTIVE bounds only (an absent boolean /\n * empty list means that bound is inactive); consumers then gate the\n * construction-time base AND the issue-#43 re-point target through them.\n */\n hostPolicy?: { blockPrivate: boolean; allowedOrigins: readonly string[] };\n}\n\n/** Catalog URL for a named zone. Throws `AutotaskConfigError` for `'other'`. */\nexport function zoneUrl(zone: ZoneName): string {\n const url = ZONE_CATALOG[zone];\n if (url === null || url === undefined) {\n throw new AutotaskConfigError(`Zone \"${zone}\" has no catalog URL; supply a baseUrl instead`);\n }\n return url;\n}\n\n/** Validate a baseUrl: http/https only, trailing slashes stripped. */\nfunction normalizeBaseUrl(raw: string): string {\n let url: URL;\n try {\n url = new URL(raw);\n } catch {\n throw new AutotaskConfigError(`Invalid baseUrl: \"${raw}\"`);\n }\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new AutotaskConfigError(`baseUrl must use http: or https:, got \"${url.protocol}\"`);\n }\n const path = url.pathname.replace(/\\/+$/, '');\n return `${url.origin}${path}`;\n}\n\nfunction isKnownZone(zone: unknown): zone is ZoneName {\n return typeof zone === 'string' && (ZONES as readonly string[]).includes(zone);\n}\n\n/**\n * `baseUrl ?? zoneUrl(zone ?? 'old-australian')` — one resolved base URL for\n * the whole client (no zone logic leaks into resources).\n */\nexport function resolveBaseUrl(partial: { baseUrl?: string; zone?: ZoneName }): string {\n if (partial.baseUrl !== undefined) return normalizeBaseUrl(partial.baseUrl);\n if (partial.zone === 'other') {\n throw new AutotaskConfigError('zone: \"other\" requires a baseUrl');\n }\n return zoneUrl(partial.zone ?? DEFAULT_ZONE);\n}\n\n/** A required credential: a string, non-empty after trim. */\nfunction requireCredential(value: unknown, field: string): string {\n if (typeof value !== 'string') {\n throw new AutotaskConfigError(`${field} must be a non-empty string`);\n }\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new AutotaskConfigError(`${field} must be a non-empty string`);\n }\n // C1 credential shape gate (2026-10-07 incident class): the TRIMMED value is checked before it\n // is accepted, so a value that is contaminated rather than merely padded is REFUSED instead of\n // silently normalized. Edge whitespace alone keeps its historical behaviour (the trim pinned by\n // test/config.test.ts); a surrounding quote (the single-quoted `.env` trap) or an interior CR is\n // a load defect no trim can repair, and sending it produces an opaque vendor 401. Value-free:\n // the error names the field and the env-load pitfall, never the value.\n const shape = credentialShapeProblem(trimmed, { skipEdgeWhitespace: true });\n if (shape !== undefined) {\n throw new AutotaskConfigError(`${field} ${CREDENTIAL_ENV_LOAD_ACTION} (${shape})`, {\n code: 'INVALID_CREDENTIAL_SHAPE',\n suggestedAction:\n 'Load the credential with the shell (`set -a; . ./.env; set +a`) or with ' +\n 'loadAutotaskCredentialsFromEnv() from node-autotask; single-quoted values must be ' +\n 'shell-sourced, not parsed by a quote-preserving loader. No request was sent.',\n });\n }\n return trimmed;\n}\n\n/** Validate + resolve an AutotaskConfig (fail closed; throws AutotaskConfigError). */\nexport function resolveConfig(config: AutotaskConfig): ResolvedAutotaskConfig {\n if (config === null || typeof config !== 'object') {\n throw new AutotaskConfigError('AutotaskConfig is required');\n }\n // Profile (issue #4): 'library' is the default and changes nothing;\n // 'agent' applies the conservative AGENT_PROFILE values wherever the\n // caller left a field unset. Fail closed on anything else.\n const profile = config.profile ?? 'library';\n if (profile !== 'library' && profile !== 'agent') {\n throw new AutotaskConfigError(\n `Unknown profile \"${String(config.profile)}\" — expected \"library\" or \"agent\"`,\n );\n }\n const agent = profile === 'agent';\n\n const { baseUrl, zone } = config;\n // Exactly one of baseUrl/zone is effective; zone 'other' takes a baseUrl.\n if (baseUrl !== undefined && zone !== undefined && zone !== 'other') {\n throw new AutotaskConfigError(\n 'Provide exactly one of \"baseUrl\" or \"zone\" (zone \"other\" is used with a baseUrl)',\n );\n }\n let resolvedBaseUrl: string;\n let resolvedZone: ZoneName | undefined;\n if (baseUrl !== undefined) {\n resolvedBaseUrl = normalizeBaseUrl(baseUrl);\n if (zone === 'other') resolvedZone = 'other';\n } else if (zone !== undefined) {\n if (!isKnownZone(zone)) {\n // F10: name the bad zone AND list the 23 catalog zones — a 9am zone\n // typo is the #1 live-run trap, and the fix is in the message.\n throw new AutotaskConfigError(\n `Unknown zone \"${zone}\" — the catalog has ${ZONES.length} zones: ${ZONES.join(', ')} (use one of them, or supply a baseUrl)`,\n );\n }\n if (zone === 'other') {\n throw new AutotaskConfigError('zone: \"other\" requires a baseUrl');\n }\n resolvedBaseUrl = zoneUrl(zone);\n resolvedZone = zone;\n } else {\n resolvedBaseUrl = zoneUrl(DEFAULT_ZONE);\n resolvedZone = DEFAULT_ZONE;\n }\n\n // Skill 3.5.0 / L2 (finding A1): the opt-in host bounds, FAIL-CLOSED.\n // Absent block => untouched behaviour (byte-identical default). A PRESENT\n // block must carry at least one active bound (an empty policy would read\n // as \"unbounded\"), and the RESOLVED base URL — explicit or zone-derived —\n // must pass it here, before any wire activity.\n let hostPolicy: { blockPrivate: boolean; allowedOrigins: readonly string[] } | undefined;\n if (config.hostPolicy !== undefined) {\n const raw = config.hostPolicy as { blockPrivateHosts?: unknown; allowedOrigins?: unknown };\n if (raw === null || typeof raw !== 'object') {\n throw new AutotaskConfigError('hostPolicy must be an object');\n }\n if (raw.blockPrivateHosts !== undefined && typeof raw.blockPrivateHosts !== 'boolean') {\n throw new AutotaskConfigError('hostPolicy.blockPrivateHosts must be a boolean');\n }\n let allowedOrigins: string[] | undefined;\n if (raw.allowedOrigins !== undefined) {\n if (!Array.isArray(raw.allowedOrigins) || raw.allowedOrigins.some((entry) => typeof entry !== 'string')) {\n throw new AutotaskConfigError('hostPolicy.allowedOrigins must be an array of URL strings');\n }\n try {\n allowedOrigins = normalizeAllowedOrigins(raw.allowedOrigins);\n } catch {\n throw new AutotaskConfigError('hostPolicy.allowedOrigins contains an invalid URL');\n }\n }\n const blockPrivate = raw.blockPrivateHosts === true;\n if (!blockPrivate && (allowedOrigins === undefined || allowedOrigins.length === 0)) {\n throw new AutotaskConfigError(\n 'hostPolicy is present but has no active bound — set blockPrivateHosts: true and/or a non-empty allowedOrigins (an empty policy is refused fail-closed)',\n );\n }\n hostPolicy = { blockPrivate, allowedOrigins: allowedOrigins ?? [] };\n // Throws HostPolicyDeniedError (typed config error) pre-wire; the\n // private bound is checked FIRST and wins over the allow-list. The\n // helper option names are the internal ones (`blockPrivate` /\n // `allowedOrigins`); the public config names stay `blockPrivateHosts`.\n assertHostPolicy(resolvedBaseUrl, {\n blockPrivate: hostPolicy.blockPrivate,\n allowedOrigins: hostPolicy.allowedOrigins,\n });\n }\n\n const apiIntegrationCode = requireCredential(config.apiIntegrationCode, 'apiIntegrationCode');\n const userName = requireCredential(config.userName, 'userName');\n const secret = requireCredential(config.secret, 'secret');\n\n let impersonationResourceId: string | undefined;\n if (config.impersonationResourceId !== undefined) {\n impersonationResourceId = requireCredential(config.impersonationResourceId, 'impersonationResourceId');\n }\n\n // Explicit config > profile > library default (issue #4): the profile\n // value applies only where the caller left the field UNSET.\n const pageSize = config.pageSize ?? (agent ? AGENT_PROFILE.pageSize : DEFAULT_PAGE_SIZE);\n if (!Number.isInteger(pageSize) || pageSize < 1 || pageSize > MAX_PAGE_SIZE) {\n throw new AutotaskConfigError(`pageSize must be an integer in 1..${MAX_PAGE_SIZE} (got ${String(config.pageSize)})`);\n }\n // Agent profile: the page size is CAPPED — an explicit value above the cap\n // is clamped (not rejected); library mode is uncapped (vendor max).\n const pageSizeCapped = agent ? Math.min(pageSize, AGENT_PROFILE.maxPageSize) : pageSize;\n\n const timeoutMs = config.timeoutMs ?? (agent ? AGENT_PROFILE.timeoutMs : DEFAULT_TIMEOUT_MS);\n if (!Number.isInteger(timeoutMs) || timeoutMs <= 0) {\n throw new AutotaskConfigError('timeoutMs must be a positive integer');\n }\n\n const maxRetries = config.maxRetries ?? (agent ? AGENT_PROFILE.maxRetries : DEFAULT_MAX_RETRIES);\n if (!Number.isInteger(maxRetries) || maxRetries < 0) {\n throw new AutotaskConfigError('maxRetries must be a non-negative integer');\n }\n\n const maxConcurrent = config.maxConcurrent ?? (agent ? AGENT_PROFILE.maxConcurrent : DEFAULT_MAX_CONCURRENT);\n if (!Number.isInteger(maxConcurrent) || maxConcurrent <= 0) {\n throw new AutotaskConfigError('maxConcurrent must be a positive integer');\n }\n\n const maxResponseBytes = config.maxResponseBytes ?? (agent ? AGENT_PROFILE.maxResponseBytes : DEFAULT_MAX_RESPONSE_BYTES);\n if (!Number.isInteger(maxResponseBytes) || maxResponseBytes <= 0) {\n throw new AutotaskConfigError('maxResponseBytes must be a positive integer');\n }\n\n let rateLimit: { perHour: number } | undefined;\n if (config.rateLimit !== undefined && config.rateLimit.perHour !== undefined) {\n if (config.rateLimit.perHour === null) {\n // Explicit disable (issue #4) — beats the profile's value. Absent\n // (undefined) would mean \"use the profile/default\" instead.\n rateLimit = undefined;\n } else {\n const perHour = config.rateLimit.perHour;\n if (!Number.isInteger(perHour) || perHour <= 0) {\n throw new AutotaskConfigError('rateLimit.perHour must be a positive integer or null (explicitly disabled)');\n }\n rateLimit = { perHour };\n }\n } else if (agent) {\n rateLimit = { perHour: AGENT_PROFILE.rateLimit.perHour };\n }\n\n // Tenant 429 cooldown gate (issue #6): ON by default with the 15-minute\n // hard cap; `enabled: false` disables it, `store` injects a custom one.\n const cooldownEnabled = config.cooldown?.enabled ?? true;\n const cooldownMaxMs = config.cooldown?.maxMs ?? DEFAULT_COOLDOWN_MAX_MS;\n if (!Number.isInteger(cooldownMaxMs) || cooldownMaxMs <= 0) {\n throw new AutotaskConfigError('cooldown.maxMs must be a positive integer (ms)');\n }\n const cooldownDefaultMs = config.cooldown?.defaultMs ?? DEFAULT_COOLDOWN_DEFAULT_MS;\n if (!Number.isInteger(cooldownDefaultMs) || cooldownDefaultMs <= 0) {\n throw new AutotaskConfigError('cooldown.defaultMs must be a positive integer (ms)');\n }\n const cooldownStore = config.cooldown?.store;\n if (\n cooldownStore !== undefined &&\n (typeof cooldownStore.get !== 'function' ||\n typeof cooldownStore.set !== 'function' ||\n typeof cooldownStore.delete !== 'function')\n ) {\n throw new AutotaskConfigError('cooldown.store must implement get/set/delete (a CooldownStore)');\n }\n const cooldown = {\n enabled: cooldownEnabled,\n maxMs: cooldownMaxMs,\n defaultMs: cooldownDefaultMs,\n store: cooldownStore,\n };\n\n // Per-host circuit breaker (issue #26): OFF by default (the #6 cooldown\n // is ON by default — an outage gate is opt-in, a 429 gate is not); the\n // same fail-closed validation style. No env overrides (src/config.ts\n // never reads process.env — the reference servers own env handling).\n const breakerEnabled = config.circuitBreaker?.enabled ?? false;\n const breakerWindowMs = config.circuitBreaker?.failureWindowMs ?? DEFAULT_CIRCUIT_BREAKER_WINDOW_MS;\n if (!Number.isInteger(breakerWindowMs) || breakerWindowMs <= 0) {\n throw new AutotaskConfigError('circuitBreaker.failureWindowMs must be a positive integer (ms)');\n }\n const breakerThreshold = config.circuitBreaker?.failureThreshold ?? DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD;\n if (!Number.isInteger(breakerThreshold) || breakerThreshold <= 0) {\n throw new AutotaskConfigError('circuitBreaker.failureThreshold must be a positive integer');\n }\n const breakerOpenTimeoutMs = config.circuitBreaker?.openTimeoutMs ?? DEFAULT_CIRCUIT_BREAKER_OPEN_TIMEOUT_MS;\n if (!Number.isInteger(breakerOpenTimeoutMs) || breakerOpenTimeoutMs <= 0) {\n throw new AutotaskConfigError('circuitBreaker.openTimeoutMs must be a positive integer (ms)');\n }\n const breakerSuccessesToClose = config.circuitBreaker?.successesToClose ?? DEFAULT_CIRCUIT_BREAKER_SUCCESSES_TO_CLOSE;\n if (!Number.isInteger(breakerSuccessesToClose) || breakerSuccessesToClose <= 0) {\n throw new AutotaskConfigError('circuitBreaker.successesToClose must be a positive integer');\n }\n const breakerHalfOpenProbes = config.circuitBreaker?.halfOpenProbes ?? breakerSuccessesToClose;\n if (!Number.isInteger(breakerHalfOpenProbes) || breakerHalfOpenProbes <= 0) {\n throw new AutotaskConfigError('circuitBreaker.halfOpenProbes must be a positive integer');\n }\n // A breaker that can never close is a misconfiguration: with fewer\n // admitted probes than required successes the half-open phase ends\n // without ever reaching `successesToClose`.\n if (breakerHalfOpenProbes < breakerSuccessesToClose) {\n throw new AutotaskConfigError(\n `circuitBreaker.halfOpenProbes (${breakerHalfOpenProbes}) must be >= successesToClose (${breakerSuccessesToClose}) — the breaker could never close`,\n );\n }\n const breakerStore = config.circuitBreaker?.store;\n if (\n breakerStore !== undefined &&\n (typeof breakerStore.get !== 'function' ||\n typeof breakerStore.set !== 'function' ||\n typeof breakerStore.delete !== 'function')\n ) {\n throw new AutotaskConfigError('circuitBreaker.store must implement get/set/delete (a CircuitBreakerStore)');\n }\n const breakerIsFailure = config.circuitBreaker?.isFailure;\n if (breakerIsFailure !== undefined && typeof breakerIsFailure !== 'function') {\n throw new AutotaskConfigError('circuitBreaker.isFailure must be a function');\n }\n const circuitBreaker = {\n enabled: breakerEnabled,\n failureWindowMs: breakerWindowMs,\n failureThreshold: breakerThreshold,\n openTimeoutMs: breakerOpenTimeoutMs,\n successesToClose: breakerSuccessesToClose,\n halfOpenProbes: breakerHalfOpenProbes,\n store: breakerStore,\n isFailure: breakerIsFailure,\n };\n\n const maxScanRecords = config.resolution?.maxScanRecords ?? (agent ? AGENT_PROFILE.resolution.maxScanRecords : DEFAULT_MAX_SCAN_RECORDS);\n if (!Number.isInteger(maxScanRecords) || maxScanRecords < 1) {\n throw new AutotaskConfigError('resolution.maxScanRecords must be an integer >= 1');\n }\n const maxScanPages = config.resolution?.maxScanPages ?? (agent ? AGENT_PROFILE.resolution.maxScanPages : DEFAULT_MAX_SCAN_PAGES);\n if (!Number.isInteger(maxScanPages) || maxScanPages < 1) {\n throw new AutotaskConfigError('resolution.maxScanPages must be an integer >= 1');\n }\n\n const redactPersonalData = config.redactPersonalData ?? true;\n // ReadCache validates ttlMs + perResourceTtlMs (positive integers) and\n // throws AutotaskConfigError.\n const readCache =\n config.cache === undefined\n ? undefined\n : new ReadCache(config.cache.ttlMs, config.cache.perResourceTtlMs);\n // FieldCache validates ttlMs/maxEntities (positive integers) the same way.\n const fieldCache =\n config.fieldCache === undefined\n ? undefined\n : new FieldCache(config.fieldCache.ttlMs, config.fieldCache.maxEntities ?? FIELD_CACHE_MAX_ENTITIES);\n // Issue #34: the update fallback gate resolves to a strict boolean\n // (exactly `true` opts in; anything else — absent or not — stays off).\n const update = { putFallback: config.update?.putFallback === true };\n // Issue #43: the zone re-resolution gate resolves to a strict boolean the\n // same way (absent or not-exactly-true stays off — byte-identical to\n // today: no discovery call, no second request).\n const reResolveZoneOn401 = config.reResolveZoneOn401 === true;\n\n const logger = config.logger ?? NoopLogger;\n // G10b F3: a custom http: base URL sends the three auth headers cleartext\n // (all 23 catalog zones are https). One warning at construction — no\n // rejection (local test servers must keep working).\n if (resolvedBaseUrl.startsWith('http:')) {\n const host = new URL(resolvedBaseUrl).host;\n logger.warn?.(\n `[autotask] cleartext credentials to ${host} — https recommended (baseUrl uses http:; all catalog zones are https)`,\n );\n }\n\n return {\n profile,\n baseUrl: resolvedBaseUrl,\n zone: resolvedZone,\n apiIntegrationCode,\n userName,\n secret,\n impersonationResourceId,\n pageSize: pageSizeCapped,\n timeoutMs,\n maxRetries,\n maxConcurrent,\n maxResponseBytes,\n logger,\n rateLimit,\n cooldown,\n circuitBreaker,\n resolution: { maxScanRecords, maxScanPages },\n onAudit: config.onAudit,\n redactPersonalData,\n readCache,\n fieldCache,\n update,\n reResolveZoneOn401,\n hostPolicy,\n };\n}\n","/**\n * Small shared helpers (ARCHITECTURE section 15: zero runtime dependencies —\n * `node:crypto` is platform, not a dep).\n */\nimport { randomUUID } from 'node:crypto';\nimport { AutotaskConfigError, AutotaskError } from '../errors.js';\nimport type { Identifier } from '../types/common.js';\n\n/** Narrow unknown to a record (a plain object — not an array, not null). */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Narrow unknown to a record or throw `AutotaskError` (code INVALID_RESPONSE)\n * naming the expected shape.\n */\nexport function assertRecord(value: unknown, label: string): Record<string, unknown> {\n if (!isRecord(value)) {\n const got = value === null ? 'null' : Array.isArray(value) ? 'array' : typeof value;\n throw new AutotaskError(`Expected ${label} to be an object, got ${got}`, {\n code: 'INVALID_RESPONSE',\n category: 'server',\n retryable: false,\n });\n }\n return value;\n}\n\n/** A value eligible for recursive merge: plain object, not an array. */\nfunction isMergeable(value: unknown): value is Record<string, unknown> {\n return isRecord(value);\n}\n\n/**\n * Deep-merge plain-object params (override wins; plain objects merge\n * recursively, arrays and scalars are replaced wholesale). Neither input is\n * mutated.\n */\nexport function deepMergeParams<T extends Record<string, unknown>>(base: T, override: Partial<T>): T {\n const out: Record<string, unknown> = { ...base };\n for (const [key, value] of Object.entries(override)) {\n if (value === undefined) continue;\n const baseValue = base[key];\n out[key] =\n isMergeable(baseValue) && isMergeable(value)\n ? deepMergeParams(baseValue, value)\n : value;\n }\n return out as T;\n}\n\n/**\n * True when the value is an id candidate: a number, or an all-digit string\n * (the wire-boundary shapes `parseIdentifier` decides on).\n */\nexport function isIdentifierCandidate(value: unknown): boolean {\n return typeof value === 'number' || (typeof value === 'string' && /^\\d+$/.test(value.trim()));\n}\n\n/**\n * Canonicalise an id for the addressable surface (number or numeric string).\n * A safe non-negative integer number stays a number; an all-digit string\n * whose trimmed digit string parses to a safe integer normalises to that\n * number (the trim canonicalises the padding and leading zeros drop:\n * ' 42 ' -> 42, '007' -> 7); an all-digit string BEYOND the safe range stays\n * a string (the trimmed canonical digits) — vendor ids above 2^53 are\n * addressable only via the string form: a JS number that big has already\n * lost precision and must never be re-parsed, while the string travels to\n * the URL path verbatim (losslessly).\n *\n * Throws `AutotaskConfigError` (CONFIG_ERROR) naming `label` for: unsafe or\n * negative numbers (corrupted or invalid), non-digit / non-integer strings\n * (floats, signs, exponents, blanks), null, and non-id values.\n */\nexport function parseIdentifier(value: unknown, label = 'id'): Identifier {\n if (typeof value === 'number') {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new AutotaskConfigError(`${label} must be a non-negative safe integer (got ${value})`);\n }\n return value;\n }\n if (typeof value !== 'string') {\n // Wire-boundary guard: the invoke router forwards caller args untyped, so\n // a null / object / array arg must refuse with a typed CONFIG_ERROR (never\n // an uncaught TypeError from .trim()).\n const got = value === null ? 'null' : Array.isArray(value) ? 'array' : String(typeof value);\n throw new AutotaskConfigError(`${label} must be a non-negative integer or a canonical integer string (got ${got})`);\n }\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new AutotaskConfigError(`${label} must be a non-negative integer (got \"${value}\")`);\n }\n const parsed = Number.parseInt(trimmed, 10);\n if (!Number.isSafeInteger(parsed)) return trimmed; // unsafe: keep the exact digits (string passthrough)\n return parsed;\n}\n\n/**\n * Hoist `userDefinedFields: [{ name, value }]` to the record top level\n * (collision-safe: a name that already exists on the record gets the prefix,\n * default `udf_`; the original array is preserved; existing properties are\n * never overwritten). Mirrors the node's `flattenUdfs` output.\n */\nexport function flattenUdfs<T extends Record<string, unknown>>(\n record: T,\n options?: { prefix?: string },\n): T & Record<string, unknown> {\n const prefix = options?.prefix ?? 'udf_';\n const out: Record<string, unknown> = { ...record };\n const udfs = record.userDefinedFields;\n if (!Array.isArray(udfs)) return out as T & Record<string, unknown>;\n for (const udf of udfs) {\n if (!isRecord(udf) || typeof udf.name !== 'string' || udf.name === '') continue;\n const target = udf.name in out ? `${prefix}${udf.name}` : udf.name;\n if (!(target in out)) out[target] = udf.value;\n }\n return out as T & Record<string, unknown>;\n}\n\n/** One correlation id per request (surfaced on every error and audit event). */\nexport function newCorrelationId(): string {\n return randomUUID();\n}\n\n/**\n * Redact credential-shaped fields in an audit payload (section 19.3): any\n * object key naming a secret/password/token/api-key/credential is replaced\n * with `'[REDACTED]'`; nested objects and arrays are walked recursively.\n * Values are never logged, only field NAMES matched.\n *\n * Two families (G10b F4 hardening):\n * - the G3 word set — separator-delimited (^, _, -, .) spellings of\n * secret(s)/password/passwd/passphrase/token(s)/apikey/api_key/\n * apiintegrationcode/credential(s)/accesskey/access_key/authcode/\n * authorization (matches `secret`, `access_key`, `user-secret`, and —\n * case-insensitively — the whole word `apiIntegrationCode`);\n * - camelCase composites — a key that ENDS in a credential suffix\n * (Secret/Token(s)/Password/Passphrase/Credential(s)/Key/\n * ApiIntegrationCode), e.g. `authToken`, `accessToken`, `mySecret`.\n * Deliberately excluded: a bare `Code` suffix (too broad — `statusCodes`-\n * shaped fields) and non-credential ids such as `impersonationResourceId`\n * (a numeric id, not a secret; the logger's name-based redactor,\n * CREDENTIAL_HEADER_NAMES, covers it on the log side).\n */\nconst CREDENTIAL_KEY_RE =\n /(^|[_\\-.])(secret|secrets|password|passwd|passphrase|token|tokens|apikey|api_key|apiintegrationcode|credentials?|accesskey|access_key|authcode|authorization)([_\\-.]|$)|([A-Za-z0-9])(secrets?|tokens?|password|passwd|passphrase|credentials?|keys?|apiintegrationcode)(?=$)/i;\n\nexport function redactAuditBody(value: unknown): unknown {\n if (Array.isArray(value)) return value.map((entry) => redactAuditBody(entry));\n if (!isRecord(value)) return value;\n const out: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n out[key] = CREDENTIAL_KEY_RE.test(key) ? '[REDACTED]' : redactAuditBody(entry);\n }\n return out;\n}\n\n/** A plan key (`configuration_items`) as a client accessor (`configurationItems`). */\nexport function camelKey(key: string): string {\n return key.split('_').map((part, i) => (i === 0 ? part : part[0]!.toUpperCase() + part.slice(1))).join('');\n}\n","/**\n * Pagination — cursor-follow walk (ARCHITECTURE section 7).\n *\n * The walk follows the vendor's `pageDetails.nextPageUrl` cursor, node-style\n * (the node's `helpers/pagination.ts` does the same): the fetcher is\n * `BaseResource.fetchPage`, which POSTs the QueryModel body for page 1 and\n * the preserved filter to the ABSOLUTE cursor for later pages (same-origin\n * cursors are used verbatim; cross-origin ones are re-based onto the client\n * base URL — the node's custom-zone behaviour). `hasMore` is\n * `nextPageUrl !== null`; the walk also stops on a short/empty page, guarded\n * by the 1000-page cap (`MAX_PAGES` — the node runtime constant,\n * `PAGINATION.MAX_PAGES` = 1000; a stale \"50\" exists in the node's\n * `constants/operations.ts` but is unreferenced) — a walk that would fetch a\n * 1001st page throws `PaginationLimitError` (code PAGINATION_LIMIT,\n * category policy, non-retryable). Filtering stays a server-side concern:\n * the SDK never post-filters client-side.\n */\nimport { DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE } from './config.js';\nimport { PaginationLimitError } from './errors.js';\nimport type { Page } from './types/common.js';\n\n/** Re-export for the barrel (canonical definition: types/common.ts). */\nexport type { Page } from './types/common.js';\n\n/** A page fetcher: request page N at the given size; report paging facts from `pageDetails`. */\nexport type PageFetcher<T> = (page: number, pageSize: number) => Promise<Page<T>>;\n\n/** 1000-page walk guard (the node's `MAX_PAGES`). */\nexport const MAX_PAGES = 1000;\n\nexport interface PaginateOptions {\n /** Page size for the walk. Default 10; clamped into 1..500. */\n pageSize?: number;\n /**\n * `collectAll` only: refuse to accumulate more than this many records.\n * Exceeding it throws `PaginationLimitError` (never a silent truncation).\n * Default: unbounded (the 1000-page walk guard still applies).\n */\n maxRecords?: number;\n}\n\n/** Clamp a requested page size into the vendor range 1..500. */\nexport function clampPageSize(pageSize: number): number {\n const n = Math.floor(pageSize);\n return Math.min(Math.max(Number.isNaN(n) ? 1 : n, 1), MAX_PAGE_SIZE);\n}\n\n/** `ceil(requestCount / pageSize)`; 0 for an empty result set. */\nexport function totalPagesFor(requestCount: number, pageSize: number): number {\n if (requestCount <= 0) return 0;\n return Math.ceil(requestCount / clampPageSize(pageSize));\n}\n\n/**\n * Yield pages one at a time until the walk ends. Requests pages 1, 2, 3, ...\n * at `clampPageSize(opts.pageSize ?? 10)`; a walk that would fetch a 1001st\n * page throws `PaginationLimitError` before issuing the request.\n */\nexport async function* paginate<T>(\n fetchPage: PageFetcher<T>,\n opts: PaginateOptions = {},\n): AsyncGenerator<Page<T>, void> {\n const pageSize = clampPageSize(opts.pageSize ?? DEFAULT_PAGE_SIZE);\n let page = 1;\n for (;;) {\n if (page > MAX_PAGES) {\n throw new PaginationLimitError(\n `Pagination exceeded ${MAX_PAGES} pages; refusing to fetch page ${page} (possible runaway walk)`,\n );\n }\n const p = await fetchPage(page, pageSize);\n yield p;\n if (!p.hasMore || p.items.length === 0) return;\n page += 1;\n }\n}\n\n/** Yield items across pages (flattened). */\nexport async function* paginateItems<T>(\n fetchPage: PageFetcher<T>,\n opts: PaginateOptions = {},\n): AsyncGenerator<T, void> {\n for await (const page of paginate(fetchPage, opts)) {\n for (const item of page.items) yield item;\n }\n}\n\n/** Collect every item across all pages into one array (`queryAll`'s workhorse). */\nexport async function collectAll<T>(fetchPage: PageFetcher<T>, opts: PaginateOptions = {}): Promise<T[]> {\n const all: T[] = [];\n const cap = opts.maxRecords;\n for await (const page of paginate(fetchPage, opts)) {\n all.push(...page.items);\n if (cap !== undefined && all.length > cap) {\n throw new PaginationLimitError(\n `Collected more than maxRecords (${cap}) records; refusing to accumulate further`,\n { suggestedAction: 'Narrow the query with a tighter filter, or raise maxRecords.' },\n );\n }\n }\n return all;\n}\n\n/** Materialise an async iterator of items into an array. */\nexport async function toArray<T>(iter: AsyncIterable<T>): Promise<T[]> {\n const out: T[] = [];\n for await (const item of iter) out.push(item);\n return out;\n}\n","/**\n * Relationship map + blind-surface stamps + the delete-boundary /\n * marker-field channels — GENERATED by\n * scripts/generate-capabilities.mjs (the 5th generated artifact; S12-C, run\n * mcp-fix-20261003; issue #9). Do not hand-edit; re-run the generator. The\n * plan is the single source (scripts/lib/relationships.mjs re-derives this\n * file — the drift guard is scripts/check-capabilities.mjs +\n * test/scripts/relationships-artifact.test.ts).\n *\n * Consumers:\n * - operations.relationshipMap (the autotask_relationship_map tool, S12-B)\n * serves RELATIONSHIP_MAP — zero wire by construction;\n * - src/resources/base.ts attaches BLIND_SURFACE_STAMPS to the 0/empty\n * count/query results of the pinned blind surfaces (the T10 typed\n * sentinel — additive: count/items values are never mutated), stamps the\n * create dry run with DELETE_BOUNDARY_NOTES (issue #9 — report-only) and\n * attaches EMPTY_REASON_STAMPS to 0/empty count/query results + the\n * update dry-run envelope (issue #14 — additive);\n * - src/http.ts attaches EMPTY_REASON_STAMPS / POINTER_NOTES to typed\n * errors (issue #14 — the reason rides on the error details, additive);\n * - operations.recovery reads DELETE_BOUNDARY_NOTES + MARKER_FIELDS\n * (issue #9 — zero wire);\n * - src/resources/base.ts reads RESPONSE_DRIFT_MARKERS on a drifted 2xx\n * create (issue #13 — ONE bounded marker read; absent pin = old behaviour);\n * - operations.blindSurfaces / operations.probeReachability serve\n * BLIND_SURFACE_INVENTORY + REACHABILITY_PROBE_DEFAULTS (issue #11 —\n * the inventory is zero wire; the probe is a bounded read sweep);\n * - operations.createGuidance serves CREATE_GUIDANCE (issue #12 — the\n * 92-entity zone-fact catalog, zero wire);\n * - docs/API.md §11.7/§11.8/§11.9/§11.10/§11.11/§11.12 render the same facts.\n *\n * planHash: e229200fc177d4428a3d73e75be413c91338876fdc1224bc3c9469788f96d975\n */\n// [GENERATED:RELATIONSHIPS:START]\nimport type { EmptyReasonInfo } from './types/common.js';\n\n/** One pinned blind-surface stamp (the result-time sentinel object). */\nexport interface BlindSurfaceInfo {\n /** The pinned surface, e.g. 'companies.count'. */\n surface: string;\n /** The zone label (the facts are zone-specific — never read across zones). */\n zone: string;\n /** The blind class: unowned-blind | fully-blind | unfiltered-blind. */\n kind: 'unowned-blind' | 'fully-blind' | 'unfiltered-blind';\n /** The authority op that returns the record (the remedy the sentinel serves). */\n authority: string;\n /** The zone fact + remedy, LLM-consumer grade. */\n note: string;\n}\n\n/** One blind-surface inventory row (issue #11 — the served discovery row). */\nexport interface BlindSurfaceRow {\n /** The plan resource key. */\n resource: string;\n /** The affected read ops (the pinned subset of count/query that exist for the resource). */\n ops: Array<'count' | 'query'>;\n /** The blind class (closed set): unowned-blind | fully-blind | unfiltered-blind | unknown (no class assigned — data-full or no count observable). */\n kind: 'unowned-blind' | 'fully-blind' | 'unfiltered-blind' | 'unknown';\n /** The ww29 discovery fact: rows seen for the unfiltered limit-2 read (0 = blind; 1-2 = data-full; null = no count observable). */\n unfilteredRows: number | null;\n /** The authority op that answers for a record (e.g. companies.get); null when the plan has no get row. */\n authority: string | null;\n /** The discovery fact + remedy, LLM-consumer grade. */\n note: string;\n /** The proof level: live-verified | discovery-sweep | spec-derived. */\n proof: 'live-verified' | 'discovery-sweep' | 'spec-derived';\n}\n\n/** The blind-surface inventory (issue #11 — the served 116-surface artifact). */\nexport interface BlindSurfaceInventory {\n zone: string;\n label: string;\n verifiedAt: string | null;\n /** The discovery sweep date (the ww29 run). */\n discoveredAt: string | null;\n surfaces: BlindSurfaceRow[];\n counts: { total: number; dataFull: number; blind: number; pinned: number };\n /** The resources the sweep found data-full (safe for unfiltered reads). */\n dataFull: string[];\n remedies: { generic: string; byResource: Record<string, string> };\n}\n\n/** The probe defaults (issue #11 — served zero-wire; gate re-derives). */\nexport interface ProbeDefaults {\n defaultCap: number;\n hardCap: number;\n limitDefault: number;\n limitMax: number;\n defaultTargets: string[];\n}\n\n/** The create-blocker class (issue #12 — the closed 9-set; the gate re-derives). */\nexport type CreateBlockerKind =\n | 'ok'\n | 'blind-reference'\n | 'blind-parent'\n | 'picklist-unexposed'\n | 'undocumented-ladder'\n | 'resource-role-pair'\n | 'delete-absent'\n | 'non-mutable'\n | 'unknown';\n\n/** The structured blocker on one create-guidance row (issue #12). */\nexport interface CreateGuidanceBlocker {\n kind: CreateBlockerKind;\n /** The wall statement, LLM-consumer grade (the exact vendor text rides in vendorEvidence). */\n message: string;\n /** The blind reference field (blind-reference rows — e.g. projectType). */\n referenceField?: string;\n /** The remedy (what to do about it). */\n remedy: string;\n}\n\n/** One create-guidance row (issue #12 — the served zone-fact row). */\nexport interface CreateGuidanceRow {\n resource: string;\n /** The correct create op key (e.g. tickets.create); null when the plan has no create row. */\n createOp: string | null;\n parentScoped: boolean;\n /** The fields the vendor accepted, in the order the vendor demanded them (live-proven). */\n liveProvenPrefix: string[];\n /** True when the ladder consumed fields but the create still failed (e.g. opportunities — W-A5). */\n unproven: boolean;\n /** The structured blocker (null = none — a clean live-verified create). */\n blocker: CreateGuidanceBlocker | null;\n /** The EXACT vendor message text observed (never paraphrased) + the correlation ids left out. */\n vendorEvidence: string[];\n /** The spec-derived delete boundary (the W-A1 field on the same row). */\n deleteBoundary: { available: boolean; note: string | null };\n zone: string;\n}\n\n/** The zone-fact create-guidance report (issue #12 — the served 92-entity catalog). */\nexport interface CreateGuidanceReport {\n zone: string;\n label: string;\n verifiedAt: string | null;\n rows: CreateGuidanceRow[];\n counts: { total: number; byKind: Record<CreateBlockerKind, number> };\n}\n\n/** A scoped child of one resource (its scoped ops + natural keys). */\nexport interface RelationshipChild {\n resource: string;\n apiEntity: string | null;\n /** The FK field on the child model pointing at the parent. */\n parentField: string | null;\n /** The vendor path segment (e.g. 'Notes' under /V1.0/Tickets/{parentId}/Notes). */\n parentSegment: string | null;\n tier: string | null;\n workflowResource: boolean;\n specialOps: string[];\n searchCovers: string | null;\n /** Which of the scoped verbs exist as registry ops for this child. */\n scopedOps: { create: boolean; query: boolean; update: boolean; delete: boolean };\n}\n\n/** The per-resource relationship entry (the operations.relationshipMap row). */\nexport interface RelationshipResource {\n resource: string;\n apiEntity: string | null;\n kind: string;\n path: string | null;\n parentScoped: boolean;\n tier: string | null;\n workflowResource: boolean;\n group: string | null;\n /** The parent (null for top-level resources). */\n parent: { resource: string; segment: string | null; field: string | null } | null;\n children: RelationshipChild[];\n naturalKeys: { hasSearch: boolean; searchCovers: string | null; findBy: string[] };\n /** The pinned blind surfaces for this resource (null = none pinned). */\n blindSurfaces: { count?: { kind: string; note: string }; query?: { kind: string; note: string } } | null;\n /** The plan-pinned zone facts (null = none pinned for this resource).\n * The createGuidance field (issue #12) is ADDITIVE: the relationship map\n * keeps serving the existing createRequiredSet/quirks shape byte-for-\n * byte; the wider served catalog is operations.createGuidance. */\n zoneFacts: {\n createRequiredSet?: string[];\n quirks?: string[];\n createGuidance?: {\n createOp: string | null;\n parentScoped: boolean;\n liveProvenPrefix: string[];\n unproven: boolean;\n blocker: {\n kind: CreateBlockerKind;\n message: string;\n referenceField?: string;\n remedy: string;\n } | null;\n vendorEvidence: string[];\n deleteBoundary: { available: boolean; note: string | null };\n zone: string;\n };\n } | null;\n /** The spec-derived delete boundary (issue #9; null = the vendor defines a DELETE). */\n deleteBoundary: { note: string; proof: string } | null;\n /** The spec-derived name-like field the recovery marker query filters on (issue #9; null = none). */\n markerField: string | null;\n}\n\n/** The spec-derived delete boundary for one create (issue #9). */\nexport interface DeleteBoundaryInfo {\n /** The resource key. */\n resource: string;\n /** The deterministic boundary note (spec-derived). */\n note: string;\n /** The proof level: 'spec-derived' (issue #9 channel) or 'live-verified' (the S11 13-record set — separate channel). */\n proof: 'spec-derived' | 'live-verified';\n}\n\n/** The zone the live-verified facts describe (never read across zones). */\nexport const RELATIONSHIP_ZONE = {\n \"zone\": \"ww29\",\n \"label\": \"australia-nz\",\n \"verifiedAt\": \"2026-10-03\"\n} as { zone: string; label: string; verifiedAt: string | null };\n\n/** Per-resource relationship map (the 128 plan resources). */\nexport const RELATIONSHIP_MAP: Record<string, RelationshipResource> = {\n \"appointments\": {\n \"resource\": \"appointments\",\n \"apiEntity\": \"Appointment\",\n \"kind\": \"entity\",\n \"path\": \"Appointments\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"appointments.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"endDateTime\",\n \"title\",\n \"startDateTime\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"billing_codes\": {\n \"resource\": \"billing_codes\",\n \"apiEntity\": \"BillingCode\",\n \"kind\": \"entity\",\n \"path\": \"BillingCodes\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": {\n \"count\": {\n \"kind\": \"unfiltered-blind\",\n \"note\": \"the UNFILTERED billing_codes count/query surface is blind in ww29 (live-verified). Query with `useType` (1 = general, 3 = internal) + `isActive` filters — filtered queries return real data; time_entries.createForResource always applies them for you. get(id) is the authority.\"\n },\n \"query\": {\n \"kind\": \"unfiltered-blind\",\n \"note\": \"the UNFILTERED billing_codes count/query surface is blind in ww29 (live-verified). Query with `useType` (1 = general, 3 = internal) + `isActive` filters — filtered queries return real data; time_entries.createForResource always applies them for you. get(id) is the authority.\"\n }\n },\n \"zoneFacts\": {\n \"quirks\": [\n \"the UNFILTERED count/query surface is blind in this zone — always query with the `useType` (1 = general, 3 = internal) + `isActive` filters (the time_entries.createForResource node rule)\",\n \"the API user cannot create billing codes (userAccessForCreate \\\"None\\\" — live-verified)\"\n ]\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"billing_items\": {\n \"resource\": \"billing_items\",\n \"apiEntity\": \"BillingItems\",\n \"kind\": \"entity\",\n \"path\": \"BillingItems\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"change_request_links\": {\n \"resource\": \"change_request_links\",\n \"apiEntity\": \"ChangeRequestLink\",\n \"kind\": \"entity\",\n \"path\": \"ChangeRequestLinks\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"change_request_links.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"checklist_libraries\": {\n \"resource\": \"checklist_libraries\",\n \"apiEntity\": \"ChecklistLibrary\",\n \"kind\": \"entity\",\n \"path\": \"ChecklistLibraries\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"checklist_library_checklist_items\",\n \"apiEntity\": \"ChecklistLibraryChecklistItem\",\n \"parentField\": \"checklistLibraryID\",\n \"parentSegment\": \"ChecklistItems\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"checklist_libraries.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"entityType\",\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"checklist_library_checklist_items\": {\n \"resource\": \"checklist_library_checklist_items\",\n \"apiEntity\": \"ChecklistLibraryChecklistItem\",\n \"kind\": \"entity\",\n \"path\": \"ChecklistLibraryChecklistItems\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"checklist_libraries\",\n \"segment\": \"ChecklistItems\",\n \"field\": \"checklistLibraryID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"checklist_library_checklist_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"itemName\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"classification_icons\": {\n \"resource\": \"classification_icons\",\n \"apiEntity\": \"ClassificationIcon\",\n \"kind\": \"entity\",\n \"path\": \"ClassificationIcons\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"companies\": {\n \"resource\": \"companies\",\n \"apiEntity\": \"Company\",\n \"kind\": \"entity\",\n \"path\": \"Companies\",\n \"parentScoped\": false,\n \"tier\": \"core\",\n \"workflowResource\": true,\n \"group\": \"A\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"company_alerts\",\n \"apiEntity\": \"CompanyAlert\",\n \"parentField\": \"companyID\",\n \"parentSegment\": \"Alerts\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"company_locations\",\n \"apiEntity\": \"CompanyLocation\",\n \"parentField\": \"companyID\",\n \"parentSegment\": \"Locations\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"company_notes\",\n \"apiEntity\": \"CompanyNote\",\n \"parentField\": \"companyID\",\n \"parentSegment\": \"Notes\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"company_site_configurations\",\n \"apiEntity\": \"CompanySiteConfigurations\",\n \"parentField\": \"companyID\",\n \"parentSegment\": \"SiteConfigurations\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"company_webhooks\",\n \"apiEntity\": \"CompanyWebhook\",\n \"parentField\": null,\n \"parentSegment\": \"Webhook\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"contacts\",\n \"apiEntity\": \"Contact\",\n \"parentField\": \"companyID\",\n \"parentSegment\": \"Contacts\",\n \"tier\": \"core\",\n \"workflowResource\": true,\n \"specialOps\": [\n \"moveToCompany\",\n \"upsertByEmail\"\n ],\n \"searchCovers\": \"firstName + lastName only (contains, OR-grouped)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"companyName only (contains); no vendor free-text search exists\",\n \"findBy\": []\n },\n \"blindSurfaces\": {\n \"count\": {\n \"kind\": \"unowned-blind\",\n \"note\": \"companies count/query return 0/empty for companies not owned by the caller (ww29, live-verified: 0 before AND after a proven live create). A 0/empty result on this surface proves nothing — get(id) is the authority: it returns the record even while count/query are blind.\"\n },\n \"query\": {\n \"kind\": \"unowned-blind\",\n \"note\": \"companies count/query return 0/empty for companies not owned by the caller (ww29, live-verified: 0 before AND after a proven live create). A 0/empty result on this surface proves nothing — get(id) is the authority: it returns the record even while count/query are blind.\"\n }\n },\n \"zoneFacts\": {\n \"createRequiredSet\": [\n \"companyName\",\n \"companyType\",\n \"phone\",\n \"ownerResourceID\"\n ],\n \"quirks\": [\n \"count/query are blind for companies not owned by the caller — get(id) is the authority\",\n \"CompanyModel has NO description field (61 spec properties); the vendor 200s unknown fields silently — a hallucinated field is a no-op\",\n \"ownerResourceID must be an active non-API-only resource (the resources table is blind to the API user — pass a known id, e.g. a ticket assignedResourceID)\",\n \"create auto-creates a vendor-managed \\\"Primary Address\\\" location under the new company (UI-only cleanup)\"\n ],\n \"createGuidance\": {\n \"createOp\": \"companies.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"companyName\",\n \"companyType\",\n \"phone\",\n \"ownerResourceID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 companies); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"CONFIG_ERROR\\\",\\\"category\\\":\\\"validation\\\",\\\"retryable\\\":false,\\\"operation\\\":\\\"companies.delete\\\",\\\"message\\\":\\\"invoke: unknown operation \\\\\\\"companies.delete\\\\\\\" — it is not in the capability reg\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for companies (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for companies (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"companyName\"\n },\n \"company_alerts\": {\n \"resource\": \"company_alerts\",\n \"apiEntity\": \"CompanyAlert\",\n \"kind\": \"entity\",\n \"path\": \"CompanyAlerts\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"companies\",\n \"segment\": \"Alerts\",\n \"field\": \"companyID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"company_alerts.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"alertText\",\n \"alertTypeID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"company_alerts.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"company_locations\": {\n \"resource\": \"company_locations\",\n \"apiEntity\": \"CompanyLocation\",\n \"kind\": \"entity\",\n \"path\": \"CompanyLocations\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"companies\",\n \"segment\": \"Locations\",\n \"field\": \"companyID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"company_locations.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"company_notes\": {\n \"resource\": \"company_notes\",\n \"apiEntity\": \"CompanyNote\",\n \"kind\": \"entity\",\n \"path\": \"CompanyNotes\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"companies\",\n \"segment\": \"Notes\",\n \"field\": \"companyID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"company_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"endDateTime\",\n \"actionType\",\n \"startDateTime\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"company_notes.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"7ef594cb-74dd-4a29-a7f7-2a5d5eb515f0\\\",\\\"message\\\":\\\"Value does not exist for the required \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for company_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for company_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"name\"\n },\n \"company_site_configurations\": {\n \"resource\": \"company_site_configurations\",\n \"apiEntity\": \"CompanySiteConfigurations\",\n \"kind\": \"entity\",\n \"path\": \"CompanySiteConfigurations\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"companies\",\n \"segment\": \"SiteConfigurations\",\n \"field\": \"companyID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"company_webhooks\": {\n \"resource\": \"company_webhooks\",\n \"apiEntity\": \"CompanyWebhook\",\n \"kind\": \"entity\",\n \"path\": \"CompanyWebhooks\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"companies\",\n \"segment\": \"Webhook\",\n \"field\": null\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"company_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"webhookUrl\",\n \"deactivationUrl\",\n \"sendThresholdExceededNotification\",\n \"secretKey\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"company_webhooks.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"configuration_item_billing_product_associations\": {\n \"resource\": \"configuration_item_billing_product_associations\",\n \"apiEntity\": \"ConfigurationItemBillingProductAssociations\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItemBillingProductAssociations\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"configuration_items\",\n \"segment\": \"BillingProductAssociations\",\n \"field\": \"configurationItemID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"configuration_item_billing_product_associations.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"billingProductID\",\n \"effectiveDate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the billingProductID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the billingProductID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"billingProductID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"configuration_item_categories\": {\n \"resource\": \"configuration_item_categories\",\n \"apiEntity\": \"ConfigurationItemCategory\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItemCategories\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"configuration_item_category_udf_associations\",\n \"apiEntity\": \"ConfigurationItemCategoryUdfAssociation\",\n \"parentField\": \"configurationItemCategoryID\",\n \"parentSegment\": \"UdfAssociations\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"configuration_item_categories.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"displayColorRgb\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for displayColorRgb .\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the displayColorRgb reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"displayColorRgb\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for displayColorRgb .\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"configuration_item_categories.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"fc4cb7ec-610c-47a3-8625-29b24f253601\\\",\\\"message\\\":\\\"Could not convert stri\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for configuration_item_categories (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for configuration_item_categories (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"name\"\n },\n \"configuration_item_category_udf_associations\": {\n \"resource\": \"configuration_item_category_udf_associations\",\n \"apiEntity\": \"ConfigurationItemCategoryUdfAssociation\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItemCategoryUdfAssociations\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"configuration_item_categories\",\n \"segment\": \"UdfAssociations\",\n \"field\": \"configurationItemCategoryID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"configuration_item_category_udf_associations.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"userDefinedFieldDefinitionID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 '\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"configuration_item_dns_records\": {\n \"resource\": \"configuration_item_dns_records\",\n \"apiEntity\": \"ConfigurationItemDnsRecord\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItemDnsRecords\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"configuration_items\",\n \"segment\": \"DnsRecords\",\n \"field\": \"configurationItemID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"configuration_item_notes\": {\n \"resource\": \"configuration_item_notes\",\n \"apiEntity\": \"ConfigurationItemNote\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItemNotes\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"configuration_items\",\n \"segment\": \"Notes\",\n \"field\": \"configurationItemID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"configuration_item_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"description\",\n \"noteType\",\n \"title\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for noteType .\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the noteType reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"noteType\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for noteType .\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"configuration_item_notes.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"ec6c5845-d79a-43ec-b4e3-1a0a1d01cc8f\\\",\\\"message\\\":\\\"Field 'title': Missing Requ\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"title\"\n },\n \"configuration_item_related_items\": {\n \"resource\": \"configuration_item_related_items\",\n \"apiEntity\": \"ConfigurationItemRelatedItem\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItemRelatedItems\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"configuration_items\",\n \"segment\": \"RelatedItems\",\n \"field\": \"configurationItemID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"configuration_item_related_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"relatedConfigurationItemID\",\n \"relationship\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Reference value on field: configurationItemID of type: ConfigurationItem does not exist or is invalid.\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"configurationItemID\"\n },\n \"vendorEvidence\": [\n \"Reference value on field: configurationItemID of type: ConfigurationItem does not exist or is invalid.\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"configuration_item_related_items.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"20327421-a229-4361-bfe9-c527ec75ae5a\\\",\\\"message\\\":\\\"Reference value on \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"configuration_item_ssl_subject_alternative_names\": {\n \"resource\": \"configuration_item_ssl_subject_alternative_names\",\n \"apiEntity\": \"ConfigurationItemSslSubjectAlternativeName\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItemSslSubjectAlternativeNames\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"configuration_items\",\n \"segment\": \"SslSubjectAlternativeNames\",\n \"field\": \"configurationItemID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"configuration_item_types\": {\n \"resource\": \"configuration_item_types\",\n \"apiEntity\": \"ConfigurationItemType\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItemTypes\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"configuration_item_types.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"configuration_item_types.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"configuration_item_webhooks\": {\n \"resource\": \"configuration_item_webhooks\",\n \"apiEntity\": \"ConfigurationItemWebhook\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItemWebhooks\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"configuration_items\",\n \"segment\": \"Webhook\",\n \"field\": null\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"configuration_item_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"webhookUrl\",\n \"deactivationUrl\",\n \"secretKey\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"configuration_items\": {\n \"resource\": \"configuration_items\",\n \"apiEntity\": \"ConfigurationItem\",\n \"kind\": \"entity\",\n \"path\": \"ConfigurationItems\",\n \"parentScoped\": false,\n \"tier\": \"core\",\n \"workflowResource\": true,\n \"group\": \"A\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"configuration_item_billing_product_associations\",\n \"apiEntity\": \"ConfigurationItemBillingProductAssociations\",\n \"parentField\": \"configurationItemID\",\n \"parentSegment\": \"BillingProductAssociations\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"configuration_item_dns_records\",\n \"apiEntity\": \"ConfigurationItemDnsRecord\",\n \"parentField\": \"configurationItemID\",\n \"parentSegment\": \"DnsRecords\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"configuration_item_notes\",\n \"apiEntity\": \"ConfigurationItemNote\",\n \"parentField\": \"configurationItemID\",\n \"parentSegment\": \"Notes\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"configuration_item_related_items\",\n \"apiEntity\": \"ConfigurationItemRelatedItem\",\n \"parentField\": \"configurationItemID\",\n \"parentSegment\": \"RelatedItems\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"configuration_item_ssl_subject_alternative_names\",\n \"apiEntity\": \"ConfigurationItemSslSubjectAlternativeName\",\n \"parentField\": \"configurationItemID\",\n \"parentSegment\": \"SslSubjectAlternativeNames\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": false,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"configuration_item_webhooks\",\n \"apiEntity\": \"ConfigurationItemWebhook\",\n \"parentField\": null,\n \"parentSegment\": \"Webhook\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"referenceTitle only (contains); serial lookups use resolve / findBySerial\",\n \"findBy\": [\n \"findBySerial\"\n ]\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createRequiredSet\": [\n \"companyID\",\n \"productID\",\n \"isActive\"\n ],\n \"quirks\": [\n \"product wall (live-verified ww29): productID must reference an EXISTING Product; products.count is 0 on ww29 (no enumerable id) — this create is UNAVAILABLE in tenants without products\",\n \"configurationItemType is discoverable via configuration_item_types.query (the wall is the FK, not the type)\"\n ],\n \"createGuidance\": {\n \"createOp\": \"configuration_items.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"companyID\",\n \"productID\",\n \"isActive\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for configuration_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for configuration_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"referenceTitle\"\n },\n \"contact_group_contacts\": {\n \"resource\": \"contact_group_contacts\",\n \"apiEntity\": \"ContactGroupContacts\",\n \"kind\": \"entity\",\n \"path\": \"ContactGroupContacts\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contact_group_contacts.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contact_groups\": {\n \"resource\": \"contact_groups\",\n \"apiEntity\": \"ContactGroups\",\n \"kind\": \"entity\",\n \"path\": \"ContactGroups\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contact_groups.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contact_webhooks\": {\n \"resource\": \"contact_webhooks\",\n \"apiEntity\": \"ContactWebhook\",\n \"kind\": \"entity\",\n \"path\": \"ContactWebhooks\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contacts\",\n \"segment\": \"Webhook\",\n \"field\": null\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contact_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"webhookUrl\",\n \"deactivationUrl\",\n \"sendThresholdExceededNotification\",\n \"secretKey\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"contact_webhooks.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contacts\": {\n \"resource\": \"contacts\",\n \"apiEntity\": \"Contact\",\n \"kind\": \"entity\",\n \"path\": \"Contacts\",\n \"parentScoped\": true,\n \"tier\": \"core\",\n \"workflowResource\": true,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"companies\",\n \"segment\": \"Contacts\",\n \"field\": \"companyID\"\n },\n \"children\": [\n {\n \"resource\": \"contact_webhooks\",\n \"apiEntity\": \"ContactWebhook\",\n \"parentField\": null,\n \"parentSegment\": \"Webhook\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"firstName + lastName only (contains, OR-grouped)\",\n \"findBy\": [\n \"findByEmail\"\n ]\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createRequiredSet\": [\n \"firstName\",\n \"lastName\",\n \"companyID\",\n \"isActive\"\n ],\n \"quirks\": [\n \"isActive is a NUMBER (1/0) in this zone — a JSON boolean 500s at the vendor parse layer (LocationModel takes a boolean)\",\n \"create is parent-scoped under a company (Companies/{parentId}/Contacts; companyID rides the body)\"\n ],\n \"createGuidance\": {\n \"createOp\": \"contacts.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"firstName\",\n \"lastName\",\n \"companyID\",\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_billing_rules\": {\n \"resource\": \"contract_billing_rules\",\n \"apiEntity\": \"ContractBillingRule\",\n \"kind\": \"entity\",\n \"path\": \"ContractBillingRules\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"BillingRules\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_billing_rules.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"productID\",\n \"isActive\",\n \"startDate\",\n \"determineUnits\",\n \"createChargesAsBillable\",\n \"includeItemsInChargeDescription\",\n \"isDailyProrationEnabled\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"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.' — a product with an ELIGIBLE (non-Standard) BillingType is required; the products table is blind for this API user — UNSATISFIABLE for this user. (10-04 ladder had stopped at isDailyProrationEnabled + 'productID [1] is invalid. Products with a'.)\",\n \"remedy\": \"a product with a non-Standard BillingType is required (products table blind for this user) — provision/read an eligible product in the Autotask UI or use a user where the products table is visible\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_block_hour_factors\": {\n \"resource\": \"contract_block_hour_factors\",\n \"apiEntity\": \"ContractBlockHourFactor\",\n \"kind\": \"entity\",\n \"path\": \"ContractBlockHourFactors\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"BlockHourFactors\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_block_hour_factors.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"roleID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): write path proven via the vendor's unique-key wall — 'A ContractBlockHourFactor for this roleID and contractID combination already exists' (pair (30131842, 29685291) pre-existing from the rates attach). Fields roleID (+ the unique key).\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contract_blocks\": {\n \"resource\": \"contract_blocks\",\n \"apiEntity\": \"ContractBlock\",\n \"kind\": \"entity\",\n \"path\": \"ContractBlocks\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"Blocks\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_blocks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\",\n \"startDate\",\n \"endDate\",\n \"datePurchased\",\n \"hours\",\n \"hourlyRate\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114389. TYPE GATE: parent MUST be type 4 (Block hours) — 'This ContractBlock must reference a Contract of type 4 (Block hours) with contractID'. Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_blocks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for contract_blocks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contract_charges\": {\n \"resource\": \"contract_charges\",\n \"apiEntity\": \"ContractCharge\",\n \"kind\": \"entity\",\n \"path\": \"ContractCharges\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"Charges\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_charges.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"unitQuantity\",\n \"datePurchased\",\n \"chargeType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_exclusion_billing_codes\": {\n \"resource\": \"contract_exclusion_billing_codes\",\n \"apiEntity\": \"ContractExclusionBillingCode\",\n \"kind\": \"entity\",\n \"path\": \"ContractExclusionBillingCodes\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"ExclusionBillingCodes\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_exclusion_billing_codes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field billingCodeID.' — the billing-allocation table is blind for this API user (no resolvable allocation code for this user's contracts) — UNSATISFIABLE for this user.\",\n \"remedy\": \"an allocation code (billingCodeID) readable by this user is required (table blind) — provision in the Autotask UI or use a user where allocation codes are visible\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_exclusion_roles\": {\n \"resource\": \"contract_exclusion_roles\",\n \"apiEntity\": \"ContractExclusionRoles\",\n \"kind\": \"entity\",\n \"path\": \"ContractExclusionRoles\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"ExclusionRoles\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_exclusion_roles.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"roleID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 187; field roleID. Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_exclusion_set_excluded_roles\": {\n \"resource\": \"contract_exclusion_set_excluded_roles\",\n \"apiEntity\": \"ContractExclusionSetExcludedRoles\",\n \"kind\": \"entity\",\n \"path\": \"ContractExclusionSetExcludedRoles\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"contract_exclusion_sets\",\n \"segment\": \"ExcludedRoles\",\n \"field\": \"contractExclusionSetID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_exclusion_set_excluded_roles.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"excludedRoleID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — batch1-final recovery, id 3; the surviving per-resource receipts predate the recovery)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"csxroles: {\\\"id\\\": 3, \\\"final\\\": \\\"RECOVERED\\\"} (batch1-final.json) — verify-gone=True (batch1-final.log)\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_exclusion_set_excluded_work_types\": {\n \"resource\": \"contract_exclusion_set_excluded_work_types\",\n \"apiEntity\": \"ContractExclusionSetExcludedWorkTypes\",\n \"kind\": \"entity\",\n \"path\": \"ContractExclusionSetExcludedWorkTypes\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"contract_exclusion_sets\",\n \"segment\": \"ExcludedWorkTypes\",\n \"field\": \"contractExclusionSetID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_exclusion_set_excluded_work_types.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"excludedWorkTypeID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the excludedWorkTypeID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the excludedWorkTypeID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"excludedWorkTypeID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_exclusion_sets\": {\n \"resource\": \"contract_exclusion_sets\",\n \"apiEntity\": \"ContractExclusionSets\",\n \"kind\": \"entity\",\n \"path\": \"ContractExclusionSets\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"contract_exclusion_set_excluded_roles\",\n \"apiEntity\": \"ContractExclusionSetExcludedRoles\",\n \"parentField\": \"contractExclusionSetID\",\n \"parentSegment\": \"ExcludedRoles\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"contract_exclusion_set_excluded_work_types\",\n \"apiEntity\": \"ContractExclusionSetExcludedWorkTypes\",\n \"parentField\": \"contractExclusionSetID\",\n \"parentSegment\": \"ExcludedWorkTypes\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_exclusion_sets.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_milestones\": {\n \"resource\": \"contract_milestones\",\n \"apiEntity\": \"ContractMilestone\",\n \"kind\": \"entity\",\n \"path\": \"ContractMilestones\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"Milestones\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_milestones.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\",\n \"dateDue\",\n \"amount\",\n \"isInitialPayment\",\n \"status\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 1338. TYPE GATE (vendor): the parent contract MUST be type 3 (Fixed Price) — 'ContractMilestones may only have a contractID linking to Contracts of type 3 (Fixed Price)'. Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_milestones (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for contract_milestones (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"title\"\n },\n \"contract_notes\": {\n \"resource\": \"contract_notes\",\n \"apiEntity\": \"ContractNote\",\n \"kind\": \"entity\",\n \"path\": \"ContractNotes\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"Notes\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\",\n \"description\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 35573321 under contract 30131842; fields title + description. Residue (no vendor DELETE).\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for contract_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"title\"\n },\n \"contract_rates\": {\n \"resource\": \"contract_rates\",\n \"apiEntity\": \"ContractRate\",\n \"kind\": \"entity\",\n \"path\": \"ContractRates\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"Rates\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_rates.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"contractHourlyRate\",\n \"roleID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30083427; fields contractHourlyRate + roleID (an owned/visible role). Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_rates (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for contract_rates (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contract_retainers\": {\n \"resource\": \"contract_retainers\",\n \"apiEntity\": \"ContractRetainers\",\n \"kind\": \"entity\",\n \"path\": \"ContractRetainers\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"Retainers\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_retainers.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\",\n \"startDate\",\n \"endDate\",\n \"datePurchased\",\n \"amount\",\n \"status\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114390. TYPE GATE: parent MUST be type 6 (Retainer). Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_retainers (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for contract_retainers (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contract_role_costs\": {\n \"resource\": \"contract_role_costs\",\n \"apiEntity\": \"ContractRoleCosts\",\n \"kind\": \"entity\",\n \"path\": \"ContractRoleCosts\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"RoleCosts\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_role_costs.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"rate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"resource-role-pair\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'The specified resourceID and roleID combination is not currently defined.' — a currently-DEFINED (resource, role) assignment is required; the resource_roles table is blind for this user (0 rows) — same pair-validation family as W-A3; UNSATISFIABLE for this user.\",\n \"remedy\": \"a currently-DEFINED (resource, role) assignment is required (resource_roles blind for this user) — same family as W-A3; use a user with readable assignments or manage role costs in the Autotask UI\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_role_costs (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for contract_role_costs (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contract_service_adjustments\": {\n \"resource\": \"contract_service_adjustments\",\n \"apiEntity\": \"ContractServiceAdjustment\",\n \"kind\": \"entity\",\n \"path\": \"ContractServiceAdjustments\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"ServiceAdjustments\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_service_adjustments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"effectiveDate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"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 — '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) — UNSATISFIABLE for this user.\",\n \"remedy\": \"an ACTIVE serviceID visible to this API user is required (services table blind for this user) — provision the active service in the Autotask UI or use a user where services are readable; parent must be type 7 (Recurring) or 'umbrella'\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contract_service_bundle_adjustments\": {\n \"resource\": \"contract_service_bundle_adjustments\",\n \"apiEntity\": \"ContractServiceBundleAdjustment\",\n \"kind\": \"entity\",\n \"path\": \"ContractServiceBundleAdjustments\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"ServiceBundleAdjustments\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_service_bundle_adjustments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"effectiveDate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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 — 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) — '…with a contractID that is not of type recurring Service'. VENDOR-FIX (response shape) required.\",\n \"remedy\": \"vendor response-shape fix required (W-A7-class 200 drift) — treat the INVALID_RESPONSE as the typed wall; parent must be type 7 (Recurring Services); manage the adjustment in the Autotask UI meanwhile\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"Expected OperationResultModel { itemId } (or { id }); got a different shape\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contract_service_bundle_units\": {\n \"resource\": \"contract_service_bundle_units\",\n \"apiEntity\": \"ContractServiceBundleUnit\",\n \"kind\": \"entity\",\n \"path\": \"ContractServiceBundleUnits\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"ServiceBundleUnits\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_service_bundles\": {\n \"resource\": \"contract_service_bundles\",\n \"apiEntity\": \"ContractServiceBundle\",\n \"kind\": \"entity\",\n \"path\": \"ContractServiceBundles\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"ServiceBundles\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_service_bundles.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceBundleID.' — the service-bundles table is blind for this API user — UNSATISFIABLE for this user.\",\n \"remedy\": \"a service-bundles-table record visible to this user is required (table blind, 0 rows) — provision in the Autotask UI or use a user where the table is visible\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contract_service_units\": {\n \"resource\": \"contract_service_units\",\n \"apiEntity\": \"ContractServiceUnit\",\n \"kind\": \"entity\",\n \"path\": \"ContractServiceUnits\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"ServiceUnits\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"contract_services\": {\n \"resource\": \"contract_services\",\n \"apiEntity\": \"ContractService\",\n \"kind\": \"entity\",\n \"path\": \"ContractServices\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"Services\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_services.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceID.' — the services table is blind for this API user (0 rows; no readable service id) — UNSATISFIABLE for this user.\",\n \"remedy\": \"a services-table record visible to this user is required (table blind, 0 rows) — provision in the Autotask UI or use a user where the table is visible\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for contract_services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contract_ticket_purchases\": {\n \"resource\": \"contract_ticket_purchases\",\n \"apiEntity\": \"ContractTicketPurchases\",\n \"kind\": \"entity\",\n \"path\": \"ContractTicketPurchases\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"contracts\",\n \"segment\": \"TicketPurchases\",\n \"field\": \"contractID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contract_ticket_purchases.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"ticketsPurchased\",\n \"startDate\",\n \"endDate\",\n \"datePurchased\",\n \"perTicketRate\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114391. TYPE GATE: parent MUST be type 8 (PerTicket incident) — 'The Contract associated by contractID must be of type PerTicket (incident)'. Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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: \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_ticket_purchases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for contract_ticket_purchases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"contracts\": {\n \"resource\": \"contracts\",\n \"apiEntity\": \"Contract\",\n \"kind\": \"entity\",\n \"path\": \"Contracts\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"contract_billing_rules\",\n \"apiEntity\": \"ContractBillingRule\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"BillingRules\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"contract_block_hour_factors\",\n \"apiEntity\": \"ContractBlockHourFactor\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"BlockHourFactors\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_blocks\",\n \"apiEntity\": \"ContractBlock\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"Blocks\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_charges\",\n \"apiEntity\": \"ContractCharge\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"Charges\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"createIfNotExists\"\n ],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"contract_exclusion_billing_codes\",\n \"apiEntity\": \"ContractExclusionBillingCode\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"ExclusionBillingCodes\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"contract_exclusion_roles\",\n \"apiEntity\": \"ContractExclusionRoles\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"ExclusionRoles\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"contract_milestones\",\n \"apiEntity\": \"ContractMilestone\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"Milestones\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_notes\",\n \"apiEntity\": \"ContractNote\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"Notes\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_rates\",\n \"apiEntity\": \"ContractRate\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"Rates\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_retainers\",\n \"apiEntity\": \"ContractRetainers\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"Retainers\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_role_costs\",\n \"apiEntity\": \"ContractRoleCosts\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"RoleCosts\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_service_adjustments\",\n \"apiEntity\": \"ContractServiceAdjustment\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"ServiceAdjustments\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": false,\n \"update\": false,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_service_bundle_adjustments\",\n \"apiEntity\": \"ContractServiceBundleAdjustment\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"ServiceBundleAdjustments\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": false,\n \"update\": false,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_service_bundle_units\",\n \"apiEntity\": \"ContractServiceBundleUnit\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"ServiceBundleUnits\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": true,\n \"update\": false,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_service_bundles\",\n \"apiEntity\": \"ContractServiceBundle\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"ServiceBundles\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_service_units\",\n \"apiEntity\": \"ContractServiceUnit\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"ServiceUnits\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": true,\n \"update\": false,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_services\",\n \"apiEntity\": \"ContractService\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"Services\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"createIfNotExists\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"contract_ticket_purchases\",\n \"apiEntity\": \"ContractTicketPurchases\",\n \"parentField\": \"contractID\",\n \"parentSegment\": \"TicketPurchases\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"contractName only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"contracts.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"status\",\n \"contractType\",\n \"contractName\",\n \"startDate\",\n \"endDate\",\n \"timeReportingRequiresStartAndStopTimes\",\n \"companyID\",\n \"estimatedRevenue\",\n \"estimatedHours\",\n \"estimatedCost\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100, marker CONF100-1791187382): the W-A6 'blind parent' was companyID — 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); type 5 is an invalid picklist value. Type-specific extra fields: types 1/3/4/6/8 require estimatedRevenue (type 1 additionally estimatedHours + estimatedCost); type 7 additionally contractPeriodType (2 valid) + setupFee. Proven ids 30131842-30131847 (residue — no vendor DELETE for contracts).\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\",\n \"{\\\"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\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contracts (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for contracts (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"contractName\"\n },\n \"countries\": {\n \"resource\": \"countries\",\n \"apiEntity\": \"Country\",\n \"kind\": \"entity\",\n \"path\": \"Countries\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"departments\": {\n \"resource\": \"departments\",\n \"apiEntity\": \"Department\",\n \"kind\": \"entity\",\n \"path\": \"Departments\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"departments.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"primaryLocationID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for primaryLocationID.\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the primaryLocationID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"primaryLocationID\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for primaryLocationID.\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"departments.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"4197e8a1-0411-45cb-b4a1-e770f4bae5e9\\\",\\\"message\\\":\\\"Value does not reference an existing ent\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for departments (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for departments (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"name\"\n },\n \"domain_registrars\": {\n \"resource\": \"domain_registrars\",\n \"apiEntity\": \"DomainRegistrar\",\n \"kind\": \"entity\",\n \"path\": \"DomainRegistrars\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"domain_registrars.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 domain_registrars); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"CONFIG_ERROR\\\",\\\"category\\\":\\\"validation\\\",\\\"retryable\\\":false,\\\"operation\\\":\\\"domain_registrars.delete\\\",\\\"message\\\":\\\"invoke: unknown operation \\\\\\\"domain_registrars.delete\\\\\\\" — it is not in th\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for domain_registrars (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for domain_registrars (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"name\"\n },\n \"expense_item_attachments\": {\n \"resource\": \"expense_item_attachments\",\n \"apiEntity\": \"ExpenseItemAttachment\",\n \"kind\": \"entity\",\n \"path\": \"ExpenseItemAttachments\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"expense_items\",\n \"segment\": \"Attachments\",\n \"field\": \"expenseItemID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"expense_item_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"message\": \"Field 'Type': Missing Required Field: Type.\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\",\n \"referenceField\": \"Type\"\n },\n \"vendorEvidence\": [\n \"Field 'Type': Missing Required Field: Type.\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"expense_item_attachments.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"c4c16666-8398-48ea-88e2-fd6236d1a447\\\",\\\"message\\\":\\\"Field 'Type': Missing Requi\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"expense_items\": {\n \"resource\": \"expense_items\",\n \"apiEntity\": \"ExpenseItem\",\n \"kind\": \"entity\",\n \"path\": \"ExpenseItems\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"expense_reports\",\n \"segment\": \"Items\",\n \"field\": \"expenseReportID\"\n },\n \"children\": [\n {\n \"resource\": \"expense_item_attachments\",\n \"apiEntity\": \"ExpenseItemAttachment\",\n \"parentField\": \"expenseItemID\",\n \"parentSegment\": \"Attachments\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"download\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"expense_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"paymentType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — the expense_reports 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for expense_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for expense_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"expense_reports\": {\n \"resource\": \"expense_reports\",\n \"apiEntity\": \"ExpenseReport\",\n \"kind\": \"entity\",\n \"path\": \"ExpenseReports\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"expense_items\",\n \"apiEntity\": \"ExpenseItem\",\n \"parentField\": \"expenseReportID\",\n \"parentSegment\": \"Items\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"createIfNotExists\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"expense_reports.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"weekEnding\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for expense_reports (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for expense_reports (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"name\"\n },\n \"holiday_sets\": {\n \"resource\": \"holiday_sets\",\n \"apiEntity\": \"HolidaySet\",\n \"kind\": \"entity\",\n \"path\": \"HolidaySets\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"holidays\",\n \"apiEntity\": \"Holiday\",\n \"parentField\": \"holidaySetID\",\n \"parentSegment\": \"Holidays\",\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"createIfNotExists\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"holiday_sets.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"holidaySetName\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"holidays\": {\n \"resource\": \"holidays\",\n \"apiEntity\": \"Holiday\",\n \"kind\": \"entity\",\n \"path\": \"Holidays\",\n \"parentScoped\": true,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"holiday_sets\",\n \"segment\": \"Holidays\",\n \"field\": \"holidaySetID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"holidays.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"holidayName\",\n \"holidayDate\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"invoices\": {\n \"resource\": \"invoices\",\n \"apiEntity\": \"Invoice\",\n \"kind\": \"entity\",\n \"path\": \"Invoices\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"notification_history\": {\n \"resource\": \"notification_history\",\n \"apiEntity\": \"NotificationHistory\",\n \"kind\": \"entity\",\n \"path\": \"NotificationHistory\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"opportunities\": {\n \"resource\": \"opportunities\",\n \"apiEntity\": \"Opportunity\",\n \"kind\": \"entity\",\n \"path\": \"Opportunities\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"opportunity_attachments\",\n \"apiEntity\": \"OpportunityAttachment\",\n \"parentField\": \"opportunityID\",\n \"parentSegment\": \"Attachments\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"download\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"opportunities.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"name\",\n \"title\",\n \"companyID\",\n \"ownerResourceID\",\n \"amount\",\n \"cost\",\n \"startDate\",\n \"projectedCloseDate\",\n \"stage\",\n \"status\",\n \"probability\",\n \"useQuoteTotals\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"undocumented-ladder\",\n \"message\": \"Field 'useQuoteTotals': Missing Required Field: useQuoteTotals. | Value does not exist for the required field useQuoteTotals. \",\n \"remedy\": \"the vendor required-field ladder is undocumented and UNPROVEN (12 fields consumed before the campaign stopped — W-A5); no known field set makes this create succeed on ww29 — treat it as unavailable for this tenant and file the gap with the vendor.\"\n },\n \"vendorEvidence\": [\n \"Field 'useQuoteTotals': Missing Required Field: useQuoteTotals. | Value does not exist for the required field useQuoteTotals. \",\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for opportunities (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for opportunities (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"title\"\n },\n \"opportunity_attachments\": {\n \"resource\": \"opportunity_attachments\",\n \"apiEntity\": \"OpportunityAttachment\",\n \"kind\": \"entity\",\n \"path\": \"OpportunityAttachments\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"opportunities\",\n \"segment\": \"Attachments\",\n \"field\": \"opportunityID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"opportunity_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"message\": \"vendor 500: the Type picklist values are not exposed to this API user (File/Document/Image/Other all rejected — W-A4)\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\",\n \"referenceField\": \"Type\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"opportunity_categories\": {\n \"resource\": \"opportunity_categories\",\n \"apiEntity\": \"OpportunityCategory\",\n \"kind\": \"entity\",\n \"path\": \"OpportunityCategories\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"product_vendors\": {\n \"resource\": \"product_vendors\",\n \"apiEntity\": \"ProductVendors\",\n \"kind\": \"entity\",\n \"path\": \"ProductVendors\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"products\",\n \"segment\": \"Vendors\",\n \"field\": \"productID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"product_vendors.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isDefault\",\n \"isActive\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for product_vendors (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for product_vendors (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"products\": {\n \"resource\": \"products\",\n \"apiEntity\": \"Product\",\n \"kind\": \"entity\",\n \"path\": \"Products\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"product_vendors\",\n \"apiEntity\": \"ProductVendors\",\n \"parentField\": \"productID\",\n \"parentSegment\": \"Vendors\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"quirks\": [\n \"products.count is 0 in this zone (blind surface, no enumerable id) — this is the configuration_items.create product wall\"\n ],\n \"createGuidance\": {\n \"createOp\": \"products.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"isSerialized\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for products (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for products (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"name\"\n },\n \"project_charges\": {\n \"resource\": \"project_charges\",\n \"apiEntity\": \"ProjectCharge\",\n \"kind\": \"entity\",\n \"path\": \"ProjectCharges\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"projects\",\n \"segment\": \"Charges\",\n \"field\": \"projectID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"project_charges.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"unitQuantity\",\n \"datePurchased\",\n \"chargeType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"project_notes\": {\n \"resource\": \"project_notes\",\n \"apiEntity\": \"ProjectNote\",\n \"kind\": \"entity\",\n \"path\": \"ProjectNotes\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"projects\",\n \"segment\": \"Notes\",\n \"field\": \"projectID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"project_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"noteType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for project_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for project_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"title\"\n },\n \"phases\": {\n \"resource\": \"phases\",\n \"apiEntity\": \"Phase\",\n \"kind\": \"entity\",\n \"path\": \"Phases\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"projects\",\n \"segment\": \"Phases\",\n \"field\": \"projectID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"phases.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (known id 527128, marker name FULL100W-1791110339 phases); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"residue.json: phases id 527128 (known id, undeletable by vendor wall W-A1; phases.get is scoped — the id is retained in the ledger)\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for phases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for phases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"title\"\n },\n \"tasks\": {\n \"resource\": \"tasks\",\n \"apiEntity\": \"Task\",\n \"kind\": \"entity\",\n \"path\": \"Tasks\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"projects\",\n \"segment\": \"Tasks\",\n \"field\": \"projectID\"\n },\n \"children\": [\n {\n \"resource\": \"task_secondary_resources\",\n \"apiEntity\": \"TaskSecondaryResource\",\n \"parentField\": \"taskID\",\n \"parentSegment\": \"SecondaryResources\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"title only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createRequiredSet\": [\n \"projectID\",\n \"taskType\",\n \"status\",\n \"title\"\n ],\n \"quirks\": [\n \"projectID is required IN THE BODY (the scoped parent path carries the parent too)\",\n \"taskType is an integer picklist (1/2)\"\n ],\n \"createGuidance\": {\n \"createOp\": \"tasks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"projectID\",\n \"taskType\",\n \"status\",\n \"title\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for taskType .\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the taskType reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"taskType\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for taskType .\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"tasks.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"4d283916-ab65-46c5-b17b-4eafda10c3ac\\\",\\\"message\\\":\\\"Value does not reference an existing entity fo\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for tasks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for tasks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"title\"\n },\n \"projects\": {\n \"resource\": \"projects\",\n \"apiEntity\": \"Project\",\n \"kind\": \"entity\",\n \"path\": \"Projects\",\n \"parentScoped\": false,\n \"tier\": \"core\",\n \"workflowResource\": true,\n \"group\": \"A\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"phases\",\n \"apiEntity\": \"Phase\",\n \"parentField\": \"projectID\",\n \"parentSegment\": \"Phases\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"project_charges\",\n \"apiEntity\": \"ProjectCharge\",\n \"parentField\": \"projectID\",\n \"parentSegment\": \"Charges\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"createIfNotExists\"\n ],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"project_notes\",\n \"apiEntity\": \"ProjectNote\",\n \"parentField\": \"projectID\",\n \"parentSegment\": \"Notes\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"tasks\",\n \"apiEntity\": \"Task\",\n \"parentField\": \"projectID\",\n \"parentSegment\": \"Tasks\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"title only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"projectName only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"quirks\": [\n \"proven live create body (ww29): projectName, description, companyID (0 = tenant-global), projectType 2, status 1, startDateTime, endDateTime — per-field minimality was not isolated live, so keep the full shape\"\n ],\n \"createGuidance\": {\n \"createOp\": \"projects.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"projectName\",\n \"startDateTime\",\n \"endDateTime\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for projectType .\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the projectType reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"projectType\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for projectType .\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"projects.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"7a611ce5-b863-460d-8911-f850d546fd0a\\\",\\\"message\\\":\\\"Field 'endDateTime': Missing Required Field\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for projects (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for projects (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"projectName\"\n },\n \"purchase_approvals\": {\n \"resource\": \"purchase_approvals\",\n \"apiEntity\": \"PurchaseApprovals\",\n \"kind\": \"entity\",\n \"path\": \"PurchaseApprovals\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"purchase_order_item_receiving\": {\n \"resource\": \"purchase_order_item_receiving\",\n \"apiEntity\": \"PurchaseOrderItemReceiving\",\n \"kind\": \"entity\",\n \"path\": \"PurchaseOrderItemReceiving\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"purchase_order_items\",\n \"segment\": \"Receiving\",\n \"field\": \"purchaseOrderItemID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"purchase_order_item_receiving.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"quantityNowReceiving\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 purchase_order_item_receiving); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"not found on a visible surface (record may predate the marker value or was created with a different value)\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for purchase_order_item_receiving (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for purchase_order_item_receiving (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"purchase_order_items\": {\n \"resource\": \"purchase_order_items\",\n \"apiEntity\": \"PurchaseOrderItems\",\n \"kind\": \"entity\",\n \"path\": \"PurchaseOrderItems\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"purchase_orders\",\n \"segment\": \"Items\",\n \"field\": \"orderID\"\n },\n \"children\": [\n {\n \"resource\": \"purchase_order_item_receiving\",\n \"apiEntity\": \"PurchaseOrderItemReceiving\",\n \"parentField\": \"purchaseOrderItemID\",\n \"parentSegment\": \"Receiving\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": false\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"purchase_order_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"unitCost\",\n \"quantity\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"message\": \"vendor 500: reference rejection on order (exact vendor text preserved verbatim in vendorEvidence — campaign receipt artifact, as recorded on disk)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for purchase_order_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for purchase_order_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"purchase_orders\": {\n \"resource\": \"purchase_orders\",\n \"apiEntity\": \"PurchaseOrders\",\n \"kind\": \"entity\",\n \"path\": \"PurchaseOrders\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"purchase_order_items\",\n \"apiEntity\": \"PurchaseOrderItems\",\n \"parentField\": \"orderID\",\n \"parentSegment\": \"Items\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"purchase_orders.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"shipToAddress1\",\n \"status\",\n \"shipToName\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for purchase_orders (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for purchase_orders (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"quote_items\": {\n \"resource\": \"quote_items\",\n \"apiEntity\": \"QuoteItem\",\n \"kind\": \"entity\",\n \"path\": \"QuoteItems\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"quotes\",\n \"segment\": \"Items\",\n \"field\": \"quoteID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"quote_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isOptional\",\n \"unitDiscount\",\n \"quantity\",\n \"quoteItemType\",\n \"lineDiscount\",\n \"percentageDiscount\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"quote_locations\": {\n \"resource\": \"quote_locations\",\n \"apiEntity\": \"QuoteLocation\",\n \"kind\": \"entity\",\n \"path\": \"QuoteLocations\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"quotes\",\n \"segment\": \"Locations\",\n \"field\": \"quoteID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"quote_locations.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"quote_locations.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for quote_locations (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for quote_locations (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"quote_templates\": {\n \"resource\": \"quote_templates\",\n \"apiEntity\": \"QuoteTemplate\",\n \"kind\": \"entity\",\n \"path\": \"QuoteTemplates\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"quotes\": {\n \"resource\": \"quotes\",\n \"apiEntity\": \"Quote\",\n \"kind\": \"entity\",\n \"path\": \"Quotes\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"quote_items\",\n \"apiEntity\": \"QuoteItem\",\n \"parentField\": \"quoteID\",\n \"parentSegment\": \"Items\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"quote_locations\",\n \"apiEntity\": \"QuoteLocation\",\n \"parentField\": \"quoteID\",\n \"parentSegment\": \"Locations\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"quotes.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"effectiveDate\",\n \"expirationDate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for quotes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for quotes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"name\"\n },\n \"resource_role_queues\": {\n \"resource\": \"resource_role_queues\",\n \"apiEntity\": \"ResourceRoleQueue\",\n \"kind\": \"entity\",\n \"path\": \"ResourceRoleQueues\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"resources\",\n \"segment\": \"RoleQueues\",\n \"field\": \"resourceID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"resource_role_queues.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"queueID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 resource_role_queues); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"BLIND SURFACE — own created records invisible to query (node sentinel, ww29-verified)\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for resource_role_queues (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for resource_role_queues (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"resource_roles\": {\n \"resource\": \"resource_roles\",\n \"apiEntity\": \"ResourceRole\",\n \"kind\": \"entity\",\n \"path\": \"ResourceRoles\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"resources\",\n \"segment\": \"Roles\",\n \"field\": \"resourceID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"resource_skills\": {\n \"resource\": \"resource_skills\",\n \"apiEntity\": \"ResourceSkill\",\n \"kind\": \"entity\",\n \"path\": \"ResourceSkills\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"resources\",\n \"segment\": \"Skills\",\n \"field\": \"resourceID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"resource_time_off_additional\": {\n \"resource\": \"resource_time_off_additional\",\n \"apiEntity\": \"ResourceTimeOffAdditional\",\n \"kind\": \"entity\",\n \"path\": \"ResourceTimeOffAdditional\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"resources\",\n \"segment\": \"TimeOffAdditional\",\n \"field\": \"resourceID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"resource_time_off_approvers\": {\n \"resource\": \"resource_time_off_approvers\",\n \"apiEntity\": \"ResourceTimeOffApprover\",\n \"kind\": \"entity\",\n \"path\": \"ResourceTimeOffApprovers\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"resources\",\n \"segment\": \"TimeOffApprovers\",\n \"field\": \"resourceID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"resource_time_off_balances\": {\n \"resource\": \"resource_time_off_balances\",\n \"apiEntity\": \"ResourceTimeOffBalance\",\n \"kind\": \"entity\",\n \"path\": \"ResourceTimeOffBalances\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"resources\",\n \"segment\": \"TimeOffBalances\",\n \"field\": \"resourceID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"resources\": {\n \"resource\": \"resources\",\n \"apiEntity\": \"Resource\",\n \"kind\": \"entity\",\n \"path\": \"Resources\",\n \"parentScoped\": false,\n \"tier\": \"core\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"resource_role_queues\",\n \"apiEntity\": \"ResourceRoleQueue\",\n \"parentField\": \"resourceID\",\n \"parentSegment\": \"RoleQueues\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"resource_roles\",\n \"apiEntity\": \"ResourceRole\",\n \"parentField\": \"resourceID\",\n \"parentSegment\": \"Roles\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": true,\n \"update\": false,\n \"delete\": false\n }\n },\n {\n \"resource\": \"resource_skills\",\n \"apiEntity\": \"ResourceSkill\",\n \"parentField\": \"resourceID\",\n \"parentSegment\": \"Skills\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"resource_time_off_additional\",\n \"apiEntity\": \"ResourceTimeOffAdditional\",\n \"parentField\": \"resourceID\",\n \"parentSegment\": \"TimeOffAdditional\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"getByResource\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": false,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"resource_time_off_approvers\",\n \"apiEntity\": \"ResourceTimeOffApprover\",\n \"parentField\": \"resourceID\",\n \"parentSegment\": \"TimeOffApprovers\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": true,\n \"update\": false,\n \"delete\": false\n }\n },\n {\n \"resource\": \"resource_time_off_balances\",\n \"apiEntity\": \"ResourceTimeOffBalance\",\n \"parentField\": \"resourceID\",\n \"parentSegment\": \"TimeOffBalances\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"getByResource\",\n \"getByYear\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": false,\n \"update\": false,\n \"delete\": false\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"firstName + lastName only (contains, OR-grouped)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"quirks\": [\n \"the resources table is blind to this API user: count/query return 0; the API user's own id is visible only via resources.whoAmI (the API-only identity)\",\n \"POST /V1.0/Resources 405s at the method level — no resource creation via REST at all (the registry has no resources.create op)\"\n ]\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"roles\": {\n \"resource\": \"roles\",\n \"apiEntity\": \"Role\",\n \"kind\": \"entity\",\n \"path\": \"Roles\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"roles.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"hourlyFactor\",\n \"hourlyRate\",\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 roles); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"CONFIG_ERROR\\\",\\\"category\\\":\\\"validation\\\",\\\"retryable\\\":false,\\\"operation\\\":\\\"roles.delete\\\",\\\"message\\\":\\\"invoke: unknown operation \\\\\\\"roles.delete\\\\\\\" — it is not in the capability registry (l\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for roles (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for roles (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"name\"\n },\n \"service_call_task_resources\": {\n \"resource\": \"service_call_task_resources\",\n \"apiEntity\": \"ServiceCallTaskResource\",\n \"kind\": \"entity\",\n \"path\": \"ServiceCallTaskResources\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"service_call_tasks\",\n \"segment\": \"Resources\",\n \"field\": \"serviceCallTaskID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"service_call_task_resources.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"service_call_tasks\": {\n \"resource\": \"service_call_tasks\",\n \"apiEntity\": \"ServiceCallTask\",\n \"kind\": \"entity\",\n \"path\": \"ServiceCallTasks\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"service_calls\",\n \"segment\": \"Tasks\",\n \"field\": \"serviceCallID\"\n },\n \"children\": [\n {\n \"resource\": \"service_call_task_resources\",\n \"apiEntity\": \"ServiceCallTaskResource\",\n \"parentField\": \"serviceCallTaskID\",\n \"parentSegment\": \"Resources\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"service_call_tasks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"service_call_ticket_resources\": {\n \"resource\": \"service_call_ticket_resources\",\n \"apiEntity\": \"ServiceCallTicketResource\",\n \"kind\": \"entity\",\n \"path\": \"ServiceCallTicketResources\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"service_call_tickets\",\n \"segment\": \"Resources\",\n \"field\": \"serviceCallTicketID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"service_call_ticket_resources.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"service_call_tickets\": {\n \"resource\": \"service_call_tickets\",\n \"apiEntity\": \"ServiceCallTicket\",\n \"kind\": \"entity\",\n \"path\": \"ServiceCallTickets\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"service_calls\",\n \"segment\": \"Tickets\",\n \"field\": \"serviceCallID\"\n },\n \"children\": [\n {\n \"resource\": \"service_call_ticket_resources\",\n \"apiEntity\": \"ServiceCallTicketResource\",\n \"parentField\": \"serviceCallTicketID\",\n \"parentSegment\": \"Resources\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"service_call_tickets.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"service_calls\": {\n \"resource\": \"service_calls\",\n \"apiEntity\": \"ServiceCall\",\n \"kind\": \"entity\",\n \"path\": \"ServiceCalls\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"service_call_tasks\",\n \"apiEntity\": \"ServiceCallTask\",\n \"parentField\": \"serviceCallID\",\n \"parentSegment\": \"Tasks\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"service_call_tickets\",\n \"apiEntity\": \"ServiceCallTicket\",\n \"parentField\": \"serviceCallID\",\n \"parentSegment\": \"Tickets\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"service_calls.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"endDateTime\",\n \"startDateTime\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"service_level_agreement_results\": {\n \"resource\": \"service_level_agreement_results\",\n \"apiEntity\": \"ServiceLevelAgreementResults\",\n \"kind\": \"entity\",\n \"path\": \"ServiceLevelAgreementResults\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"services\": {\n \"resource\": \"services\",\n \"apiEntity\": \"Service\",\n \"kind\": \"entity\",\n \"path\": \"Services\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"services.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"periodType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"name\"\n },\n \"skills\": {\n \"resource\": \"skills\",\n \"apiEntity\": \"Skill\",\n \"kind\": \"entity\",\n \"path\": \"Skills\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"subscription_periods\": {\n \"resource\": \"subscription_periods\",\n \"apiEntity\": \"SubscriptionPeriod\",\n \"kind\": \"entity\",\n \"path\": \"SubscriptionPeriods\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"subscriptions\": {\n \"resource\": \"subscriptions\",\n \"apiEntity\": \"Subscription\",\n \"kind\": \"entity\",\n \"path\": \"Subscriptions\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"subscriptions.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"subscriptionName\",\n \"configurationItemID\",\n \"periodPrice\",\n \"periodType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the configurationItemID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"configurationItemID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"survey_results\": {\n \"resource\": \"survey_results\",\n \"apiEntity\": \"SurveyResults\",\n \"kind\": \"entity\",\n \"path\": \"SurveyResults\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"surveys\": {\n \"resource\": \"surveys\",\n \"apiEntity\": \"Survey\",\n \"kind\": \"entity\",\n \"path\": \"Surveys\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"tag_aliases\": {\n \"resource\": \"tag_aliases\",\n \"apiEntity\": \"TagAlias\",\n \"kind\": \"entity\",\n \"path\": \"TagAliases\",\n \"parentScoped\": true,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"tags\",\n \"segment\": \"Aliases\",\n \"field\": \"tagID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"tag_aliases.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"tag_groups\": {\n \"resource\": \"tag_groups\",\n \"apiEntity\": \"TagGroup\",\n \"kind\": \"entity\",\n \"path\": \"TagGroups\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"tag_groups.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"label\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"tags\": {\n \"resource\": \"tags\",\n \"apiEntity\": \"Tag\",\n \"kind\": \"entity\",\n \"path\": \"Tags\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"tag_aliases\",\n \"apiEntity\": \"TagAlias\",\n \"parentField\": \"tagID\",\n \"parentSegment\": \"Aliases\",\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"tags.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"label\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"task_secondary_resources\": {\n \"resource\": \"task_secondary_resources\",\n \"apiEntity\": \"TaskSecondaryResource\",\n \"kind\": \"entity\",\n \"path\": \"TaskSecondaryResources\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tasks\",\n \"segment\": \"SecondaryResources\",\n \"field\": \"taskID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"task_secondary_resources.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"message\": \"vendor 500: reference rejection on r (exact vendor text preserved verbatim in vendorEvidence — campaign receipt artifact, as recorded on disk)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_additional_configuration_items\": {\n \"resource\": \"ticket_additional_configuration_items\",\n \"apiEntity\": \"TicketAdditionalConfigurationItem\",\n \"kind\": \"entity\",\n \"path\": \"TicketAdditionalConfigurationItems\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"AdditionalConfigurationItems\",\n \"field\": \"ticketID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_additional_configuration_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"configurationItemID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the configurationItemID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"configurationItemID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_additional_contacts\": {\n \"resource\": \"ticket_additional_contacts\",\n \"apiEntity\": \"TicketAdditionalContact\",\n \"kind\": \"entity\",\n \"path\": \"TicketAdditionalContacts\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"AdditionalContacts\",\n \"field\": \"ticketID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_additional_contacts.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"contactID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 4001 (deleted post-proof — 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.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"Reference value on field: contactID of type: Contact does not exist or is invalid.\",\n \"{\\\"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:\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_attachments\": {\n \"resource\": \"ticket_attachments\",\n \"apiEntity\": \"TicketAttachment\",\n \"kind\": \"entity\",\n \"path\": \"TicketAttachments\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"Attachments\",\n \"field\": \"ticketID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"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 — '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) — VENDOR-FIX required.\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\"\n },\n \"vendorEvidence\": [\n \"Picklist value [File] does not exist for Type.\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"ticket_attachments.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"077617d5-48c2-4ca2-a610-8bd1e0da97d4\\\",\\\"message\\\":\\\"Field 'Type': Missing Required Fi\",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"Picklist value [0] does not exist for Publish. / Field 'Type': Missing Required Field: Type.\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_categories\": {\n \"resource\": \"ticket_categories\",\n \"apiEntity\": \"TicketCategory\",\n \"kind\": \"entity\",\n \"path\": \"TicketCategories\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"ticket_category_field_defaults\",\n \"apiEntity\": \"TicketCategoryFieldDefault\",\n \"parentField\": \"ticketCategoryID\",\n \"parentSegment\": \"FieldDefaults\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": false,\n \"query\": true,\n \"update\": false,\n \"delete\": false\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_category_field_defaults\": {\n \"resource\": \"ticket_category_field_defaults\",\n \"apiEntity\": \"TicketCategoryFieldDefault\",\n \"kind\": \"entity\",\n \"path\": \"TicketCategoryFieldDefaults\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"ticket_categories\",\n \"segment\": \"FieldDefaults\",\n \"field\": \"ticketCategoryID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_change_request_approvals\": {\n \"resource\": \"ticket_change_request_approvals\",\n \"apiEntity\": \"TicketChangeRequestApproval\",\n \"kind\": \"entity\",\n \"path\": \"TicketChangeRequestApprovals\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"ChangeRequestApprovals\",\n \"field\": \"ticketID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_change_request_approvals.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_charges\": {\n \"resource\": \"ticket_charges\",\n \"apiEntity\": \"TicketCharge\",\n \"kind\": \"entity\",\n \"path\": \"TicketCharges\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"Charges\",\n \"field\": \"ticketID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_charges.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"unitQuantity\",\n \"datePurchased\",\n \"chargeType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"ticket_charges.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"b9b6939b-ccc5-4e9d-9ea2-e2f47d064f63\\\",\\\"message\\\":\\\"A productID or a billingCodeID must b\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_checklist_items\": {\n \"resource\": \"ticket_checklist_items\",\n \"apiEntity\": \"TicketChecklistItem\",\n \"kind\": \"entity\",\n \"path\": \"TicketChecklistItems\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"ChecklistItems\",\n \"field\": \"ticketID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_checklist_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"itemName\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_checklist_libraries\": {\n \"resource\": \"ticket_checklist_libraries\",\n \"apiEntity\": \"TicketChecklistLibrary\",\n \"kind\": \"entity\",\n \"path\": \"TicketChecklistLibraries\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"ChecklistLibraries\",\n \"field\": \"ticketID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_checklist_libraries.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"checklistLibraryID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"message\": \"W-A7 drift + parent wall, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor now answers HTML 404 ('Resource not found' — 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.\",\n \"remedy\": \"the checklist-library PARENT is blind for this user (HTML 404 before the 200 drift) — 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\"\n },\n \"vendorEvidence\": [\n \"Expected OperationResultModel { itemId } (or { id }); got a different shape (ladder_decode.log, INVALID_RESPONSE)\",\n \"api-docs.json declares OperationResultModel for POST /V1.0/Tickets/{id}/TicketChecklistLibraries — the vendor deviates (W-A7 adjudication: vendor spec drift, not a node defect)\",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"Resource not found: <!DOCTYPE html PUBLIC .../xhtml/1.0/Strict ...>\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": null\n },\n \"ticket_history\": {\n \"resource\": \"ticket_history\",\n \"apiEntity\": \"TicketHistory\",\n \"kind\": \"entity\",\n \"path\": \"TicketHistory\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_note_attachments\": {\n \"resource\": \"ticket_note_attachments\",\n \"apiEntity\": \"TicketNoteAttachment\",\n \"kind\": \"entity\",\n \"path\": \"TicketNoteAttachments\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"ticket_notes\",\n \"segment\": \"Attachments\",\n \"field\": \"ticketNoteID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_note_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"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 — '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) — VENDOR-FIX required.\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_note_webhooks\": {\n \"resource\": \"ticket_note_webhooks\",\n \"apiEntity\": \"TicketNoteWebhook\",\n \"kind\": \"entity\",\n \"path\": \"TicketNoteWebhooks\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"ticket_notes\",\n \"segment\": \"Webhook\",\n \"field\": null\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_note_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"webhookUrl\",\n \"deactivationUrl\",\n \"sendThresholdExceededNotification\",\n \"secretKey\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"ticket_note_webhooks.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_notes\": {\n \"resource\": \"ticket_notes\",\n \"apiEntity\": \"TicketNote\",\n \"kind\": \"entity\",\n \"path\": \"TicketNotes\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"Notes\",\n \"field\": \"ticketID\"\n },\n \"children\": [\n {\n \"resource\": \"ticket_note_attachments\",\n \"apiEntity\": \"TicketNoteAttachment\",\n \"parentField\": \"ticketNoteID\",\n \"parentSegment\": \"Attachments\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"download\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"ticket_note_webhooks\",\n \"apiEntity\": \"TicketNoteWebhook\",\n \"parentField\": null,\n \"parentSegment\": \"Webhook\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createRequiredSet\": [\n \"description\",\n \"noteType\",\n \"publish\"\n ],\n \"quirks\": [\n \"publish is an integer picklist (1/2/4), NOT a boolean — a JSON boolean 500s at the vendor parse layer\",\n \"noteType is an integer picklist\",\n \"ticketID is NOT in the body (the scoped parent path supplies it); title is optional\"\n ],\n \"createGuidance\": {\n \"createOp\": \"ticket_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"description\",\n \"noteType\",\n \"publish\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"ticket_notes.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for ticket_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for ticket_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"title\"\n },\n \"ticket_secondary_resources\": {\n \"resource\": \"ticket_secondary_resources\",\n \"apiEntity\": \"TicketSecondaryResource\",\n \"kind\": \"entity\",\n \"path\": \"TicketSecondaryResources\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"SecondaryResources\",\n \"field\": \"ticketID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_secondary_resources.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"ticket_webhooks\": {\n \"resource\": \"ticket_webhooks\",\n \"apiEntity\": \"TicketWebhook\",\n \"kind\": \"entity\",\n \"path\": \"TicketWebhooks\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"A\",\n \"parent\": {\n \"resource\": \"tickets\",\n \"segment\": \"Webhook\",\n \"field\": null\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"name only (contains)\",\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"ticket_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"webhookUrl\",\n \"deactivationUrl\",\n \"sendThresholdExceededNotification\",\n \"secretKey\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"ticket_webhooks.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"tickets\": {\n \"resource\": \"tickets\",\n \"apiEntity\": \"Ticket\",\n \"kind\": \"entity\",\n \"path\": \"Tickets\",\n \"parentScoped\": false,\n \"tier\": \"core\",\n \"workflowResource\": true,\n \"group\": \"A\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"ticket_additional_configuration_items\",\n \"apiEntity\": \"TicketAdditionalConfigurationItem\",\n \"parentField\": \"ticketID\",\n \"parentSegment\": \"AdditionalConfigurationItems\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"createIfNotExists\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"ticket_additional_contacts\",\n \"apiEntity\": \"TicketAdditionalContact\",\n \"parentField\": \"ticketID\",\n \"parentSegment\": \"AdditionalContacts\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"createIfNotExists\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"ticket_attachments\",\n \"apiEntity\": \"TicketAttachment\",\n \"parentField\": \"ticketID\",\n \"parentSegment\": \"Attachments\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"download\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"ticket_change_request_approvals\",\n \"apiEntity\": \"TicketChangeRequestApproval\",\n \"parentField\": \"ticketID\",\n \"parentSegment\": \"ChangeRequestApprovals\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"ticket_charges\",\n \"apiEntity\": \"TicketCharge\",\n \"parentField\": \"ticketID\",\n \"parentSegment\": \"Charges\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"createIfNotExists\"\n ],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"ticket_checklist_items\",\n \"apiEntity\": \"TicketChecklistItem\",\n \"parentField\": \"ticketID\",\n \"parentSegment\": \"ChecklistItems\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n },\n {\n \"resource\": \"ticket_checklist_libraries\",\n \"apiEntity\": \"TicketChecklistLibrary\",\n \"parentField\": \"ticketID\",\n \"parentSegment\": \"ChecklistLibraries\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": false,\n \"update\": false,\n \"delete\": false\n }\n },\n {\n \"resource\": \"ticket_notes\",\n \"apiEntity\": \"TicketNote\",\n \"parentField\": \"ticketID\",\n \"parentSegment\": \"Notes\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": false\n }\n },\n {\n \"resource\": \"ticket_secondary_resources\",\n \"apiEntity\": \"TicketSecondaryResource\",\n \"parentField\": \"ticketID\",\n \"parentSegment\": \"SecondaryResources\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n },\n {\n \"resource\": \"ticket_webhooks\",\n \"apiEntity\": \"TicketWebhook\",\n \"parentField\": null,\n \"parentSegment\": \"Webhook\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [],\n \"searchCovers\": \"name only (contains)\",\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": true,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": true,\n \"searchCovers\": \"title only (contains); ticketNumber lookups use resolve / findByTicketNumber\",\n \"findBy\": [\n \"findByTicketNumber\"\n ]\n },\n \"blindSurfaces\": {\n \"count\": {\n \"kind\": \"unfiltered-blind\",\n \"note\": \"the UNFILTERED tickets count/query surface is blind in ww29 (live-verified: 0 before AND after a proven live create). FILTERED queries return data (live-verified: 3 open tickets via a companyID+status filter) — a filtered empty result is a TRUE absence, never a sentinel. An unfiltered 0/empty result proves nothing — get(id) is the authority.\"\n },\n \"query\": {\n \"kind\": \"unfiltered-blind\",\n \"note\": \"the UNFILTERED tickets count/query surface is blind in ww29 (live-verified: 0 before AND after a proven live create). FILTERED queries return data (live-verified: 3 open tickets via a companyID+status filter) — a filtered empty result is a TRUE absence, never a sentinel. An unfiltered 0/empty result proves nothing — get(id) is the authority.\"\n }\n },\n \"zoneFacts\": {\n \"createRequiredSet\": [\n \"title\",\n \"status\",\n \"priority\",\n \"companyID\",\n \"queueID\"\n ],\n \"quirks\": [\n \"UNFILTERED count/query are blind in this zone (0 before AND after a proven live create); FILTERED queries return data (live-verified: 3 open tickets via a companyID+status filter) — a filtered empty result is a true absence; get(id) is the authority\",\n \"status is a tenant-specific integer picklist (31 values on ww29, max id 43 — the labels via tickets.describeFields)\",\n \"queueID is required on create: a create missing it 500s with a typed field-level error\"\n ],\n \"createGuidance\": {\n \"createOp\": \"tickets.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"title\",\n \"status\",\n \"priority\",\n \"companyID\",\n \"queueID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 tickets); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"CONFIG_ERROR\\\",\\\"category\\\":\\\"validation\\\",\\\"retryable\\\":false,\\\"operation\\\":\\\"tickets.delete\\\",\\\"message\\\":\\\"invoke: unknown operation \\\\\\\"tickets.delete\\\\\\\" — it is not in the capability registr\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for tickets (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": {\n \"note\": \"the vendor defines no DELETE for tickets (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"proof\": \"spec-derived\"\n },\n \"markerField\": \"title\"\n },\n \"time_entries\": {\n \"resource\": \"time_entries\",\n \"apiEntity\": \"TimeEntry\",\n \"kind\": \"entity\",\n \"path\": \"TimeEntries\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [\n {\n \"resource\": \"time_entry_attachments\",\n \"apiEntity\": \"TimeEntryAttachment\",\n \"parentField\": \"timeEntryID\",\n \"parentSegment\": \"Attachments\",\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"specialOps\": [\n \"download\"\n ],\n \"searchCovers\": null,\n \"scopedOps\": {\n \"create\": true,\n \"query\": true,\n \"update\": false,\n \"delete\": true\n }\n }\n ],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"quirks\": [\n \"createForResource node rule: the allocation code is ALWAYS resolved from billing_codes with the family + active filter (the unfiltered surface is blind); the internal linkage body posts the model name internalBillingCodeID (the S9b live wire oracle)\",\n \"the vendor double-validates roleID (an active general allocation code AND a Role reference); in ww29 the two sets are disjoint, so the task/ticket linkage falls back to the internal linkage\"\n ],\n \"createGuidance\": {\n \"createOp\": \"time_entries.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"resource-role-pair\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382, 3 live attempts with own resource 31131505 + roles 29685291/29682834/29683323): current vendor text 'API-only user cannot be selected for this field' (10-04: 'The specified AssignedResourceID and AssignedRoleID combination is not currently defined'). UNSATISFIABLE for this API-only user (resources table blind; own API-only resource refused by the vendor). createForResource (stage-11 proven) is walled by the same drift. Valid in-tenant pairs observed via postedWithin: (31131373, 29682834), (29869529, 29682834) — human resources the API user cannot select.\",\n \"remedy\": \"vendor eligibility, not missing tenant data: an API-only user can never be the selectable resource. Use a non-API-only (human) API user or record time entries in the Autotask UI; the working reads remain postedWithin / the window helpers (W-D3 pointer note)\"\n },\n \"vendorEvidence\": [\n \"The specified AssignedResourceID and AssignedRoleID combination is not currently defined.\",\n \"{\\\"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\",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"API-only user cannot be selected for this field.\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"time_entry_attachments\": {\n \"resource\": \"time_entry_attachments\",\n \"apiEntity\": \"TimeEntryAttachment\",\n \"kind\": \"entity\",\n \"path\": \"TimeEntryAttachments\",\n \"parentScoped\": true,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": {\n \"resource\": \"time_entries\",\n \"segment\": \"Attachments\",\n \"field\": \"timeEntryID\"\n },\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"time_entry_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"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 — '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) — VENDOR-FIX required.\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"Picklist value [0] does not exist for Publish. / Field 'Type': Missing Required Field: Type.\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"time_off_requests\": {\n \"resource\": \"time_off_requests\",\n \"apiEntity\": \"TimeOffRequest\",\n \"kind\": \"entity\",\n \"path\": \"TimeOffRequests\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"inventory_products\": {\n \"resource\": \"inventory_products\",\n \"apiEntity\": \"InventoryProduct\",\n \"kind\": \"entity\",\n \"path\": \"InventoryProducts\",\n \"parentScoped\": false,\n \"tier\": \"extended\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": {\n \"createGuidance\": {\n \"createOp\": \"inventory_products.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"productID\",\n \"quantityMaximum\",\n \"inventoryLocationID\",\n \"quantityMinimum\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the productID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the productID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"productID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n },\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"authenticate\": {\n \"resource\": \"authenticate\",\n \"apiEntity\": null,\n \"kind\": \"integration\",\n \"path\": \"V1.0/Authenticate\",\n \"parentScoped\": false,\n \"tier\": \"core\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"version\": {\n \"resource\": \"version\",\n \"apiEntity\": null,\n \"kind\": \"integration\",\n \"path\": \"V1.0/Version\",\n \"parentScoped\": false,\n \"tier\": \"core\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"version_information\": {\n \"resource\": \"version_information\",\n \"apiEntity\": null,\n \"kind\": \"integration\",\n \"path\": \"VersionInformation\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"entity_information\": {\n \"resource\": \"entity_information\",\n \"apiEntity\": null,\n \"kind\": \"integration\",\n \"path\": \"V1.0/EntityInformation\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"modules\": {\n \"resource\": \"modules\",\n \"apiEntity\": null,\n \"kind\": \"integration\",\n \"path\": \"V1.0/Modules\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"threshold_information\": {\n \"resource\": \"threshold_information\",\n \"apiEntity\": null,\n \"kind\": \"integration\",\n \"path\": \"V1.0/ThresholdInformation\",\n \"parentScoped\": false,\n \"tier\": \"core\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n },\n \"zone_information\": {\n \"resource\": \"zone_information\",\n \"apiEntity\": null,\n \"kind\": \"integration\",\n \"path\": \"V1.0/ZoneInformation\",\n \"parentScoped\": false,\n \"tier\": \"advanced\",\n \"workflowResource\": false,\n \"group\": \"B\",\n \"parent\": null,\n \"children\": [],\n \"naturalKeys\": {\n \"hasSearch\": false,\n \"searchCovers\": null,\n \"findBy\": []\n },\n \"blindSurfaces\": null,\n \"zoneFacts\": null,\n \"deleteBoundary\": null,\n \"markerField\": null\n }\n};\n\n/** The runtime stamps keyed by resource → op (the base.ts sentinel lookup). */\nexport const BLIND_SURFACE_STAMPS: Record<string, Record<string, BlindSurfaceInfo | undefined>> = {\n \"companies\": {\n \"count\": {\n \"surface\": \"companies.count\",\n \"zone\": \"australia-nz\",\n \"kind\": \"unowned-blind\",\n \"authority\": \"companies.get\",\n \"note\": \"companies count/query return 0/empty for companies not owned by the caller (ww29, live-verified: 0 before AND after a proven live create). A 0/empty result on this surface proves nothing — get(id) is the authority: it returns the record even while count/query are blind.\"\n },\n \"query\": {\n \"surface\": \"companies.query\",\n \"zone\": \"australia-nz\",\n \"kind\": \"unowned-blind\",\n \"authority\": \"companies.get\",\n \"note\": \"companies count/query return 0/empty for companies not owned by the caller (ww29, live-verified: 0 before AND after a proven live create). A 0/empty result on this surface proves nothing — get(id) is the authority: it returns the record even while count/query are blind.\"\n }\n },\n \"tickets\": {\n \"count\": {\n \"surface\": \"tickets.count\",\n \"zone\": \"australia-nz\",\n \"kind\": \"unfiltered-blind\",\n \"authority\": \"tickets.get\",\n \"note\": \"the UNFILTERED tickets count/query surface is blind in ww29 (live-verified: 0 before AND after a proven live create). FILTERED queries return data (live-verified: 3 open tickets via a companyID+status filter) — a filtered empty result is a TRUE absence, never a sentinel. An unfiltered 0/empty result proves nothing — get(id) is the authority.\"\n },\n \"query\": {\n \"surface\": \"tickets.query\",\n \"zone\": \"australia-nz\",\n \"kind\": \"unfiltered-blind\",\n \"authority\": \"tickets.get\",\n \"note\": \"the UNFILTERED tickets count/query surface is blind in ww29 (live-verified: 0 before AND after a proven live create). FILTERED queries return data (live-verified: 3 open tickets via a companyID+status filter) — a filtered empty result is a TRUE absence, never a sentinel. An unfiltered 0/empty result proves nothing — get(id) is the authority.\"\n }\n },\n \"billing_codes\": {\n \"count\": {\n \"surface\": \"billing_codes.count\",\n \"zone\": \"australia-nz\",\n \"kind\": \"unfiltered-blind\",\n \"authority\": \"billing_codes.get\",\n \"note\": \"the UNFILTERED billing_codes count/query surface is blind in ww29 (live-verified). Query with `useType` (1 = general, 3 = internal) + `isActive` filters — filtered queries return real data; time_entries.createForResource always applies them for you. get(id) is the authority.\"\n },\n \"query\": {\n \"surface\": \"billing_codes.query\",\n \"zone\": \"australia-nz\",\n \"kind\": \"unfiltered-blind\",\n \"authority\": \"billing_codes.get\",\n \"note\": \"the UNFILTERED billing_codes count/query surface is blind in ww29 (live-verified). Query with `useType` (1 = general, 3 = internal) + `isActive` filters — filtered queries return real data; time_entries.createForResource always applies them for you. get(id) is the authority.\"\n }\n }\n};\n\n/**\n * The spec-derived delete boundary over the stampable create ops (issue #9):\n * resource → the deterministic boundary note (the create dry-run warning +\n * the recovery op's delete.available=false refusal text). Absent resource =\n * the vendor defines a DELETE (boundary available). Zero wire by construction.\n */\nexport const DELETE_BOUNDARY_NOTES: Record<string, string> = {\n \"companies\": \"the vendor defines no DELETE for companies (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"company_notes\": \"the vendor defines no DELETE for company_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"configuration_item_categories\": \"the vendor defines no DELETE for configuration_item_categories (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"configuration_item_notes\": \"the vendor defines no DELETE for configuration_item_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"configuration_items\": \"the vendor defines no DELETE for configuration_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_block_hour_factors\": \"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) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_blocks\": \"the vendor defines no DELETE for contract_blocks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_milestones\": \"the vendor defines no DELETE for contract_milestones (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_notes\": \"the vendor defines no DELETE for contract_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_rates\": \"the vendor defines no DELETE for contract_rates (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_retainers\": \"the vendor defines no DELETE for contract_retainers (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_role_costs\": \"the vendor defines no DELETE for contract_role_costs (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_service_adjustments\": \"the vendor defines no DELETE for contract_service_adjustments (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_service_bundle_adjustments\": \"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) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_service_bundles\": \"the vendor defines no DELETE for contract_service_bundles (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_services\": \"the vendor defines no DELETE for contract_services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contract_ticket_purchases\": \"the vendor defines no DELETE for contract_ticket_purchases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"contracts\": \"the vendor defines no DELETE for contracts (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"departments\": \"the vendor defines no DELETE for departments (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"domain_registrars\": \"the vendor defines no DELETE for domain_registrars (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"expense_items\": \"the vendor defines no DELETE for expense_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"expense_reports\": \"the vendor defines no DELETE for expense_reports (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"opportunities\": \"the vendor defines no DELETE for opportunities (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"phases\": \"the vendor defines no DELETE for phases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"product_vendors\": \"the vendor defines no DELETE for product_vendors (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"products\": \"the vendor defines no DELETE for products (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"project_notes\": \"the vendor defines no DELETE for project_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"projects\": \"the vendor defines no DELETE for projects (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"purchase_order_item_receiving\": \"the vendor defines no DELETE for purchase_order_item_receiving (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"purchase_order_items\": \"the vendor defines no DELETE for purchase_order_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"purchase_orders\": \"the vendor defines no DELETE for purchase_orders (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"quote_locations\": \"the vendor defines no DELETE for quote_locations (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"quotes\": \"the vendor defines no DELETE for quotes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"resource_role_queues\": \"the vendor defines no DELETE for resource_role_queues (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"roles\": \"the vendor defines no DELETE for roles (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"services\": \"the vendor defines no DELETE for services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"tasks\": \"the vendor defines no DELETE for tasks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"ticket_checklist_libraries\": \"the vendor defines no DELETE for ticket_checklist_libraries (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"ticket_notes\": \"the vendor defines no DELETE for ticket_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\",\n \"tickets\": \"the vendor defines no DELETE for tickets (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n};\n\n/** The spec-derived name-like field per resource (issue #9): the recovery\n * marker query's default filter field. Absent resource = the model has no\n * name-like field (the recovery input's field is then required). */\nexport const MARKER_FIELDS: Record<string, string> = {\n \"companies\": \"companyName\",\n \"company_notes\": \"name\",\n \"configuration_item_categories\": \"name\",\n \"configuration_item_notes\": \"title\",\n \"configuration_items\": \"referenceTitle\",\n \"contract_milestones\": \"title\",\n \"contract_notes\": \"title\",\n \"contracts\": \"contractName\",\n \"departments\": \"name\",\n \"domain_registrars\": \"name\",\n \"expense_reports\": \"name\",\n \"opportunities\": \"title\",\n \"products\": \"name\",\n \"project_notes\": \"title\",\n \"phases\": \"title\",\n \"tasks\": \"title\",\n \"projects\": \"projectName\",\n \"quotes\": \"name\",\n \"roles\": \"name\",\n \"services\": \"name\",\n \"ticket_notes\": \"title\",\n \"tickets\": \"title\"\n};\n\n/** One response-shape-drift marker pin (issue #13 — the create-path recovery config). */\nexport interface ResponseDriftMarkerInfo {\n /** The pinned marker field on the resource's LIVE entity (the gate checks spec membership for spec-derived pins; the live proofs cite the evidence). */\n markerField: string;\n /** The proof level (closed set): live-verified | discovery-sweep | spec-derived. */\n proof: 'live-verified' | 'discovery-sweep' | 'spec-derived';\n /** The drift statement + the marker basis, LLM-consumer grade. */\n note: string;\n /** The live evidence (non-null for the non-spec-derived proofs — the vendored model may omit the field the live entity carries). */\n evidence: string | null;\n}\n\n/**\n * The response-shape-drift marker pins keyed by resource (issue #13): the\n * create path reads this on a drifted 2xx (the envelope check failed) and\n * runs ONE bounded marker read (limit 5, the resource's own query surface).\n * Absent resource = no pin = the pre-recovery behaviour (the typed error\n * stands, zero extra requests). Zero wire by construction (served plan data).\n */\nexport const RESPONSE_DRIFT_MARKERS: Record<string, ResponseDriftMarkerInfo> = {\n \"ticket_checklist_libraries\": {\n \"markerField\": \"name\",\n \"proof\": \"live-verified\",\n \"note\": \"ticket_checklist_libraries.create answers HTTP 200 with a body that is NOT the specced OperationResultModel (wall W-A7, stage 11, 2026-10-04 — the vendor deviates from its own spec; the node types INVALID_RESPONSE, correct-by-spec). The created record carries the caller-supplied marker in `name` (the stage-11 create posted name=<marker> and the vendor accepted it — residue records under ticket 527119, name=marker). The vendored TicketChecklistLibraryModel omits `name` (a vendor spec gap — the live entity carries it), so the pin is live-verified rather than spec-derived. The create-path recovery runs ONE bounded marker read (limit 5) on a drifted 200 and stamps the recovered id idFrom: \\\"marker-recovery\\\"; it is opt-out (recoverIdFromMarker: false) and never silent. Re-verified 2026-10-06 (confirm-100): the call now reaches an HTML 404 (\\\"Resource not found\\\", typed NOT_FOUND) — the checklist-library parent (checklistLibraryID) is blind/absent for this API user BEFORE the 10-04 200-shape drift surfaces; the drift pin remains for the post-parent shape.\",\n \"evidence\": \"stage-11 apply-matrix (2026-10-04, marker FULL100W-1791110339): POST /V1.0/Tickets/527119/ChecklistLibraries with body { name: \\\"<marker>-item\\\" } answered HTTP 200 (the vendor accepted the name field) with a body that is not OperationResultModel -> the SDK typed INVALID_RESPONSE (receipts-iter3); 1-2 residue records under ticket 527119 with name=<marker> (walls.json W-A7).\"\n }\n};\n\n/**\n * The typed empty-reason stamps keyed by resource → op (issue #14): the\n * result-time reason the base.ts wrap attaches to 0/empty count/query\n * results and the error-path details src/http.ts attaches to typed errors.\n * The 'blind-surface' kind is absent by design — base.ts synthesizes it\n * from BLIND_SURFACE_STAMPS (the pin's byte-identical note). Additive only\n * — count/items/status/error-code values are never mutated.\n */\nexport const EMPTY_REASON_STAMPS: Record<string, Record<string, EmptyReasonInfo | undefined>> = {\n \"appointments\": {\n \"count\": {\n \"surface\": \"appointments.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's appointments table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"appointments.get\",\n \"remedy\": \"address a record by a known id (appointments.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"appointments.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's appointments table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"appointments.get\",\n \"remedy\": \"address a record by a known id (appointments.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"appointments.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no appointments rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a appointments update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"appointments.get\",\n \"remedy\": \"address a record by a known id (appointments.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"billing_items\": {\n \"count\": {\n \"surface\": \"billing_items.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's billing_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"billing_items.get\",\n \"remedy\": \"address a record by a known id (billing_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"billing_items.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's billing_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"billing_items.get\",\n \"remedy\": \"address a record by a known id (billing_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"billing_items.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no billing_items rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a billing_items update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"billing_items.get\",\n \"remedy\": \"address a record by a known id (billing_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"change_request_links\": {\n \"count\": {\n \"surface\": \"change_request_links.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's change_request_links table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"change_request_links.get\",\n \"remedy\": \"address a record by a known id (change_request_links.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"change_request_links.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's change_request_links table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"change_request_links.get\",\n \"remedy\": \"address a record by a known id (change_request_links.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"classification_icons\": {\n \"count\": {\n \"surface\": \"classification_icons.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's classification_icons table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"classification_icons.get\",\n \"remedy\": \"address a record by a known id (classification_icons.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"classification_icons.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's classification_icons table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"classification_icons.get\",\n \"remedy\": \"address a record by a known id (classification_icons.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"company_alerts\": {\n \"count\": {\n \"surface\": \"company_alerts.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's company_alerts table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"company_alerts.get\",\n \"remedy\": \"address a record by a known id (company_alerts.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"company_alerts.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's company_alerts table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"company_alerts.get\",\n \"remedy\": \"address a record by a known id (company_alerts.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"company_alerts.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the company_alerts table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a company_alerts update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"company_alerts.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (company_alerts.get(parentId, id) misses by construction)\"\n }\n },\n \"company_notes\": {\n \"count\": {\n \"surface\": \"company_notes.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's company_notes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"company_notes.get\",\n \"remedy\": \"address a record by a known id (company_notes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"company_notes.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's company_notes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"company_notes.get\",\n \"remedy\": \"address a record by a known id (company_notes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"company_notes.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the company_notes table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a company_notes update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"company_notes.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (company_notes.get(parentId, id) misses by construction)\"\n }\n },\n \"company_site_configurations\": {\n \"count\": {\n \"surface\": \"company_site_configurations.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's company_site_configurations table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"company_site_configurations.get\",\n \"remedy\": \"address a record by a known id (company_site_configurations.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"company_site_configurations.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's company_site_configurations table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"company_site_configurations.get\",\n \"remedy\": \"address a record by a known id (company_site_configurations.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"company_site_configurations.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the company_site_configurations table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a company_site_configurations update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"company_site_configurations.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (company_site_configurations.get(parentId, id) misses by construction)\"\n }\n },\n \"company_webhooks\": {\n \"count\": {\n \"surface\": \"company_webhooks.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's company_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"company_webhooks.get\",\n \"remedy\": \"address a record by a known id (company_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"company_webhooks.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's company_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"company_webhooks.get\",\n \"remedy\": \"address a record by a known id (company_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"company_webhooks.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the company_webhooks table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a company_webhooks update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"company_webhooks.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (company_webhooks.get(parentId, id) misses by construction)\"\n }\n },\n \"configuration_item_billing_product_associations\": {\n \"count\": {\n \"surface\": \"configuration_item_billing_product_associations.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's configuration_item_billing_product_associations table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"configuration_item_billing_product_associations.get\",\n \"remedy\": \"address a record by a known id (configuration_item_billing_product_associations.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"configuration_item_billing_product_associations.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's configuration_item_billing_product_associations table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"configuration_item_billing_product_associations.get\",\n \"remedy\": \"address a record by a known id (configuration_item_billing_product_associations.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"configuration_item_billing_product_associations.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the configuration_item_billing_product_associations table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a configuration_item_billing_product_associations update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"configuration_item_billing_product_associations.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (configuration_item_billing_product_associations.get(parentId, id) misses by construction)\"\n }\n },\n \"configuration_item_types\": {\n \"count\": {\n \"surface\": \"configuration_item_types.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's configuration_item_types table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"configuration_item_types.get\",\n \"remedy\": \"address a record by a known id (configuration_item_types.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"configuration_item_types.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's configuration_item_types table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"configuration_item_types.get\",\n \"remedy\": \"address a record by a known id (configuration_item_types.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"configuration_item_types.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no configuration_item_types rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a configuration_item_types update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"configuration_item_types.get\",\n \"remedy\": \"address a record by a known id (configuration_item_types.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"configuration_item_webhooks\": {\n \"count\": {\n \"surface\": \"configuration_item_webhooks.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's configuration_item_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"configuration_item_webhooks.get\",\n \"remedy\": \"address a record by a known id (configuration_item_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"configuration_item_webhooks.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's configuration_item_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"configuration_item_webhooks.get\",\n \"remedy\": \"address a record by a known id (configuration_item_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"configuration_item_webhooks.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the configuration_item_webhooks table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a configuration_item_webhooks update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"configuration_item_webhooks.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (configuration_item_webhooks.get(parentId, id) misses by construction)\"\n }\n },\n \"configuration_items\": {\n \"count\": {\n \"surface\": \"configuration_items.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's configuration_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"configuration_items.get\",\n \"remedy\": \"address a record by a known id (configuration_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"configuration_items.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's configuration_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"configuration_items.get\",\n \"remedy\": \"address a record by a known id (configuration_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"configuration_items.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no configuration_items rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a configuration_items update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"configuration_items.get\",\n \"remedy\": \"address a record by a known id (configuration_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"contact_webhooks\": {\n \"count\": {\n \"surface\": \"contact_webhooks.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contact_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contact_webhooks.get\",\n \"remedy\": \"address a record by a known id (contact_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contact_webhooks.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contact_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contact_webhooks.get\",\n \"remedy\": \"address a record by a known id (contact_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contact_webhooks.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contact_webhooks table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contact_webhooks update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contact_webhooks.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contact_webhooks.get(parentId, id) misses by construction)\"\n }\n },\n \"contacts\": {\n \"count\": {\n \"surface\": \"contacts.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contacts table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contacts.get\",\n \"remedy\": \"address a record by a known id (contacts.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contacts.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contacts table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contacts.get\",\n \"remedy\": \"address a record by a known id (contacts.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contacts.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contacts table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contacts update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contacts.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contacts.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_billing_rules\": {\n \"count\": {\n \"surface\": \"contract_billing_rules.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_billing_rules table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_billing_rules.get\",\n \"remedy\": \"address a record by a known id (contract_billing_rules.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_billing_rules.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_billing_rules table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_billing_rules.get\",\n \"remedy\": \"address a record by a known id (contract_billing_rules.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_billing_rules.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_billing_rules table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_billing_rules update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_billing_rules.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_billing_rules.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_block_hour_factors\": {\n \"count\": {\n \"surface\": \"contract_block_hour_factors.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_block_hour_factors table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_block_hour_factors.get\",\n \"remedy\": \"address a record by a known id (contract_block_hour_factors.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_block_hour_factors.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_block_hour_factors table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_block_hour_factors.get\",\n \"remedy\": \"address a record by a known id (contract_block_hour_factors.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_block_hour_factors.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_block_hour_factors table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_block_hour_factors update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_block_hour_factors.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_block_hour_factors.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_blocks\": {\n \"count\": {\n \"surface\": \"contract_blocks.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_blocks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_blocks.get\",\n \"remedy\": \"address a record by a known id (contract_blocks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_blocks.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_blocks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_blocks.get\",\n \"remedy\": \"address a record by a known id (contract_blocks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_blocks.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_blocks table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_blocks update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_blocks.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_blocks.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_charges\": {\n \"count\": {\n \"surface\": \"contract_charges.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_charges table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_charges.get\",\n \"remedy\": \"address a record by a known id (contract_charges.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_charges.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_charges table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_charges.get\",\n \"remedy\": \"address a record by a known id (contract_charges.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_charges.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_charges table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_charges update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_charges.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_charges.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_exclusion_billing_codes\": {\n \"count\": {\n \"surface\": \"contract_exclusion_billing_codes.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_exclusion_billing_codes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_exclusion_billing_codes.get\",\n \"remedy\": \"address a record by a known id (contract_exclusion_billing_codes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_exclusion_billing_codes.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_exclusion_billing_codes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_exclusion_billing_codes.get\",\n \"remedy\": \"address a record by a known id (contract_exclusion_billing_codes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"contract_exclusion_roles\": {\n \"count\": {\n \"surface\": \"contract_exclusion_roles.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_exclusion_roles table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_exclusion_roles.get\",\n \"remedy\": \"address a record by a known id (contract_exclusion_roles.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_exclusion_roles.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_exclusion_roles table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_exclusion_roles.get\",\n \"remedy\": \"address a record by a known id (contract_exclusion_roles.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"contract_milestones\": {\n \"count\": {\n \"surface\": \"contract_milestones.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_milestones table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_milestones.get\",\n \"remedy\": \"address a record by a known id (contract_milestones.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_milestones.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_milestones table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_milestones.get\",\n \"remedy\": \"address a record by a known id (contract_milestones.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_milestones.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_milestones table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_milestones update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_milestones.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_milestones.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_notes\": {\n \"count\": {\n \"surface\": \"contract_notes.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_notes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_notes.get\",\n \"remedy\": \"address a record by a known id (contract_notes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_notes.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_notes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_notes.get\",\n \"remedy\": \"address a record by a known id (contract_notes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_notes.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_notes table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_notes update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_notes.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_notes.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_rates\": {\n \"count\": {\n \"surface\": \"contract_rates.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_rates table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_rates.get\",\n \"remedy\": \"address a record by a known id (contract_rates.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_rates.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_rates table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_rates.get\",\n \"remedy\": \"address a record by a known id (contract_rates.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_rates.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_rates table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_rates update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_rates.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_rates.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_retainers\": {\n \"count\": {\n \"surface\": \"contract_retainers.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_retainers table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_retainers.get\",\n \"remedy\": \"address a record by a known id (contract_retainers.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_retainers.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_retainers table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_retainers.get\",\n \"remedy\": \"address a record by a known id (contract_retainers.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_retainers.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_retainers table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_retainers update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_retainers.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_retainers.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_role_costs\": {\n \"count\": {\n \"surface\": \"contract_role_costs.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_role_costs table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_role_costs.get\",\n \"remedy\": \"address a record by a known id (contract_role_costs.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_role_costs.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_role_costs table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_role_costs.get\",\n \"remedy\": \"address a record by a known id (contract_role_costs.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_role_costs.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_role_costs table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_role_costs update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_role_costs.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_role_costs.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_service_bundle_units\": {\n \"count\": {\n \"surface\": \"contract_service_bundle_units.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_service_bundle_units table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_service_bundle_units.get\",\n \"remedy\": \"address a record by a known id (contract_service_bundle_units.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_service_bundle_units.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_service_bundle_units table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_service_bundle_units.get\",\n \"remedy\": \"address a record by a known id (contract_service_bundle_units.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"contract_service_bundles\": {\n \"count\": {\n \"surface\": \"contract_service_bundles.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_service_bundles table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_service_bundles.get\",\n \"remedy\": \"address a record by a known id (contract_service_bundles.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_service_bundles.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_service_bundles table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_service_bundles.get\",\n \"remedy\": \"address a record by a known id (contract_service_bundles.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_service_bundles.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_service_bundles table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_service_bundles update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_service_bundles.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_service_bundles.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_service_units\": {\n \"count\": {\n \"surface\": \"contract_service_units.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_service_units table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_service_units.get\",\n \"remedy\": \"address a record by a known id (contract_service_units.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_service_units.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_service_units table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_service_units.get\",\n \"remedy\": \"address a record by a known id (contract_service_units.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"contract_services\": {\n \"count\": {\n \"surface\": \"contract_services.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_services table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_services.get\",\n \"remedy\": \"address a record by a known id (contract_services.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_services.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_services table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_services.get\",\n \"remedy\": \"address a record by a known id (contract_services.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_services.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_services table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_services update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_services.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_services.get(parentId, id) misses by construction)\"\n }\n },\n \"contract_ticket_purchases\": {\n \"count\": {\n \"surface\": \"contract_ticket_purchases.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_ticket_purchases table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_ticket_purchases.get\",\n \"remedy\": \"address a record by a known id (contract_ticket_purchases.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contract_ticket_purchases.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contract_ticket_purchases table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contract_ticket_purchases.get\",\n \"remedy\": \"address a record by a known id (contract_ticket_purchases.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contract_ticket_purchases.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the contract_ticket_purchases table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a contract_ticket_purchases update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"contract_ticket_purchases.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (contract_ticket_purchases.get(parentId, id) misses by construction)\"\n }\n },\n \"contracts\": {\n \"count\": {\n \"surface\": \"contracts.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contracts table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contracts.get\",\n \"remedy\": \"address a record by a known id (contracts.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"contracts.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's contracts table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"contracts.get\",\n \"remedy\": \"address a record by a known id (contracts.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"contracts.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no contracts rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a contracts update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"contracts.get\",\n \"remedy\": \"address a record by a known id (contracts.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"countries\": {\n \"count\": {\n \"surface\": \"countries.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's countries table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"countries.get\",\n \"remedy\": \"address a record by a known id (countries.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"countries.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's countries table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"countries.get\",\n \"remedy\": \"address a record by a known id (countries.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"countries.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no countries rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a countries update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"countries.get\",\n \"remedy\": \"address a record by a known id (countries.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"expense_items\": {\n \"count\": {\n \"surface\": \"expense_items.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's expense_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"expense_items.get\",\n \"remedy\": \"address a record by a known id (expense_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"expense_items.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's expense_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"expense_items.get\",\n \"remedy\": \"address a record by a known id (expense_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"expense_items.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the expense_items table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a expense_items update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"expense_items.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (expense_items.get(parentId, id) misses by construction)\"\n }\n },\n \"expense_reports\": {\n \"count\": {\n \"surface\": \"expense_reports.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's expense_reports table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"expense_reports.get\",\n \"remedy\": \"address a record by a known id (expense_reports.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"expense_reports.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's expense_reports table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"expense_reports.get\",\n \"remedy\": \"address a record by a known id (expense_reports.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"expense_reports.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no expense_reports rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a expense_reports update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"expense_reports.get\",\n \"remedy\": \"address a record by a known id (expense_reports.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"invoices\": {\n \"count\": {\n \"surface\": \"invoices.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's invoices table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"invoices.get\",\n \"remedy\": \"address a record by a known id (invoices.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"invoices.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's invoices table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"invoices.get\",\n \"remedy\": \"address a record by a known id (invoices.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"invoices.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no invoices rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a invoices update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"invoices.get\",\n \"remedy\": \"address a record by a known id (invoices.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"notification_history\": {\n \"count\": {\n \"surface\": \"notification_history.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's notification_history table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"notification_history.get\",\n \"remedy\": \"address a record by a known id (notification_history.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"notification_history.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's notification_history table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"notification_history.get\",\n \"remedy\": \"address a record by a known id (notification_history.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"product_vendors\": {\n \"count\": {\n \"surface\": \"product_vendors.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's product_vendors table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"product_vendors.get\",\n \"remedy\": \"address a record by a known id (product_vendors.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"product_vendors.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's product_vendors table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"product_vendors.get\",\n \"remedy\": \"address a record by a known id (product_vendors.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"product_vendors.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the product_vendors table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a product_vendors update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"product_vendors.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (product_vendors.get(parentId, id) misses by construction)\"\n }\n },\n \"products\": {\n \"count\": {\n \"surface\": \"products.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's products table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"products.get\",\n \"remedy\": \"address a record by a known id (products.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"products.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's products table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"products.get\",\n \"remedy\": \"address a record by a known id (products.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"products.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no products rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a products update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"products.get\",\n \"remedy\": \"address a record by a known id (products.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"project_charges\": {\n \"count\": {\n \"surface\": \"project_charges.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's project_charges table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"project_charges.get\",\n \"remedy\": \"address a record by a known id (project_charges.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"project_charges.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's project_charges table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"project_charges.get\",\n \"remedy\": \"address a record by a known id (project_charges.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"project_charges.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the project_charges table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a project_charges update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"project_charges.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (project_charges.get(parentId, id) misses by construction)\"\n }\n },\n \"project_notes\": {\n \"count\": {\n \"surface\": \"project_notes.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's project_notes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"project_notes.get\",\n \"remedy\": \"address a record by a known id (project_notes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"project_notes.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's project_notes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"project_notes.get\",\n \"remedy\": \"address a record by a known id (project_notes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"project_notes.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the project_notes table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a project_notes update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"project_notes.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (project_notes.get(parentId, id) misses by construction)\"\n }\n },\n \"purchase_approvals\": {\n \"count\": {\n \"surface\": \"purchase_approvals.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's purchase_approvals table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"purchase_approvals.get\",\n \"remedy\": \"address a record by a known id (purchase_approvals.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"purchase_approvals.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's purchase_approvals table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"purchase_approvals.get\",\n \"remedy\": \"address a record by a known id (purchase_approvals.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"purchase_approvals.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no purchase_approvals rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a purchase_approvals update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"purchase_approvals.get\",\n \"remedy\": \"address a record by a known id (purchase_approvals.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"purchase_order_items\": {\n \"count\": {\n \"surface\": \"purchase_order_items.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's purchase_order_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"purchase_order_items.get\",\n \"remedy\": \"address a record by a known id (purchase_order_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"purchase_order_items.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's purchase_order_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"purchase_order_items.get\",\n \"remedy\": \"address a record by a known id (purchase_order_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"purchase_order_items.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the purchase_order_items table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a purchase_order_items update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"purchase_order_items.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (purchase_order_items.get(parentId, id) misses by construction)\"\n }\n },\n \"purchase_orders\": {\n \"count\": {\n \"surface\": \"purchase_orders.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's purchase_orders table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"purchase_orders.get\",\n \"remedy\": \"address a record by a known id (purchase_orders.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"purchase_orders.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's purchase_orders table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"purchase_orders.get\",\n \"remedy\": \"address a record by a known id (purchase_orders.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"purchase_orders.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no purchase_orders rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a purchase_orders update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"purchase_orders.get\",\n \"remedy\": \"address a record by a known id (purchase_orders.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"quote_items\": {\n \"count\": {\n \"surface\": \"quote_items.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's quote_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"quote_items.get\",\n \"remedy\": \"address a record by a known id (quote_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"quote_items.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's quote_items table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"quote_items.get\",\n \"remedy\": \"address a record by a known id (quote_items.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"quote_items.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the quote_items table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a quote_items update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"quote_items.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (quote_items.get(parentId, id) misses by construction)\"\n }\n },\n \"quote_locations\": {\n \"count\": {\n \"surface\": \"quote_locations.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's quote_locations table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"quote_locations.get\",\n \"remedy\": \"address a record by a known id (quote_locations.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"quote_locations.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's quote_locations table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"quote_locations.get\",\n \"remedy\": \"address a record by a known id (quote_locations.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"quote_locations.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the quote_locations table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a quote_locations update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"quote_locations.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (quote_locations.get(parentId, id) misses by construction)\"\n }\n },\n \"quote_templates\": {\n \"count\": {\n \"surface\": \"quote_templates.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's quote_templates table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"quote_templates.get\",\n \"remedy\": \"address a record by a known id (quote_templates.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"quote_templates.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's quote_templates table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"quote_templates.get\",\n \"remedy\": \"address a record by a known id (quote_templates.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"quotes\": {\n \"count\": {\n \"surface\": \"quotes.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's quotes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"quotes.get\",\n \"remedy\": \"address a record by a known id (quotes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"quotes.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's quotes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"quotes.get\",\n \"remedy\": \"address a record by a known id (quotes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"quotes.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no quotes rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a quotes update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"quotes.get\",\n \"remedy\": \"address a record by a known id (quotes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"resource_roles\": {\n \"count\": {\n \"surface\": \"resource_roles.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's resource_roles table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"resource_roles.get\",\n \"remedy\": \"address a record by a known id (resource_roles.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"resource_roles.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's resource_roles table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"resource_roles.get\",\n \"remedy\": \"address a record by a known id (resource_roles.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"resource_skills\": {\n \"count\": {\n \"surface\": \"resource_skills.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's resource_skills table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"resource_skills.get\",\n \"remedy\": \"address a record by a known id (resource_skills.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"resource_skills.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's resource_skills table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"resource_skills.get\",\n \"remedy\": \"address a record by a known id (resource_skills.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"resource_skills.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the resource_skills table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a resource_skills update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"resource_skills.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (resource_skills.get(parentId, id) misses by construction)\"\n }\n },\n \"resources\": {\n \"count\": {\n \"surface\": \"resources.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's resources table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"resources.get\",\n \"remedy\": \"address a record by a known id (resources.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"resources.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's resources table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"resources.get\",\n \"remedy\": \"address a record by a known id (resources.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"resources.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no resources rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a resources update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"resources.get\",\n \"remedy\": \"address a record by a known id (resources.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"service_call_task_resources\": {\n \"count\": {\n \"surface\": \"service_call_task_resources.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_call_task_resources table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_call_task_resources.get\",\n \"remedy\": \"address a record by a known id (service_call_task_resources.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"service_call_task_resources.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_call_task_resources table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_call_task_resources.get\",\n \"remedy\": \"address a record by a known id (service_call_task_resources.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"service_call_tasks\": {\n \"count\": {\n \"surface\": \"service_call_tasks.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_call_tasks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_call_tasks.get\",\n \"remedy\": \"address a record by a known id (service_call_tasks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"service_call_tasks.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_call_tasks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_call_tasks.get\",\n \"remedy\": \"address a record by a known id (service_call_tasks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"service_call_ticket_resources\": {\n \"count\": {\n \"surface\": \"service_call_ticket_resources.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_call_ticket_resources table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_call_ticket_resources.get\",\n \"remedy\": \"address a record by a known id (service_call_ticket_resources.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"service_call_ticket_resources.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_call_ticket_resources table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_call_ticket_resources.get\",\n \"remedy\": \"address a record by a known id (service_call_ticket_resources.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"service_call_tickets\": {\n \"count\": {\n \"surface\": \"service_call_tickets.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_call_tickets table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_call_tickets.get\",\n \"remedy\": \"address a record by a known id (service_call_tickets.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"service_call_tickets.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_call_tickets table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_call_tickets.get\",\n \"remedy\": \"address a record by a known id (service_call_tickets.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"service_calls\": {\n \"count\": {\n \"surface\": \"service_calls.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_calls table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_calls.get\",\n \"remedy\": \"address a record by a known id (service_calls.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"service_calls.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's service_calls table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"service_calls.get\",\n \"remedy\": \"address a record by a known id (service_calls.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"service_calls.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no service_calls rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a service_calls update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"service_calls.get\",\n \"remedy\": \"address a record by a known id (service_calls.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"services\": {\n \"count\": {\n \"surface\": \"services.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's services table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"services.get\",\n \"remedy\": \"address a record by a known id (services.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"services.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's services table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"services.get\",\n \"remedy\": \"address a record by a known id (services.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"services.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no services rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a services update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"services.get\",\n \"remedy\": \"address a record by a known id (services.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"skills\": {\n \"count\": {\n \"surface\": \"skills.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's skills table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"skills.get\",\n \"remedy\": \"address a record by a known id (skills.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"skills.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's skills table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"skills.get\",\n \"remedy\": \"address a record by a known id (skills.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"subscription_periods\": {\n \"count\": {\n \"surface\": \"subscription_periods.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's subscription_periods table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"subscription_periods.get\",\n \"remedy\": \"address a record by a known id (subscription_periods.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"subscription_periods.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's subscription_periods table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"subscription_periods.get\",\n \"remedy\": \"address a record by a known id (subscription_periods.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"subscriptions\": {\n \"count\": {\n \"surface\": \"subscriptions.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's subscriptions table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"subscriptions.get\",\n \"remedy\": \"address a record by a known id (subscriptions.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"subscriptions.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's subscriptions table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"subscriptions.get\",\n \"remedy\": \"address a record by a known id (subscriptions.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"subscriptions.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds no subscriptions rows for this API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — a subscriptions update target miss here is INCONCLUSIVE (empty-for-user, not a defect)\",\n \"authority\": \"subscriptions.get\",\n \"remedy\": \"address a record by a known id (subscriptions.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"ticket_change_request_approvals\": {\n \"count\": {\n \"surface\": \"ticket_change_request_approvals.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_change_request_approvals table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_change_request_approvals.get\",\n \"remedy\": \"address a record by a known id (ticket_change_request_approvals.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"ticket_change_request_approvals.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_change_request_approvals table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_change_request_approvals.get\",\n \"remedy\": \"address a record by a known id (ticket_change_request_approvals.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"ticket_charges\": {\n \"count\": {\n \"surface\": \"ticket_charges.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_charges table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_charges.get\",\n \"remedy\": \"address a record by a known id (ticket_charges.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"ticket_charges.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_charges table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_charges.get\",\n \"remedy\": \"address a record by a known id (ticket_charges.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"ticket_charges.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the ticket_charges table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a ticket_charges update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"ticket_charges.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (ticket_charges.get(parentId, id) misses by construction)\"\n }\n },\n \"ticket_note_webhooks\": {\n \"count\": {\n \"surface\": \"ticket_note_webhooks.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_note_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_note_webhooks.get\",\n \"remedy\": \"address a record by a known id (ticket_note_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"ticket_note_webhooks.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_note_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_note_webhooks.get\",\n \"remedy\": \"address a record by a known id (ticket_note_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"ticket_note_webhooks.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the ticket_note_webhooks table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a ticket_note_webhooks update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"ticket_note_webhooks.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (ticket_note_webhooks.get(parentId, id) misses by construction)\"\n }\n },\n \"ticket_notes\": {\n \"count\": {\n \"surface\": \"ticket_notes.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_notes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_notes.get\",\n \"remedy\": \"address a record by a known id (ticket_notes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"ticket_notes.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_notes table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_notes.get\",\n \"remedy\": \"address a record by a known id (ticket_notes.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"ticket_notes.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the ticket_notes table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a ticket_notes update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"ticket_notes.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (ticket_notes.get(parentId, id) misses by construction)\"\n }\n },\n \"ticket_secondary_resources\": {\n \"count\": {\n \"surface\": \"ticket_secondary_resources.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_secondary_resources table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_secondary_resources.get\",\n \"remedy\": \"address a record by a known id (ticket_secondary_resources.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"ticket_secondary_resources.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_secondary_resources table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_secondary_resources.get\",\n \"remedy\": \"address a record by a known id (ticket_secondary_resources.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n }\n },\n \"ticket_webhooks\": {\n \"count\": {\n \"surface\": \"ticket_webhooks.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_webhooks.get\",\n \"remedy\": \"address a record by a known id (ticket_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"query\": {\n \"surface\": \"ticket_webhooks.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant's ticket_webhooks table is EMPTY FOR THIS API USER (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows) — a 0/empty result here is INCONCLUSIVE (empty-for-user, not tenant-level absence)\",\n \"authority\": \"ticket_webhooks.get\",\n \"remedy\": \"address a record by a known id (ticket_webhooks.get) or verify from a tenant user that owns the table — do not treat the 0 as tenant-level absence\"\n },\n \"update\": {\n \"surface\": \"ticket_webhooks.update\",\n \"kind\": \"unreadable-scoped-child\",\n \"note\": \"the ticket_webhooks table is UNREADABLE for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521 — scoped child of an empty/unowned parent) — a ticket_webhooks update target miss here is INCONCLUSIVE (the target is unreadable, not absent)\",\n \"authority\": \"ticket_webhooks.get\",\n \"remedy\": \"verify the parent first (the parent table's authority op) — for this API user the child target is unreadable (ticket_webhooks.get(parentId, id) misses by construction)\"\n }\n },\n \"time_entries\": {\n \"count\": {\n \"surface\": \"time_entries.count\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the UNFILTERED time_entries read is 0 rows for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — the visibility class is owned-only (unfiltered-blind); DATA EXISTS: postedWithin(2026-10-01..06) live 2026-10-06 returned 12 unposted rows for this user — do not treat the unfiltered 0 as tenant-level absence\",\n \"authority\": \"time_entries.get\",\n \"remedy\": \"read time entries through a bounded window (time_entries.postedWithin / the window helpers) or a filterable field; a record addressed by a known id is authoritative (time_entries.get)\"\n },\n \"query\": {\n \"surface\": \"time_entries.query\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the UNFILTERED time_entries read is 0 rows for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — the visibility class is owned-only (unfiltered-blind); DATA EXISTS: postedWithin(2026-10-01..06) live 2026-10-06 returned 12 unposted rows for this user — do not treat the unfiltered 0 as tenant-level absence\",\n \"authority\": \"time_entries.get\",\n \"remedy\": \"read time entries through a bounded window (time_entries.postedWithin / the window helpers) or a filterable field; a record addressed by a known id is authoritative (time_entries.get)\"\n },\n \"update\": {\n \"surface\": \"time_entries.update\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the UNFILTERED time_entries read is 0 rows for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — the visibility class is owned-only (unfiltered-blind); DATA EXISTS: postedWithin(2026-10-01..06) live 2026-10-06 returned 12 unposted rows for this user — do not treat the unfiltered 0 as tenant-level absence\",\n \"authority\": \"time_entries.get\",\n \"remedy\": \"read time entries through a bounded window (time_entries.postedWithin / the window helpers) or a filterable field; a record addressed by a known id is authoritative (time_entries.get)\"\n }\n },\n \"resource_time_off_balances\": {\n \"getByYear\": {\n \"surface\": \"resource_time_off_balances.getByYear\",\n \"kind\": \"tenant-empty-for-user\",\n \"note\": \"the tenant holds NO time-off balances for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521) — the NOT_FOUND here is the correct answer for an empty table, not a defect (the T1 wall)\",\n \"authority\": null,\n \"remedy\": \"the API user holds no balances — use the UI or a tenant user with balance visibility\"\n }\n },\n \"resource_time_off_additional\": {\n \"getByResource\": {\n \"surface\": \"resource_time_off_additional.getByResource\",\n \"kind\": \"shape-drift\",\n \"note\": \"known shape drift (W-D2, ww29 (australia-nz) live 2026-10-04): the vendor answers resource_time_off_additional.getByResource with a shape the vendored spec does not describe — a typed INVALID_RESPONSE here is the expected drift, not a defect\",\n \"authority\": null,\n \"remedy\": \"read the data from the sibling ops (resource_time_off_balances) or by id — the drift is in the response envelope, not the data\"\n }\n },\n \"ticket_checklist_libraries\": {\n \"create\": {\n \"surface\": \"ticket_checklist_libraries.create\",\n \"kind\": \"shape-drift\",\n \"note\": \"known shape drift (W-A7, ww29 (australia-nz) live 2026-10-04): the vendor's create response shape for ticket_checklist_libraries drifts from the vendored spec — a typed INVALID_RESPONSE here is the expected drift, not a defect\",\n \"authority\": null,\n \"remedy\": \"verify the created record by id (ticket_checklist_libraries.get) — the create may have succeeded despite the drifted envelope\"\n }\n }\n};\n\n/**\n * The known-unusable-op pointer sentences keyed by operation (issue #14):\n * the note rides on the op's typed error (details.pointerNote) and on the\n * record's metadata.pointerNote (the describe channel). No behaviour change\n * — the status/error code are untouched; the pointer routes the caller to\n * the operation that works.\n */\nexport const POINTER_NOTES: Record<string, string> = {\n \"ticket_history.query\": \"W1 (ww29 (australia-nz) live 2026-10-04; vendor contract change live-verified 2026-10-06): the vendor requires ticket_history.query to be supplied with exactly ONE ticketID-equals filter — an unfiltered call 500s by contract (10-06 text: \\\"When querying the TicketHistory entity you are required to supply one and only one ticketID equals filter\\\"). WITH the filter the query WORKS (live 2026-10-06: rows returned, hasMore true — a single {op:'eq', field:'ticketID', value:<id>} condition; the filter vocabulary is eq/noteq/gt/gte/lt/lte/beginsWith/endsWith/contains/exist/notExist/in/notIn/and/or). tickets.timeline / tickets.fullContext remain the convenient composites; raw history rows come from the filtered query.\",\n \"time_entries.create\": \"W-A3 (ww29 (australia-nz) live 2026-10-04; drift re-verified 2026-10-06): the vendor now refuses ALL time-entry writes for this API-only user with \\\"API-only user cannot be selected for this field\\\" (10-04 text: \\\"The specified AssignedResourceID and AssignedRoleID combination is not currently defined\\\"). UNSATISFIABLE for an API-only integration user: the resources table is blind (0 rows) and the only selectable resource is the user's own API-only record, which the vendor refuses. createForResource — stage-11 PROVEN (8 live creates, 10-04) — is walled by the SAME drift (confirm-100 receipt 2026-10-06). Tenant evidence that valid pairs exist: postedWithin rows (resourceID 31131373 / 29869529 with roleID 29682834) — human resources the API user cannot select.\",\n \"time_entries.getPosted\": \"W-D3 (ww29 (australia-nz) live 2026-10-04, re-verified 2026-10-04): this zone's TimeEntry entity exposes NO posted-state filter field — the vendor rejects postingStatus, postedDate and status with \\\"Unable to find X in the TimeEntry Entity\\\" (live field-existence oracle 2026-10-04: only dateWorked / resourceID / ticketID / taskID resolve as filter fields). A 500 here is the known wall, not a transient fault: posted cannot be filtered server-side on this zone — use time_entries.postedWithin (the dateWorked window, live-verified working) or read time_entries.query and derive posted-state from the fields your zone's entity exposes\",\n \"time_entries.getUnposted\": \"W-D3 (ww29 (australia-nz) live 2026-10-04, re-verified 2026-10-04): this zone's TimeEntry entity exposes NO posted-state filter field — the vendor rejects postingStatus, postedDate and status with \\\"Unable to find X in the TimeEntry Entity\\\" (live field-existence oracle 2026-10-04: only dateWorked / resourceID / ticketID / taskID resolve as filter fields). A 500 here is the known wall, not a transient fault: unposted cannot be filtered server-side on this zone — use time_entries.postedWithin (the dateWorked window, live-verified working) or read time_entries.query and derive posted-state from the fields your zone's entity exposes\",\n \"authenticate.get\": \"W2: authenticate.get is DESIGNATOR-ONLY — it returns the designator identity, not a tenant data surface; a miss/empty here is not a data-empty signal (no emptyReason is attached by design — a false reason would be worse than none)\"\n};\n/**\n * The blind-surface inventory (issue #11) — the 116-surface discovery\n * artifact (plan.reachability, campaign transfer) served ZERO-wire by\n * operations.blindSurfaces. The 6 pinned blindSurfaces stamps keep their\n * byte-identical wording (the pinned trio's remedies.byResource entries are\n * the pin's own note text); the 69 blind / 46 data-full / 1 vendor-500\n * split is zone-specific (ww29) — the zone label travels with it.\n */\nexport const BLIND_SURFACE_INVENTORY: BlindSurfaceInventory = {\n \"zone\": \"ww29\",\n \"label\": \"australia-nz\",\n \"verifiedAt\": \"2026-10-03\",\n \"discoveredAt\": \"2026-10-04\",\n \"surfaces\": [\n {\n \"resource\": \"appointments\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"appointments.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). appointments.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"billing_codes\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unowned-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"billing_codes.get\",\n \"note\": \"billing_codes count/query are pinned blind in this zone (plan.blindSurfaces pin, byte-identical sentinel) — the discovery sweep confirmed 0 rows unfiltered (limit-2 read, marker FULL100-SEED-1791096521); get(id) is the authority.\",\n \"proof\": \"live-verified\"\n },\n {\n \"resource\": \"billing_items\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"billing_items.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). billing_items.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"change_request_links\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"change_request_links.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). change_request_links.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"checklist_libraries\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"checklist_libraries.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"checklist_library_checklist_items\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"checklist_library_checklist_items.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"classification_icons\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"classification_icons.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). classification_icons.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"companies\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unowned-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"companies.get\",\n \"note\": \"companies count/query are pinned blind in this zone (plan.blindSurfaces pin, byte-identical sentinel) — the discovery sweep confirmed 0 rows unfiltered (limit-2 read, marker FULL100-SEED-1791096521); get(id) is the authority.\",\n \"proof\": \"live-verified\"\n },\n {\n \"resource\": \"company_alerts\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"company_alerts.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). company_alerts.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"company_locations\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"company_locations.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"company_notes\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"company_notes.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). company_notes.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"company_site_configurations\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"company_site_configurations.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). company_site_configurations.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"company_webhooks\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"company_webhooks.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). company_webhooks.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_item_billing_product_associations\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"configuration_item_billing_product_associations.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). configuration_item_billing_product_associations.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_item_categories\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"configuration_item_categories.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_item_category_udf_associations\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"configuration_item_category_udf_associations.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_item_dns_records\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"configuration_item_dns_records.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_item_notes\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"configuration_item_notes.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_item_related_items\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"configuration_item_related_items.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_item_ssl_subject_alternative_names\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"configuration_item_ssl_subject_alternative_names.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_item_types\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"configuration_item_types.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). configuration_item_types.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_item_webhooks\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"configuration_item_webhooks.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). configuration_item_webhooks.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"configuration_items\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"configuration_items.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). configuration_items.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contact_group_contacts\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"contact_group_contacts.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contact_groups\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"contact_groups.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contact_webhooks\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contact_webhooks.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contact_webhooks.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contacts\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contacts.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contacts.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_billing_rules\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_billing_rules.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_billing_rules.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_block_hour_factors\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_block_hour_factors.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_block_hour_factors.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_blocks\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_blocks.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_blocks.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_charges\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_charges.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_charges.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_exclusion_billing_codes\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_exclusion_billing_codes.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_exclusion_billing_codes.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_exclusion_roles\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_exclusion_roles.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_exclusion_roles.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_exclusion_set_excluded_roles\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"contract_exclusion_set_excluded_roles.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_exclusion_set_excluded_work_types\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 1,\n \"authority\": \"contract_exclusion_set_excluded_work_types.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 1 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_exclusion_sets\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 1,\n \"authority\": \"contract_exclusion_sets.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 1 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_milestones\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_milestones.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_milestones.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_notes\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_notes.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_notes.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_rates\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_rates.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_rates.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_retainers\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_retainers.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_retainers.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_role_costs\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_role_costs.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_role_costs.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_service_bundle_units\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_service_bundle_units.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_service_bundle_units.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_service_bundles\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_service_bundles.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_service_bundles.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_service_units\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_service_units.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_service_units.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_services\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_services.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_services.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contract_ticket_purchases\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contract_ticket_purchases.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contract_ticket_purchases.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"contracts\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"contracts.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). contracts.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"countries\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"countries.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). countries.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"departments\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"departments.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"domain_registrars\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"domain_registrars.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"expense_item_attachments\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"expense_item_attachments.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"expense_items\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"expense_items.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). expense_items.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"expense_reports\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"expense_reports.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). expense_reports.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"holiday_sets\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"holiday_sets.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"holidays\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"holidays.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"inventory_products\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 1,\n \"authority\": \"inventory_products.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 1 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"invoices\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"invoices.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). invoices.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"notification_history\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"notification_history.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). notification_history.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"opportunities\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"opportunities.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"opportunity_attachments\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"opportunity_attachments.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"opportunity_categories\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"opportunity_categories.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"phases\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"phases.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"product_vendors\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"product_vendors.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). product_vendors.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"products\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"products.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). products.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"project_charges\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"project_charges.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). project_charges.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"project_notes\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"project_notes.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). project_notes.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"projects\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"projects.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"purchase_approvals\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"purchase_approvals.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). purchase_approvals.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"purchase_order_item_receiving\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"purchase_order_item_receiving.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"purchase_order_items\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"purchase_order_items.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). purchase_order_items.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"purchase_orders\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"purchase_orders.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). purchase_orders.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"quote_items\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"quote_items.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). quote_items.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"quote_locations\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"quote_locations.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). quote_locations.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"quote_templates\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"quote_templates.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). quote_templates.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"quotes\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"quotes.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). quotes.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"resource_role_queues\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"resource_role_queues.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"resource_roles\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"resource_roles.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). resource_roles.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"resource_skills\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"resource_skills.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). resource_skills.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"resource_time_off_approvers\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"resource_time_off_approvers.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"resources\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"resources.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). resources.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"roles\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"roles.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"service_call_task_resources\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"service_call_task_resources.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). service_call_task_resources.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"service_call_tasks\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"service_call_tasks.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). service_call_tasks.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"service_call_ticket_resources\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"service_call_ticket_resources.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). service_call_ticket_resources.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"service_call_tickets\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"service_call_tickets.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). service_call_tickets.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"service_calls\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"service_calls.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). service_calls.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"service_level_agreement_results\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"service_level_agreement_results.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"services\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"services.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). services.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"skills\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"skills.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). skills.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"subscription_periods\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"subscription_periods.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). subscription_periods.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"subscriptions\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"subscriptions.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). subscriptions.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"survey_results\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"survey_results.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"surveys\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"surveys.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"tag_aliases\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"tag_aliases.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"tag_groups\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"tag_groups.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"tags\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"tags.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"task_secondary_resources\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"task_secondary_resources.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"tasks\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"tasks.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_additional_configuration_items\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"ticket_additional_configuration_items.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_additional_contacts\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"ticket_additional_contacts.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_attachments\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"ticket_attachments.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_categories\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"ticket_categories.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_category_field_defaults\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"ticket_category_field_defaults.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_change_request_approvals\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"ticket_change_request_approvals.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). ticket_change_request_approvals.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_charges\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"ticket_charges.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). ticket_charges.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_checklist_items\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"ticket_checklist_items.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_history\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": null,\n \"authority\": \"ticket_history.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered query 500s at the vendor (W1: the TicketHistory query requires a parentId the unfiltered call cannot supply) — no row count observable; use tickets.timeline / tickets.fullContext for ticket history data.\",\n \"proof\": \"live-verified\"\n },\n {\n \"resource\": \"ticket_note_attachments\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"ticket_note_attachments.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_note_webhooks\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"ticket_note_webhooks.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). ticket_note_webhooks.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_notes\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"ticket_notes.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). ticket_notes.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_secondary_resources\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"ticket_secondary_resources.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). ticket_secondary_resources.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"ticket_webhooks\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"ticket_webhooks.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). ticket_webhooks.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"tickets\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unowned-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"tickets.get\",\n \"note\": \"tickets count/query are pinned blind in this zone (plan.blindSurfaces pin, byte-identical sentinel) — the discovery sweep confirmed 0 rows unfiltered (limit-2 read, marker FULL100-SEED-1791096521); get(id) is the authority.\",\n \"proof\": \"live-verified\"\n },\n {\n \"resource\": \"time_entries\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unfiltered-blind\",\n \"unfilteredRows\": 0,\n \"authority\": \"time_entries.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 0 rows — INCONCLUSIVE (tenant-empty-for-user vs blind for this API user; a 0/empty result here proves nothing). time_entries.get is the authority for a specific record.\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"time_entry_attachments\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"time_entry_attachments.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n },\n {\n \"resource\": \"time_off_requests\",\n \"ops\": [\n \"count\",\n \"query\"\n ],\n \"kind\": \"unknown\",\n \"unfilteredRows\": 2,\n \"authority\": \"time_off_requests.get\",\n \"note\": \"ww29 discovery sweep (marker FULL100-SEED-1791096521, 2026-10-04): the unfiltered limit-2 read returned 2 row(s) — data-full for this API user (unfiltered reads are safe here; no blind class assigned).\",\n \"proof\": \"discovery-sweep\"\n }\n ],\n \"counts\": {\n \"total\": 116,\n \"dataFull\": 46,\n \"blind\": 69,\n \"pinned\": 6\n },\n \"dataFull\": [\n \"checklist_libraries\",\n \"checklist_library_checklist_items\",\n \"company_locations\",\n \"configuration_item_categories\",\n \"configuration_item_category_udf_associations\",\n \"configuration_item_dns_records\",\n \"configuration_item_notes\",\n \"configuration_item_related_items\",\n \"configuration_item_ssl_subject_alternative_names\",\n \"contact_group_contacts\",\n \"contact_groups\",\n \"contract_exclusion_set_excluded_roles\",\n \"contract_exclusion_set_excluded_work_types\",\n \"contract_exclusion_sets\",\n \"departments\",\n \"domain_registrars\",\n \"expense_item_attachments\",\n \"holiday_sets\",\n \"holidays\",\n \"inventory_products\",\n \"opportunities\",\n \"opportunity_attachments\",\n \"opportunity_categories\",\n \"phases\",\n \"projects\",\n \"purchase_order_item_receiving\",\n \"resource_role_queues\",\n \"resource_time_off_approvers\",\n \"roles\",\n \"service_level_agreement_results\",\n \"survey_results\",\n \"surveys\",\n \"tag_aliases\",\n \"tag_groups\",\n \"tags\",\n \"task_secondary_resources\",\n \"tasks\",\n \"ticket_additional_configuration_items\",\n \"ticket_additional_contacts\",\n \"ticket_attachments\",\n \"ticket_categories\",\n \"ticket_category_field_defaults\",\n \"ticket_checklist_items\",\n \"ticket_note_attachments\",\n \"time_entry_attachments\",\n \"time_off_requests\"\n ],\n \"remedies\": {\n \"generic\": \"on a 0/empty result from an unfiltered read: the result is INCONCLUSIVE for this API user (tenant-empty-for-user vs blind) — address a record by a known id via the authority op (e.g. <resource>.get), verify from a tenant user that owns the table, or run operations.probeReachability (caller-opted, capped) on this tenant to re-discover.\",\n \"byResource\": {\n \"billing_codes\": \"the UNFILTERED billing_codes count/query surface is blind in ww29 (live-verified). Query with `useType` (1 = general, 3 = internal) + `isActive` filters — filtered queries return real data; time_entries.createForResource always applies them for you. get(id) is the authority.\",\n \"companies\": \"companies count/query return 0/empty for companies not owned by the caller (ww29, live-verified: 0 before AND after a proven live create). A 0/empty result on this surface proves nothing — get(id) is the authority: it returns the record even while count/query are blind.\",\n \"tickets\": \"the UNFILTERED tickets count/query surface is blind in ww29 (live-verified: 0 before AND after a proven live create). FILTERED queries return data (live-verified: 3 open tickets via a companyID+status filter) — a filtered empty result is a TRUE absence, never a sentinel. An unfiltered 0/empty result proves nothing — get(id) is the authority.\"\n }\n }\n};\n\n/**\n * The probe defaults (issue #11): the hard wire cap (80), the default cap\n * (40), the limit bounds (1-2, default 2) and the default target set — the\n * derived non-data-full rows (the 70 surfaces a re-discovery sweep starts\n * from: the 69 blind + ticket_history). Served zero-wire; the gate\n * re-derives the target set, so it cannot drift from the inventory.\n */\nexport const REACHABILITY_PROBE_DEFAULTS: ProbeDefaults = {\n \"defaultCap\": 40,\n \"hardCap\": 80,\n \"limitDefault\": 2,\n \"limitMax\": 2,\n \"defaultTargets\": [\n \"appointments\",\n \"billing_codes\",\n \"billing_items\",\n \"change_request_links\",\n \"classification_icons\",\n \"companies\",\n \"company_alerts\",\n \"company_notes\",\n \"company_site_configurations\",\n \"company_webhooks\",\n \"configuration_item_billing_product_associations\",\n \"configuration_item_types\",\n \"configuration_item_webhooks\",\n \"configuration_items\",\n \"contact_webhooks\",\n \"contacts\",\n \"contract_billing_rules\",\n \"contract_block_hour_factors\",\n \"contract_blocks\",\n \"contract_charges\",\n \"contract_exclusion_billing_codes\",\n \"contract_exclusion_roles\",\n \"contract_milestones\",\n \"contract_notes\",\n \"contract_rates\",\n \"contract_retainers\",\n \"contract_role_costs\",\n \"contract_service_bundle_units\",\n \"contract_service_bundles\",\n \"contract_service_units\",\n \"contract_services\",\n \"contract_ticket_purchases\",\n \"contracts\",\n \"countries\",\n \"expense_items\",\n \"expense_reports\",\n \"invoices\",\n \"notification_history\",\n \"product_vendors\",\n \"products\",\n \"project_charges\",\n \"project_notes\",\n \"purchase_approvals\",\n \"purchase_order_items\",\n \"purchase_orders\",\n \"quote_items\",\n \"quote_locations\",\n \"quote_templates\",\n \"quotes\",\n \"resource_roles\",\n \"resource_skills\",\n \"resources\",\n \"service_call_task_resources\",\n \"service_call_tasks\",\n \"service_call_ticket_resources\",\n \"service_call_tickets\",\n \"service_calls\",\n \"services\",\n \"skills\",\n \"subscription_periods\",\n \"subscriptions\",\n \"ticket_change_request_approvals\",\n \"ticket_charges\",\n \"ticket_history\",\n \"ticket_note_webhooks\",\n \"ticket_notes\",\n \"ticket_secondary_resources\",\n \"ticket_webhooks\",\n \"tickets\",\n \"time_entries\"\n ]\n};\n\n/**\n * The zone-fact create-guidance catalog (issue #12) — the 92-entity stage-\n * 11 apply-matrix artifact (campaign transfer; marker FULL100W-1791110339)\n * served ZERO-wire by operations.createGuidance. One row per plan create op:\n * the live-proven required-field prefix (vendor-demand order), the\n * structured blocker (the wall class + remedy), the EXACT vendor message\n * text (never paraphrased), and the spec-derived delete boundary (W-A1).\n * The kind distribution is zone-specific (ww29) — the zone label travels\n * with it.\n */\nexport const CREATE_GUIDANCE: CreateGuidanceReport = {\n \"zone\": \"ww29\",\n \"label\": \"australia-nz\",\n \"verifiedAt\": \"2026-10-03\",\n \"rows\": [\n {\n \"resource\": \"appointments\",\n \"createOp\": \"appointments.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"endDateTime\",\n \"title\",\n \"startDateTime\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"change_request_links\",\n \"createOp\": \"change_request_links.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"checklist_libraries\",\n \"createOp\": \"checklist_libraries.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"entityType\",\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"checklist_library_checklist_items\",\n \"createOp\": \"checklist_library_checklist_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"itemName\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"companies\",\n \"createOp\": \"companies.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"companyName\",\n \"companyType\",\n \"phone\",\n \"ownerResourceID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 companies); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"CONFIG_ERROR\\\",\\\"category\\\":\\\"validation\\\",\\\"retryable\\\":false,\\\"operation\\\":\\\"companies.delete\\\",\\\"message\\\":\\\"invoke: unknown operation \\\\\\\"companies.delete\\\\\\\" — it is not in the capability reg\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for companies (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"company_alerts\",\n \"createOp\": \"company_alerts.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"alertText\",\n \"alertTypeID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"company_alerts.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"company_locations\",\n \"createOp\": \"company_locations.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"company_notes\",\n \"createOp\": \"company_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"endDateTime\",\n \"actionType\",\n \"startDateTime\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"company_notes.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"7ef594cb-74dd-4a29-a7f7-2a5d5eb515f0\\\",\\\"message\\\":\\\"Value does not exist for the required \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for company_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"company_webhooks\",\n \"createOp\": \"company_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"webhookUrl\",\n \"deactivationUrl\",\n \"sendThresholdExceededNotification\",\n \"secretKey\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"company_webhooks.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"configuration_item_billing_product_associations\",\n \"createOp\": \"configuration_item_billing_product_associations.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"billingProductID\",\n \"effectiveDate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the billingProductID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the billingProductID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"billingProductID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"configuration_item_categories\",\n \"createOp\": \"configuration_item_categories.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"displayColorRgb\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for displayColorRgb .\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the displayColorRgb reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"displayColorRgb\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for displayColorRgb .\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"configuration_item_categories.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"fc4cb7ec-610c-47a3-8625-29b24f253601\\\",\\\"message\\\":\\\"Could not convert stri\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for configuration_item_categories (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"configuration_item_category_udf_associations\",\n \"createOp\": \"configuration_item_category_udf_associations.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"userDefinedFieldDefinitionID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 '\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"configuration_item_notes\",\n \"createOp\": \"configuration_item_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"description\",\n \"noteType\",\n \"title\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for noteType .\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the noteType reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"noteType\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for noteType .\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"configuration_item_notes.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"ec6c5845-d79a-43ec-b4e3-1a0a1d01cc8f\\\",\\\"message\\\":\\\"Field 'title': Missing Requ\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"configuration_item_related_items\",\n \"createOp\": \"configuration_item_related_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"relatedConfigurationItemID\",\n \"relationship\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Reference value on field: configurationItemID of type: ConfigurationItem does not exist or is invalid.\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"configurationItemID\"\n },\n \"vendorEvidence\": [\n \"Reference value on field: configurationItemID of type: ConfigurationItem does not exist or is invalid.\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"configuration_item_related_items.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"20327421-a229-4361-bfe9-c527ec75ae5a\\\",\\\"message\\\":\\\"Reference value on \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"configuration_item_types\",\n \"createOp\": \"configuration_item_types.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"configuration_item_types.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"configuration_item_webhooks\",\n \"createOp\": \"configuration_item_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"webhookUrl\",\n \"deactivationUrl\",\n \"secretKey\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"configuration_items\",\n \"createOp\": \"configuration_items.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"companyID\",\n \"productID\",\n \"isActive\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for configuration_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contact_group_contacts\",\n \"createOp\": \"contact_group_contacts.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contact_groups\",\n \"createOp\": \"contact_groups.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contact_webhooks\",\n \"createOp\": \"contact_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"webhookUrl\",\n \"deactivationUrl\",\n \"sendThresholdExceededNotification\",\n \"secretKey\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"contact_webhooks.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contacts\",\n \"createOp\": \"contacts.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"firstName\",\n \"lastName\",\n \"companyID\",\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_billing_rules\",\n \"createOp\": \"contract_billing_rules.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"productID\",\n \"isActive\",\n \"startDate\",\n \"determineUnits\",\n \"createChargesAsBillable\",\n \"includeItemsInChargeDescription\",\n \"isDailyProrationEnabled\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"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.' — a product with an ELIGIBLE (non-Standard) BillingType is required; the products table is blind for this API user — UNSATISFIABLE for this user. (10-04 ladder had stopped at isDailyProrationEnabled + 'productID [1] is invalid. Products with a'.)\",\n \"remedy\": \"a product with a non-Standard BillingType is required (products table blind for this user) — provision/read an eligible product in the Autotask UI or use a user where the products table is visible\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_block_hour_factors\",\n \"createOp\": \"contract_block_hour_factors.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"roleID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): write path proven via the vendor's unique-key wall — 'A ContractBlockHourFactor for this roleID and contractID combination already exists' (pair (30131842, 29685291) pre-existing from the rates attach). Fields roleID (+ the unique key).\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_blocks\",\n \"createOp\": \"contract_blocks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\",\n \"startDate\",\n \"endDate\",\n \"datePurchased\",\n \"hours\",\n \"hourlyRate\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114389. TYPE GATE: parent MUST be type 4 (Block hours) — 'This ContractBlock must reference a Contract of type 4 (Block hours) with contractID'. Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_blocks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_charges\",\n \"createOp\": \"contract_charges.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"unitQuantity\",\n \"datePurchased\",\n \"chargeType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_exclusion_billing_codes\",\n \"createOp\": \"contract_exclusion_billing_codes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field billingCodeID.' — the billing-allocation table is blind for this API user (no resolvable allocation code for this user's contracts) — UNSATISFIABLE for this user.\",\n \"remedy\": \"an allocation code (billingCodeID) readable by this user is required (table blind) — provision in the Autotask UI or use a user where allocation codes are visible\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_exclusion_roles\",\n \"createOp\": \"contract_exclusion_roles.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"roleID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 187; field roleID. Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_exclusion_set_excluded_roles\",\n \"createOp\": \"contract_exclusion_set_excluded_roles.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"excludedRoleID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — batch1-final recovery, id 3; the surviving per-resource receipts predate the recovery)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"csxroles: {\\\"id\\\": 3, \\\"final\\\": \\\"RECOVERED\\\"} (batch1-final.json) — verify-gone=True (batch1-final.log)\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_exclusion_set_excluded_work_types\",\n \"createOp\": \"contract_exclusion_set_excluded_work_types.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"excludedWorkTypeID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the excludedWorkTypeID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the excludedWorkTypeID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"excludedWorkTypeID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_exclusion_sets\",\n \"createOp\": \"contract_exclusion_sets.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_milestones\",\n \"createOp\": \"contract_milestones.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\",\n \"dateDue\",\n \"amount\",\n \"isInitialPayment\",\n \"status\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 1338. TYPE GATE (vendor): the parent contract MUST be type 3 (Fixed Price) — 'ContractMilestones may only have a contractID linking to Contracts of type 3 (Fixed Price)'. Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_milestones (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_notes\",\n \"createOp\": \"contract_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\",\n \"description\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 35573321 under contract 30131842; fields title + description. Residue (no vendor DELETE).\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_rates\",\n \"createOp\": \"contract_rates.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"contractHourlyRate\",\n \"roleID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30083427; fields contractHourlyRate + roleID (an owned/visible role). Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_rates (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_retainers\",\n \"createOp\": \"contract_retainers.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\",\n \"startDate\",\n \"endDate\",\n \"datePurchased\",\n \"amount\",\n \"status\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114390. TYPE GATE: parent MUST be type 6 (Retainer). Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_retainers (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_role_costs\",\n \"createOp\": \"contract_role_costs.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"rate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"resource-role-pair\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'The specified resourceID and roleID combination is not currently defined.' — a currently-DEFINED (resource, role) assignment is required; the resource_roles table is blind for this user (0 rows) — same pair-validation family as W-A3; UNSATISFIABLE for this user.\",\n \"remedy\": \"a currently-DEFINED (resource, role) assignment is required (resource_roles blind for this user) — same family as W-A3; use a user with readable assignments or manage role costs in the Autotask UI\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_role_costs (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_service_adjustments\",\n \"createOp\": \"contract_service_adjustments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"effectiveDate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"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 — '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) — UNSATISFIABLE for this user.\",\n \"remedy\": \"an ACTIVE serviceID visible to this API user is required (services table blind for this user) — provision the active service in the Autotask UI or use a user where services are readable; parent must be type 7 (Recurring) or 'umbrella'\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_service_bundle_adjustments\",\n \"createOp\": \"contract_service_bundle_adjustments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"effectiveDate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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 — 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) — '…with a contractID that is not of type recurring Service'. VENDOR-FIX (response shape) required.\",\n \"remedy\": \"vendor response-shape fix required (W-A7-class 200 drift) — treat the INVALID_RESPONSE as the typed wall; parent must be type 7 (Recurring Services); manage the adjustment in the Autotask UI meanwhile\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"Expected OperationResultModel { itemId } (or { id }); got a different shape\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_service_bundles\",\n \"createOp\": \"contract_service_bundles.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceBundleID.' — the service-bundles table is blind for this API user — UNSATISFIABLE for this user.\",\n \"remedy\": \"a service-bundles-table record visible to this user is required (table blind, 0 rows) — provision in the Autotask UI or use a user where the table is visible\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_services\",\n \"createOp\": \"contract_services.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382): 'Value does not exist for the required field serviceID.' — the services table is blind for this API user (0 rows; no readable service id) — UNSATISFIABLE for this user.\",\n \"remedy\": \"a services-table record visible to this user is required (table blind, 0 rows) — provision in the Autotask UI or use a user where the table is visible\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contract_ticket_purchases\",\n \"createOp\": \"contract_ticket_purchases.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"ticketsPurchased\",\n \"startDate\",\n \"endDate\",\n \"datePurchased\",\n \"perTicketRate\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 30114391. TYPE GATE: parent MUST be type 8 (PerTicket incident) — 'The Contract associated by contractID must be of type PerTicket (incident)'. Residue.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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: \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contract_ticket_purchases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"contracts\",\n \"createOp\": \"contracts.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"status\",\n \"contractType\",\n \"contractName\",\n \"startDate\",\n \"endDate\",\n \"timeReportingRequiresStartAndStopTimes\",\n \"companyID\",\n \"estimatedRevenue\",\n \"estimatedHours\",\n \"estimatedCost\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100, marker CONF100-1791187382): the W-A6 'blind parent' was companyID — 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); type 5 is an invalid picklist value. Type-specific extra fields: types 1/3/4/6/8 require estimatedRevenue (type 1 additionally estimatedHours + estimatedCost); type 7 additionally contractPeriodType (2 valid) + setupFee. Proven ids 30131842-30131847 (residue — no vendor DELETE for contracts).\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\",\n \"{\\\"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\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for contracts (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"departments\",\n \"createOp\": \"departments.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"primaryLocationID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for primaryLocationID.\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the primaryLocationID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"primaryLocationID\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for primaryLocationID.\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"departments.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"4197e8a1-0411-45cb-b4a1-e770f4bae5e9\\\",\\\"message\\\":\\\"Value does not reference an existing ent\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for departments (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"domain_registrars\",\n \"createOp\": \"domain_registrars.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 domain_registrars); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"CONFIG_ERROR\\\",\\\"category\\\":\\\"validation\\\",\\\"retryable\\\":false,\\\"operation\\\":\\\"domain_registrars.delete\\\",\\\"message\\\":\\\"invoke: unknown operation \\\\\\\"domain_registrars.delete\\\\\\\" — it is not in th\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for domain_registrars (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"expense_item_attachments\",\n \"createOp\": \"expense_item_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"message\": \"Field 'Type': Missing Required Field: Type.\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\",\n \"referenceField\": \"Type\"\n },\n \"vendorEvidence\": [\n \"Field 'Type': Missing Required Field: Type.\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"expense_item_attachments.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"c4c16666-8398-48ea-88e2-fd6236d1a447\\\",\\\"message\\\":\\\"Field 'Type': Missing Requi\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"expense_items\",\n \"createOp\": \"expense_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"paymentType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — the expense_reports 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for expense_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"expense_reports\",\n \"createOp\": \"expense_reports.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"weekEnding\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for expense_reports (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"holiday_sets\",\n \"createOp\": \"holiday_sets.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"holidaySetName\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"holidays\",\n \"createOp\": \"holidays.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"holidayName\",\n \"holidayDate\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"inventory_products\",\n \"createOp\": \"inventory_products.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"productID\",\n \"quantityMaximum\",\n \"inventoryLocationID\",\n \"quantityMinimum\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the productID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the productID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"productID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"opportunities\",\n \"createOp\": \"opportunities.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"name\",\n \"title\",\n \"companyID\",\n \"ownerResourceID\",\n \"amount\",\n \"cost\",\n \"startDate\",\n \"projectedCloseDate\",\n \"stage\",\n \"status\",\n \"probability\",\n \"useQuoteTotals\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"undocumented-ladder\",\n \"message\": \"Field 'useQuoteTotals': Missing Required Field: useQuoteTotals. | Value does not exist for the required field useQuoteTotals. \",\n \"remedy\": \"the vendor required-field ladder is undocumented and UNPROVEN (12 fields consumed before the campaign stopped — W-A5); no known field set makes this create succeed on ww29 — treat it as unavailable for this tenant and file the gap with the vendor.\"\n },\n \"vendorEvidence\": [\n \"Field 'useQuoteTotals': Missing Required Field: useQuoteTotals. | Value does not exist for the required field useQuoteTotals. \",\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for opportunities (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"opportunity_attachments\",\n \"createOp\": \"opportunity_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"message\": \"vendor 500: the Type picklist values are not exposed to this API user (File/Document/Image/Other all rejected — W-A4)\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\",\n \"referenceField\": \"Type\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"phases\",\n \"createOp\": \"phases.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"title\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (known id 527128, marker name FULL100W-1791110339 phases); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"residue.json: phases id 527128 (known id, undeletable by vendor wall W-A1; phases.get is scoped — the id is retained in the ledger)\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for phases (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"product_vendors\",\n \"createOp\": \"product_vendors.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isDefault\",\n \"isActive\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for product_vendors (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"products\",\n \"createOp\": \"products.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"isSerialized\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for products (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"project_charges\",\n \"createOp\": \"project_charges.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"unitQuantity\",\n \"datePurchased\",\n \"chargeType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"project_notes\",\n \"createOp\": \"project_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"noteType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for project_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"projects\",\n \"createOp\": \"projects.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"projectName\",\n \"startDateTime\",\n \"endDateTime\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for projectType .\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the projectType reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"projectType\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for projectType .\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"projects.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"7a611ce5-b863-460d-8911-f850d546fd0a\\\",\\\"message\\\":\\\"Field 'endDateTime': Missing Required Field\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for projects (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"purchase_order_item_receiving\",\n \"createOp\": \"purchase_order_item_receiving.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"quantityNowReceiving\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 purchase_order_item_receiving); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"not found on a visible surface (record may predate the marker value or was created with a different value)\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for purchase_order_item_receiving (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"purchase_order_items\",\n \"createOp\": \"purchase_order_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"unitCost\",\n \"quantity\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"message\": \"vendor 500: reference rejection on order (exact vendor text preserved verbatim in vendorEvidence — campaign receipt artifact, as recorded on disk)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for purchase_order_items (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"purchase_orders\",\n \"createOp\": \"purchase_orders.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"shipToAddress1\",\n \"status\",\n \"shipToName\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for purchase_orders (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"quote_items\",\n \"createOp\": \"quote_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isOptional\",\n \"unitDiscount\",\n \"quantity\",\n \"quoteItemType\",\n \"lineDiscount\",\n \"percentageDiscount\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"quote_locations\",\n \"createOp\": \"quote_locations.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"quote_locations.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for quote_locations (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"quotes\",\n \"createOp\": \"quotes.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"effectiveDate\",\n \"expirationDate\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for quotes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"resource_role_queues\",\n \"createOp\": \"resource_role_queues.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"queueID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 resource_role_queues); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"BLIND SURFACE — own created records invisible to query (node sentinel, ww29-verified)\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for resource_role_queues (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"roles\",\n \"createOp\": \"roles.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"hourlyFactor\",\n \"hourlyRate\",\n \"isActive\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 roles); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"CONFIG_ERROR\\\",\\\"category\\\":\\\"validation\\\",\\\"retryable\\\":false,\\\"operation\\\":\\\"roles.delete\\\",\\\"message\\\":\\\"invoke: unknown operation \\\\\\\"roles.delete\\\\\\\" — it is not in the capability registry (l\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for roles (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"service_call_task_resources\",\n \"createOp\": \"service_call_task_resources.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"service_call_tasks\",\n \"createOp\": \"service_call_tasks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"service_call_ticket_resources\",\n \"createOp\": \"service_call_ticket_resources.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"service_call_tickets\",\n \"createOp\": \"service_call_tickets.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"service_calls\",\n \"createOp\": \"service_calls.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"endDateTime\",\n \"startDateTime\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"services\",\n \"createOp\": \"services.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"periodType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first; then retry the create with the real parent id.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for services (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"subscriptions\",\n \"createOp\": \"subscriptions.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"subscriptionName\",\n \"configurationItemID\",\n \"periodPrice\",\n \"periodType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the configurationItemID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"configurationItemID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"tag_aliases\",\n \"createOp\": \"tag_aliases.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"tag_groups\",\n \"createOp\": \"tag_groups.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"label\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"tags\",\n \"createOp\": \"tags.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"label\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"task_secondary_resources\",\n \"createOp\": \"task_secondary_resources.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"message\": \"vendor 500: reference rejection on r (exact vendor text preserved verbatim in vendorEvidence — campaign receipt artifact, as recorded on disk)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"tasks\",\n \"createOp\": \"tasks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"projectID\",\n \"taskType\",\n \"status\",\n \"title\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"Value does not reference an existing entity for taskType .\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the taskType reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"taskType\"\n },\n \"vendorEvidence\": [\n \"Value does not reference an existing entity for taskType .\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"tasks.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"4d283916-ab65-46c5-b17b-4eafda10c3ac\\\",\\\"message\\\":\\\"Value does not reference an existing entity fo\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for tasks (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_additional_configuration_items\",\n \"createOp\": \"ticket_additional_configuration_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"configurationItemID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-reference\",\n \"message\": \"vendor 500: the configurationItemID reference is unsatisfiable for this API user (the referenced table is blind/empty)\",\n \"remedy\": \"provision the referenced record in the Autotask UI first (the configurationItemID reference table is blind for this API user — no valid id can be read back), then retry with the real id.\",\n \"referenceField\": \"configurationItemID\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_additional_contacts\",\n \"createOp\": \"ticket_additional_contacts.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"contactID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"message\": \"live-PROVEN 2026-10-06 (confirm-100 CONF100-1791187382): id 4001 (deleted post-proof — 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.\",\n \"remedy\": \"live-proven on ww29 2026-10-06 (confirm-100, marker CONF100-1791187382) — use the proven body / type gates from the message; residue records are ledgered (.run/confirm-100-20261006/CONFIRMATION-LEDGER.md section E; UI cleanup)\"\n },\n \"vendorEvidence\": [\n \"Reference value on field: contactID of type: Contact does not exist or is invalid.\",\n \"{\\\"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:\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_attachments\",\n \"createOp\": \"ticket_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"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 — '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) — VENDOR-FIX required.\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\"\n },\n \"vendorEvidence\": [\n \"Picklist value [File] does not exist for Type.\",\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"ticket_attachments.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"077617d5-48c2-4ca2-a610-8bd1e0da97d4\\\",\\\"message\\\":\\\"Field 'Type': Missing Required Fi\",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"Picklist value [0] does not exist for Publish. / Field 'Type': Missing Required Field: Type.\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_change_request_approvals\",\n \"createOp\": \"ticket_change_request_approvals.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_charges\",\n \"createOp\": \"ticket_charges.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"unitQuantity\",\n \"datePurchased\",\n \"chargeType\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"blind-parent\",\n \"message\": \"vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference — 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).\",\n \"remedy\": \"provision a parent record in the Autotask UI first — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"SERVER_ERROR\\\",\\\"category\\\":\\\"server\\\",\\\"retryable\\\":true,\\\"httpStatus\\\":500,\\\"operation\\\":\\\"ticket_charges.create\\\",\\\"suggestedAction\\\":\\\"Retry with backoff; the server error is transient.\\\",\\\"correlationId\\\":\\\"b9b6939b-ccc5-4e9d-9ea2-e2f47d064f63\\\",\\\"message\\\":\\\"A productID or a billingCodeID must b\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_checklist_items\",\n \"createOp\": \"ticket_checklist_items.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"itemName\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"verified-gone=True\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_checklist_libraries\",\n \"createOp\": \"ticket_checklist_libraries.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"checklistLibraryID\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"message\": \"W-A7 drift + parent wall, re-verified 2026-10-06 (confirm-100 CONF100-1791187382): the vendor now answers HTML 404 ('Resource not found' — 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.\",\n \"remedy\": \"the checklist-library PARENT is blind for this user (HTML 404 before the 200 drift) — 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\"\n },\n \"vendorEvidence\": [\n \"Expected OperationResultModel { itemId } (or { id }); got a different shape (ladder_decode.log, INVALID_RESPONSE)\",\n \"api-docs.json declares OperationResultModel for POST /V1.0/Tickets/{id}/TicketChecklistLibraries — the vendor deviates (W-A7 adjudication: vendor spec drift, not a node defect)\",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"Resource not found: <!DOCTYPE html PUBLIC .../xhtml/1.0/Strict ...>\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"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) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_note_attachments\",\n \"createOp\": \"ticket_note_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"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 — '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) — VENDOR-FIX required.\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_note_webhooks\",\n \"createOp\": \"ticket_note_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"webhookUrl\",\n \"deactivationUrl\",\n \"sendThresholdExceededNotification\",\n \"secretKey\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"ticket_note_webhooks.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_notes\",\n \"createOp\": \"ticket_notes.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"description\",\n \"noteType\",\n \"publish\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"ticket_notes.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for ticket_notes (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_secondary_resources\",\n \"createOp\": \"ticket_secondary_resources.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"unknown\",\n \"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)\",\n \"remedy\": \"the wall is opaque in the campaign record — 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.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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 \"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"ticket_webhooks\",\n \"createOp\": \"ticket_webhooks.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"isActive\",\n \"webhookUrl\",\n \"deactivationUrl\",\n \"sendThresholdExceededNotification\",\n \"secretKey\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"ok\",\n \"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 — the record is marker-tagged residue, unknown id)\",\n \"remedy\": \"none — create with the proven field set below; it is the live-verified contract for this tenant.\"\n },\n \"vendorEvidence\": [\n \"Executed \\\"ticket_webhooks.create\\\".\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"tickets\",\n \"createOp\": \"tickets.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [\n \"title\",\n \"status\",\n \"priority\",\n \"companyID\",\n \"queueID\"\n ],\n \"unproven\": false,\n \"blocker\": {\n \"kind\": \"delete-absent\",\n \"message\": \"create succeeded live (stage-11 apply-matrix, marker FULL100W-1791110339, ww29) but the vendor defines no DELETE endpoint for this resource (W-A1) — the record is residue (marker name FULL100W-1791110339 tickets); cleanup is UI-only.\",\n \"remedy\": \"provision via the API as proven; clean up the residue record in the Autotask UI (the marker name is the lookup handle) — there is no API delete path.\"\n },\n \"vendorEvidence\": [\n \"{\\\"error\\\":true,\\\"code\\\":\\\"CONFIG_ERROR\\\",\\\"category\\\":\\\"validation\\\",\\\"retryable\\\":false,\\\"operation\\\":\\\"tickets.delete\\\",\\\"message\\\":\\\"invoke: unknown operation \\\\\\\"tickets.delete\\\\\\\" — it is not in the capability registr\"\n ],\n \"deleteBoundary\": {\n \"available\": false,\n \"note\": \"the vendor defines no DELETE for tickets (spec-derived: the vendored api-docs.json defines no DELETE on the entity's paths) — a create cannot be undone through the API; cleanup is UI-only.\"\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"time_entries\",\n \"createOp\": \"time_entries.create\",\n \"parentScoped\": false,\n \"liveProvenPrefix\": [],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"resource-role-pair\",\n \"message\": \"re-walled 2026-10-06 (confirm-100 CONF100-1791187382, 3 live attempts with own resource 31131505 + roles 29685291/29682834/29683323): current vendor text 'API-only user cannot be selected for this field' (10-04: 'The specified AssignedResourceID and AssignedRoleID combination is not currently defined'). UNSATISFIABLE for this API-only user (resources table blind; own API-only resource refused by the vendor). createForResource (stage-11 proven) is walled by the same drift. Valid in-tenant pairs observed via postedWithin: (31131373, 29682834), (29869529, 29682834) — human resources the API user cannot select.\",\n \"remedy\": \"vendor eligibility, not missing tenant data: an API-only user can never be the selectable resource. Use a non-API-only (human) API user or record time entries in the Autotask UI; the working reads remain postedWithin / the window helpers (W-D3 pointer note)\"\n },\n \"vendorEvidence\": [\n \"The specified AssignedResourceID and AssignedRoleID combination is not currently defined.\",\n \"{\\\"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\",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"API-only user cannot be selected for this field.\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n },\n {\n \"resource\": \"time_entry_attachments\",\n \"createOp\": \"time_entry_attachments.create\",\n \"parentScoped\": true,\n \"liveProvenPrefix\": [\n \"FullPath\",\n \"Type\",\n \"Publish\"\n ],\n \"unproven\": true,\n \"blocker\": {\n \"kind\": \"picklist-unexposed\",\n \"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 — '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) — VENDOR-FIX required.\",\n \"remedy\": \"no valid Type value is exposed to this API user (W-A4: File/Document/Image/Other all rejected) — the attachment create is unsatisfiable via the API; attach the file through the UI.\"\n },\n \"vendorEvidence\": [\n \"{\\\"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\",\n \"{\\\"live\\\": \\\"2026-10-06 confirm-100\\\", \\\"message\\\": \\\"Picklist value [0] does not exist for Publish. / Field 'Type': Missing Required Field: Type.\\\"}\"\n ],\n \"deleteBoundary\": {\n \"available\": true,\n \"note\": null\n },\n \"zone\": \"ww29\"\n }\n ],\n \"counts\": {\n \"total\": 92,\n \"byKind\": {\n \"ok\": 31,\n \"blind-reference\": 16,\n \"blind-parent\": 17,\n \"picklist-unexposed\": 5,\n \"undocumented-ladder\": 1,\n \"resource-role-pair\": 2,\n \"delete-absent\": 7,\n \"non-mutable\": 0,\n \"unknown\": 13\n }\n }\n};\n// [GENERATED:RELATIONSHIPS:END]\n"]}